diff --git a/api-openbis-javascript/.gitignore b/api-openbis-javascript/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c292c099311eb573bb63b4403c53f0067fc8243f --- /dev/null +++ b/api-openbis-javascript/.gitignore @@ -0,0 +1,2 @@ +/node +package-lock.json \ No newline at end of file diff --git a/core-plugin-openbis/resource/js/v3/.gitignore b/api-openbis-javascript/bin/.gitignore similarity index 100% rename from core-plugin-openbis/resource/js/v3/.gitignore rename to api-openbis-javascript/bin/.gitignore diff --git a/core-plugin-openbis/resource/js/v3/build.sh b/api-openbis-javascript/bin/build.sh similarity index 68% rename from core-plugin-openbis/resource/js/v3/build.sh rename to api-openbis-javascript/bin/build.sh index 2bcc03249194b6db5c8ae5abcbb9ed5b374f5be5..c3d32568449c9cac946171f79b746b3f08649958 100755 --- a/core-plugin-openbis/resource/js/v3/build.sh +++ b/api-openbis-javascript/bin/build.sh @@ -2,13 +2,12 @@ pushd $(dirname $0) > /dev/null -OPENBIS_STANDARD_TECHNOLOGIES_DIR=../../.. -OPENBIS_DIR=../../../../server-application-server +NODE_PATH=../node/nodejs/node-*/bin/node CURRENT_DIR=$(pwd) TEMP_DIR=${CURRENT_DIR}/temp -V3_DIR=$OPENBIS_DIR/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3 +V3_DIR=../src/v3 # create an empty temporary folder rm -rvf $TEMP_DIR @@ -25,8 +24,8 @@ cat config.bundle.template.js | sed -e '\|__FILES__|{' -e "r $TEMP_DIR/files.js" cat config.bundle.min.template.js | sed -e '\|__FILES__|{' -e "r $TEMP_DIR/files.js" -e 'd' -e '}' > $TEMP_DIR/config.bundle.min.js # create a JS bundle using NodeJS binary installed by NodeJS gradle plugin -$OPENBIS_STANDARD_TECHNOLOGIES_DIR/node/nodejs/node-*/bin/node r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR optimize=none out=$TEMP_DIR/openbis.bundle.js -$OPENBIS_STANDARD_TECHNOLOGIES_DIR/node/nodejs/node-*/bin/node r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR optimize=uglify out=$TEMP_DIR/openbis.bundle.min.js +$NODE_PATH r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR optimize=none out=$TEMP_DIR/openbis.bundle.js +$NODE_PATH r.js -o $TEMP_DIR/r.config.js baseUrl=$V3_DIR optimize=uglify out=$TEMP_DIR/openbis.bundle.min.js # copy relevant files to the V3 public folder cp $TEMP_DIR/config.bundle.js $TEMP_DIR/config.bundle.min.js $TEMP_DIR/openbis.bundle.js $TEMP_DIR/openbis.bundle.min.js $V3_DIR diff --git a/core-plugin-openbis/resource/js/v3/config.bundle.min.template.js b/api-openbis-javascript/bin/config.bundle.min.template.js similarity index 100% rename from core-plugin-openbis/resource/js/v3/config.bundle.min.template.js rename to api-openbis-javascript/bin/config.bundle.min.template.js diff --git a/core-plugin-openbis/resource/js/v3/config.bundle.template.js b/api-openbis-javascript/bin/config.bundle.template.js similarity index 100% rename from core-plugin-openbis/resource/js/v3/config.bundle.template.js rename to api-openbis-javascript/bin/config.bundle.template.js diff --git a/core-plugin-openbis/resource/js/v3/r.config.template.js b/api-openbis-javascript/bin/r.config.template.js similarity index 100% rename from core-plugin-openbis/resource/js/v3/r.config.template.js rename to api-openbis-javascript/bin/r.config.template.js diff --git a/core-plugin-openbis/resource/js/v3/r.js b/api-openbis-javascript/bin/r.js similarity index 100% rename from core-plugin-openbis/resource/js/v3/r.js rename to api-openbis-javascript/bin/r.js diff --git a/api-openbis-javascript/build.gradle b/api-openbis-javascript/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..483e5d844e5cf01e149cf3d68ed7e0ca7463ef8e --- /dev/null +++ b/api-openbis-javascript/build.gradle @@ -0,0 +1,20 @@ +plugins { + id "com.github.node-gradle.node" version "3.2.1" +} + +apply from: '../build/javaproject.gradle' + +node { + download = true + version = '18.12.1' + workDir = file("${projectDir}/node/nodejs") + nodeModulesDir = file("${projectDir}") +} + + +task bundleOpenbisStaticResources(type: Exec) { + dependsOn 'npmInstall' + commandLine 'bash', '-c', "${projectDir}/bin/build.sh" +} + + diff --git a/api-openbis-javascript/gradle/wrapper/gradle-wrapper.jar b/api-openbis-javascript/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5c2d1cf016b3885f6930543d57b744ea8c220a1a Binary files /dev/null and b/api-openbis-javascript/gradle/wrapper/gradle-wrapper.jar differ diff --git a/api-openbis-javascript/gradle/wrapper/gradle-wrapper.properties b/api-openbis-javascript/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..7745c4ec463c7bb1c4ff6a5e58db239890345152 --- /dev/null +++ b/api-openbis-javascript/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://sissource.ethz.ch/openbis/openbis-public/openbis-ivy/-/raw/main/gradle/distribution/7.4/gradle-7.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/api-openbis-javascript/gradlew b/api-openbis-javascript/gradlew new file mode 100755 index 0000000000000000000000000000000000000000..83f2acfdc319a24e8766cca78f32474ad7a22dd6 --- /dev/null +++ b/api-openbis-javascript/gradlew @@ -0,0 +1,188 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# 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 +# +# https://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. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/api-openbis-javascript/gradlew.bat b/api-openbis-javascript/gradlew.bat new file mode 100644 index 0000000000000000000000000000000000000000..9618d8d9607cd91a0efb866bcac4810064ba6fac --- /dev/null +++ b/api-openbis-javascript/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/core-plugin-openbis/package.json b/api-openbis-javascript/package.json similarity index 100% rename from core-plugin-openbis/package.json rename to api-openbis-javascript/package.json diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build/DELETE_ME b/api-openbis-javascript/settings.gradle similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build/DELETE_ME rename to api-openbis-javascript/settings.gradle diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/.gitignore b/api-openbis-javascript/src/v3/.gitignore similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/.gitignore rename to api-openbis-javascript/src/v3/.gitignore diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/Attachment.js b/api-openbis-javascript/src/v3/as/dto/attachment/Attachment.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/Attachment.js rename to api-openbis-javascript/src/v3/as/dto/attachment/Attachment.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/create/AttachmentCreation.js b/api-openbis-javascript/src/v3/as/dto/attachment/create/AttachmentCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/create/AttachmentCreation.js rename to api-openbis-javascript/src/v3/as/dto/attachment/create/AttachmentCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/fetchoptions/AttachmentFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/attachment/fetchoptions/AttachmentFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/fetchoptions/AttachmentFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/attachment/fetchoptions/AttachmentFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/fetchoptions/AttachmentSortOptions.js b/api-openbis-javascript/src/v3/as/dto/attachment/fetchoptions/AttachmentSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/fetchoptions/AttachmentSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/attachment/fetchoptions/AttachmentSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/id/AttachmentFileName.js b/api-openbis-javascript/src/v3/as/dto/attachment/id/AttachmentFileName.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/id/AttachmentFileName.js rename to api-openbis-javascript/src/v3/as/dto/attachment/id/AttachmentFileName.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/id/IAttachmentId.js b/api-openbis-javascript/src/v3/as/dto/attachment/id/IAttachmentId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/id/IAttachmentId.js rename to api-openbis-javascript/src/v3/as/dto/attachment/id/IAttachmentId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/update/AttachmentListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/attachment/update/AttachmentListUpdateValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/attachment/update/AttachmentListUpdateValue.js rename to api-openbis-javascript/src/v3/as/dto/attachment/update/AttachmentListUpdateValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/AuthorizationGroup.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/AuthorizationGroup.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/AuthorizationGroup.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/AuthorizationGroup.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/AuthorizationGroupCreation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/AuthorizationGroupCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/AuthorizationGroupCreation.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/AuthorizationGroupCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperation.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/create/CreateAuthorizationGroupsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/AuthorizationGroupDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/AuthorizationGroupDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/AuthorizationGroupDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/AuthorizationGroupDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperation.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/delete/DeleteAuthorizationGroupsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupSortOptions.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/fetchoptions/AuthorizationGroupSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperation.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/get/GetAuthorizationGroupsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/id/AuthorizationGroupPermId.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/id/AuthorizationGroupPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/id/AuthorizationGroupPermId.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/id/AuthorizationGroupPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/id/IAuthorizationGroupId.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/id/IAuthorizationGroupId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/id/IAuthorizationGroupId.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/id/IAuthorizationGroupId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/AuthorizationGroupSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/AuthorizationGroupSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/AuthorizationGroupSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/AuthorizationGroupSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperation.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/search/SearchAuthorizationGroupsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/AuthorizationGroupUpdate.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/AuthorizationGroupUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/AuthorizationGroupUpdate.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/AuthorizationGroupUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperation.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperation.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/authorizationgroup/update/UpdateAuthorizationGroupsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/Enum.js b/api-openbis-javascript/src/v3/as/dto/common/Enum.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/Enum.js rename to api-openbis-javascript/src/v3/as/dto/common/Enum.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/ITableCell.js b/api-openbis-javascript/src/v3/as/dto/common/ITableCell.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/ITableCell.js rename to api-openbis-javascript/src/v3/as/dto/common/ITableCell.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/Relationship.js b/api-openbis-javascript/src/v3/as/dto/common/Relationship.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/Relationship.js rename to api-openbis-javascript/src/v3/as/dto/common/Relationship.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableColumn.js b/api-openbis-javascript/src/v3/as/dto/common/TableColumn.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableColumn.js rename to api-openbis-javascript/src/v3/as/dto/common/TableColumn.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableDoubleCell.js b/api-openbis-javascript/src/v3/as/dto/common/TableDoubleCell.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableDoubleCell.js rename to api-openbis-javascript/src/v3/as/dto/common/TableDoubleCell.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableLongCell.js b/api-openbis-javascript/src/v3/as/dto/common/TableLongCell.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableLongCell.js rename to api-openbis-javascript/src/v3/as/dto/common/TableLongCell.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableModel.js b/api-openbis-javascript/src/v3/as/dto/common/TableModel.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableModel.js rename to api-openbis-javascript/src/v3/as/dto/common/TableModel.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableStringCell.js b/api-openbis-javascript/src/v3/as/dto/common/TableStringCell.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/TableStringCell.js rename to api-openbis-javascript/src/v3/as/dto/common/TableStringCell.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/CreateObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/create/CreateObjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/CreateObjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/common/create/CreateObjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/CreateObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/create/CreateObjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/CreateObjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/create/CreateObjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/ICreation.js b/api-openbis-javascript/src/v3/as/dto/common/create/ICreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/ICreation.js rename to api-openbis-javascript/src/v3/as/dto/common/create/ICreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/IObjectCreation.js b/api-openbis-javascript/src/v3/as/dto/common/create/IObjectCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/create/IObjectCreation.js rename to api-openbis-javascript/src/v3/as/dto/common/create/IObjectCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsWithTrashOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsWithTrashOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsWithTrashOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsWithTrashOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsWithoutTrashOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsWithoutTrashOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/delete/DeleteObjectsWithoutTrashOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/delete/DeleteObjectsWithoutTrashOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/CacheMode.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/CacheMode.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/CacheMode.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/CacheMode.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EmptyFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EmptyFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EmptyFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EmptyFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EntitySortOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EntitySortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EntitySortOptions.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EntitySortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EntityWithPropertiesSortOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EntityWithPropertiesSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/EntityWithPropertiesSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/EntityWithPropertiesSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/FetchOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/FetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/FetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/FetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortOptions.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortOptions.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortOrder.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortOrder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortOrder.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortOrder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortParameter.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortParameter.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/SortParameter.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/SortParameter.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/Sorting.js b/api-openbis-javascript/src/v3/as/dto/common/fetchoptions/Sorting.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/fetchoptions/Sorting.js rename to api-openbis-javascript/src/v3/as/dto/common/fetchoptions/Sorting.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetObjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetObjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/common/get/GetObjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetObjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetObjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/get/GetObjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerInformationOperation.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetServerInformationOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerInformationOperation.js rename to api-openbis-javascript/src/v3/as/dto/common/get/GetServerInformationOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerInformationOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetServerInformationOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerInformationOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/get/GetServerInformationOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerPublicInformationOperation.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetServerPublicInformationOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerPublicInformationOperation.js rename to api-openbis-javascript/src/v3/as/dto/common/get/GetServerPublicInformationOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerPublicInformationOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/get/GetServerPublicInformationOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/get/GetServerPublicInformationOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/get/GetServerPublicInformationOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/CreationId.js b/api-openbis-javascript/src/v3/as/dto/common/id/CreationId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/CreationId.js rename to api-openbis-javascript/src/v3/as/dto/common/id/CreationId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/IObjectId.js b/api-openbis-javascript/src/v3/as/dto/common/id/IObjectId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/IObjectId.js rename to api-openbis-javascript/src/v3/as/dto/common/id/IObjectId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectIdentifier.js b/api-openbis-javascript/src/v3/as/dto/common/id/ObjectIdentifier.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectIdentifier.js rename to api-openbis-javascript/src/v3/as/dto/common/id/ObjectIdentifier.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectPermId.js b/api-openbis-javascript/src/v3/as/dto/common/id/ObjectPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectPermId.js rename to api-openbis-javascript/src/v3/as/dto/common/id/ObjectPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectTechId.js b/api-openbis-javascript/src/v3/as/dto/common/id/ObjectTechId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/id/ObjectTechId.js rename to api-openbis-javascript/src/v3/as/dto/common/id/ObjectTechId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IAttachmentsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IAttachmentsHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IAttachmentsHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IAttachmentsHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ICodeHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ICodeHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ICodeHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ICodeHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ICreationIdHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ICreationIdHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ICreationIdHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ICreationIdHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDataSetCodesHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IDataSetCodesHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDataSetCodesHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IDataSetCodesHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDataSetsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IDataSetsHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDataSetsHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IDataSetsHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDescriptionHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IDescriptionHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IDescriptionHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IDescriptionHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IEntityType.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IEntityType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IEntityType.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IEntityType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IEntityTypeHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IEntityTypeHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IEntityTypeHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IEntityTypeHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IExperimentHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IExperimentHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IExperimentHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IExperimentHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IExperimentsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IExperimentsHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IExperimentsHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IExperimentsHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IIdentifierHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IIdentifierHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IIdentifierHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IIdentifierHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ILabelHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ILabelHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ILabelHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ILabelHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IMaterialPropertiesHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IMaterialPropertiesHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IMaterialPropertiesHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IMaterialPropertiesHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IMaterialsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IMaterialsHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IMaterialsHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IMaterialsHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IModificationDateHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IModificationDateHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IModificationDateHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IModificationDateHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IModifierHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IModifierHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IModifierHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IModifierHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/INameHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/INameHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/INameHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/INameHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IOwnerHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IOwnerHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IOwnerHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IOwnerHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IParentChildrenHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IParentChildrenHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IParentChildrenHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IParentChildrenHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPermIdHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IPermIdHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPermIdHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IPermIdHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IProjectHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IProjectHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IProjectHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IProjectHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IProjectsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IProjectsHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IProjectsHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IProjectsHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertiesHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertiesHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertiesHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertiesHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertyAssignmentsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertyAssignmentsHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertyAssignmentsHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertyAssignmentsHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertyTypeHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertyTypeHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IPropertyTypeHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IPropertyTypeHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IRegistrationDateHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IRegistrationDateHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IRegistrationDateHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IRegistrationDateHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IRegistratorHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IRegistratorHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IRegistratorHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IRegistratorHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISampleHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ISampleHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISampleHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ISampleHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISamplesHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ISamplesHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISamplesHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ISamplesHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISemanticAnnotationsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ISemanticAnnotationsHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISemanticAnnotationsHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ISemanticAnnotationsHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISpaceHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ISpaceHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ISpaceHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ISpaceHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ITagsHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/ITagsHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/ITagsHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/ITagsHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IValidationPluginHolder.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/IValidationPluginHolder.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/IValidationPluginHolder.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/IValidationPluginHolder.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/SortIgnore.js b/api-openbis-javascript/src/v3/as/dto/common/interfaces/SortIgnore.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/interfaces/SortIgnore.js rename to api-openbis-javascript/src/v3/as/dto/common/interfaces/SortIgnore.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperation.js b/api-openbis-javascript/src/v3/as/dto/common/operation/IOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperation.js rename to api-openbis-javascript/src/v3/as/dto/common/operation/IOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationExecutionError.js b/api-openbis-javascript/src/v3/as/dto/common/operation/IOperationExecutionError.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationExecutionError.js rename to api-openbis-javascript/src/v3/as/dto/common/operation/IOperationExecutionError.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationExecutionProgress.js b/api-openbis-javascript/src/v3/as/dto/common/operation/IOperationExecutionProgress.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationExecutionProgress.js rename to api-openbis-javascript/src/v3/as/dto/common/operation/IOperationExecutionProgress.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/operation/IOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/operation/IOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/operation/IOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractCompositeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractCompositeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractCompositeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractCompositeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractDateObjectValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractDateObjectValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractDateObjectValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractDateObjectValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractDateValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractDateValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractDateValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractDateValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractEntitySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractEntitySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractEntitySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractEntitySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractFieldSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractFieldSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractFieldSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractNumberValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractNumberValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractNumberValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractNumberValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractObjectSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractObjectSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractObjectSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractObjectSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractStringValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractStringValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractStringValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractStringValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractTimeZoneValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractTimeZoneValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractTimeZoneValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractTimeZoneValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AbstractValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AbstractValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AbstractValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyBooleanPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyBooleanPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyBooleanPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyBooleanPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyDatePropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyDatePropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyDatePropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyDatePropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyFieldSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyFieldSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyFieldSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyNumberPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyNumberPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyNumberPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyNumberPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyStringPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyStringPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyStringPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyStringPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyStringValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/AnyStringValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/AnyStringValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/AnyStringValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/BooleanFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/BooleanFieldSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/BooleanFieldSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/BooleanFieldSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/BooleanPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/BooleanPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/BooleanPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/BooleanPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CodeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/CodeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CodeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/CodeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CodesSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/CodesSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CodesSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/CodesSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CollectionFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/CollectionFieldSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/CollectionFieldSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/CollectionFieldSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/ControlledVocabularyPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEarlierThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateEarlierThanOrEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEarlierThanOrEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateEarlierThanOrEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEarlierThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateEarlierThanValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEarlierThanValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateEarlierThanValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateFieldSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateFieldSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateFieldSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateLaterThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateLaterThanOrEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateLaterThanOrEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateLaterThanOrEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateLaterThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateLaterThanValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateLaterThanValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateLaterThanValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEarlierThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEarlierThanOrEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEarlierThanOrEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEarlierThanOrEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEarlierThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEarlierThanValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEarlierThanValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEarlierThanValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectLaterThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectLaterThanOrEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectLaterThanOrEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectLaterThanOrEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectLaterThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/DateObjectLaterThanValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DateObjectLaterThanValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DateObjectLaterThanValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DatePropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/DatePropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DatePropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DatePropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DescriptionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/DescriptionSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/DescriptionSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/DescriptionSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/EnumFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/EnumFieldSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/EnumFieldSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/EnumFieldSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IDate.js b/api-openbis-javascript/src/v3/as/dto/common/search/IDate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IDate.js rename to api-openbis-javascript/src/v3/as/dto/common/search/IDate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IDateFormat.js b/api-openbis-javascript/src/v3/as/dto/common/search/IDateFormat.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IDateFormat.js rename to api-openbis-javascript/src/v3/as/dto/common/search/IDateFormat.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ISearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/ISearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ISearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/ISearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ITimeZone.js b/api-openbis-javascript/src/v3/as/dto/common/search/ITimeZone.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ITimeZone.js rename to api-openbis-javascript/src/v3/as/dto/common/search/ITimeZone.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/IdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/IdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdentifierSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/IdentifierSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdentifierSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/IdentifierSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdsSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/IdsSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/IdsSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/IdsSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/LongDateFormat.js b/api-openbis-javascript/src/v3/as/dto/common/search/LongDateFormat.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/LongDateFormat.js rename to api-openbis-javascript/src/v3/as/dto/common/search/LongDateFormat.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ModificationDateSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/ModificationDateSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ModificationDateSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/ModificationDateSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/NameSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NameSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NameSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NormalDateFormat.js b/api-openbis-javascript/src/v3/as/dto/common/search/NormalDateFormat.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NormalDateFormat.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NormalDateFormat.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberFieldSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberFieldSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberFieldSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberGreaterThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberGreaterThanOrEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberGreaterThanOrEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberGreaterThanOrEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberGreaterThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberGreaterThanValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberGreaterThanValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberGreaterThanValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberLessThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberLessThanOrEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberLessThanOrEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberLessThanOrEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberLessThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberLessThanValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberLessThanValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberLessThanValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/NumberPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/NumberPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/NumberPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/PermIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/PermIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/PermIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/PermIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/RegistrationDateSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/RegistrationDateSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/RegistrationDateSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/RegistrationDateSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SamplePropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/SamplePropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SamplePropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/SamplePropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchFieldType.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchFieldType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchFieldType.js rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchFieldType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchObjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchObjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchObjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchObjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchObjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchObjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchOperator.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchOperator.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchOperator.js rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchOperator.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchResult.js b/api-openbis-javascript/src/v3/as/dto/common/search/SearchResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/SearchResult.js rename to api-openbis-javascript/src/v3/as/dto/common/search/SearchResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ServerTimeZone.js b/api-openbis-javascript/src/v3/as/dto/common/search/ServerTimeZone.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ServerTimeZone.js rename to api-openbis-javascript/src/v3/as/dto/common/search/ServerTimeZone.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ShortDateFormat.js b/api-openbis-javascript/src/v3/as/dto/common/search/ShortDateFormat.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/ShortDateFormat.js rename to api-openbis-javascript/src/v3/as/dto/common/search/ShortDateFormat.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StrictlyStringPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/StrictlyStringPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StrictlyStringPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StrictlyStringPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringContainsExactlyValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringContainsExactlyValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringContainsExactlyValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringContainsExactlyValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringContainsValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringContainsValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringContainsValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringContainsValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringEndsWithValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringEndsWithValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringEndsWithValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringEndsWithValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringFieldSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringFieldSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringFieldSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringFieldSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringGreaterThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringGreaterThanOrEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringGreaterThanOrEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringGreaterThanOrEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringGreaterThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringGreaterThanValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringGreaterThanValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringGreaterThanValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringLessThanOrEqualToValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringLessThanOrEqualToValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringLessThanOrEqualToValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringLessThanOrEqualToValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringLessThanValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringLessThanValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringLessThanValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringLessThanValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringMatchesValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringMatchesValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringMatchesValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringMatchesValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringPropertySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringPropertySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringPropertySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringPropertySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringStartsWithValue.js b/api-openbis-javascript/src/v3/as/dto/common/search/StringStartsWithValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/StringStartsWithValue.js rename to api-openbis-javascript/src/v3/as/dto/common/search/StringStartsWithValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TechIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/TechIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TechIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/TechIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TextAttributeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/common/search/TextAttributeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TextAttributeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/common/search/TextAttributeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TimeZone.js b/api-openbis-javascript/src/v3/as/dto/common/search/TimeZone.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/search/TimeZone.js rename to api-openbis-javascript/src/v3/as/dto/common/search/TimeZone.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/FieldUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/common/update/FieldUpdateValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/FieldUpdateValue.js rename to api-openbis-javascript/src/v3/as/dto/common/update/FieldUpdateValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IObjectUpdate.js b/api-openbis-javascript/src/v3/as/dto/common/update/IObjectUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IObjectUpdate.js rename to api-openbis-javascript/src/v3/as/dto/common/update/IObjectUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IUpdate.js b/api-openbis-javascript/src/v3/as/dto/common/update/IUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IUpdate.js rename to api-openbis-javascript/src/v3/as/dto/common/update/IUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IdListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/common/update/IdListUpdateValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/IdListUpdateValue.js rename to api-openbis-javascript/src/v3/as/dto/common/update/IdListUpdateValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateAction.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateAction.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateAction.js rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateAction.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionAdd.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionAdd.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionAdd.js rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionAdd.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionRemove.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionRemove.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionRemove.js rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionRemove.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionSet.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionSet.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateActionSet.js rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateActionSet.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateMapValues.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateMapValues.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateMapValues.js rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateMapValues.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/ListUpdateValue.js rename to api-openbis-javascript/src/v3/as/dto/common/update/ListUpdateValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/RelationshipUpdate.js b/api-openbis-javascript/src/v3/as/dto/common/update/RelationshipUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/RelationshipUpdate.js rename to api-openbis-javascript/src/v3/as/dto/common/update/RelationshipUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/UpdateObjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/common/update/UpdateObjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/UpdateObjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/common/update/UpdateObjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/UpdateObjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/common/update/UpdateObjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/common/update/UpdateObjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/common/update/UpdateObjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/ArchivingStatus.js b/api-openbis-javascript/src/v3/as/dto/dataset/ArchivingStatus.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/ArchivingStatus.js rename to api-openbis-javascript/src/v3/as/dto/dataset/ArchivingStatus.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/Complete.js b/api-openbis-javascript/src/v3/as/dto/dataset/Complete.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/Complete.js rename to api-openbis-javascript/src/v3/as/dto/dataset/Complete.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/ContentCopy.js b/api-openbis-javascript/src/v3/as/dto/dataset/ContentCopy.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/ContentCopy.js rename to api-openbis-javascript/src/v3/as/dto/dataset/ContentCopy.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSet.js b/api-openbis-javascript/src/v3/as/dto/dataset/DataSet.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSet.js rename to api-openbis-javascript/src/v3/as/dto/dataset/DataSet.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSetKind.js b/api-openbis-javascript/src/v3/as/dto/dataset/DataSetKind.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSetKind.js rename to api-openbis-javascript/src/v3/as/dto/dataset/DataSetKind.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSetType.js b/api-openbis-javascript/src/v3/as/dto/dataset/DataSetType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/DataSetType.js rename to api-openbis-javascript/src/v3/as/dto/dataset/DataSetType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/FileFormatType.js b/api-openbis-javascript/src/v3/as/dto/dataset/FileFormatType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/FileFormatType.js rename to api-openbis-javascript/src/v3/as/dto/dataset/FileFormatType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/LinkedData.js b/api-openbis-javascript/src/v3/as/dto/dataset/LinkedData.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/LinkedData.js rename to api-openbis-javascript/src/v3/as/dto/dataset/LinkedData.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/LocatorType.js b/api-openbis-javascript/src/v3/as/dto/dataset/LocatorType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/LocatorType.js rename to api-openbis-javascript/src/v3/as/dto/dataset/LocatorType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/PhysicalData.js b/api-openbis-javascript/src/v3/as/dto/dataset/PhysicalData.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/PhysicalData.js rename to api-openbis-javascript/src/v3/as/dto/dataset/PhysicalData.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/StorageFormat.js b/api-openbis-javascript/src/v3/as/dto/dataset/StorageFormat.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/StorageFormat.js rename to api-openbis-javascript/src/v3/as/dto/dataset/StorageFormat.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/ArchiveDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/archive/ArchiveDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/ArchiveDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/archive/ArchiveDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/ArchiveDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/archive/ArchiveDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/ArchiveDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/archive/ArchiveDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/DataSetArchiveOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/archive/DataSetArchiveOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/archive/DataSetArchiveOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/archive/DataSetArchiveOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/ContentCopyCreation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/ContentCopyCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/ContentCopyCreation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/create/ContentCopyCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/CreateDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/create/CreateDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/DataSetCreation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/DataSetCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/DataSetCreation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/create/DataSetCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/DataSetTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/DataSetTypeCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/DataSetTypeCreation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/create/DataSetTypeCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/LinkedDataCreation.js b/api-openbis-javascript/src/v3/as/dto/dataset/create/LinkedDataCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/create/LinkedDataCreation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/create/LinkedDataCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DataSetDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DataSetDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DataSetDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DataSetDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DataSetTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DataSetTypeDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DataSetTypeDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DataSetTypeDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/delete/DeleteDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/delete/DeleteDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetTypeFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetTypeFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetTypeFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetTypeSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/DataSetTypeSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/DataSetTypeSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/FileFormatTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/FileFormatTypeFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/FileFormatTypeFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/FileFormatTypeFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/FileFormatTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/FileFormatTypeSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/FileFormatTypeSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/FileFormatTypeSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LinkedDataFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LinkedDataFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LinkedDataFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LinkedDataFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LinkedDataSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LinkedDataSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LinkedDataSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LinkedDataSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LocatorTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LocatorTypeFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LocatorTypeFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LocatorTypeFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LocatorTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LocatorTypeSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/LocatorTypeSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/LocatorTypeSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/PhysicalDataFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/PhysicalDataFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/PhysicalDataFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/PhysicalDataFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/PhysicalDataSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/PhysicalDataSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/PhysicalDataSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/PhysicalDataSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/StorageFormatFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/StorageFormatFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/StorageFormatFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/StorageFormatFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/StorageFormatSortOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/StorageFormatSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/fetchoptions/StorageFormatSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/fetchoptions/StorageFormatSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/get/GetDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/get/GetDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/history/DataSetRelationType.js b/api-openbis-javascript/src/v3/as/dto/dataset/history/DataSetRelationType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/history/DataSetRelationType.js rename to api-openbis-javascript/src/v3/as/dto/dataset/history/DataSetRelationType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/BdsDirectoryStorageFormatPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/BdsDirectoryStorageFormatPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/BdsDirectoryStorageFormatPermId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/BdsDirectoryStorageFormatPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ContentCopyPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/ContentCopyPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ContentCopyPermId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/ContentCopyPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/DataSetPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/DataSetPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/DataSetPermId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/DataSetPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/FileFormatTypePermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/FileFormatTypePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/FileFormatTypePermId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/FileFormatTypePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IContentCopyId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/IContentCopyId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IContentCopyId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/IContentCopyId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IDataSetId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/IDataSetId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IDataSetId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/IDataSetId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IFileFormatTypeId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/IFileFormatTypeId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IFileFormatTypeId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/IFileFormatTypeId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ILocatorTypeId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/ILocatorTypeId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ILocatorTypeId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/ILocatorTypeId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IStorageFormatId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/IStorageFormatId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/IStorageFormatId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/IStorageFormatId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/LocatorTypePermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/LocatorTypePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/LocatorTypePermId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/LocatorTypePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ProprietaryStorageFormatPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/ProprietaryStorageFormatPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/ProprietaryStorageFormatPermId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/ProprietaryStorageFormatPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/RelativeLocationLocatorTypePermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/RelativeLocationLocatorTypePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/RelativeLocationLocatorTypePermId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/RelativeLocationLocatorTypePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/StorageFormatPermId.js b/api-openbis-javascript/src/v3/as/dto/dataset/id/StorageFormatPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/id/StorageFormatPermId.js rename to api-openbis-javascript/src/v3/as/dto/dataset/id/StorageFormatPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/DataSetLockOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/lock/DataSetLockOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/DataSetLockOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/lock/DataSetLockOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/LockDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/lock/LockDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/LockDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/lock/LockDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/LockDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/lock/LockDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/lock/LockDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/lock/LockDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ArchivingRequestedSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ArchivingRequestedSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ArchivingRequestedSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ArchivingRequestedSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/CompleteSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/CompleteSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/CompleteSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/CompleteSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ContentCopySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ContentCopySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ContentCopySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ContentCopySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetSearchRelation.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetSearchRelation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetSearchRelation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetSearchRelation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/DataSetTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/DataSetTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ExternalCodeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ExternalCodeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ExternalCodeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ExternalCodeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ExternalDmsSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ExternalDmsSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ExternalDmsSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ExternalDmsSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/FileFormatTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/FileFormatTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/FileFormatTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/FileFormatTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/GitCommitHashSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/GitCommitHashSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/GitCommitHashSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/GitCommitHashSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/GitRepositoryIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/GitRepositoryIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/GitRepositoryIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/GitRepositoryIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LinkedDataSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/LinkedDataSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LinkedDataSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/LinkedDataSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LocationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/LocationSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LocationSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/LocationSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LocatorTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/LocatorTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/LocatorTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/LocatorTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PathSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/PathSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PathSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/PathSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PhysicalDataSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/PhysicalDataSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PhysicalDataSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/PhysicalDataSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PresentInArchiveSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/PresentInArchiveSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/PresentInArchiveSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/PresentInArchiveSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SearchDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SearchDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ShareIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/ShareIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/ShareIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/ShareIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SizeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SizeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SizeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SizeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SpeedHintSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/SpeedHintSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/SpeedHintSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/SpeedHintSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StatusSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/StatusSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StatusSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/StatusSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StorageConfirmationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/StorageConfirmationSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StorageConfirmationSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/StorageConfirmationSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StorageFormatSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/dataset/search/StorageFormatSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/search/StorageFormatSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/dataset/search/StorageFormatSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/DataSetUnarchiveOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/unarchive/DataSetUnarchiveOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/DataSetUnarchiveOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/unarchive/DataSetUnarchiveOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/unarchive/UnarchiveDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/DataSetUnlockOptions.js b/api-openbis-javascript/src/v3/as/dto/dataset/unlock/DataSetUnlockOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/DataSetUnlockOptions.js rename to api-openbis-javascript/src/v3/as/dto/dataset/unlock/DataSetUnlockOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/UnlockDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/unlock/UnlockDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/UnlockDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/unlock/UnlockDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/UnlockDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/unlock/UnlockDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/unlock/UnlockDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/unlock/UnlockDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/ContentCopyListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/ContentCopyListUpdateValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/ContentCopyListUpdateValue.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/ContentCopyListUpdateValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/DataSetTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/DataSetTypeUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/DataSetTypeUpdate.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/DataSetTypeUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/DataSetUpdate.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/DataSetUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/DataSetUpdate.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/DataSetUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/LinkedDataUpdate.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/LinkedDataUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/LinkedDataUpdate.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/LinkedDataUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/PhysicalDataUpdate.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/PhysicalDataUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/PhysicalDataUpdate.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/PhysicalDataUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetsOperation.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetsOperation.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/dataset/update/UpdateDataSetsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/dataset/update/UpdateDataSetsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/DataStore.js b/api-openbis-javascript/src/v3/as/dto/datastore/DataStore.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/DataStore.js rename to api-openbis-javascript/src/v3/as/dto/datastore/DataStore.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/fetchoptions/DataStoreFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/datastore/fetchoptions/DataStoreFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/fetchoptions/DataStoreFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/datastore/fetchoptions/DataStoreFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/fetchoptions/DataStoreSortOptions.js b/api-openbis-javascript/src/v3/as/dto/datastore/fetchoptions/DataStoreSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/fetchoptions/DataStoreSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/datastore/fetchoptions/DataStoreSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/id/DataStorePermId.js b/api-openbis-javascript/src/v3/as/dto/datastore/id/DataStorePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/id/DataStorePermId.js rename to api-openbis-javascript/src/v3/as/dto/datastore/id/DataStorePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/id/IDataStoreId.js b/api-openbis-javascript/src/v3/as/dto/datastore/id/IDataStoreId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/id/IDataStoreId.js rename to api-openbis-javascript/src/v3/as/dto/datastore/id/IDataStoreId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/DataStoreSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/datastore/search/DataStoreSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/DataStoreSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/datastore/search/DataStoreSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/SearchDataStoresOperation.js b/api-openbis-javascript/src/v3/as/dto/datastore/search/SearchDataStoresOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/SearchDataStoresOperation.js rename to api-openbis-javascript/src/v3/as/dto/datastore/search/SearchDataStoresOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/SearchDataStoresOperationResult.js b/api-openbis-javascript/src/v3/as/dto/datastore/search/SearchDataStoresOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/datastore/search/SearchDataStoresOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/datastore/search/SearchDataStoresOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/AbstractObjectDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/deletion/AbstractObjectDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/AbstractObjectDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/deletion/AbstractObjectDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/DeletedObject.js b/api-openbis-javascript/src/v3/as/dto/deletion/DeletedObject.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/DeletedObject.js rename to api-openbis-javascript/src/v3/as/dto/deletion/DeletedObject.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/Deletion.js b/api-openbis-javascript/src/v3/as/dto/deletion/Deletion.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/Deletion.js rename to api-openbis-javascript/src/v3/as/dto/deletion/Deletion.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/confirm/ConfirmDeletionsOperation.js b/api-openbis-javascript/src/v3/as/dto/deletion/confirm/ConfirmDeletionsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/confirm/ConfirmDeletionsOperation.js rename to api-openbis-javascript/src/v3/as/dto/deletion/confirm/ConfirmDeletionsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/confirm/ConfirmDeletionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/deletion/confirm/ConfirmDeletionsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/confirm/ConfirmDeletionsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/deletion/confirm/ConfirmDeletionsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletedObjectFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletedObjectFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletedObjectFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletedObjectFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletionFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletionFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletionFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletionFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletionSortOptions.js b/api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletionSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/fetchoptions/DeletionSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/deletion/fetchoptions/DeletionSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/id/DeletionTechId.js b/api-openbis-javascript/src/v3/as/dto/deletion/id/DeletionTechId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/id/DeletionTechId.js rename to api-openbis-javascript/src/v3/as/dto/deletion/id/DeletionTechId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/id/IDeletionId.js b/api-openbis-javascript/src/v3/as/dto/deletion/id/IDeletionId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/id/IDeletionId.js rename to api-openbis-javascript/src/v3/as/dto/deletion/id/IDeletionId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/revert/RevertDeletionsOperation.js b/api-openbis-javascript/src/v3/as/dto/deletion/revert/RevertDeletionsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/revert/RevertDeletionsOperation.js rename to api-openbis-javascript/src/v3/as/dto/deletion/revert/RevertDeletionsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/revert/RevertDeletionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/deletion/revert/RevertDeletionsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/revert/RevertDeletionsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/deletion/revert/RevertDeletionsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/DeletionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/deletion/search/DeletionSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/DeletionSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/deletion/search/DeletionSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/SearchDeletionsOperation.js b/api-openbis-javascript/src/v3/as/dto/deletion/search/SearchDeletionsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/SearchDeletionsOperation.js rename to api-openbis-javascript/src/v3/as/dto/deletion/search/SearchDeletionsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/SearchDeletionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/deletion/search/SearchDeletionsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/deletion/search/SearchDeletionsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/deletion/search/SearchDeletionsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreateCodesOperation.js b/api-openbis-javascript/src/v3/as/dto/entity/create/CreateCodesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreateCodesOperation.js rename to api-openbis-javascript/src/v3/as/dto/entity/create/CreateCodesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreateCodesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/entity/create/CreateCodesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreateCodesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/entity/create/CreateCodesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreatePermIdsOperation.js b/api-openbis-javascript/src/v3/as/dto/entity/create/CreatePermIdsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreatePermIdsOperation.js rename to api-openbis-javascript/src/v3/as/dto/entity/create/CreatePermIdsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreatePermIdsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/entity/create/CreatePermIdsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entity/create/CreatePermIdsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/entity/create/CreatePermIdsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/EntityKind.js b/api-openbis-javascript/src/v3/as/dto/entitytype/EntityKind.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/EntityKind.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/EntityKind.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/create/IEntityTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/entitytype/create/IEntityTypeCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/create/IEntityTypeCreation.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/create/IEntityTypeCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/fetchoptions/EntityTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/entitytype/fetchoptions/EntityTypeFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/fetchoptions/EntityTypeFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/fetchoptions/EntityTypeFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/fetchoptions/EntityTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/entitytype/fetchoptions/EntityTypeSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/fetchoptions/EntityTypeSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/fetchoptions/EntityTypeSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/id/EntityTypePermId.js b/api-openbis-javascript/src/v3/as/dto/entitytype/id/EntityTypePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/id/EntityTypePermId.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/id/EntityTypePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/id/IEntityTypeId.js b/api-openbis-javascript/src/v3/as/dto/entitytype/id/IEntityTypeId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/id/IEntityTypeId.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/id/IEntityTypeId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/AbstractEntityTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/entitytype/search/AbstractEntityTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/AbstractEntityTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/search/AbstractEntityTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/EntityKindSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/entitytype/search/EntityKindSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/EntityKindSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/search/EntityKindSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/EntityTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/entitytype/search/EntityTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/search/EntityTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/search/EntityTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/update/IEntityTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/entitytype/update/IEntityTypeUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/update/IEntityTypeUpdate.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/update/IEntityTypeUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/update/PropertyAssignmentListUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/entitytype/update/PropertyAssignmentListUpdateValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/entitytype/update/PropertyAssignmentListUpdateValue.js rename to api-openbis-javascript/src/v3/as/dto/entitytype/update/PropertyAssignmentListUpdateValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/EntityType.js b/api-openbis-javascript/src/v3/as/dto/event/EntityType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/EntityType.js rename to api-openbis-javascript/src/v3/as/dto/event/EntityType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/Event.js b/api-openbis-javascript/src/v3/as/dto/event/Event.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/Event.js rename to api-openbis-javascript/src/v3/as/dto/event/Event.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/EventType.js b/api-openbis-javascript/src/v3/as/dto/event/EventType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/EventType.js rename to api-openbis-javascript/src/v3/as/dto/event/EventType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/fetchoptions/EventFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/event/fetchoptions/EventFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/fetchoptions/EventFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/event/fetchoptions/EventFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/fetchoptions/EventSortOptions.js b/api-openbis-javascript/src/v3/as/dto/event/fetchoptions/EventSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/fetchoptions/EventSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/event/fetchoptions/EventSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/id/EventTechId.js b/api-openbis-javascript/src/v3/as/dto/event/id/EventTechId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/id/EventTechId.js rename to api-openbis-javascript/src/v3/as/dto/event/id/EventTechId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/id/IEventId.js b/api-openbis-javascript/src/v3/as/dto/event/id/IEventId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/id/IEventId.js rename to api-openbis-javascript/src/v3/as/dto/event/id/IEventId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventDescriptionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventDescriptionSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventDescriptionSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventDescriptionSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityProjectIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityProjectIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityProjectIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityProjectIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityProjectSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityProjectSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityProjectSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityProjectSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityRegistrationDateSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityRegistrationDateSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityRegistrationDateSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityRegistrationDateSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityRegistratorSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityRegistratorSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityRegistratorSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityRegistratorSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntitySpaceIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntitySpaceIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntitySpaceIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntitySpaceIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntitySpaceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntitySpaceSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntitySpaceSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntitySpaceSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventEntityTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventEntityTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventEntityTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventIdentifierSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventIdentifierSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventIdentifierSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventIdentifierSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventReasonSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventReasonSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventReasonSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventReasonSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/event/search/EventTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/EventTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/event/search/EventTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/SearchEventsOperation.js b/api-openbis-javascript/src/v3/as/dto/event/search/SearchEventsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/SearchEventsOperation.js rename to api-openbis-javascript/src/v3/as/dto/event/search/SearchEventsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/SearchEventsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/event/search/SearchEventsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/event/search/SearchEventsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/event/search/SearchEventsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/Experiment.js b/api-openbis-javascript/src/v3/as/dto/experiment/Experiment.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/Experiment.js rename to api-openbis-javascript/src/v3/as/dto/experiment/Experiment.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/ExperimentType.js b/api-openbis-javascript/src/v3/as/dto/experiment/ExperimentType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/ExperimentType.js rename to api-openbis-javascript/src/v3/as/dto/experiment/ExperimentType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/CreateExperimentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/create/CreateExperimentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/ExperimentCreation.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/ExperimentCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/ExperimentCreation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/create/ExperimentCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/ExperimentTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/experiment/create/ExperimentTypeCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/create/ExperimentTypeCreation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/create/ExperimentTypeCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/DeleteExperimentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/DeleteExperimentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/ExperimentDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/ExperimentDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/ExperimentDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/ExperimentDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/ExperimentTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/delete/ExperimentTypeDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/delete/ExperimentTypeDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/experiment/delete/ExperimentTypeDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentSortOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentTypeFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentTypeFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentTypeFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentTypeSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/fetchoptions/ExperimentTypeSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/experiment/fetchoptions/ExperimentTypeSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/get/GetExperimentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/get/GetExperimentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/history/ExperimentRelationType.js b/api-openbis-javascript/src/v3/as/dto/experiment/history/ExperimentRelationType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/history/ExperimentRelationType.js rename to api-openbis-javascript/src/v3/as/dto/experiment/history/ExperimentRelationType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/ExperimentIdentifier.js b/api-openbis-javascript/src/v3/as/dto/experiment/id/ExperimentIdentifier.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/ExperimentIdentifier.js rename to api-openbis-javascript/src/v3/as/dto/experiment/id/ExperimentIdentifier.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/ExperimentPermId.js b/api-openbis-javascript/src/v3/as/dto/experiment/id/ExperimentPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/ExperimentPermId.js rename to api-openbis-javascript/src/v3/as/dto/experiment/id/ExperimentPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/IExperimentId.js b/api-openbis-javascript/src/v3/as/dto/experiment/id/IExperimentId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/id/IExperimentId.js rename to api-openbis-javascript/src/v3/as/dto/experiment/id/IExperimentId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/ExperimentSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/ExperimentSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/ExperimentSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/experiment/search/ExperimentSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/ExperimentTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/ExperimentTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/ExperimentTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/experiment/search/ExperimentTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/NoExperimentSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/NoExperimentSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/NoExperimentSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/experiment/search/NoExperimentSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/search/SearchExperimentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/search/SearchExperimentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/ExperimentTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/ExperimentTypeUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/ExperimentTypeUpdate.js rename to api-openbis-javascript/src/v3/as/dto/experiment/update/ExperimentTypeUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/ExperimentUpdate.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/ExperimentUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/ExperimentUpdate.js rename to api-openbis-javascript/src/v3/as/dto/experiment/update/ExperimentUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentsOperation.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/experiment/update/UpdateExperimentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/experiment/update/UpdateExperimentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/ExternalDms.js b/api-openbis-javascript/src/v3/as/dto/externaldms/ExternalDms.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/ExternalDms.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/ExternalDms.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/ExternalDmsAddressType.js b/api-openbis-javascript/src/v3/as/dto/externaldms/ExternalDmsAddressType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/ExternalDmsAddressType.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/ExternalDmsAddressType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/CreateExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/create/CreateExternalDmsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/CreateExternalDmsOperation.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/create/CreateExternalDmsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/CreateExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/create/CreateExternalDmsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/CreateExternalDmsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/create/CreateExternalDmsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/ExternalDmsCreation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/create/ExternalDmsCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/create/ExternalDmsCreation.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/create/ExternalDmsCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/DeleteExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/delete/DeleteExternalDmsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/DeleteExternalDmsOperation.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/delete/DeleteExternalDmsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/DeleteExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/delete/DeleteExternalDmsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/DeleteExternalDmsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/delete/DeleteExternalDmsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/ExternalDmsDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/externaldms/delete/ExternalDmsDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/delete/ExternalDmsDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/delete/ExternalDmsDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/fetchoptions/ExternalDmsFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/externaldms/fetchoptions/ExternalDmsFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/fetchoptions/ExternalDmsFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/fetchoptions/ExternalDmsFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/fetchoptions/ExternalDmsSortOptions.js b/api-openbis-javascript/src/v3/as/dto/externaldms/fetchoptions/ExternalDmsSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/fetchoptions/ExternalDmsSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/fetchoptions/ExternalDmsSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/get/GetExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/get/GetExternalDmsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/get/GetExternalDmsOperation.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/get/GetExternalDmsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/get/GetExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/get/GetExternalDmsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/get/GetExternalDmsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/get/GetExternalDmsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/id/ExternalDmsPermId.js b/api-openbis-javascript/src/v3/as/dto/externaldms/id/ExternalDmsPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/id/ExternalDmsPermId.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/id/ExternalDmsPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/id/IExternalDmsId.js b/api-openbis-javascript/src/v3/as/dto/externaldms/id/IExternalDmsId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/id/IExternalDmsId.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/id/IExternalDmsId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/AddressSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/AddressSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/AddressSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/AddressSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/ExternalDmsSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/ExternalDmsSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/ExternalDmsSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/ExternalDmsSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/ExternalDmsTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/ExternalDmsTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/ExternalDmsTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/ExternalDmsTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/LabelSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/LabelSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/LabelSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/LabelSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/SearchExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/SearchExternalDmsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/SearchExternalDmsOperation.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/SearchExternalDmsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/SearchExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/search/SearchExternalDmsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/search/SearchExternalDmsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/search/SearchExternalDmsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/ExternalDmsUpdate.js b/api-openbis-javascript/src/v3/as/dto/externaldms/update/ExternalDmsUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/ExternalDmsUpdate.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/update/ExternalDmsUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/UpdateExternalDmsOperation.js b/api-openbis-javascript/src/v3/as/dto/externaldms/update/UpdateExternalDmsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/UpdateExternalDmsOperation.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/update/UpdateExternalDmsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/UpdateExternalDmsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/externaldms/update/UpdateExternalDmsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/externaldms/update/UpdateExternalDmsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/externaldms/update/UpdateExternalDmsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/GlobalSearchObject.js b/api-openbis-javascript/src/v3/as/dto/global/GlobalSearchObject.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/GlobalSearchObject.js rename to api-openbis-javascript/src/v3/as/dto/global/GlobalSearchObject.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/GlobalSearchObjectFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/global/fetchoptions/GlobalSearchObjectFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/GlobalSearchObjectFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/global/fetchoptions/GlobalSearchObjectFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/GlobalSearchObjectSortOptions.js b/api-openbis-javascript/src/v3/as/dto/global/fetchoptions/GlobalSearchObjectSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/GlobalSearchObjectSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/global/fetchoptions/GlobalSearchObjectSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/MatchFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/global/fetchoptions/MatchFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/fetchoptions/MatchFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/global/fetchoptions/MatchFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchObjectKind.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchObjectKind.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchObjectKind.js rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchObjectKind.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchObjectKindCriteria.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchObjectKindCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchObjectKindCriteria.js rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchObjectKindCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchTextCriteria.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchTextCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchTextCriteria.js rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchTextCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchWildCardsCriteria.js b/api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchWildCardsCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/GlobalSearchWildCardsCriteria.js rename to api-openbis-javascript/src/v3/as/dto/global/search/GlobalSearchWildCardsCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/SearchGloballyOperation.js b/api-openbis-javascript/src/v3/as/dto/global/search/SearchGloballyOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/SearchGloballyOperation.js rename to api-openbis-javascript/src/v3/as/dto/global/search/SearchGloballyOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/SearchGloballyOperationResult.js b/api-openbis-javascript/src/v3/as/dto/global/search/SearchGloballyOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/global/search/SearchGloballyOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/global/search/SearchGloballyOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/ContentCopyHistoryEntry.js b/api-openbis-javascript/src/v3/as/dto/history/ContentCopyHistoryEntry.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/ContentCopyHistoryEntry.js rename to api-openbis-javascript/src/v3/as/dto/history/ContentCopyHistoryEntry.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/HistoryEntry.js b/api-openbis-javascript/src/v3/as/dto/history/HistoryEntry.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/HistoryEntry.js rename to api-openbis-javascript/src/v3/as/dto/history/HistoryEntry.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/IRelationType.js b/api-openbis-javascript/src/v3/as/dto/history/IRelationType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/IRelationType.js rename to api-openbis-javascript/src/v3/as/dto/history/IRelationType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/PropertyHistoryEntry.js b/api-openbis-javascript/src/v3/as/dto/history/PropertyHistoryEntry.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/PropertyHistoryEntry.js rename to api-openbis-javascript/src/v3/as/dto/history/PropertyHistoryEntry.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/RelationHistoryEntry.js b/api-openbis-javascript/src/v3/as/dto/history/RelationHistoryEntry.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/RelationHistoryEntry.js rename to api-openbis-javascript/src/v3/as/dto/history/RelationHistoryEntry.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/fetchoptions/HistoryEntryFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/history/fetchoptions/HistoryEntryFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/fetchoptions/HistoryEntryFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/history/fetchoptions/HistoryEntryFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/fetchoptions/HistoryEntrySortOptions.js b/api-openbis-javascript/src/v3/as/dto/history/fetchoptions/HistoryEntrySortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/fetchoptions/HistoryEntrySortOptions.js rename to api-openbis-javascript/src/v3/as/dto/history/fetchoptions/HistoryEntrySortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/id/UnknownRelatedObjectId.js b/api-openbis-javascript/src/v3/as/dto/history/id/UnknownRelatedObjectId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/history/id/UnknownRelatedObjectId.js rename to api-openbis-javascript/src/v3/as/dto/history/id/UnknownRelatedObjectId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/Material.js b/api-openbis-javascript/src/v3/as/dto/material/Material.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/Material.js rename to api-openbis-javascript/src/v3/as/dto/material/Material.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/MaterialType.js b/api-openbis-javascript/src/v3/as/dto/material/MaterialType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/MaterialType.js rename to api-openbis-javascript/src/v3/as/dto/material/MaterialType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialsOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/CreateMaterialsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/create/CreateMaterialsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/MaterialCreation.js b/api-openbis-javascript/src/v3/as/dto/material/create/MaterialCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/MaterialCreation.js rename to api-openbis-javascript/src/v3/as/dto/material/create/MaterialCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/MaterialTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/material/create/MaterialTypeCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/create/MaterialTypeCreation.js rename to api-openbis-javascript/src/v3/as/dto/material/create/MaterialTypeCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialsOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/DeleteMaterialsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/delete/DeleteMaterialsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/MaterialDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/material/delete/MaterialDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/MaterialDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/material/delete/MaterialDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/MaterialTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/material/delete/MaterialTypeDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/delete/MaterialTypeDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/material/delete/MaterialTypeDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialSortOptions.js b/api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialTypeFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialTypeFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialTypeFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialTypeSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/fetchoptions/MaterialTypeSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/material/fetchoptions/MaterialTypeSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialsOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/get/GetMaterialsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/get/GetMaterialsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/id/IMaterialId.js b/api-openbis-javascript/src/v3/as/dto/material/id/IMaterialId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/id/IMaterialId.js rename to api-openbis-javascript/src/v3/as/dto/material/id/IMaterialId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/id/MaterialPermId.js b/api-openbis-javascript/src/v3/as/dto/material/id/MaterialPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/id/MaterialPermId.js rename to api-openbis-javascript/src/v3/as/dto/material/id/MaterialPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/MaterialSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/material/search/MaterialSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/MaterialSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/material/search/MaterialSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/MaterialTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/material/search/MaterialTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/MaterialTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/material/search/MaterialTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialsOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/search/SearchMaterialsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/search/SearchMaterialsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/MaterialTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/material/update/MaterialTypeUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/MaterialTypeUpdate.js rename to api-openbis-javascript/src/v3/as/dto/material/update/MaterialTypeUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/MaterialUpdate.js b/api-openbis-javascript/src/v3/as/dto/material/update/MaterialUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/MaterialUpdate.js rename to api-openbis-javascript/src/v3/as/dto/material/update/MaterialUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialsOperation.js b/api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialsOperation.js rename to api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/material/update/UpdateMaterialsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/material/update/UpdateMaterialsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/ObjectKind.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/ObjectKind.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/ObjectKind.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/ObjectKind.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/ObjectKindModification.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/ObjectKindModification.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/ObjectKindModification.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/ObjectKindModification.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/OperationKind.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/OperationKind.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/OperationKind.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/OperationKind.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationSortOptions.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/fetchoptions/ObjectKindModificationSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/ObjectKindCriteria.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/ObjectKindCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/ObjectKindCriteria.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/ObjectKindCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/OperationKindCriteria.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/OperationKindCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/OperationKindCriteria.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/OperationKindCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperation.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperation.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/objectkindmodification/search/SearchObjectKindModificationsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AbstractOperationExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/AbstractOperationExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AbstractOperationExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/AbstractOperationExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AsynchronousOperationExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/AsynchronousOperationExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AsynchronousOperationExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/AsynchronousOperationExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AsynchronousOperationExecutionResults.js b/api-openbis-javascript/src/v3/as/dto/operation/AsynchronousOperationExecutionResults.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/AsynchronousOperationExecutionResults.js rename to api-openbis-javascript/src/v3/as/dto/operation/AsynchronousOperationExecutionResults.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionNotification.js b/api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionNotification.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionNotification.js rename to api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionNotification.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionResults.js b/api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionResults.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/IOperationExecutionResults.js rename to api-openbis-javascript/src/v3/as/dto/operation/IOperationExecutionResults.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecution.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecution.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecution.js rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecution.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionAvailability.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionAvailability.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionAvailability.js rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionAvailability.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionDetails.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionDetails.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionDetails.js rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionDetails.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionEmailNotification.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionEmailNotification.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionEmailNotification.js rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionEmailNotification.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionError.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionError.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionError.js rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionError.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionProgress.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionProgress.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionProgress.js rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionProgress.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionState.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionState.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionState.js rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionState.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionSummary.js b/api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionSummary.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/OperationExecutionSummary.js rename to api-openbis-javascript/src/v3/as/dto/operation/OperationExecutionSummary.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/SynchronousOperationExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/SynchronousOperationExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/SynchronousOperationExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/SynchronousOperationExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/SynchronousOperationExecutionResults.js b/api-openbis-javascript/src/v3/as/dto/operation/SynchronousOperationExecutionResults.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/SynchronousOperationExecutionResults.js rename to api-openbis-javascript/src/v3/as/dto/operation/SynchronousOperationExecutionResults.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/DeleteOperationExecutionsOperation.js b/api-openbis-javascript/src/v3/as/dto/operation/delete/DeleteOperationExecutionsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/DeleteOperationExecutionsOperation.js rename to api-openbis-javascript/src/v3/as/dto/operation/delete/DeleteOperationExecutionsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/DeleteOperationExecutionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/operation/delete/DeleteOperationExecutionsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/DeleteOperationExecutionsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/operation/delete/DeleteOperationExecutionsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/OperationExecutionDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/delete/OperationExecutionDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/delete/OperationExecutionDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/delete/OperationExecutionDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsSortOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionDetailsSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationSortOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionNotificationSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSortOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSummaryFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSummaryFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSummaryFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSummaryFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSummarySortOptions.js b/api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSummarySortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/fetchoptions/OperationExecutionSummarySortOptions.js rename to api-openbis-javascript/src/v3/as/dto/operation/fetchoptions/OperationExecutionSummarySortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/get/GetOperationExecutionsOperation.js b/api-openbis-javascript/src/v3/as/dto/operation/get/GetOperationExecutionsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/get/GetOperationExecutionsOperation.js rename to api-openbis-javascript/src/v3/as/dto/operation/get/GetOperationExecutionsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/get/GetOperationExecutionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/operation/get/GetOperationExecutionsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/get/GetOperationExecutionsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/operation/get/GetOperationExecutionsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/id/IOperationExecutionId.js b/api-openbis-javascript/src/v3/as/dto/operation/id/IOperationExecutionId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/id/IOperationExecutionId.js rename to api-openbis-javascript/src/v3/as/dto/operation/id/IOperationExecutionId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/id/OperationExecutionPermId.js b/api-openbis-javascript/src/v3/as/dto/operation/id/OperationExecutionPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/id/OperationExecutionPermId.js rename to api-openbis-javascript/src/v3/as/dto/operation/id/OperationExecutionPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/OperationExecutionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/operation/search/OperationExecutionSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/OperationExecutionSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/operation/search/OperationExecutionSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/SearchOperationExecutionsOperation.js b/api-openbis-javascript/src/v3/as/dto/operation/search/SearchOperationExecutionsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/SearchOperationExecutionsOperation.js rename to api-openbis-javascript/src/v3/as/dto/operation/search/SearchOperationExecutionsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/SearchOperationExecutionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/operation/search/SearchOperationExecutionsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/search/SearchOperationExecutionsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/operation/search/SearchOperationExecutionsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/OperationExecutionUpdate.js b/api-openbis-javascript/src/v3/as/dto/operation/update/OperationExecutionUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/OperationExecutionUpdate.js rename to api-openbis-javascript/src/v3/as/dto/operation/update/OperationExecutionUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/UpdateOperationExecutionsOperation.js b/api-openbis-javascript/src/v3/as/dto/operation/update/UpdateOperationExecutionsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/UpdateOperationExecutionsOperation.js rename to api-openbis-javascript/src/v3/as/dto/operation/update/UpdateOperationExecutionsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/UpdateOperationExecutionsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/operation/update/UpdateOperationExecutionsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/operation/update/UpdateOperationExecutionsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/operation/update/UpdateOperationExecutionsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/PersonalAccessToken.js b/api-openbis-javascript/src/v3/as/dto/pat/PersonalAccessToken.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/PersonalAccessToken.js rename to api-openbis-javascript/src/v3/as/dto/pat/PersonalAccessToken.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/CreatePersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/create/CreatePersonalAccessTokensOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/CreatePersonalAccessTokensOperation.js rename to api-openbis-javascript/src/v3/as/dto/pat/create/CreatePersonalAccessTokensOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/CreatePersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/create/CreatePersonalAccessTokensOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/CreatePersonalAccessTokensOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/pat/create/CreatePersonalAccessTokensOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/PersonalAccessTokenCreation.js b/api-openbis-javascript/src/v3/as/dto/pat/create/PersonalAccessTokenCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/create/PersonalAccessTokenCreation.js rename to api-openbis-javascript/src/v3/as/dto/pat/create/PersonalAccessTokenCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperation.js rename to api-openbis-javascript/src/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/pat/delete/DeletePersonalAccessTokensOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/PersonalAccessTokenDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/pat/delete/PersonalAccessTokenDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/delete/PersonalAccessTokenDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/pat/delete/PersonalAccessTokenDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/fetchoptions/PersonalAccessTokenFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/pat/fetchoptions/PersonalAccessTokenFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/fetchoptions/PersonalAccessTokenFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/pat/fetchoptions/PersonalAccessTokenFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/fetchoptions/PersonalAccessTokenSortOptions.js b/api-openbis-javascript/src/v3/as/dto/pat/fetchoptions/PersonalAccessTokenSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/fetchoptions/PersonalAccessTokenSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/pat/fetchoptions/PersonalAccessTokenSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/get/GetPersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/get/GetPersonalAccessTokensOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/get/GetPersonalAccessTokensOperation.js rename to api-openbis-javascript/src/v3/as/dto/pat/get/GetPersonalAccessTokensOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/get/GetPersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/get/GetPersonalAccessTokensOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/get/GetPersonalAccessTokensOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/pat/get/GetPersonalAccessTokensOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/id/IPersonalAccessTokenId.js b/api-openbis-javascript/src/v3/as/dto/pat/id/IPersonalAccessTokenId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/id/IPersonalAccessTokenId.js rename to api-openbis-javascript/src/v3/as/dto/pat/id/IPersonalAccessTokenId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/id/PersonalAccessTokenPermId.js b/api-openbis-javascript/src/v3/as/dto/pat/id/PersonalAccessTokenPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/id/PersonalAccessTokenPermId.js rename to api-openbis-javascript/src/v3/as/dto/pat/id/PersonalAccessTokenPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenOwnerSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenOwnerSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenOwnerSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenOwnerSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenSessionNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenSessionNameSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/PersonalAccessTokenSessionNameSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/pat/search/PersonalAccessTokenSessionNameSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/SearchPersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/search/SearchPersonalAccessTokensOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/SearchPersonalAccessTokensOperation.js rename to api-openbis-javascript/src/v3/as/dto/pat/search/SearchPersonalAccessTokensOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/SearchPersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/search/SearchPersonalAccessTokensOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/search/SearchPersonalAccessTokensOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/pat/search/SearchPersonalAccessTokensOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/PersonalAccessTokenUpdate.js b/api-openbis-javascript/src/v3/as/dto/pat/update/PersonalAccessTokenUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/PersonalAccessTokenUpdate.js rename to api-openbis-javascript/src/v3/as/dto/pat/update/PersonalAccessTokenUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperation.js b/api-openbis-javascript/src/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperation.js rename to api-openbis-javascript/src/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperationResult.js b/api-openbis-javascript/src/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/pat/update/UpdatePersonalAccessTokensOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/Person.js b/api-openbis-javascript/src/v3/as/dto/person/Person.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/Person.js rename to api-openbis-javascript/src/v3/as/dto/person/Person.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/CreatePersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/create/CreatePersonsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/CreatePersonsOperation.js rename to api-openbis-javascript/src/v3/as/dto/person/create/CreatePersonsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/CreatePersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/create/CreatePersonsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/CreatePersonsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/person/create/CreatePersonsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/PersonCreation.js b/api-openbis-javascript/src/v3/as/dto/person/create/PersonCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/create/PersonCreation.js rename to api-openbis-javascript/src/v3/as/dto/person/create/PersonCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/DeletePersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/delete/DeletePersonsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/DeletePersonsOperation.js rename to api-openbis-javascript/src/v3/as/dto/person/delete/DeletePersonsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/DeletePersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/delete/DeletePersonsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/DeletePersonsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/person/delete/DeletePersonsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/PersonDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/person/delete/PersonDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/delete/PersonDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/person/delete/PersonDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/fetchoptions/PersonFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/person/fetchoptions/PersonFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/fetchoptions/PersonFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/person/fetchoptions/PersonFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/fetchoptions/PersonSortOptions.js b/api-openbis-javascript/src/v3/as/dto/person/fetchoptions/PersonSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/fetchoptions/PersonSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/person/fetchoptions/PersonSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/get/GetPersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/get/GetPersonsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/get/GetPersonsOperation.js rename to api-openbis-javascript/src/v3/as/dto/person/get/GetPersonsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/get/GetPersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/get/GetPersonsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/get/GetPersonsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/person/get/GetPersonsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/IPersonId.js b/api-openbis-javascript/src/v3/as/dto/person/id/IPersonId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/IPersonId.js rename to api-openbis-javascript/src/v3/as/dto/person/id/IPersonId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/Me.js b/api-openbis-javascript/src/v3/as/dto/person/id/Me.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/Me.js rename to api-openbis-javascript/src/v3/as/dto/person/id/Me.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/PersonPermId.js b/api-openbis-javascript/src/v3/as/dto/person/id/PersonPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/id/PersonPermId.js rename to api-openbis-javascript/src/v3/as/dto/person/id/PersonPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/EmailSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/EmailSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/EmailSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/person/search/EmailSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/FirstNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/FirstNameSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/FirstNameSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/person/search/FirstNameSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/LastNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/LastNameSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/LastNameSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/person/search/LastNameSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/ModifierSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/ModifierSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/ModifierSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/person/search/ModifierSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/PersonSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/PersonSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/PersonSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/person/search/PersonSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/RegistratorSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/RegistratorSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/RegistratorSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/person/search/RegistratorSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/SearchPersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/search/SearchPersonsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/SearchPersonsOperation.js rename to api-openbis-javascript/src/v3/as/dto/person/search/SearchPersonsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/SearchPersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/search/SearchPersonsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/SearchPersonsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/person/search/SearchPersonsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/UserIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/UserIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/UserIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/person/search/UserIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/UserIdsSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/person/search/UserIdsSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/search/UserIdsSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/person/search/UserIdsSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/PersonUpdate.js b/api-openbis-javascript/src/v3/as/dto/person/update/PersonUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/PersonUpdate.js rename to api-openbis-javascript/src/v3/as/dto/person/update/PersonUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/UpdatePersonsOperation.js b/api-openbis-javascript/src/v3/as/dto/person/update/UpdatePersonsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/UpdatePersonsOperation.js rename to api-openbis-javascript/src/v3/as/dto/person/update/UpdatePersonsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/UpdatePersonsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/person/update/UpdatePersonsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/person/update/UpdatePersonsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/person/update/UpdatePersonsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/Plugin.js b/api-openbis-javascript/src/v3/as/dto/plugin/Plugin.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/Plugin.js rename to api-openbis-javascript/src/v3/as/dto/plugin/Plugin.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/PluginKind.js b/api-openbis-javascript/src/v3/as/dto/plugin/PluginKind.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/PluginKind.js rename to api-openbis-javascript/src/v3/as/dto/plugin/PluginKind.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/PluginType.js b/api-openbis-javascript/src/v3/as/dto/plugin/PluginType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/PluginType.js rename to api-openbis-javascript/src/v3/as/dto/plugin/PluginType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/CreatePluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/create/CreatePluginsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/CreatePluginsOperation.js rename to api-openbis-javascript/src/v3/as/dto/plugin/create/CreatePluginsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/CreatePluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/create/CreatePluginsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/CreatePluginsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/create/CreatePluginsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/PluginCreation.js b/api-openbis-javascript/src/v3/as/dto/plugin/create/PluginCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/create/PluginCreation.js rename to api-openbis-javascript/src/v3/as/dto/plugin/create/PluginCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/DeletePluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/delete/DeletePluginsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/DeletePluginsOperation.js rename to api-openbis-javascript/src/v3/as/dto/plugin/delete/DeletePluginsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/DeletePluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/delete/DeletePluginsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/DeletePluginsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/delete/DeletePluginsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/PluginDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/delete/PluginDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/delete/PluginDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/plugin/delete/PluginDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationOptions.js rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/DynamicPropertyPluginEvaluationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationOptions.js rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EntityValidationPluginEvaluationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EvaluatePluginOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EvaluatePluginOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EvaluatePluginOperation.js rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EvaluatePluginOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EvaluatePluginOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EvaluatePluginOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/EvaluatePluginOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/EvaluatePluginOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/PluginEvaluationOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/PluginEvaluationOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/PluginEvaluationOptions.js rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/PluginEvaluationOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/PluginEvaluationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/evaluate/PluginEvaluationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/evaluate/PluginEvaluationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/evaluate/PluginEvaluationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/fetchoptions/PluginFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/fetchoptions/PluginFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/fetchoptions/PluginFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/plugin/fetchoptions/PluginFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/fetchoptions/PluginSortOptions.js b/api-openbis-javascript/src/v3/as/dto/plugin/fetchoptions/PluginSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/fetchoptions/PluginSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/plugin/fetchoptions/PluginSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/get/GetPluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/get/GetPluginsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/get/GetPluginsOperation.js rename to api-openbis-javascript/src/v3/as/dto/plugin/get/GetPluginsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/get/GetPluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/get/GetPluginsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/get/GetPluginsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/get/GetPluginsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/id/IPluginId.js b/api-openbis-javascript/src/v3/as/dto/plugin/id/IPluginId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/id/IPluginId.js rename to api-openbis-javascript/src/v3/as/dto/plugin/id/IPluginId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/id/PluginPermId.js b/api-openbis-javascript/src/v3/as/dto/plugin/id/PluginPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/id/PluginPermId.js rename to api-openbis-javascript/src/v3/as/dto/plugin/id/PluginPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginKindSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/PluginKindSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginKindSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/plugin/search/PluginKindSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/PluginSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/plugin/search/PluginSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/PluginTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/PluginTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/plugin/search/PluginTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/SearchPluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/SearchPluginsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/SearchPluginsOperation.js rename to api-openbis-javascript/src/v3/as/dto/plugin/search/SearchPluginsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/SearchPluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/search/SearchPluginsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/search/SearchPluginsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/search/SearchPluginsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/PluginUpdate.js b/api-openbis-javascript/src/v3/as/dto/plugin/update/PluginUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/PluginUpdate.js rename to api-openbis-javascript/src/v3/as/dto/plugin/update/PluginUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/UpdatePluginsOperation.js b/api-openbis-javascript/src/v3/as/dto/plugin/update/UpdatePluginsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/UpdatePluginsOperation.js rename to api-openbis-javascript/src/v3/as/dto/plugin/update/UpdatePluginsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/UpdatePluginsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/plugin/update/UpdatePluginsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/plugin/update/UpdatePluginsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/plugin/update/UpdatePluginsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/Project.js b/api-openbis-javascript/src/v3/as/dto/project/Project.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/Project.js rename to api-openbis-javascript/src/v3/as/dto/project/Project.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/CreateProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/create/CreateProjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/CreateProjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/project/create/CreateProjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/CreateProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/create/CreateProjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/CreateProjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/project/create/CreateProjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/ProjectCreation.js b/api-openbis-javascript/src/v3/as/dto/project/create/ProjectCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/create/ProjectCreation.js rename to api-openbis-javascript/src/v3/as/dto/project/create/ProjectCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/DeleteProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/delete/DeleteProjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/DeleteProjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/project/delete/DeleteProjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/DeleteProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/delete/DeleteProjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/DeleteProjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/project/delete/DeleteProjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/ProjectDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/project/delete/ProjectDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/delete/ProjectDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/project/delete/ProjectDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/fetchoptions/ProjectFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/project/fetchoptions/ProjectFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/fetchoptions/ProjectFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/project/fetchoptions/ProjectFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/fetchoptions/ProjectSortOptions.js b/api-openbis-javascript/src/v3/as/dto/project/fetchoptions/ProjectSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/fetchoptions/ProjectSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/project/fetchoptions/ProjectSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/get/GetProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/get/GetProjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/get/GetProjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/project/get/GetProjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/get/GetProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/get/GetProjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/get/GetProjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/project/get/GetProjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/history/ProjectRelationType.js b/api-openbis-javascript/src/v3/as/dto/project/history/ProjectRelationType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/history/ProjectRelationType.js rename to api-openbis-javascript/src/v3/as/dto/project/history/ProjectRelationType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/IProjectId.js b/api-openbis-javascript/src/v3/as/dto/project/id/IProjectId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/IProjectId.js rename to api-openbis-javascript/src/v3/as/dto/project/id/IProjectId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/ProjectIdentifier.js b/api-openbis-javascript/src/v3/as/dto/project/id/ProjectIdentifier.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/ProjectIdentifier.js rename to api-openbis-javascript/src/v3/as/dto/project/id/ProjectIdentifier.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/ProjectPermId.js b/api-openbis-javascript/src/v3/as/dto/project/id/ProjectPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/id/ProjectPermId.js rename to api-openbis-javascript/src/v3/as/dto/project/id/ProjectPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/NoProjectSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/project/search/NoProjectSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/NoProjectSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/project/search/NoProjectSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/ProjectSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/project/search/ProjectSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/ProjectSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/project/search/ProjectSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/SearchProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/search/SearchProjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/SearchProjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/project/search/SearchProjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/SearchProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/search/SearchProjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/search/SearchProjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/project/search/SearchProjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/ProjectUpdate.js b/api-openbis-javascript/src/v3/as/dto/project/update/ProjectUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/ProjectUpdate.js rename to api-openbis-javascript/src/v3/as/dto/project/update/ProjectUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/UpdateProjectsOperation.js b/api-openbis-javascript/src/v3/as/dto/project/update/UpdateProjectsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/UpdateProjectsOperation.js rename to api-openbis-javascript/src/v3/as/dto/project/update/UpdateProjectsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/UpdateProjectsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/project/update/UpdateProjectsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/project/update/UpdateProjectsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/project/update/UpdateProjectsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/DataType.js b/api-openbis-javascript/src/v3/as/dto/property/DataType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/DataType.js rename to api-openbis-javascript/src/v3/as/dto/property/DataType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/PropertyAssignment.js b/api-openbis-javascript/src/v3/as/dto/property/PropertyAssignment.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/PropertyAssignment.js rename to api-openbis-javascript/src/v3/as/dto/property/PropertyAssignment.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/PropertyType.js b/api-openbis-javascript/src/v3/as/dto/property/PropertyType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/PropertyType.js rename to api-openbis-javascript/src/v3/as/dto/property/PropertyType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/CreatePropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/create/CreatePropertyTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/CreatePropertyTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/property/create/CreatePropertyTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/CreatePropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/create/CreatePropertyTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/CreatePropertyTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/property/create/CreatePropertyTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/PropertyAssignmentCreation.js b/api-openbis-javascript/src/v3/as/dto/property/create/PropertyAssignmentCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/PropertyAssignmentCreation.js rename to api-openbis-javascript/src/v3/as/dto/property/create/PropertyAssignmentCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/PropertyTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/property/create/PropertyTypeCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/create/PropertyTypeCreation.js rename to api-openbis-javascript/src/v3/as/dto/property/create/PropertyTypeCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/DeletePropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/delete/DeletePropertyTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/DeletePropertyTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/property/delete/DeletePropertyTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/DeletePropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/delete/DeletePropertyTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/DeletePropertyTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/property/delete/DeletePropertyTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/PropertyTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/property/delete/PropertyTypeDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/delete/PropertyTypeDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/property/delete/PropertyTypeDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyAssignmentFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyAssignmentFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyAssignmentFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyAssignmentFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyAssignmentSortOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyAssignmentSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyAssignmentSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyAssignmentSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyTypeFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyTypeFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyTypeFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyTypeSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/fetchoptions/PropertyTypeSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/property/fetchoptions/PropertyTypeSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/get/GetPropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/get/GetPropertyTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/get/GetPropertyTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/property/get/GetPropertyTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/get/GetPropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/get/GetPropertyTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/get/GetPropertyTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/property/get/GetPropertyTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/IPropertyAssignmentId.js b/api-openbis-javascript/src/v3/as/dto/property/id/IPropertyAssignmentId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/IPropertyAssignmentId.js rename to api-openbis-javascript/src/v3/as/dto/property/id/IPropertyAssignmentId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/IPropertyTypeId.js b/api-openbis-javascript/src/v3/as/dto/property/id/IPropertyTypeId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/IPropertyTypeId.js rename to api-openbis-javascript/src/v3/as/dto/property/id/IPropertyTypeId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/PropertyAssignmentPermId.js b/api-openbis-javascript/src/v3/as/dto/property/id/PropertyAssignmentPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/PropertyAssignmentPermId.js rename to api-openbis-javascript/src/v3/as/dto/property/id/PropertyAssignmentPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/PropertyTypePermId.js b/api-openbis-javascript/src/v3/as/dto/property/id/PropertyTypePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/id/PropertyTypePermId.js rename to api-openbis-javascript/src/v3/as/dto/property/id/PropertyTypePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/PropertyAssignmentSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/property/search/PropertyAssignmentSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/PropertyAssignmentSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/property/search/PropertyAssignmentSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/PropertyTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/property/search/PropertyTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/PropertyTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/property/search/PropertyTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyAssignmentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyAssignmentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyAssignmentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyAssignmentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyAssignmentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyAssignmentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/search/SearchPropertyTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/property/search/SearchPropertyTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/PropertyTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/property/update/PropertyTypeUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/PropertyTypeUpdate.js rename to api-openbis-javascript/src/v3/as/dto/property/update/PropertyTypeUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/UpdatePropertyTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/property/update/UpdatePropertyTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/UpdatePropertyTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/property/update/UpdatePropertyTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/UpdatePropertyTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/property/update/UpdatePropertyTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/property/update/UpdatePropertyTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/property/update/UpdatePropertyTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/Query.js b/api-openbis-javascript/src/v3/as/dto/query/Query.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/Query.js rename to api-openbis-javascript/src/v3/as/dto/query/Query.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/QueryDatabase.js b/api-openbis-javascript/src/v3/as/dto/query/QueryDatabase.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/QueryDatabase.js rename to api-openbis-javascript/src/v3/as/dto/query/QueryDatabase.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/QueryType.js b/api-openbis-javascript/src/v3/as/dto/query/QueryType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/QueryType.js rename to api-openbis-javascript/src/v3/as/dto/query/QueryType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/CreateQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/create/CreateQueriesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/CreateQueriesOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/create/CreateQueriesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/CreateQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/create/CreateQueriesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/CreateQueriesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/create/CreateQueriesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/QueryCreation.js b/api-openbis-javascript/src/v3/as/dto/query/create/QueryCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/create/QueryCreation.js rename to api-openbis-javascript/src/v3/as/dto/query/create/QueryCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/DeleteQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/delete/DeleteQueriesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/DeleteQueriesOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/delete/DeleteQueriesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/DeleteQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/delete/DeleteQueriesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/DeleteQueriesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/delete/DeleteQueriesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/QueryDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/query/delete/QueryDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/delete/QueryDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/query/delete/QueryDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteQueryOperation.js b/api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteQueryOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteQueryOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteQueryOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteQueryOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteQueryOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteQueryOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteQueryOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteSqlOperation.js b/api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteSqlOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteSqlOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteSqlOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteSqlOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteSqlOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/ExecuteSqlOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/execute/ExecuteSqlOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/QueryExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/query/execute/QueryExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/QueryExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/query/execute/QueryExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/SqlExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/query/execute/SqlExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/execute/SqlExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/query/execute/SqlExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryDatabaseFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryDatabaseFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryDatabaseFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryDatabaseFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryDatabaseSortOptions.js b/api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryDatabaseSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryDatabaseSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryDatabaseSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QueryFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QueryFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QuerySortOptions.js b/api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QuerySortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/fetchoptions/QuerySortOptions.js rename to api-openbis-javascript/src/v3/as/dto/query/fetchoptions/QuerySortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/get/GetQueriesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueriesOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/get/GetQueriesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/get/GetQueriesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueriesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/get/GetQueriesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueryDatabasesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/get/GetQueryDatabasesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueryDatabasesOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/get/GetQueryDatabasesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueryDatabasesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/get/GetQueryDatabasesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/get/GetQueryDatabasesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/get/GetQueryDatabasesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/IQueryDatabaseId.js b/api-openbis-javascript/src/v3/as/dto/query/id/IQueryDatabaseId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/IQueryDatabaseId.js rename to api-openbis-javascript/src/v3/as/dto/query/id/IQueryDatabaseId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/IQueryId.js b/api-openbis-javascript/src/v3/as/dto/query/id/IQueryId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/IQueryId.js rename to api-openbis-javascript/src/v3/as/dto/query/id/IQueryId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryDatabaseName.js b/api-openbis-javascript/src/v3/as/dto/query/id/QueryDatabaseName.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryDatabaseName.js rename to api-openbis-javascript/src/v3/as/dto/query/id/QueryDatabaseName.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryName.js b/api-openbis-javascript/src/v3/as/dto/query/id/QueryName.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryName.js rename to api-openbis-javascript/src/v3/as/dto/query/id/QueryName.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryTechId.js b/api-openbis-javascript/src/v3/as/dto/query/id/QueryTechId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/id/QueryTechId.js rename to api-openbis-javascript/src/v3/as/dto/query/id/QueryTechId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/DatabaseIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/DatabaseIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/DatabaseIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/query/search/DatabaseIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/EntityTypeCodePatternSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/EntityTypeCodePatternSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/EntityTypeCodePatternSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/query/search/EntityTypeCodePatternSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QueryDatabaseSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/QueryDatabaseSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QueryDatabaseSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/query/search/QueryDatabaseSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QuerySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/QuerySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QuerySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/query/search/QuerySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QueryTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/QueryTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/QueryTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/query/search/QueryTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/search/SearchQueriesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueriesOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/search/SearchQueriesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/search/SearchQueriesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueriesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/search/SearchQueriesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueryDatabasesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/search/SearchQueryDatabasesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueryDatabasesOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/search/SearchQueryDatabasesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueryDatabasesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/search/SearchQueryDatabasesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SearchQueryDatabasesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/search/SearchQueryDatabasesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SqlSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/query/search/SqlSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/search/SqlSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/query/search/SqlSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/QueryUpdate.js b/api-openbis-javascript/src/v3/as/dto/query/update/QueryUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/QueryUpdate.js rename to api-openbis-javascript/src/v3/as/dto/query/update/QueryUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/UpdateQueriesOperation.js b/api-openbis-javascript/src/v3/as/dto/query/update/UpdateQueriesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/UpdateQueriesOperation.js rename to api-openbis-javascript/src/v3/as/dto/query/update/UpdateQueriesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/UpdateQueriesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/query/update/UpdateQueriesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/query/update/UpdateQueriesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/query/update/UpdateQueriesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/Right.js b/api-openbis-javascript/src/v3/as/dto/rights/Right.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/Right.js rename to api-openbis-javascript/src/v3/as/dto/rights/Right.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/Rights.js b/api-openbis-javascript/src/v3/as/dto/rights/Rights.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/Rights.js rename to api-openbis-javascript/src/v3/as/dto/rights/Rights.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/fetchoptions/RightsFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/rights/fetchoptions/RightsFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/fetchoptions/RightsFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/rights/fetchoptions/RightsFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/get/GetRightsOperation.js b/api-openbis-javascript/src/v3/as/dto/rights/get/GetRightsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/get/GetRightsOperation.js rename to api-openbis-javascript/src/v3/as/dto/rights/get/GetRightsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/get/GetRightsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/rights/get/GetRightsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/rights/get/GetRightsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/rights/get/GetRightsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/Role.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/Role.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/Role.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/Role.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/RoleAssignment.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/RoleAssignment.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/RoleAssignment.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/RoleAssignment.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/RoleLevel.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/RoleLevel.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/RoleLevel.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/RoleLevel.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/create/CreateRoleAssignmentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/RoleAssignmentCreation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/create/RoleAssignmentCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/create/RoleAssignmentCreation.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/create/RoleAssignmentCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/delete/DeleteRoleAssignmentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/RoleAssignmentDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/delete/RoleAssignmentDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/delete/RoleAssignmentDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/delete/RoleAssignmentDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentSortOptions.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/fetchoptions/RoleAssignmentSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/get/GetRoleAssignmentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/id/IRoleAssignmentId.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/id/IRoleAssignmentId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/id/IRoleAssignmentId.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/id/IRoleAssignmentId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/id/RoleAssignmentTechId.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/id/RoleAssignmentTechId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/id/RoleAssignmentTechId.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/id/RoleAssignmentTechId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/RoleAssignmentSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/search/RoleAssignmentSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/RoleAssignmentSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/search/RoleAssignmentSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperation.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperation.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/roleassignment/search/SearchRoleAssignmentsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/Sample.js b/api-openbis-javascript/src/v3/as/dto/sample/Sample.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/Sample.js rename to api-openbis-javascript/src/v3/as/dto/sample/Sample.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/SampleType.js b/api-openbis-javascript/src/v3/as/dto/sample/SampleType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/SampleType.js rename to api-openbis-javascript/src/v3/as/dto/sample/SampleType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/CreateSampleTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSampleTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/create/CreateSampleTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/create/CreateSampleTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSampleTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/create/CreateSampleTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/CreateSamplesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSamplesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/create/CreateSamplesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/create/CreateSamplesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/CreateSamplesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/create/CreateSamplesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/SampleCreation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/SampleCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/SampleCreation.js rename to api-openbis-javascript/src/v3/as/dto/sample/create/SampleCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/SampleTypeCreation.js b/api-openbis-javascript/src/v3/as/dto/sample/create/SampleTypeCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/create/SampleTypeCreation.js rename to api-openbis-javascript/src/v3/as/dto/sample/create/SampleTypeCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSampleTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSampleTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSampleTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSampleTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSampleTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSampleTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSamplesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSamplesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSamplesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSamplesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/DeleteSamplesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/delete/DeleteSamplesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/SampleDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/SampleDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/SampleDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/sample/delete/SampleDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/SampleTypeDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/delete/SampleTypeDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/delete/SampleTypeDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/sample/delete/SampleTypeDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleSortOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleTypeFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleTypeFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleTypeFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleTypeFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleTypeSortOptions.js b/api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleTypeSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/fetchoptions/SampleTypeSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/sample/fetchoptions/SampleTypeSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/get/GetSampleTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSampleTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/get/GetSampleTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/get/GetSampleTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSampleTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/get/GetSampleTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/get/GetSamplesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSamplesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/get/GetSamplesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/get/GetSamplesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/get/GetSamplesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/get/GetSamplesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/history/SampleRelationType.js b/api-openbis-javascript/src/v3/as/dto/sample/history/SampleRelationType.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/history/SampleRelationType.js rename to api-openbis-javascript/src/v3/as/dto/sample/history/SampleRelationType.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/ISampleId.js b/api-openbis-javascript/src/v3/as/dto/sample/id/ISampleId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/ISampleId.js rename to api-openbis-javascript/src/v3/as/dto/sample/id/ISampleId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/SampleIdentifier.js b/api-openbis-javascript/src/v3/as/dto/sample/id/SampleIdentifier.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/SampleIdentifier.js rename to api-openbis-javascript/src/v3/as/dto/sample/id/SampleIdentifier.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/SamplePermId.js b/api-openbis-javascript/src/v3/as/dto/sample/id/SamplePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/id/SamplePermId.js rename to api-openbis-javascript/src/v3/as/dto/sample/id/SamplePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/ListableSampleTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/ListableSampleTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/ListableSampleTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/ListableSampleTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/NoSampleContainerSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/NoSampleContainerSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/NoSampleContainerSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/NoSampleContainerSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/NoSampleSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/NoSampleSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/NoSampleSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/NoSampleSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SampleSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/SampleSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleSearchRelation.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SampleSearchRelation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleSearchRelation.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/SampleSearchRelation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleTypeSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SampleTypeSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SampleTypeSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/SampleTypeSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SearchSampleTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSampleTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/SearchSampleTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SearchSampleTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSampleTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/SearchSampleTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SearchSamplesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSamplesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/SearchSamplesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/search/SearchSamplesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/search/SearchSamplesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/search/SearchSamplesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/SampleTypeUpdate.js b/api-openbis-javascript/src/v3/as/dto/sample/update/SampleTypeUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/SampleTypeUpdate.js rename to api-openbis-javascript/src/v3/as/dto/sample/update/SampleTypeUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/SampleUpdate.js b/api-openbis-javascript/src/v3/as/dto/sample/update/SampleUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/SampleUpdate.js rename to api-openbis-javascript/src/v3/as/dto/sample/update/SampleUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSampleTypesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSampleTypesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSampleTypesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSampleTypesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSampleTypesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSampleTypesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSampleTypesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSampleTypesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSamplesOperation.js b/api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSamplesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSamplesOperation.js rename to api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSamplesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSamplesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSamplesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/sample/update/UpdateSamplesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/sample/update/UpdateSamplesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/SemanticAnnotation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/SemanticAnnotation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/SemanticAnnotation.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/SemanticAnnotation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperation.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/create/CreateSemanticAnnotationsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/SemanticAnnotationCreation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/create/SemanticAnnotationCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/create/SemanticAnnotationCreation.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/create/SemanticAnnotationCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperation.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/DeleteSemanticAnnotationsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/SemanticAnnotationDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/SemanticAnnotationDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/delete/SemanticAnnotationDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/delete/SemanticAnnotationDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationSortOptions.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/fetchoptions/SemanticAnnotationSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperation.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/get/GetSemanticAnnotationsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/id/ISemanticAnnotationId.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/id/ISemanticAnnotationId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/id/ISemanticAnnotationId.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/id/ISemanticAnnotationId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/id/SemanticAnnotationPermId.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/id/SemanticAnnotationPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/id/SemanticAnnotationPermId.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/id/SemanticAnnotationPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorAccessionIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorAccessionIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorAccessionIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorAccessionIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorOntologyIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorOntologyIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorOntologyIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorOntologyIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorOntologyVersionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorOntologyVersionSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/DescriptorOntologyVersionSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/DescriptorOntologyVersionSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateAccessionIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateAccessionIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateAccessionIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateAccessionIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateOntologyIdSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateOntologyIdSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateOntologyIdSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateOntologyIdSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateOntologyVersionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateOntologyVersionSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/PredicateOntologyVersionSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/PredicateOntologyVersionSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperation.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SearchSemanticAnnotationsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SemanticAnnotationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SemanticAnnotationSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/search/SemanticAnnotationSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/search/SemanticAnnotationSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/SemanticAnnotationUpdate.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/update/SemanticAnnotationUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/SemanticAnnotationUpdate.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/update/SemanticAnnotationUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperation.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperation.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/semanticannotation/update/UpdateSemanticAnnotationsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/server/ServerInformation.js b/api-openbis-javascript/src/v3/as/dto/server/ServerInformation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/server/ServerInformation.js rename to api-openbis-javascript/src/v3/as/dto/server/ServerInformation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/AggregationService.js b/api-openbis-javascript/src/v3/as/dto/service/AggregationService.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/AggregationService.js rename to api-openbis-javascript/src/v3/as/dto/service/AggregationService.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/CustomASService.js b/api-openbis-javascript/src/v3/as/dto/service/CustomASService.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/CustomASService.js rename to api-openbis-javascript/src/v3/as/dto/service/CustomASService.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/CustomASServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/CustomASServiceExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/CustomASServiceExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/CustomASServiceExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/ProcessingService.js b/api-openbis-javascript/src/v3/as/dto/service/ProcessingService.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/ProcessingService.js rename to api-openbis-javascript/src/v3/as/dto/service/ProcessingService.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/ReportingService.js b/api-openbis-javascript/src/v3/as/dto/service/ReportingService.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/ReportingService.js rename to api-openbis-javascript/src/v3/as/dto/service/ReportingService.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainService.js b/api-openbis-javascript/src/v3/as/dto/service/SearchDomainService.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainService.js rename to api-openbis-javascript/src/v3/as/dto/service/SearchDomainService.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainServiceExecutionResult.js b/api-openbis-javascript/src/v3/as/dto/service/SearchDomainServiceExecutionResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainServiceExecutionResult.js rename to api-openbis-javascript/src/v3/as/dto/service/SearchDomainServiceExecutionResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainServiceSearchOption.js b/api-openbis-javascript/src/v3/as/dto/service/SearchDomainServiceSearchOption.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/SearchDomainServiceSearchOption.js rename to api-openbis-javascript/src/v3/as/dto/service/SearchDomainServiceSearchOption.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/AbstractExecutionOptionsWithParameters.js b/api-openbis-javascript/src/v3/as/dto/service/execute/AbstractExecutionOptionsWithParameters.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/AbstractExecutionOptionsWithParameters.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/AbstractExecutionOptionsWithParameters.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/AggregationServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/execute/AggregationServiceExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/AggregationServiceExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/AggregationServiceExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteAggregationServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteAggregationServiceOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteAggregationServiceOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteAggregationServiceOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteAggregationServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteAggregationServiceOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteAggregationServiceOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteAggregationServiceOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteCustomASServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteCustomASServiceOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteCustomASServiceOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteCustomASServiceOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteCustomASServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteCustomASServiceOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteCustomASServiceOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteCustomASServiceOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteProcessingServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteProcessingServiceOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteProcessingServiceOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteProcessingServiceOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteProcessingServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteProcessingServiceOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteProcessingServiceOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteProcessingServiceOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteReportingServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteReportingServiceOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteReportingServiceOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteReportingServiceOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteReportingServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteReportingServiceOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteReportingServiceOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteReportingServiceOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperation.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ExecuteSearchDomainServiceOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ProcessingServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ProcessingServiceExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ProcessingServiceExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ProcessingServiceExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ReportingServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/execute/ReportingServiceExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/ReportingServiceExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/ReportingServiceExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/SearchDomainServiceExecutionOptions.js b/api-openbis-javascript/src/v3/as/dto/service/execute/SearchDomainServiceExecutionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/execute/SearchDomainServiceExecutionOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/execute/SearchDomainServiceExecutionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/AggregationServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/AggregationServiceFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/AggregationServiceFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/AggregationServiceFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/AggregationServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/AggregationServiceSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/AggregationServiceSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/AggregationServiceSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/CustomASServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/CustomASServiceFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/CustomASServiceFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/CustomASServiceFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/CustomASServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/CustomASServiceSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/CustomASServiceSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/CustomASServiceSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ProcessingServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ProcessingServiceFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ProcessingServiceFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ProcessingServiceFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ProcessingServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ProcessingServiceSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ProcessingServiceSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ProcessingServiceSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ReportingServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ReportingServiceFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ReportingServiceFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ReportingServiceFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ReportingServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ReportingServiceSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/ReportingServiceSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/ReportingServiceSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/SearchDomainServiceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/SearchDomainServiceFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/SearchDomainServiceFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/SearchDomainServiceFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/SearchDomainServiceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/service/fetchoptions/SearchDomainServiceSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/fetchoptions/SearchDomainServiceSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/service/fetchoptions/SearchDomainServiceSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/CustomASServiceCode.js b/api-openbis-javascript/src/v3/as/dto/service/id/CustomASServiceCode.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/CustomASServiceCode.js rename to api-openbis-javascript/src/v3/as/dto/service/id/CustomASServiceCode.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/DssServicePermId.js b/api-openbis-javascript/src/v3/as/dto/service/id/DssServicePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/DssServicePermId.js rename to api-openbis-javascript/src/v3/as/dto/service/id/DssServicePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/ICustomASServiceId.js b/api-openbis-javascript/src/v3/as/dto/service/id/ICustomASServiceId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/ICustomASServiceId.js rename to api-openbis-javascript/src/v3/as/dto/service/id/ICustomASServiceId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/IDssServiceId.js b/api-openbis-javascript/src/v3/as/dto/service/id/IDssServiceId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/id/IDssServiceId.js rename to api-openbis-javascript/src/v3/as/dto/service/id/IDssServiceId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/AggregationServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/AggregationServiceSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/AggregationServiceSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/service/search/AggregationServiceSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/CustomASServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/CustomASServiceSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/CustomASServiceSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/service/search/CustomASServiceSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/ProcessingServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/ProcessingServiceSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/ProcessingServiceSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/service/search/ProcessingServiceSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/ReportingServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/ReportingServiceSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/ReportingServiceSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/service/search/ReportingServiceSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchAggregationServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchAggregationServicesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchAggregationServicesOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchAggregationServicesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchAggregationServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchAggregationServicesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchAggregationServicesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchAggregationServicesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchCustomASServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchCustomASServicesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchCustomASServicesOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchCustomASServicesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchCustomASServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchCustomASServicesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchCustomASServicesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchCustomASServicesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchDomainServiceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchDomainServiceSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchDomainServiceSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchDomainServiceSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchProcessingServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchProcessingServicesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchProcessingServicesOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchProcessingServicesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchProcessingServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchProcessingServicesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchProcessingServicesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchProcessingServicesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchReportingServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchReportingServicesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchReportingServicesOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchReportingServicesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchReportingServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchReportingServicesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchReportingServicesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchReportingServicesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchSearchDomainServicesOperation.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchSearchDomainServicesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchSearchDomainServicesOperation.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchSearchDomainServicesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchSearchDomainServicesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/service/search/SearchSearchDomainServicesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/service/search/SearchSearchDomainServicesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/service/search/SearchSearchDomainServicesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/SessionInformation.js b/api-openbis-javascript/src/v3/as/dto/session/SessionInformation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/SessionInformation.js rename to api-openbis-javascript/src/v3/as/dto/session/SessionInformation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/fetchoptions/SessionInformationFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/session/fetchoptions/SessionInformationFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/fetchoptions/SessionInformationFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/session/fetchoptions/SessionInformationFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/fetchoptions/SessionInformationSortOptions.js b/api-openbis-javascript/src/v3/as/dto/session/fetchoptions/SessionInformationSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/fetchoptions/SessionInformationSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/session/fetchoptions/SessionInformationSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/get/GetSessionInformationOperation.js b/api-openbis-javascript/src/v3/as/dto/session/get/GetSessionInformationOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/get/GetSessionInformationOperation.js rename to api-openbis-javascript/src/v3/as/dto/session/get/GetSessionInformationOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/get/GetSessionInformationOperationResult.js b/api-openbis-javascript/src/v3/as/dto/session/get/GetSessionInformationOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/get/GetSessionInformationOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/session/get/GetSessionInformationOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/id/ISessionInformationId.js b/api-openbis-javascript/src/v3/as/dto/session/id/ISessionInformationId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/id/ISessionInformationId.js rename to api-openbis-javascript/src/v3/as/dto/session/id/ISessionInformationId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/id/SessionInformationPermId.js b/api-openbis-javascript/src/v3/as/dto/session/id/SessionInformationPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/id/SessionInformationPermId.js rename to api-openbis-javascript/src/v3/as/dto/session/id/SessionInformationPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/PersonalAccessTokenSessionNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/session/search/PersonalAccessTokenSessionNameSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/PersonalAccessTokenSessionNameSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/session/search/PersonalAccessTokenSessionNameSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/PersonalAccessTokenSessionSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/session/search/PersonalAccessTokenSessionSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/PersonalAccessTokenSessionSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/session/search/PersonalAccessTokenSessionSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SearchSessionInformationOperation.js b/api-openbis-javascript/src/v3/as/dto/session/search/SearchSessionInformationOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SearchSessionInformationOperation.js rename to api-openbis-javascript/src/v3/as/dto/session/search/SearchSessionInformationOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SearchSessionInformationOperationResult.js b/api-openbis-javascript/src/v3/as/dto/session/search/SearchSessionInformationOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SearchSessionInformationOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/session/search/SearchSessionInformationOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SessionInformationSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/session/search/SessionInformationSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/SessionInformationSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/session/search/SessionInformationSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/UserNameSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/session/search/UserNameSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/session/search/UserNameSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/session/search/UserNameSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/Space.js b/api-openbis-javascript/src/v3/as/dto/space/Space.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/Space.js rename to api-openbis-javascript/src/v3/as/dto/space/Space.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/CreateSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/create/CreateSpacesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/CreateSpacesOperation.js rename to api-openbis-javascript/src/v3/as/dto/space/create/CreateSpacesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/CreateSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/create/CreateSpacesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/CreateSpacesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/space/create/CreateSpacesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/SpaceCreation.js b/api-openbis-javascript/src/v3/as/dto/space/create/SpaceCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/create/SpaceCreation.js rename to api-openbis-javascript/src/v3/as/dto/space/create/SpaceCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/DeleteSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/delete/DeleteSpacesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/DeleteSpacesOperation.js rename to api-openbis-javascript/src/v3/as/dto/space/delete/DeleteSpacesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/DeleteSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/delete/DeleteSpacesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/DeleteSpacesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/space/delete/DeleteSpacesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/SpaceDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/space/delete/SpaceDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/delete/SpaceDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/space/delete/SpaceDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/fetchoptions/SpaceFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/space/fetchoptions/SpaceFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/fetchoptions/SpaceFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/space/fetchoptions/SpaceFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/fetchoptions/SpaceSortOptions.js b/api-openbis-javascript/src/v3/as/dto/space/fetchoptions/SpaceSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/fetchoptions/SpaceSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/space/fetchoptions/SpaceSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/get/GetSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/get/GetSpacesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/get/GetSpacesOperation.js rename to api-openbis-javascript/src/v3/as/dto/space/get/GetSpacesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/get/GetSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/get/GetSpacesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/get/GetSpacesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/space/get/GetSpacesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/ISpaceId.js b/api-openbis-javascript/src/v3/as/dto/space/id/ISpaceId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/ISpaceId.js rename to api-openbis-javascript/src/v3/as/dto/space/id/ISpaceId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/SpacePermId.js b/api-openbis-javascript/src/v3/as/dto/space/id/SpacePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/SpacePermId.js rename to api-openbis-javascript/src/v3/as/dto/space/id/SpacePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/SpaceTechId.js b/api-openbis-javascript/src/v3/as/dto/space/id/SpaceTechId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/id/SpaceTechId.js rename to api-openbis-javascript/src/v3/as/dto/space/id/SpaceTechId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/NoSpaceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/space/search/NoSpaceSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/NoSpaceSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/space/search/NoSpaceSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SearchSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/search/SearchSpacesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SearchSpacesOperation.js rename to api-openbis-javascript/src/v3/as/dto/space/search/SearchSpacesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SearchSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/search/SearchSpacesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SearchSpacesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/space/search/SearchSpacesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SpaceSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/space/search/SpaceSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/search/SpaceSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/space/search/SpaceSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/SpaceUpdate.js b/api-openbis-javascript/src/v3/as/dto/space/update/SpaceUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/SpaceUpdate.js rename to api-openbis-javascript/src/v3/as/dto/space/update/SpaceUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/UpdateSpacesOperation.js b/api-openbis-javascript/src/v3/as/dto/space/update/UpdateSpacesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/UpdateSpacesOperation.js rename to api-openbis-javascript/src/v3/as/dto/space/update/UpdateSpacesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/UpdateSpacesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/space/update/UpdateSpacesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/space/update/UpdateSpacesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/space/update/UpdateSpacesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/Tag.js b/api-openbis-javascript/src/v3/as/dto/tag/Tag.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/Tag.js rename to api-openbis-javascript/src/v3/as/dto/tag/Tag.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/CreateTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/create/CreateTagsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/CreateTagsOperation.js rename to api-openbis-javascript/src/v3/as/dto/tag/create/CreateTagsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/CreateTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/create/CreateTagsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/CreateTagsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/tag/create/CreateTagsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/TagCreation.js b/api-openbis-javascript/src/v3/as/dto/tag/create/TagCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/create/TagCreation.js rename to api-openbis-javascript/src/v3/as/dto/tag/create/TagCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/DeleteTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/delete/DeleteTagsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/DeleteTagsOperation.js rename to api-openbis-javascript/src/v3/as/dto/tag/delete/DeleteTagsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/DeleteTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/delete/DeleteTagsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/DeleteTagsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/tag/delete/DeleteTagsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/TagDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/tag/delete/TagDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/delete/TagDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/tag/delete/TagDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/fetchoptions/TagFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/tag/fetchoptions/TagFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/fetchoptions/TagFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/tag/fetchoptions/TagFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/fetchoptions/TagSortOptions.js b/api-openbis-javascript/src/v3/as/dto/tag/fetchoptions/TagSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/fetchoptions/TagSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/tag/fetchoptions/TagSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/get/GetTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/get/GetTagsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/get/GetTagsOperation.js rename to api-openbis-javascript/src/v3/as/dto/tag/get/GetTagsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/get/GetTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/get/GetTagsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/get/GetTagsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/tag/get/GetTagsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/ITagId.js b/api-openbis-javascript/src/v3/as/dto/tag/id/ITagId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/ITagId.js rename to api-openbis-javascript/src/v3/as/dto/tag/id/ITagId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/TagCode.js b/api-openbis-javascript/src/v3/as/dto/tag/id/TagCode.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/TagCode.js rename to api-openbis-javascript/src/v3/as/dto/tag/id/TagCode.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/TagPermId.js b/api-openbis-javascript/src/v3/as/dto/tag/id/TagPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/id/TagPermId.js rename to api-openbis-javascript/src/v3/as/dto/tag/id/TagPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/SearchTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/search/SearchTagsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/SearchTagsOperation.js rename to api-openbis-javascript/src/v3/as/dto/tag/search/SearchTagsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/SearchTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/search/SearchTagsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/SearchTagsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/tag/search/SearchTagsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/TagSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/tag/search/TagSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/search/TagSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/tag/search/TagSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/TagUpdate.js b/api-openbis-javascript/src/v3/as/dto/tag/update/TagUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/TagUpdate.js rename to api-openbis-javascript/src/v3/as/dto/tag/update/TagUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/UpdateTagsOperation.js b/api-openbis-javascript/src/v3/as/dto/tag/update/UpdateTagsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/UpdateTagsOperation.js rename to api-openbis-javascript/src/v3/as/dto/tag/update/UpdateTagsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/UpdateTagsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/tag/update/UpdateTagsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/tag/update/UpdateTagsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/tag/update/UpdateTagsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/Vocabulary.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/Vocabulary.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/Vocabulary.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/Vocabulary.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/VocabularyTerm.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/VocabularyTerm.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/VocabularyTerm.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/VocabularyTerm.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabulariesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabulariesOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabulariesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabulariesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabulariesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabulariesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/CreateVocabularyTermsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/VocabularyCreation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/VocabularyCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/VocabularyCreation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/VocabularyCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/VocabularyTermCreation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/create/VocabularyTermCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/create/VocabularyTermCreation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/create/VocabularyTermCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabulariesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/DeleteVocabularyTermsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyTermDeletionOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyTermDeletionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyTermDeletionOptions.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyTermDeletionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyTermReplacement.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyTermReplacement.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/delete/VocabularyTermReplacement.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/delete/VocabularyTermReplacement.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularySortOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularySortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularySortOptions.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularySortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyTermFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyTermFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyTermFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyTermFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyTermSortOptions.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyTermSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/fetchoptions/VocabularyTermSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/fetchoptions/VocabularyTermSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabulariesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabulariesOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabulariesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabulariesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabulariesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabulariesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabularyTermsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabularyTermsOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabularyTermsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabularyTermsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/get/GetVocabularyTermsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/get/GetVocabularyTermsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/IVocabularyId.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/id/IVocabularyId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/IVocabularyId.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/id/IVocabularyId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/IVocabularyTermId.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/id/IVocabularyTermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/IVocabularyTermId.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/id/IVocabularyTermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/VocabularyPermId.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/id/VocabularyPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/VocabularyPermId.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/id/VocabularyPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/VocabularyTermPermId.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/id/VocabularyTermPermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/id/VocabularyTermPermId.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/id/VocabularyTermPermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabulariesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabulariesOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabulariesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabulariesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabulariesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabulariesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/SearchVocabularyTermsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/VocabularySearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/VocabularySearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/VocabularySearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/VocabularySearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/VocabularyTermSearchCriteria.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/search/VocabularyTermSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/search/VocabularyTermSearchCriteria.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/search/VocabularyTermSearchCriteria.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabulariesOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabulariesOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabulariesOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabulariesOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabulariesOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabulariesOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabulariesOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabulariesOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperation.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperation.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperationResult.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperationResult.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperationResult.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/UpdateVocabularyTermsOperationResult.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/VocabularyTermUpdate.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/VocabularyTermUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/VocabularyTermUpdate.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/VocabularyTermUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/VocabularyUpdate.js b/api-openbis-javascript/src/v3/as/dto/vocabulary/update/VocabularyUpdate.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/vocabulary/update/VocabularyUpdate.js rename to api-openbis-javascript/src/v3/as/dto/vocabulary/update/VocabularyUpdate.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/WebAppSetting.js b/api-openbis-javascript/src/v3/as/dto/webapp/WebAppSetting.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/WebAppSetting.js rename to api-openbis-javascript/src/v3/as/dto/webapp/WebAppSetting.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/WebAppSettings.js b/api-openbis-javascript/src/v3/as/dto/webapp/WebAppSettings.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/WebAppSettings.js rename to api-openbis-javascript/src/v3/as/dto/webapp/WebAppSettings.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/create/WebAppSettingCreation.js b/api-openbis-javascript/src/v3/as/dto/webapp/create/WebAppSettingCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/create/WebAppSettingCreation.js rename to api-openbis-javascript/src/v3/as/dto/webapp/create/WebAppSettingCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/fetchoptions/WebAppSettingsFetchOptions.js b/api-openbis-javascript/src/v3/as/dto/webapp/fetchoptions/WebAppSettingsFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/fetchoptions/WebAppSettingsFetchOptions.js rename to api-openbis-javascript/src/v3/as/dto/webapp/fetchoptions/WebAppSettingsFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/fetchoptions/WebAppSettingsSortOptions.js b/api-openbis-javascript/src/v3/as/dto/webapp/fetchoptions/WebAppSettingsSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/fetchoptions/WebAppSettingsSortOptions.js rename to api-openbis-javascript/src/v3/as/dto/webapp/fetchoptions/WebAppSettingsSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/update/WebAppSettingsUpdateValue.js b/api-openbis-javascript/src/v3/as/dto/webapp/update/WebAppSettingsUpdateValue.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/as/dto/webapp/update/WebAppSettingsUpdateValue.js rename to api-openbis-javascript/src/v3/as/dto/webapp/update/WebAppSettingsUpdateValue.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/config.js b/api-openbis-javascript/src/v3/config.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/config.js rename to api-openbis-javascript/src/v3/config.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/dataset/create/FullDataSetCreation.js b/api-openbis-javascript/src/v3/dss/dto/dataset/create/FullDataSetCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/dataset/create/FullDataSetCreation.js rename to api-openbis-javascript/src/v3/dss/dto/dataset/create/FullDataSetCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/dataset/create/UploadedDataSetCreation.js b/api-openbis-javascript/src/v3/dss/dto/dataset/create/UploadedDataSetCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/dataset/create/UploadedDataSetCreation.js rename to api-openbis-javascript/src/v3/dss/dto/dataset/create/UploadedDataSetCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/DataSetFile.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/DataSetFile.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/DataSetFile.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/DataSetFile.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/create/DataSetFileCreation.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/create/DataSetFileCreation.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/create/DataSetFileCreation.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/create/DataSetFileCreation.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fastdownload/FastDownloadSession.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/fastdownload/FastDownloadSession.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fastdownload/FastDownloadSession.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/fastdownload/FastDownloadSession.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fastdownload/FastDownloadSessionOptions.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/fastdownload/FastDownloadSessionOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fastdownload/FastDownloadSessionOptions.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/fastdownload/FastDownloadSessionOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fetchoptions/DataSetFileFetchOptions.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/fetchoptions/DataSetFileFetchOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fetchoptions/DataSetFileFetchOptions.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/fetchoptions/DataSetFileFetchOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fetchoptions/DataSetFileSortOptions.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/fetchoptions/DataSetFileSortOptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/fetchoptions/DataSetFileSortOptions.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/fetchoptions/DataSetFileSortOptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/id/DataSetFilePermId.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/id/DataSetFilePermId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/id/DataSetFilePermId.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/id/DataSetFilePermId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/id/IDataSetFileId.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/id/IDataSetFileId.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/id/IDataSetFileId.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/id/IDataSetFileId.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/search/DataSetFileSearchCriteria.js b/api-openbis-javascript/src/v3/dss/dto/datasetfile/search/DataSetFileSearchCriteria.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/dss/dto/datasetfile/search/DataSetFileSearchCriteria.js rename to api-openbis-javascript/src/v3/dss/dto/datasetfile/search/DataSetFileSearchCriteria.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js b/api-openbis-javascript/src/v3/lib/jquery/js/jquery.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js rename to api-openbis-javascript/src/v3/lib/jquery/js/jquery.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/moment/js/moment.js b/api-openbis-javascript/src/v3/lib/moment/js/moment.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/moment/js/moment.js rename to api-openbis-javascript/src/v3/lib/moment/js/moment.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/stjs/js/stjs.js b/api-openbis-javascript/src/v3/lib/stjs/js/stjs.js similarity index 96% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/stjs/js/stjs.js rename to api-openbis-javascript/src/v3/lib/stjs/js/stjs.js index 3946d4343ba41b58f8624d84a7bebfacb22572e7..3b97e7c1084ed87912010c661ae3fa9d274601c9 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/stjs/js/stjs.js +++ b/api-openbis-javascript/src/v3/lib/stjs/js/stjs.js @@ -1,768 +1,768 @@ -/* - * Copyright 2011 Alexandru Craciun, Eyal Kaspi - * - * 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. - */ -/**** Functionality in Java, but not in JS ******** - * methods added to JS prototypes - */ - -var NOT_IMPLEMENTED = function(){ - throw "This method is not implemented in Javascript."; -} - -JavalikeEquals = function(value){ - if (value == null) - return false; - if (value.valueOf) - return this.valueOf() === value.valueOf(); - return this === value; -} - -/* String */ -if (!String.prototype.equals) { - String.prototype.equals=JavalikeEquals; -} -if (!String.prototype.getBytes) { - String.prototype.getBytes=NOT_IMPLEMENTED; -} -if (!String.prototype.getChars) { - String.prototype.getChars=NOT_IMPLEMENTED; -} -if (!String.prototype.contentEquals){ - String.prototype.contentEquals=NOT_IMPLEMENTED; -} -if (!String.prototype.startsWith) { - String.prototype.startsWith=function(start, from){ - var f = from != null ? from : 0; - return this.substring(f, f + start.length) == start; - } -} -if (!String.prototype.endsWith) { - String.prototype.endsWith=function(end){ - if (end == null) - return false; - if (this.length < end.length) - return false; - return this.substring(this.length - end.length, this.length) == end; - } -} -if (!String.prototype.trim) { - var trimLeft = /^\s+/; - var trimRight = /\s+$/; - String.prototype.trim = function( ) { - return this.replace( trimLeft, "" ).replace( trimRight, "" ); - } -} -if (!String.prototype.matches){ - String.prototype.matches=function(regexp){ - return this.match("^" + regexp + "$") != null; - } -} -if (!String.prototype.compareTo){ - String.prototype.compareTo=function(other){ - if (other == null) - return 1; - if (this < other) - return -1; - if (this == other) - return 0; - return 1; - } -} - -if (!String.prototype.compareToIgnoreCase){ - String.prototype.compareToIgnoreCase=function(other){ - if (other == null) - return 1; - return this.toLowerCase().compareTo(other.toLowerCase()); - } -} - -if (!String.prototype.equalsIgnoreCase){ - String.prototype.equalsIgnoreCase=function(other){ - if (other == null) - return false; - return this.toLowerCase() === other.toLowerCase(); - } -} - -if (!String.prototype.codePointAt){ - String.prototype.codePointAt=String.prototype.charCodeAt; -} - -if (!String.prototype.codePointBefore){ - String.prototype.codePointBefore=NOT_IMPLEMENTED; -} -if (!String.prototype.codePointCount){ - String.prototype.codePointCount=NOT_IMPLEMENTED; -} - -if (!String.prototype.replaceAll){ - String.prototype.replaceAll=function(regexp, replace){ - return this.replace(new RegExp(regexp, "g"), replace); - } -} - -if (!String.prototype.replaceFirst){ - String.prototype.replaceFirst=function(regexp, replace){ - return this.replace(new RegExp(regexp), replace); - } -} - -if (!String.prototype.regionMatches){ - String.prototype.regionMatches=function(ignoreCase, toffset, other, ooffset, len){ - if (arguments.length == 4){ - len=arguments[3]; - ooffset=arguments[2]; - other=arguments[1]; - toffset=arguments[0]; - ignoreCase=false; - } - if (toffset < 0 || ooffset < 0 || other == null || toffset + len > this.length || ooffset + len > other.length) - return false; - var s1 = this.substring(toffset, toffset + len); - var s2 = other.substring(ooffset, ooffset + len); - return ignoreCase ? s1.equalsIgnoreCase(s2) : s1 === s2; - } -} - - - -//force valueof to match the Java's behavior -String.valueOf=function(value){ - return new String(value); -} - -/* Number */ -var Byte=Number; -var Double=Number; -var Float=Number; -var Integer=Number; -var Long=Number; -var Short=Number; - -/* type conversion - approximative as Javascript only has integers and doubles */ -if (!Number.prototype.intValue) { - Number.prototype.intValue=function(){ - return parseInt(this); - } -} -if (!Number.prototype.shortValue) { - Number.prototype.shortValue=function(){ - return parseInt(this); - } -} -if (!Number.prototype.longValue) { - Number.prototype.longValue=function(){ - return parseInt(this); - } -} -if (!Number.prototype.byteValue) { - Number.prototype.byteValue=function(){ - return parseInt(this); - } -} - -if (!Number.prototype.floatValue) { - Number.prototype.floatValue=function(){ - return parseFloat(this); - } -} - -if (!Number.prototype.doubleValue) { - Number.prototype.doubleValue=function(){ - return parseFloat(this); - } -} - -if (!Number.parseInt) { - Number.parseInt = parseInt; -} -if (!Number.parseShort) { - Number.parseShort = parseInt; -} -if (!Number.parseLong) { - Number.parseLong = parseInt; -} -if (!Number.parseByte) { - Number.parseByte = parseInt; -} - -if (!Number.parseDouble) { - Number.parseDouble = parseFloat; -} - -if (!Number.parseFloat) { - Number.parseFloat = parseFloat; -} - -if (!Number.isNaN) { - Number.isNaN = isNaN; -} - -if (!Number.prototype.isNaN) { - Number.prototype.isNaN = isNaN; -} -if (!Number.prototype.equals) { - Number.prototype.equals=JavalikeEquals; -} - -//force valueof to match approximately the Java's behavior (for Integer.valueOf it returns in fact a double) -Number.valueOf=function(value){ - return new Number(value).valueOf(); -} - -/* Boolean */ -if (!Boolean.prototype.equals) { - Boolean.prototype.equals=JavalikeEquals; -} - -//force valueof to match the Java's behavior -Boolean.valueOf=function(value){ - return new Boolean(value).valueOf(); -} - - - -/************* STJS helper functions ***************/ -var stjs={}; - -stjs.global=this; -stjs.skipCopy = {"prototype":true, "constructor": true, "$typeDescription":true, "$inherit" : true}; - -stjs.ns=function(path){ - var p = path.split("."); - var obj = stjs.global; - for(var i = 0; i < p.length; ++i){ - var part = p[i]; - obj = obj[part] = obj[part] || {}; - } - return obj; -}; - -stjs.copyProps=function(from, to){ - for(key in from){ - if (!stjs.skipCopy[key]) - to[key] = from[key]; - } - return to; -}; - -stjs.copyInexistentProps=function(from, to){ - for(key in from){ - if (!stjs.skipCopy[key] && !to[key]) - to[key] = from[key]; - } - return to; -}; - -stjs.extend=function(_constructor, _super, _implements, _initializer, _typeDescription){ - if(typeof(_typeDescription) !== "object"){ - // stjs 1.3+ always passes an non-null object to _typeDescription => The code calling stjs.extend - // was generated with version 1.2 or earlier, so let's call the 1.2 version of stjs.extend - return stjs.extend12.apply(this, arguments); - } - - _constructor.$inherit=[]; - var key, a; - if(_super != null){ - // I is used as a no-op constructor that has the same prototype as _super - // we do this because we cannot predict the result of calling new _super() - // without parameters (it might throw an exception). - // Basically, the following 3 lines are a safe equivalent for - // _constructor.prototype = new _super(); - var I = function(){}; - I.prototype = _super.prototype; - _constructor.prototype = new I(); - - // copy static properties for super - // assign every method from proto instance - stjs.copyProps(_super, _constructor); - stjs.copyProps(_super.$typeDescription, _typeDescription); - - //add the super class to inherit array - _constructor.$inherit.push(_super); - } - - // copy static properties and default methods from interfaces - for(a = 0; a < _implements.length; ++a){ - stjs.copyProps(_implements[a], _constructor); - stjs.copyInexistentProps(_implements[a].prototype, _constructor.prototype); - _constructor.$inherit.push(_implements[a]); - } - - // remember the correct constructor - _constructor.prototype.constructor = _constructor; - - // run the initializer to assign all static and instance variables/functions - if(_initializer != null){ - _initializer(_constructor, _constructor.prototype); - } - - _constructor.$typeDescription = _typeDescription; - - // add the default equals method if it is not present yet, and we don't have a superclass - if(_super == null && !_constructor.prototype.equals){ - _constructor.prototype.equals = JavalikeEquals; - } - - _constructor.prototype.toJSON = function() { - function flatten(x) { - if (_.isArray(x)) { - return _.map(x, function(el) { return flatten(el) }); - } else if (_.isObject(x)) { - var result = Object.create(null); - - for(var i in x) { - if (!_.isFunction(x[i])) { - result[i] = flatten(x[i]); - } - } - return result; - } - - return x; - } - - var r = flatten(this); - var res = JSON.stringify(r); - return r; - } - - // build package and assign - return _constructor; -}; - -/** - * 1.2 and earlier version of stjs.extend. Included for backwards compatibility - */ -stjs.extend12=function( _constructor, _super, _implements){ - var key, a; - var I = function(){}; - I.prototype = _super.prototype; - _constructor.prototype = new I(); - - //copy static properties for super and interfaces - // assign every method from proto instance - for(a = 1; a < arguments.length; ++a){ - stjs.copyProps(arguments[a], _constructor); - } - // remember the correct constructor - _constructor.prototype.constructor = _constructor; - - // add the default equals method if we don't have a superclass. Code generated with version 1.2 will - // override this method is equals() is present in the original java code. - // this was not part of the original 1.2 version of extends, however forward compatibility - // with 1.3 requires it - if(_super == null){ - _constructor.prototype.equals = JavalikeEquals; - } - - // build package and assign - return _constructor; -}; - -/** - * checks if the child is an instanceof parent. it checks recursively if "parent" is the child itself or it's found somewhere in the $inherit array - */ -stjs.isInstanceOf=function(child, parent){ - if (child === parent) - return true; - if (!child.$inherit) - return false; - for(var i in child.$inherit){ - if (stjs.isInstanceOf(child.$inherit[i], parent)) { - return true; - } - } - return false; -} -stjs.enumEntry=function(idx, name){ - this._name = name; - this._ordinal = idx; -}; - -stjs.enumEntry.prototype.name=function(){ - return this._name; -}; -stjs.enumEntry.prototype.ordinal=function(){ - return this._ordinal; -}; -stjs.enumEntry.prototype.toString=function(){ - return this._name; -}; -stjs.enumEntry.prototype.equals=JavalikeEquals; - -stjs.enumeration=function(){ - var i; - var e = {}; - e._values = []; - for(i = 0; i < arguments.length; ++i){ - e[arguments[i]] = new stjs.enumEntry(i, arguments[i]); - e._values[i] = e[arguments[i]]; - } - e.values = function(){return this._values;}; - e.valueOf=function(label){ - return this[label]; - } - return e; -}; - - -/** - * if true the execution of generated main methods is disabled. - * this is useful when executing unit tests, to no have the main methods executing before the tests - */ -stjs.mainCallDisabled = false; - -stjs.exception=function(err){ - return err; -} - -stjs.isEnum=function(obj){ - return obj != null && obj.constructor == stjs.enumEntry; -} - -stjs.trunc=function(n) { - if (n == null) - return null; - return n | 0; -} - -stjs.converters = { - Date : function(s, type) { - var a = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)$/ - .exec(s); - if (a) { - return new Date(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]); - } - return null; - }, - - Enum : function(s, type){ - return eval(type.arguments[0])[s]; - } -}; - -/** *********** global ************** */ -function exception(err){ - return err; -} - -function isEnum(obj){ - return obj != null && obj.constructor == stjs.enumEntry; -} - -/******* parsing *************/ - -/** - * parse a json string using the type definition to build a typed object hierarchy - */ -stjs.parseJSON = (function () { - var number - = '(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)'; - var oneChar = '(?:[^\\0-\\x08\\x0a-\\x1f\"\\\\]' - + '|\\\\(?:[\"/\\\\bfnrt]|u[0-9A-Fa-f]{4}))'; - var string = '(?:\"' + oneChar + '*\")'; - - // Will match a value in a well-formed JSON file. - // If the input is not well-formed, may match strangely, but not in an unsafe - // way. - // Since this only matches value tokens, it does not match whitespace, colons, - // or commas. - var jsonToken = new RegExp( - '(?:false|true|null|[\\{\\}\\[\\]]' - + '|' + number - + '|' + string - + ')', 'g'); - - // Matches escape sequences in a string literal - var escapeSequence = new RegExp('\\\\(?:([^u])|u(.{4}))', 'g'); - - // Decodes escape sequences in object literals - var escapes = { - '"': '"', - '/': '/', - '\\': '\\', - 'b': '\b', - 'f': '\f', - 'n': '\n', - 'r': '\r', - 't': '\t' - }; - function unescapeOne(_, ch, hex) { - return ch ? escapes[ch] : String.fromCharCode(parseInt(hex, 16)); - } - - var constructors = {}; - - function constr(name, param){ - var c = constructors[name]; - if (!c) - constructors[name] = c = eval(name); - return new c(param); - } - - function convert(type, json){ - if (!type) - return json; - var cv = stjs.converters[type.name || type]; - if (cv) - return cv(json, type); - //hopefully the type has a string constructor - return constr(type, json); - } - - function builder(type){ - if (!type) - return {}; - if (typeof type == "function") - return new type(); - if (type.name) { - if (type.name == "Map") - return {}; - if (type.name == "Array") - return []; - return constr(type.name); - } - return constr(type); - } - - // A non-falsy value that coerces to the empty string when used as a key. - var EMPTY_STRING = new String(''); - var SLASH = '\\'; - - // Constructor to use based on an open token. - var firstTokenCtors = { '{': Object, '[': Array }; - - var hop = Object.hasOwnProperty; - - function nextMatch(str){ - var m = jsonToken.exec(str); - return m != null ? m[0] : null; - } - return function (json, type) { - // Split into tokens - // Construct the object to return - var result; - var tok = nextMatch(json); - var topLevelPrimitive = false; - if ('{' === tok) { - result = builder(type, null); - } else if ('[' === tok) { - result = []; - } else { - // The RFC only allows arrays or objects at the top level, but the JSON.parse - // defined by the EcmaScript 5 draft does allow strings, booleans, numbers, and null - // at the top level. - result = []; - topLevelPrimitive = true; - } - - // If undefined, the key in an object key/value record to use for the next - // value parsed. - var key; - // Loop over remaining tokens maintaining a stack of uncompleted objects and - // arrays. - var stack = [result]; - var stack2 = [type]; - for (tok = nextMatch(json); tok != null; tok = nextMatch(json)) { - - var cont; - switch (tok.charCodeAt(0)) { - default: // sign or digit - cont = stack[0]; - cont[key || cont.length] = +(tok); - key = void 0; - break; - case 0x22: // '"' - tok = tok.substring(1, tok.length - 1); - if (tok.indexOf(SLASH) !== -1) { - tok = tok.replace(escapeSequence, unescapeOne); - } - cont = stack[0]; - if (!key) { - if (cont instanceof Array) { - key = cont.length; - } else { - key = tok || EMPTY_STRING; // Use as key for next value seen. - stack2[0] = cont.constructor.$typeDescription ? cont.constructor.$typeDescription[key] : stack2[1].arguments[1]; - break; - } - } - cont[key] = convert(stack2[0],tok); - key = void 0; - break; - case 0x5b: // '[' - cont = stack[0]; - stack.unshift(cont[key || cont.length] = []); - stack2.unshift(stack2[0].arguments[0]); - //put the element type desc - key = void 0; - break; - case 0x5d: // ']' - stack.shift(); - stack2.shift(); - break; - case 0x66: // 'f' - cont = stack[0]; - cont[key || cont.length] = false; - key = void 0; - break; - case 0x6e: // 'n' - cont = stack[0]; - cont[key || cont.length] = null; - key = void 0; - break; - case 0x74: // 't' - cont = stack[0]; - cont[key || cont.length] = true; - key = void 0; - break; - case 0x7b: // '{' - cont = stack[0]; - stack.unshift(cont[key || cont.length] = builder(stack2[0])); - stack2.unshift(null); - key = void 0; - break; - case 0x7d: // '}' - stack.shift(); - stack2.shift(); - break; - } - } - // Fail if we've got an uncompleted object. - if (topLevelPrimitive) { - if (stack.length !== 1) { throw new Error(); } - result = result[0]; - } else { - if (stack.length) { throw new Error(); } - } - - return result; - }; -})(); - -/************* STJS asserts ***************/ -var stjsAssertHandler = function(position, code, msg) { - throw msg + " at " + position; -} -function setAssertHandler(a) { - stjsAssertHandler = a; -} - -function assertArgEquals(position, code, expectedValue, testValue) { - if (expectedValue != testValue && stjsAssertHandler) - stjsAssertHandler(position, code, "Wrong argument. Expected: " + expectedValue + ", got:" + testValue); -} - -function assertArgNotNull(position, code, testValue) { - if (testValue == null && stjsAssertHandler) - stjsAssertHandler(position, code, "Wrong argument. Null value"); -} - -function assertArgTrue(position, code, condition) { - if (!condition && stjsAssertHandler) - stjsAssertHandler(position, code, "Wrong argument. Condition is false"); -} - -function assertStateEquals(position, code, expectedValue, testValue) { - if (expectedValue != testValue && stjsAssertHandler) - stjsAssertHandler(position, code, "Wrong state. Expected: " + expectedValue + ", got:" + testValue); -} - -function assertStateNotNull(position, code, testValue) { - if (testValue == null && stjsAssertHandler) - stjsAssertHandler(position, code, "Wrong state. Null value"); -} - -function assertStateTrue(position, code, condition) { - if (!condition && stjsAssertHandler) - stjsAssertHandler(position, code, "Wrong state. Condition is false"); -} -/** exception **/ -var Throwable = function(message, cause){ - if (typeof message === "string"){ - this.detailMessage = message; - this.message = message; - this.cause = cause; - } else { - this.cause = message; - } -}; -stjs.extend(Throwable, Error, [], function(constructor, prototype){ - prototype.detailMessage = null; - prototype.cause = null; - prototype.getMessage = function() { - return this.detailMessage; - }; - - prototype.getLocalizedMessage = function() { - return this.getMessage(); - }; - - prototype.getCause = function() { - return (this.cause==this ? null : this.cause); - }; - - prototype.toString = function() { - var s = "Exception";//TODO should get the exception's type name here - var message = this.getLocalizedMessage(); - return (message != null) ? (s + ": " + message) : s; - }; - - //TODO use stacktrace.js script - prototype.getStackTrace = function() { - return this.stack; - }; - - //TODO use stacktrace.js script - prototype.printStackTrace = function(){ - console.error(this.getStackTrace()); - }; -}, {}); - -var Exception = function(message, cause){ - Throwable.call(this, message, cause); -}; -stjs.extend(Exception, Throwable, [], function(constructor, prototype){ -}, {}); - -var RuntimeException = function(message, cause){ - Exception.call(this, message, cause); -}; -stjs.extend(RuntimeException, Exception, [], function(constructor, prototype){ -}, {}); - -/** stjs field manipulation */ -stjs.setField=function(obj, field, value, returnOldValue){ - if (stjs.setFieldHandler) - return stjs.setFieldHandler(obj, field, value, returnOldValue); - var toReturn = returnOldValue ? obj[field] : value; - obj[field] = value; - return toReturn; -} - -stjs.getField=function(obj, field){ - if (stjs.getFieldHandler) - return stjs.getFieldHandler(obj, field); - return obj[field]; -} - -if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = stjs - } - exports.stjs = stjs +/* + * Copyright 2011 Alexandru Craciun, Eyal Kaspi + * + * 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. + */ +/**** Functionality in Java, but not in JS ******** + * methods added to JS prototypes + */ + +var NOT_IMPLEMENTED = function(){ + throw "This method is not implemented in Javascript."; +} + +JavalikeEquals = function(value){ + if (value == null) + return false; + if (value.valueOf) + return this.valueOf() === value.valueOf(); + return this === value; +} + +/* String */ +if (!String.prototype.equals) { + String.prototype.equals=JavalikeEquals; +} +if (!String.prototype.getBytes) { + String.prototype.getBytes=NOT_IMPLEMENTED; +} +if (!String.prototype.getChars) { + String.prototype.getChars=NOT_IMPLEMENTED; +} +if (!String.prototype.contentEquals){ + String.prototype.contentEquals=NOT_IMPLEMENTED; +} +if (!String.prototype.startsWith) { + String.prototype.startsWith=function(start, from){ + var f = from != null ? from : 0; + return this.substring(f, f + start.length) == start; + } +} +if (!String.prototype.endsWith) { + String.prototype.endsWith=function(end){ + if (end == null) + return false; + if (this.length < end.length) + return false; + return this.substring(this.length - end.length, this.length) == end; + } +} +if (!String.prototype.trim) { + var trimLeft = /^\s+/; + var trimRight = /\s+$/; + String.prototype.trim = function( ) { + return this.replace( trimLeft, "" ).replace( trimRight, "" ); + } +} +if (!String.prototype.matches){ + String.prototype.matches=function(regexp){ + return this.match("^" + regexp + "$") != null; + } +} +if (!String.prototype.compareTo){ + String.prototype.compareTo=function(other){ + if (other == null) + return 1; + if (this < other) + return -1; + if (this == other) + return 0; + return 1; + } +} + +if (!String.prototype.compareToIgnoreCase){ + String.prototype.compareToIgnoreCase=function(other){ + if (other == null) + return 1; + return this.toLowerCase().compareTo(other.toLowerCase()); + } +} + +if (!String.prototype.equalsIgnoreCase){ + String.prototype.equalsIgnoreCase=function(other){ + if (other == null) + return false; + return this.toLowerCase() === other.toLowerCase(); + } +} + +if (!String.prototype.codePointAt){ + String.prototype.codePointAt=String.prototype.charCodeAt; +} + +if (!String.prototype.codePointBefore){ + String.prototype.codePointBefore=NOT_IMPLEMENTED; +} +if (!String.prototype.codePointCount){ + String.prototype.codePointCount=NOT_IMPLEMENTED; +} + +if (!String.prototype.replaceAll){ + String.prototype.replaceAll=function(regexp, replace){ + return this.replace(new RegExp(regexp, "g"), replace); + } +} + +if (!String.prototype.replaceFirst){ + String.prototype.replaceFirst=function(regexp, replace){ + return this.replace(new RegExp(regexp), replace); + } +} + +if (!String.prototype.regionMatches){ + String.prototype.regionMatches=function(ignoreCase, toffset, other, ooffset, len){ + if (arguments.length == 4){ + len=arguments[3]; + ooffset=arguments[2]; + other=arguments[1]; + toffset=arguments[0]; + ignoreCase=false; + } + if (toffset < 0 || ooffset < 0 || other == null || toffset + len > this.length || ooffset + len > other.length) + return false; + var s1 = this.substring(toffset, toffset + len); + var s2 = other.substring(ooffset, ooffset + len); + return ignoreCase ? s1.equalsIgnoreCase(s2) : s1 === s2; + } +} + + + +//force valueof to match the Java's behavior +String.valueOf=function(value){ + return new String(value); +} + +/* Number */ +var Byte=Number; +var Double=Number; +var Float=Number; +var Integer=Number; +var Long=Number; +var Short=Number; + +/* type conversion - approximative as Javascript only has integers and doubles */ +if (!Number.prototype.intValue) { + Number.prototype.intValue=function(){ + return parseInt(this); + } +} +if (!Number.prototype.shortValue) { + Number.prototype.shortValue=function(){ + return parseInt(this); + } +} +if (!Number.prototype.longValue) { + Number.prototype.longValue=function(){ + return parseInt(this); + } +} +if (!Number.prototype.byteValue) { + Number.prototype.byteValue=function(){ + return parseInt(this); + } +} + +if (!Number.prototype.floatValue) { + Number.prototype.floatValue=function(){ + return parseFloat(this); + } +} + +if (!Number.prototype.doubleValue) { + Number.prototype.doubleValue=function(){ + return parseFloat(this); + } +} + +if (!Number.parseInt) { + Number.parseInt = parseInt; +} +if (!Number.parseShort) { + Number.parseShort = parseInt; +} +if (!Number.parseLong) { + Number.parseLong = parseInt; +} +if (!Number.parseByte) { + Number.parseByte = parseInt; +} + +if (!Number.parseDouble) { + Number.parseDouble = parseFloat; +} + +if (!Number.parseFloat) { + Number.parseFloat = parseFloat; +} + +if (!Number.isNaN) { + Number.isNaN = isNaN; +} + +if (!Number.prototype.isNaN) { + Number.prototype.isNaN = isNaN; +} +if (!Number.prototype.equals) { + Number.prototype.equals=JavalikeEquals; +} + +//force valueof to match approximately the Java's behavior (for Integer.valueOf it returns in fact a double) +Number.valueOf=function(value){ + return new Number(value).valueOf(); +} + +/* Boolean */ +if (!Boolean.prototype.equals) { + Boolean.prototype.equals=JavalikeEquals; +} + +//force valueof to match the Java's behavior +Boolean.valueOf=function(value){ + return new Boolean(value).valueOf(); +} + + + +/************* STJS helper functions ***************/ +var stjs={}; + +stjs.global=this; +stjs.skipCopy = {"prototype":true, "constructor": true, "$typeDescription":true, "$inherit" : true}; + +stjs.ns=function(path){ + var p = path.split("."); + var obj = stjs.global; + for(var i = 0; i < p.length; ++i){ + var part = p[i]; + obj = obj[part] = obj[part] || {}; + } + return obj; +}; + +stjs.copyProps=function(from, to){ + for(key in from){ + if (!stjs.skipCopy[key]) + to[key] = from[key]; + } + return to; +}; + +stjs.copyInexistentProps=function(from, to){ + for(key in from){ + if (!stjs.skipCopy[key] && !to[key]) + to[key] = from[key]; + } + return to; +}; + +stjs.extend=function(_constructor, _super, _implements, _initializer, _typeDescription){ + if(typeof(_typeDescription) !== "object"){ + // stjs 1.3+ always passes an non-null object to _typeDescription => The code calling stjs.extend + // was generated with version 1.2 or earlier, so let's call the 1.2 version of stjs.extend + return stjs.extend12.apply(this, arguments); + } + + _constructor.$inherit=[]; + var key, a; + if(_super != null){ + // I is used as a no-op constructor that has the same prototype as _super + // we do this because we cannot predict the result of calling new _super() + // without parameters (it might throw an exception). + // Basically, the following 3 lines are a safe equivalent for + // _constructor.prototype = new _super(); + var I = function(){}; + I.prototype = _super.prototype; + _constructor.prototype = new I(); + + // copy static properties for super + // assign every method from proto instance + stjs.copyProps(_super, _constructor); + stjs.copyProps(_super.$typeDescription, _typeDescription); + + //add the super class to inherit array + _constructor.$inherit.push(_super); + } + + // copy static properties and default methods from interfaces + for(a = 0; a < _implements.length; ++a){ + stjs.copyProps(_implements[a], _constructor); + stjs.copyInexistentProps(_implements[a].prototype, _constructor.prototype); + _constructor.$inherit.push(_implements[a]); + } + + // remember the correct constructor + _constructor.prototype.constructor = _constructor; + + // run the initializer to assign all static and instance variables/functions + if(_initializer != null){ + _initializer(_constructor, _constructor.prototype); + } + + _constructor.$typeDescription = _typeDescription; + + // add the default equals method if it is not present yet, and we don't have a superclass + if(_super == null && !_constructor.prototype.equals){ + _constructor.prototype.equals = JavalikeEquals; + } + + _constructor.prototype.toJSON = function() { + function flatten(x) { + if (_.isArray(x)) { + return _.map(x, function(el) { return flatten(el) }); + } else if (_.isObject(x)) { + var result = Object.create(null); + + for(var i in x) { + if (!_.isFunction(x[i])) { + result[i] = flatten(x[i]); + } + } + return result; + } + + return x; + } + + var r = flatten(this); + var res = JSON.stringify(r); + return r; + } + + // build package and assign + return _constructor; +}; + +/** + * 1.2 and earlier version of stjs.extend. Included for backwards compatibility + */ +stjs.extend12=function( _constructor, _super, _implements){ + var key, a; + var I = function(){}; + I.prototype = _super.prototype; + _constructor.prototype = new I(); + + //copy static properties for super and interfaces + // assign every method from proto instance + for(a = 1; a < arguments.length; ++a){ + stjs.copyProps(arguments[a], _constructor); + } + // remember the correct constructor + _constructor.prototype.constructor = _constructor; + + // add the default equals method if we don't have a superclass. Code generated with version 1.2 will + // override this method is equals() is present in the original java code. + // this was not part of the original 1.2 version of extends, however forward compatibility + // with 1.3 requires it + if(_super == null){ + _constructor.prototype.equals = JavalikeEquals; + } + + // build package and assign + return _constructor; +}; + +/** + * checks if the child is an instanceof parent. it checks recursively if "parent" is the child itself or it's found somewhere in the $inherit array + */ +stjs.isInstanceOf=function(child, parent){ + if (child === parent) + return true; + if (!child.$inherit) + return false; + for(var i in child.$inherit){ + if (stjs.isInstanceOf(child.$inherit[i], parent)) { + return true; + } + } + return false; +} +stjs.enumEntry=function(idx, name){ + this._name = name; + this._ordinal = idx; +}; + +stjs.enumEntry.prototype.name=function(){ + return this._name; +}; +stjs.enumEntry.prototype.ordinal=function(){ + return this._ordinal; +}; +stjs.enumEntry.prototype.toString=function(){ + return this._name; +}; +stjs.enumEntry.prototype.equals=JavalikeEquals; + +stjs.enumeration=function(){ + var i; + var e = {}; + e._values = []; + for(i = 0; i < arguments.length; ++i){ + e[arguments[i]] = new stjs.enumEntry(i, arguments[i]); + e._values[i] = e[arguments[i]]; + } + e.values = function(){return this._values;}; + e.valueOf=function(label){ + return this[label]; + } + return e; +}; + + +/** + * if true the execution of generated main methods is disabled. + * this is useful when executing unit tests, to no have the main methods executing before the tests + */ +stjs.mainCallDisabled = false; + +stjs.exception=function(err){ + return err; +} + +stjs.isEnum=function(obj){ + return obj != null && obj.constructor == stjs.enumEntry; +} + +stjs.trunc=function(n) { + if (n == null) + return null; + return n | 0; +} + +stjs.converters = { + Date : function(s, type) { + var a = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)$/ + .exec(s); + if (a) { + return new Date(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]); + } + return null; + }, + + Enum : function(s, type){ + return eval(type.arguments[0])[s]; + } +}; + +/** *********** global ************** */ +function exception(err){ + return err; +} + +function isEnum(obj){ + return obj != null && obj.constructor == stjs.enumEntry; +} + +/******* parsing *************/ + +/** + * parse a json string using the type definition to build a typed object hierarchy + */ +stjs.parseJSON = (function () { + var number + = '(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)'; + var oneChar = '(?:[^\\0-\\x08\\x0a-\\x1f\"\\\\]' + + '|\\\\(?:[\"/\\\\bfnrt]|u[0-9A-Fa-f]{4}))'; + var string = '(?:\"' + oneChar + '*\")'; + + // Will match a value in a well-formed JSON file. + // If the input is not well-formed, may match strangely, but not in an unsafe + // way. + // Since this only matches value tokens, it does not match whitespace, colons, + // or commas. + var jsonToken = new RegExp( + '(?:false|true|null|[\\{\\}\\[\\]]' + + '|' + number + + '|' + string + + ')', 'g'); + + // Matches escape sequences in a string literal + var escapeSequence = new RegExp('\\\\(?:([^u])|u(.{4}))', 'g'); + + // Decodes escape sequences in object literals + var escapes = { + '"': '"', + '/': '/', + '\\': '\\', + 'b': '\b', + 'f': '\f', + 'n': '\n', + 'r': '\r', + 't': '\t' + }; + function unescapeOne(_, ch, hex) { + return ch ? escapes[ch] : String.fromCharCode(parseInt(hex, 16)); + } + + var constructors = {}; + + function constr(name, param){ + var c = constructors[name]; + if (!c) + constructors[name] = c = eval(name); + return new c(param); + } + + function convert(type, json){ + if (!type) + return json; + var cv = stjs.converters[type.name || type]; + if (cv) + return cv(json, type); + //hopefully the type has a string constructor + return constr(type, json); + } + + function builder(type){ + if (!type) + return {}; + if (typeof type == "function") + return new type(); + if (type.name) { + if (type.name == "Map") + return {}; + if (type.name == "Array") + return []; + return constr(type.name); + } + return constr(type); + } + + // A non-falsy value that coerces to the empty string when used as a key. + var EMPTY_STRING = new String(''); + var SLASH = '\\'; + + // Constructor to use based on an open token. + var firstTokenCtors = { '{': Object, '[': Array }; + + var hop = Object.hasOwnProperty; + + function nextMatch(str){ + var m = jsonToken.exec(str); + return m != null ? m[0] : null; + } + return function (json, type) { + // Split into tokens + // Construct the object to return + var result; + var tok = nextMatch(json); + var topLevelPrimitive = false; + if ('{' === tok) { + result = builder(type, null); + } else if ('[' === tok) { + result = []; + } else { + // The RFC only allows arrays or objects at the top level, but the JSON.parse + // defined by the EcmaScript 5 draft does allow strings, booleans, numbers, and null + // at the top level. + result = []; + topLevelPrimitive = true; + } + + // If undefined, the key in an object key/value record to use for the next + // value parsed. + var key; + // Loop over remaining tokens maintaining a stack of uncompleted objects and + // arrays. + var stack = [result]; + var stack2 = [type]; + for (tok = nextMatch(json); tok != null; tok = nextMatch(json)) { + + var cont; + switch (tok.charCodeAt(0)) { + default: // sign or digit + cont = stack[0]; + cont[key || cont.length] = +(tok); + key = void 0; + break; + case 0x22: // '"' + tok = tok.substring(1, tok.length - 1); + if (tok.indexOf(SLASH) !== -1) { + tok = tok.replace(escapeSequence, unescapeOne); + } + cont = stack[0]; + if (!key) { + if (cont instanceof Array) { + key = cont.length; + } else { + key = tok || EMPTY_STRING; // Use as key for next value seen. + stack2[0] = cont.constructor.$typeDescription ? cont.constructor.$typeDescription[key] : stack2[1].arguments[1]; + break; + } + } + cont[key] = convert(stack2[0],tok); + key = void 0; + break; + case 0x5b: // '[' + cont = stack[0]; + stack.unshift(cont[key || cont.length] = []); + stack2.unshift(stack2[0].arguments[0]); + //put the element type desc + key = void 0; + break; + case 0x5d: // ']' + stack.shift(); + stack2.shift(); + break; + case 0x66: // 'f' + cont = stack[0]; + cont[key || cont.length] = false; + key = void 0; + break; + case 0x6e: // 'n' + cont = stack[0]; + cont[key || cont.length] = null; + key = void 0; + break; + case 0x74: // 't' + cont = stack[0]; + cont[key || cont.length] = true; + key = void 0; + break; + case 0x7b: // '{' + cont = stack[0]; + stack.unshift(cont[key || cont.length] = builder(stack2[0])); + stack2.unshift(null); + key = void 0; + break; + case 0x7d: // '}' + stack.shift(); + stack2.shift(); + break; + } + } + // Fail if we've got an uncompleted object. + if (topLevelPrimitive) { + if (stack.length !== 1) { throw new Error(); } + result = result[0]; + } else { + if (stack.length) { throw new Error(); } + } + + return result; + }; +})(); + +/************* STJS asserts ***************/ +var stjsAssertHandler = function(position, code, msg) { + throw msg + " at " + position; +} +function setAssertHandler(a) { + stjsAssertHandler = a; +} + +function assertArgEquals(position, code, expectedValue, testValue) { + if (expectedValue != testValue && stjsAssertHandler) + stjsAssertHandler(position, code, "Wrong argument. Expected: " + expectedValue + ", got:" + testValue); +} + +function assertArgNotNull(position, code, testValue) { + if (testValue == null && stjsAssertHandler) + stjsAssertHandler(position, code, "Wrong argument. Null value"); +} + +function assertArgTrue(position, code, condition) { + if (!condition && stjsAssertHandler) + stjsAssertHandler(position, code, "Wrong argument. Condition is false"); +} + +function assertStateEquals(position, code, expectedValue, testValue) { + if (expectedValue != testValue && stjsAssertHandler) + stjsAssertHandler(position, code, "Wrong state. Expected: " + expectedValue + ", got:" + testValue); +} + +function assertStateNotNull(position, code, testValue) { + if (testValue == null && stjsAssertHandler) + stjsAssertHandler(position, code, "Wrong state. Null value"); +} + +function assertStateTrue(position, code, condition) { + if (!condition && stjsAssertHandler) + stjsAssertHandler(position, code, "Wrong state. Condition is false"); +} +/** exception **/ +var Throwable = function(message, cause){ + if (typeof message === "string"){ + this.detailMessage = message; + this.message = message; + this.cause = cause; + } else { + this.cause = message; + } +}; +stjs.extend(Throwable, Error, [], function(constructor, prototype){ + prototype.detailMessage = null; + prototype.cause = null; + prototype.getMessage = function() { + return this.detailMessage; + }; + + prototype.getLocalizedMessage = function() { + return this.getMessage(); + }; + + prototype.getCause = function() { + return (this.cause==this ? null : this.cause); + }; + + prototype.toString = function() { + var s = "Exception";//TODO should get the exception's type name here + var message = this.getLocalizedMessage(); + return (message != null) ? (s + ": " + message) : s; + }; + + //TODO use stacktrace.js script + prototype.getStackTrace = function() { + return this.stack; + }; + + //TODO use stacktrace.js script + prototype.printStackTrace = function(){ + console.error(this.getStackTrace()); + }; +}, {}); + +var Exception = function(message, cause){ + Throwable.call(this, message, cause); +}; +stjs.extend(Exception, Throwable, [], function(constructor, prototype){ +}, {}); + +var RuntimeException = function(message, cause){ + Exception.call(this, message, cause); +}; +stjs.extend(RuntimeException, Exception, [], function(constructor, prototype){ +}, {}); + +/** stjs field manipulation */ +stjs.setField=function(obj, field, value, returnOldValue){ + if (stjs.setFieldHandler) + return stjs.setFieldHandler(obj, field, value, returnOldValue); + var toReturn = returnOldValue ? obj[field] : value; + obj[field] = value; + return toReturn; +} + +stjs.getField=function(obj, field){ + if (stjs.getFieldHandler) + return stjs.getFieldHandler(obj, field); + return obj[field]; +} + +if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = stjs + } + exports.stjs = stjs } \ No newline at end of file diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/underscore/js/underscore.js b/api-openbis-javascript/src/v3/lib/underscore/js/underscore.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/underscore/js/underscore.js rename to api-openbis-javascript/src/v3/lib/underscore/js/underscore.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/openbis.js b/api-openbis-javascript/src/v3/openbis.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/openbis.js rename to api-openbis-javascript/src/v3/openbis.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/require.js b/api-openbis-javascript/src/v3/require.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/require.js rename to api-openbis-javascript/src/v3/require.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/DateFormat.js b/api-openbis-javascript/src/v3/util/DateFormat.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/DateFormat.js rename to api-openbis-javascript/src/v3/util/DateFormat.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/Exceptions.js b/api-openbis-javascript/src/v3/util/Exceptions.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/Exceptions.js rename to api-openbis-javascript/src/v3/util/Exceptions.js diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/Json.js b/api-openbis-javascript/src/v3/util/Json.js similarity index 100% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/util/Json.js rename to api-openbis-javascript/src/v3/util/Json.js diff --git a/app-openbis-installer/build.gradle b/app-openbis-installer/build.gradle index 51f1bc31c22b4172884a5bff5fb059230ad57f80..3f19168393b97697bbfcb8b2cb17288a4cc529ac 100644 --- a/app-openbis-installer/build.gradle +++ b/app-openbis-installer/build.gradle @@ -1,6 +1,7 @@ evaluationDependsOn(':lib-commonbase') evaluationDependsOn(':lib-common') evaluationDependsOn(':api-openbis-java') +evaluationDependsOn(':api-openbis-javascript') evaluationDependsOn(':lib-openbis-common') evaluationDependsOn(':lib-authentication') evaluationDependsOn(':lib-dbmigration') @@ -53,7 +54,7 @@ println "installerDir:${installerDistDir}" println "buildDir:${buildDir}" println "installer:${project.projectDir}/resource/installer" -task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zip', ':core-plugin-openbis:zipDss', 'core-plugin-openbis:zipBdlServer']) { +task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zip', ':core-plugin-openbis:zipDss', ':core-plugin-openbis:zipBdlServer']) { duplicatesStrategy 'include' from "${project.projectDir}/resource/installer" from "${project.projectDir}/../core-plugin-openbis/dist/tarball/installer" @@ -61,7 +62,7 @@ task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zi into installerDistDir from zipTree(project(':core-plugin-openbis').zipBdlServer.archivePath) into installerDistDir - from("${installerDistDir}/../BUILD-installation.INFO") { + from("${installerDistDir}/../BUILD-app-openbis-installer.INFO") { into 'bin' } from("${buildDir}/classes/java/main/InstallerVariableAccess.class") { diff --git a/app-openbis-installer/settings.gradle b/app-openbis-installer/settings.gradle index ed7e5f09bc90809cab64232326952654ff904bfa..c65fe80bb49c16bf548fcca399c764023799e5ca 100644 --- a/app-openbis-installer/settings.gradle +++ b/app-openbis-installer/settings.gradle @@ -1,4 +1,4 @@ includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server', 'server-original-data-store', 'server-screening', 'core-plugin-openbis', 'server-external-data-store', - 'ui-admin', 'lib-microservice-server' + 'ui-admin', 'lib-microservice-server', 'ui-eln-lims', 'api-openbis-javascript' diff --git a/build/build.gradle b/build/build.gradle index 6c2b4f45d63b198f72da2fa1f284fe05d82a1ddf..7fdf2e012a2acd5702e5c2e198362b04a6b59573 100644 --- a/build/build.gradle +++ b/build/build.gradle @@ -1,6 +1,7 @@ evaluationDependsOn(':lib-commonbase') evaluationDependsOn(':lib-common') evaluationDependsOn(':api-openbis-java') +evaluationDependsOn(':api-openbis-javascript') evaluationDependsOn(':lib-openbis-common') evaluationDependsOn(':lib-authentication') evaluationDependsOn(':lib-dbmigration') diff --git a/build/settings.gradle b/build/settings.gradle index f5301d20e35c707ecd8571e335b5b75c09213849..d790bf35e109db3f87a4755aed2bffbcc3734e9f 100644 --- a/build/settings.gradle +++ b/build/settings.gradle @@ -1,4 +1,4 @@ includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server', 'server-original-data-store', 'server-screening', 'core-plugin-openbis', 'app-openbis-installer', 'lib-image-readers', 'test-ui-core', 'test-api-openbis-javascript', 'server-external-data-store', 'ui-admin', - 'lib-microservice-server' \ No newline at end of file + 'lib-microservice-server', 'lib-transactional-file-system', 'server-data-store', 'ui-eln-lims', 'api-openbis-javascript' \ No newline at end of file diff --git a/core-plugin-openbis/build.gradle b/core-plugin-openbis/build.gradle index d79096d2eef9e4f1ae1303a1c4fa09ce4cd31ef5..f258f6b371d8e3415d68716fbbb2441e8ac999d8 100644 --- a/core-plugin-openbis/build.gradle +++ b/core-plugin-openbis/build.gradle @@ -10,9 +10,9 @@ buildscript { } } -plugins { - id "com.github.node-gradle.node" version "3.2.1" -} +//plugins { +// id "com.github.node-gradle.node" version "3.2.1" +//} apply plugin: org.owasp.dependencycheck.gradle.DependencyCheckPlugin apply plugin: "org.paleozogt.symzip" @@ -39,6 +39,7 @@ evaluationDependsOn(':server-original-data-store') evaluationDependsOn(':server-screening') evaluationDependsOn(':server-external-data-store') evaluationDependsOn(':ui-admin') +evaluationDependsOn(':ui-eln-lims') apply from: '../build/javaproject.gradle' @@ -57,6 +58,7 @@ configurations.create('zipping') configurations.create('server_original_data_store') configurations.create('javadoc_sources') configurations.create('javadoc_compilation') +configurations.create('blast_tar') def jettyVersion = '9.4.44' def jettyDistributionVersion = '9.4.44.v20210927' @@ -79,6 +81,8 @@ dependencies { zipping "eclipse:jetty-distribution:${jettyVersion}@zip" + blast_tar "blast:blast:2.2.30@tar.gz" + server_original_data_store project(':server-screening'), 'bioformats:bioformats:6.5.1', 'imagej:ij:1.43u', @@ -87,7 +91,6 @@ dependencies { 'slf4j:slf4j:1.6.2', 'slf4j:slf4j-log4j12:1.6.2', 'sybit:image-viewer:0.3.6' -// } javadoc_sources project(path: ':lib-commonbase', configuration: 'archives'), project(path: ':lib-common', configuration: 'archives'), @@ -195,25 +198,17 @@ task untarGwt(type: Copy) { into gwtBuildDir } -node { - download = true - version = '18.12.1' - workDir = file("${projectDir}/node/nodejs") - nodeModulesDir = file("${projectDir}") -} - -task bundleOpenbisStaticResources(type: Exec) { - dependsOn 'untarGwt' - dependsOn 'npmInstall' - commandLine 'bash', '-c', "${projectDir}/resource/js/v3/build.sh" -} - task copyOpenbisStaticResources(type: Copy) { - dependsOn 'bundleOpenbisStaticResources' + dependsOn 'untarGwt' from "${project(':server-application-server').projectDir}/source/java/ch/systemsx/cisd/openbis/public" into gwtModuleBuildDir } +task copyV3ApiResources(type: Copy, dependsOn: [copyOpenbisStaticResources, ':api-openbis-javascript:bundleOpenbisStaticResources']) { + from("${project(':api-openbis-javascript').projectDir}/src/v3") + into "${gwtModuleBuildDir}/resources/api/v3" +} + ext.classpathEntries = files( project(':server-application-server').file('source/java/applicationContext.xml'), project(':server-application-server').file('source/java/dbConfigurationContext.xml'), @@ -265,9 +260,9 @@ task checkFilesExist { } } - war.dependsOn untarGwt war.dependsOn copyOpenbisStaticResources +war.dependsOn copyV3ApiResources war.dependsOn checkFilesExist war.dependsOn copyJarsForWebStart war { @@ -348,6 +343,9 @@ task zipCorePlugins(type: SymZip) { from fileTree(dir: 'targets/downloads/obit_shared_core_technology-release-20.x/core-plugins', includes: ['shared/**']) from 'dist/core-plugins' from 'dist/server/core-plugins.properties' + from(configurations.blast_tar.collect { tarTree(it) }) { + into 'eln-lims' + } into 'core-plugins' } @@ -503,7 +501,17 @@ task copyOpenbisNgUiToCorePlugins(type: Copy, dependsOn: [deleteOpenbisNgUi, ':u into file('dist/core-plugins') } +task deleteOpenbisElnLims(type: Delete) { + delete 'dist/core-plugins/eln-lims' +} + +task copyOpenbisElnLimsCorePlugins(type: Copy, dependsOn: [deleteOpenbisNgUi, ':ui-eln-lims:copyCorePlugins']) { + from project(':ui-eln-lims').file('build/core-plugins') + into file('dist/core-plugins') +} + zipCorePlugins.dependsOn copyOpenbisNgUiToCorePlugins +zipCorePlugins.dependsOn copyOpenbisElnLimsCorePlugins task generateJavadoc(type: Javadoc) { source = configurations.javadoc_sources.collect { diff --git a/core-plugin-openbis/settings.gradle b/core-plugin-openbis/settings.gradle index df7724ce0359ace7d89fe754342a537380c209a6..9045031c72a55696235201e02e26501f5ba57110 100644 --- a/core-plugin-openbis/settings.gradle +++ b/core-plugin-openbis/settings.gradle @@ -1,3 +1,3 @@ includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server', 'server-original-data-store', 'server-screening', 'server-external-data-store', - 'ui-admin', 'lib-microservice-server' + 'ui-admin', 'lib-microservice-server', 'ui-eln-lims', 'api-openbis-javascript' diff --git a/docs/codestyle/CISD_Conventions_Eclipse_V2.xml b/docs/codestyle/CISD_Conventions_Eclipse_V2.xml new file mode 100644 index 0000000000000000000000000000000000000000..970407607e2eeb528e6bdbd366d796b09e66e056 --- /dev/null +++ b/docs/codestyle/CISD_Conventions_Eclipse_V2.xml @@ -0,0 +1,380 @@ +<?xml version="1.0" encoding="utf-8"?> +<profiles version="21"> + <profile kind="CodeFormatterProfile" name="CISD Conventions V2" version="21"> + <setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/> + <setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/> + <setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/> + <setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_constructor" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/> + <setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="preserve_positions"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/> + <setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/> + <setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/> + <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/> + <setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/> + <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="18"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="48"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="2"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_assertion_message" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="49"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="49"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="49"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_type_annotations" value="49"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="0"/> + <setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="100"/> + <setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/> + <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/> + <setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="true"/> + <setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/> + <setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/> + <setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/> + </profile> +</profiles> \ No newline at end of file diff --git a/docs/codestyle/CISD_Conventions_IntelliJ_V2.xml b/docs/codestyle/CISD_Conventions_IntelliJ_V2.xml new file mode 100644 index 0000000000000000000000000000000000000000..2d251e3189b41da182e320f69be511f95b0a5f06 --- /dev/null +++ b/docs/codestyle/CISD_Conventions_IntelliJ_V2.xml @@ -0,0 +1,42 @@ +<code_scheme name="CISD Conventions V2" version="173"> + <option name="RIGHT_MARGIN" value="100" /> + <JavaCodeStyleSettings> + <option name="SPACE_AFTER_CLOSING_ANGLE_BRACKET_IN_TYPE_ARGUMENT" value="true" /> + <option name="ALIGN_TYPES_IN_MULTI_CATCH" value="false" /> + <option name="JD_P_AT_EMPTY_LINES" value="false" /> + <option name="JD_KEEP_EMPTY_LINES" value="false" /> + <option name="JD_DO_NOT_WRAP_ONE_LINE_COMMENTS" value="true" /> + <option name="JD_INDENT_ON_CONTINUATION" value="true" /> + </JavaCodeStyleSettings> + <codeStyleSettings language="JAVA"> + <option name="RIGHT_MARGIN" value="100" /> + <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" /> + <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" /> + <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" /> + <option name="KEEP_BLANK_LINES_IN_CODE" value="1" /> + <option name="KEEP_BLANK_LINES_BETWEEN_PACKAGE_DECLARATION_AND_HEADER" value="1" /> + <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="1" /> + <option name="BLANK_LINES_AROUND_FIELD" value="1" /> + <option name="BLANK_LINES_AROUND_FIELD_IN_INTERFACE" value="1" /> + <option name="BRACE_STYLE" value="2" /> + <option name="CLASS_BRACE_STYLE" value="2" /> + <option name="METHOD_BRACE_STYLE" value="2" /> + <option name="ALIGN_MULTILINE_PARAMETERS" value="false" /> + <option name="ALIGN_MULTILINE_RESOURCES" value="false" /> + <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" /> + <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" /> + <option name="CALL_PARAMETERS_WRAP" value="1" /> + <option name="METHOD_PARAMETERS_WRAP" value="1" /> + <option name="RESOURCE_LIST_WRAP" value="5" /> + <option name="EXTENDS_LIST_WRAP" value="1" /> + <option name="THROWS_LIST_WRAP" value="1" /> + <option name="EXTENDS_KEYWORD_WRAP" value="1" /> + <option name="THROWS_KEYWORD_WRAP" value="1" /> + <option name="METHOD_CALL_CHAIN_WRAP" value="1" /> + <option name="TERNARY_OPERATION_WRAP" value="5" /> + <option name="ARRAY_INITIALIZER_WRAP" value="1" /> + <option name="ASSIGNMENT_WRAP" value="1" /> + <option name="WRAP_COMMENTS" value="true" /> + <option name="ENUM_CONSTANTS_WRAP" value="1" /> + </codeStyleSettings> +</code_scheme> \ No newline at end of file diff --git a/docs/copyright/Copyright.xml b/docs/copyright/Copyright.xml new file mode 100644 index 0000000000000000000000000000000000000000..e1797f4eb727d4fa3a75226f371a862d137fa363 --- /dev/null +++ b/docs/copyright/Copyright.xml @@ -0,0 +1,7 @@ +<component name="CopyrightManager"> + <copyright> + <option name="keyword" value=".*Copyright" /> + <option name="notice" value=" Copyright &#36;today.year ETH Zürich, Scientific IT Services 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. " /> + <option name="myName" value="Copyright" /> + </copyright> +</component> \ No newline at end of file diff --git a/docs/copyright/profiles_settings.xml b/docs/copyright/profiles_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c803e3e77f27709e8b0966b3e22f30a564958257 --- /dev/null +++ b/docs/copyright/profiles_settings.xml @@ -0,0 +1,7 @@ +<component name="CopyrightManager"> + <settings default="Copyright"> + <module2copyright> + <element module="All" copyright="Copyright" /> + </module2copyright> + </settings> +</component> \ No newline at end of file diff --git a/docs/hooks/commit-msg b/docs/hooks/commit-msg new file mode 100755 index 0000000000000000000000000000000000000000..8a0b37a062629dec7f8569581ccd79fa30c4046e --- /dev/null +++ b/docs/hooks/commit-msg @@ -0,0 +1,18 @@ +#!/bin/sh +# +# A simple hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. +# +# To enable this hook, move it to .git/hooks directory and make it executable. +# Remember to keep the name of the file as "commit-msg". + +commit_regex='(SSDM-[0-9]+:|merge|rebase)' +error_msg="Aborting commit. Your commit message is missing an issue number ('SSDM-XXXX:')" + +if ! grep -iqE "$commit_regex" "$1"; then + echo "$error_msg" >&2 + exit 1 +fi diff --git a/server-application-server/build.gradle b/server-application-server/build.gradle index 107edd94015a8973f6787d859eed5d04acb1073e..4a36b56582796415dff75739fd9dcbb9f7cc1b0d 100644 --- a/server-application-server/build.gradle +++ b/server-application-server/build.gradle @@ -1,6 +1,7 @@ evaluationDependsOn(':lib-commonbase') evaluationDependsOn(':lib-common') evaluationDependsOn(':api-openbis-java') +evaluationDependsOn(':api-openbis-javascript') evaluationDependsOn(':lib-openbis-common') evaluationDependsOn(':lib-authentication') evaluationDependsOn(':lib-dbmigration') @@ -123,7 +124,7 @@ task copyTestData(type: Copy, dependsOn: testClasses) { include "*.properties" } -task openBISDevelopementEnvironmentASStart(type: JavaExec) { +task openBISDevelopmentEnvironmentASStart(type: JavaExec) { main = 'org.eclipse.jetty.runner.Runner' classpath = sourceSets.main.runtimeClasspath + configurations.devRuntime jvmArgs(['-Dpython.path=../libraries/jython/jython-lib', '-Dlog4j.configuration=etc/log.xml', @@ -145,6 +146,5 @@ cleanDbSuiteProjectSamplesEnabled.dependsOn(testProjectSamplesEnabled) test.maxHeapSize = "10240m" test.dependsOn(copyTestData) test.dependsOn(cleanDbSuite) -//test.dependsOn(testProjectSamplesEnabled) apply from: 'gwtdev.gradle' diff --git a/server-application-server/gwtdev.gradle b/server-application-server/gwtdev.gradle index bede33e992bb7072e33db331f27ab7d315cb23e8..ebc1984bbf5ae00c20ec7ed9a3180dda9ac0cc11 100644 --- a/server-application-server/gwtdev.gradle +++ b/server-application-server/gwtdev.gradle @@ -16,12 +16,15 @@ if (System.getProperty("openbis.development-build") != null) { project(path: ':lib-common', configuration: 'archives'), project(path: ':api-openbis-java'), project(path: ':api-openbis-java', configuration: 'archives'), + project(path: ':api-openbis-javascript'), project(path: ':lib-openbis-common'), project(path: ':lib-openbis-common', configuration: 'archives'), project(path: ':server-application-server', configuration: 'archives') } } +def gwtTempPath = "${project.projectDir.absolutePath}/targets/www/gwt-temp" + task deleteGWT(type: Exec) { executable "rm" args "-rf", "${project.projectDir.absolutePath}/.gwt-cache", "${project.projectDir.absolutePath}/targets/www" @@ -81,15 +84,20 @@ task compileGWT(type: Copy, dependsOn: compileGWTToTempJDK8) { task untarGwt(type: Copy, dependsOn: prepareGWT) { from tarTree(resources.gzip("../core-plugin-openbis/resource/gwt.tar.gz")) - into "${project.projectDir.absolutePath}/targets/www/gwt-temp" + into "${gwtTempPath}" } task compileGWTToTempJDK11(type: Copy, dependsOn: untarGwt) { from "${project.projectDir.absolutePath}/source/java/ch/systemsx/cisd/openbis/public" - into "${project.projectDir.absolutePath}/targets/www/gwt-temp/ch.systemsx.cisd.openbis.OpenBIS" + into "${gwtTempPath}/ch.systemsx.cisd.openbis.OpenBIS" } -task openBISDevelopementEnvironmentASPrepare(type: Copy, dependsOn: compileGWTToTempJDK11) { - from "targets/www/gwt-temp/ch.systemsx.cisd.openbis.OpenBIS" +task copyV3Api(type: Copy, dependsOn: [compileGWTToTempJDK11, ':api-openbis-javascript:bundleOpenbisStaticResources']) { + from("${project(':api-openbis-javascript').projectDir}/src/v3") + into "${gwtTempPath}/ch.systemsx.cisd.openbis.OpenBIS/resources/api/v3" +} + +task openBISDevelopmentEnvironmentASPrepare(type: Copy, dependsOn: copyV3Api) { + from "${gwtTempPath}/ch.systemsx.cisd.openbis.OpenBIS" into "targets/www/openbis-test" } diff --git a/server-application-server/settings.gradle b/server-application-server/settings.gradle index b7da688c98309b6d2f7ae4b0edd0097bff5a7edc..f137ccdee51430a83be4aa05fe11ef9b79d51d82 100644 --- a/server-application-server/settings.gradle +++ b/server-application-server/settings.gradle @@ -1 +1,2 @@ -includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration' +includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', + 'lib-dbmigration', 'api-openbis-javascript' diff --git a/server-original-data-store/build.gradle b/server-original-data-store/build.gradle index 8a41bcea224a3800bb80db69cc3a2f5193dc25f0..29e9b2cf6b4e8b3edb70bc9a39bc3f95268695c1 100644 --- a/server-original-data-store/build.gradle +++ b/server-original-data-store/build.gradle @@ -1,6 +1,7 @@ evaluationDependsOn(':lib-commonbase') evaluationDependsOn(':lib-common') evaluationDependsOn(':api-openbis-java') +evaluationDependsOn(':api-openbis-javascript') evaluationDependsOn(':lib-openbis-common') evaluationDependsOn(':lib-authentication') evaluationDependsOn(':lib-dbmigration') @@ -42,18 +43,18 @@ dependencies { runtimeOnly 'bioformats:bioformats:6.5.1' // eln-lims Jython APIs dependencies - datastoreExecRuntime files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/docx4j-3.3.3.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/ascii-table-1.1.0.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/docxbuilder.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/jsoup-1.11.3.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/serializer-2.7.2.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/slf4j-api-1.7.21.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/xalan-2.7.2.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar"), - files("../core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar"), + datastoreExecRuntime files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/docx4j-3.3.3.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/ascii-table-1.1.0.jar"), + files("../ui-eln-lims/src/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/docxbuilder.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/jsoup-1.11.3.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/serializer-2.7.2.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/slf4j-api-1.7.21.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/lib/xalan-2.7.2.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar"), + files("../ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar"), files("../../../openbis-hvl.ethz.ch/deployed/core-plugins/hvl-dropbox/1/dss/dropboxes/hvl-dropbox/lib/jmatio-1.5.jar") testImplementation project(path: ':lib-commonbase', configuration: 'tests'), @@ -118,7 +119,7 @@ jar { } } -task openBISDevelopementEnvironmentDSSStart(type: JavaExec) { +task openBISDevelopmentEnvironmentDSSStart(type: JavaExec) { main = 'ch.systemsx.cisd.openbis.dss.generic.DataStoreServer' classpath = sourceSets.datastoreExec.runtimeClasspath jvmArgs(['-ea', '-Dpython.path=../libraries/jython/jython-lib', diff --git a/server-original-data-store/settings.gradle b/server-original-data-store/settings.gradle index 9f7f64fb01faf34522f022bd6519fecc659a94b5..9cd9754f77ab5d690f47563a6b910b3482db258e 100644 --- a/server-original-data-store/settings.gradle +++ b/server-original-data-store/settings.gradle @@ -1 +1,2 @@ -includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server' +includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', + 'lib-dbmigration', 'server-application-server', 'api-openbis-javascript' diff --git a/server-screening/build.gradle b/server-screening/build.gradle index 69a4193a33184b541c31775e0f6eaff204232708..fd7c7eb7fa0fa1dace4a7b41620777f01195a7c9 100644 --- a/server-screening/build.gradle +++ b/server-screening/build.gradle @@ -1,6 +1,7 @@ evaluationDependsOn(':lib-commonbase') evaluationDependsOn(':lib-common') evaluationDependsOn(':api-openbis-java') +evaluationDependsOn(':api-openbis-javascript') evaluationDependsOn(':lib-openbis-common') evaluationDependsOn(':lib-authentication') evaluationDependsOn(':lib-dbmigration') diff --git a/server-screening/settings.gradle b/server-screening/settings.gradle index 4c14cb1fe577a0f288e9da37a7c598914548df6f..a4f178f6496329cb475cacbd20b38c64072fb82f 100644 --- a/server-screening/settings.gradle +++ b/server-screening/settings.gradle @@ -1 +1,2 @@ -includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server', 'server-original-data-store' +includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', + 'lib-dbmigration', 'server-application-server', 'server-original-data-store', 'api-openbis-javascript' diff --git a/test-api-openbis-javascript/build.gradle b/test-api-openbis-javascript/build.gradle index 789f93acdf9b424ba4b0f287a73b359af4b45f37..bc005df508020da47cc0e5fc5008de0429a5d132 100644 --- a/test-api-openbis-javascript/build.gradle +++ b/test-api-openbis-javascript/build.gradle @@ -1,6 +1,7 @@ evaluationDependsOn(':lib-commonbase') evaluationDependsOn(':lib-common') evaluationDependsOn(':api-openbis-java') +evaluationDependsOn(':api-openbis-javascript') evaluationDependsOn(':lib-openbis-common') evaluationDependsOn(':lib-authentication') evaluationDependsOn(':lib-dbmigration') diff --git a/test-api-openbis-javascript/settings.gradle b/test-api-openbis-javascript/settings.gradle index 10fead2276a036b6da3457fcb05aea0ca36461b1..09200920db5ef12840c394fe246d98d75df73732 100644 --- a/test-api-openbis-javascript/settings.gradle +++ b/test-api-openbis-javascript/settings.gradle @@ -1,3 +1,3 @@ -includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server', - 'server-original-data-store', 'server-screening', 'core-plugin-openbis', - 'test-ui-core' +includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', + 'lib-dbmigration', 'server-application-server', 'server-original-data-store', 'server-screening', + 'core-plugin-openbis', 'test-ui-core', 'api-openbis-javascript' diff --git a/test-ui-core/settings.gradle b/test-ui-core/settings.gradle index 97351a8a9e028c67b2ff0b8bf68cc738860cbdb5..e6e70fc93cf8fcfeeb3d95e29906b09c8250afeb 100644 --- a/test-ui-core/settings.gradle +++ b/test-ui-core/settings.gradle @@ -1,2 +1,3 @@ -includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server', +includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', + 'lib-dbmigration', 'server-application-server', 'api-openbis-javascript', 'server-original-data-store', 'server-screening', 'core-plugin-openbis' diff --git a/ui-admin/srcV3 b/ui-admin/srcV3 index a9bdb1c90c58456811c8c7920e1879e4761196b8..be1152886cbc68a127b2417a2f3dfda4a9f06804 120000 --- a/ui-admin/srcV3 +++ b/ui-admin/srcV3 @@ -1 +1 @@ -../server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3 \ No newline at end of file +../api-openbis-javascript/src/v3 \ No newline at end of file diff --git a/ui-eln-lims/.gitignore b/ui-eln-lims/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..378eac25d311703f3f2cd456d8036da525cd0366 --- /dev/null +++ b/ui-eln-lims/.gitignore @@ -0,0 +1 @@ +build diff --git a/ui-eln-lims/build.gradle b/ui-eln-lims/build.gradle new file mode 100644 index 0000000000000000000000000000000000000000..0ff8270be88ec96e4b3c8c8402f950800d8be237 --- /dev/null +++ b/ui-eln-lims/build.gradle @@ -0,0 +1,8 @@ +task cleanBuild(type: Delete) { + delete 'build' +} + +task copyCorePlugins(type: Copy) { + from file('src/core-plugins') + into file('build/core-plugins') +} diff --git a/ui-eln-lims/gradle/wrapper/gradle-wrapper.jar b/ui-eln-lims/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5c2d1cf016b3885f6930543d57b744ea8c220a1a Binary files /dev/null and b/ui-eln-lims/gradle/wrapper/gradle-wrapper.jar differ diff --git a/ui-eln-lims/gradle/wrapper/gradle-wrapper.properties b/ui-eln-lims/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..7745c4ec463c7bb1c4ff6a5e58db239890345152 --- /dev/null +++ b/ui-eln-lims/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://sissource.ethz.ch/openbis/openbis-public/openbis-ivy/-/raw/main/gradle/distribution/7.4/gradle-7.4-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/ui-eln-lims/gradlew b/ui-eln-lims/gradlew new file mode 100755 index 0000000000000000000000000000000000000000..83f2acfdc319a24e8766cca78f32474ad7a22dd6 --- /dev/null +++ b/ui-eln-lims/gradlew @@ -0,0 +1,188 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# 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 +# +# https://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. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/ui-eln-lims/gradlew.bat b/ui-eln-lims/gradlew.bat new file mode 100644 index 0000000000000000000000000000000000000000..9618d8d9607cd91a0efb866bcac4810064ba6fac --- /dev/null +++ b/ui-eln-lims/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/initialize-master-data.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/initialize-master-data.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/initialize-master-data.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/initialize-master-data.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/common-data-model.xls b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/common-data-model.xls similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/common-data-model.xls rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/common-data-model.xls diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/custom_widget_migration.sql b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/custom_widget_migration.sql similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/custom_widget_migration.sql rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/custom_widget_migration.sql diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/scripts/date_range_validation.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/scripts/date_range_validation.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/scripts/date_range_validation.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/scripts/date_range_validation.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/scripts/storage_position_validation.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/scripts/storage_position_validation.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/scripts/storage_position_validation.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/scripts/storage_position_validation.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/single-group-data-model.xls b/ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/single-group-data-model.xls similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/master-data/single-group-data-model.xls rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/master-data/single-group-data-model.xls diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/miscellaneous/file-service/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/miscellaneous/file-service/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/miscellaneous/file-service/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/miscellaneous/file-service/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/as-eln-lims-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/as-eln-lims-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/as-eln-lims-api/script.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/freeze-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/freeze-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/freeze-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/freeze-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/freeze-api/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/freeze-api/script.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/freeze-api/script.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/freeze-api/script.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/publication-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/publication-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/publication-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/publication-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/services/publication-api/publication-api.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/css/style.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/css/style.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/css/style.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/css/style.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/InstanceProfile.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/InstanceProfile.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/InstanceProfile.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/InstanceProfile.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/config.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/config.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/config.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/etc/config.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-archived-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-archived-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-archived-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-archived-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-not-requested-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-not-requested-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-not-requested-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-not-requested-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-requested-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-requested-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-requested-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/archive-requested-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-chrome.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-chrome.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-chrome.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-chrome.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-firefox.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-firefox.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-firefox.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-firefox.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-ie10.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-ie10.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-ie10.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-ie10.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-safari.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-safari.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-safari.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-safari.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-tablet.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-tablet.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-tablet.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/browser-icon-tablet.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/busy.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/busy.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/busy.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/busy.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-down-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-down-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-down-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-down-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-up-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-up-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-up-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/chevron-up-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/copy-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/copy-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/copy-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/copy-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/cross_Logo_alt.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/cross_Logo_alt.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/cross_Logo_alt.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/cross_Logo_alt.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eln-lims-dropbox-example.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eln-lims-dropbox-example.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eln-lims-dropbox-example.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eln-lims-dropbox-example.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/empty-pattern.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/empty-pattern.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/empty-pattern.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/empty-pattern.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-close-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-close-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-close-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-close-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-open-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-open-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-open-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/eye-open-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/favicon.ico b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/favicon.ico similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/favicon.ico rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/favicon.ico diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/file-richtext.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/file-richtext.svg similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/file-richtext.svg rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/file-richtext.svg diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/filter-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/filter-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/filter-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/filter-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/hierarchy-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/hierarchy-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/hierarchy-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/hierarchy-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_unavailable.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_unavailable.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_unavailable.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/image_unavailable.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/jupyter-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/jupyter-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/jupyter-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/jupyter-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/loginBackground.jpg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/loginBackground.jpg similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/loginBackground.jpg rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/loginBackground.jpg diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo_alt.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo_alt.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo_alt.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/openBIS_Logo_alt.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/pin-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/pin-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/pin-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/pin-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/plus-sign-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/plus-sign-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/plus-sign-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/plus-sign-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/research-collection-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/research-collection-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/research-collection-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/research-collection-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-spinner.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-spinner.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-spinner.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/search-spinner.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-left.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-left.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-left.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-left.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-right.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-right.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-right.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-column-right.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-above.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-above.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-above.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-above.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-below.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-below.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-below.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-add-row-below.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-column.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-column.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-column.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-column.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-row.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-row.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-row.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table-delete-row.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table.svg similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table.svg rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/img/table.svg diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNDictionary.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNDictionary.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNDictionary.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNDictionary.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNLIMSPlugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNLIMSPlugin.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNLIMSPlugin.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/ELNLIMSPlugin.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/SettingsManager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/SettingsManager.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/SettingsManager.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/SettingsManager.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/LayoutManager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/LayoutManager.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/LayoutManager.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/LayoutManager.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/MainController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/MainController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/MainController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/controllers/MainController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/server/ServerFacade.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/AdminTests.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/AdminTests.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/AdminTests.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/AdminTests.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/README.md b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/README.md similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/README.md rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/README.md diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/ReactTestUtils.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/ReactTestUtils.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/ReactTestUtils.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/ReactTestUtils.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestProtocol.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestProtocol.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestProtocol.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestProtocol.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/TestUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/UserTests.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/UserTests.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/UserTests.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/UserTests.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_with_identifier.tsv b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_with_identifier.tsv similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_with_identifier.tsv rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_with_identifier.tsv diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_without_identifier.tsv b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_without_identifier.tsv similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_without_identifier.tsv rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/bacteria_for_test_without_identifier.tsv diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/exportedTableAllColumnsAllRows.tsv b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/exportedTableAllColumnsAllRows.tsv similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/exportedTableAllColumnsAllRows.tsv rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/exportedTableAllColumnsAllRows.tsv diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/order_ORD1_p0.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/order_ORD1_p0.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/order_ORD1_p0.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/order_ORD1_p0.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/test-image.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/test-image.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/test-image.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/test-image.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/updateAllColumnsAllRows.tsv b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/updateAllColumnsAllRows.tsv similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/updateAllColumnsAllRows.tsv rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/test/resources/updateAllColumnsAllRows.tsv diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/AnnotationUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/AnnotationUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/AnnotationUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/AnnotationUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/BarcodeUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/BarcodeUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/BarcodeUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/BarcodeUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/CKEditorManager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/CKEditorManager.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/CKEditorManager.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/CKEditorManager.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/EventUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/EventUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/EventUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/EventUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/ExportUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/ExportUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/ExportUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/ExportUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/FormUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/HierarchyUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/HierarchyUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/HierarchyUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/HierarchyUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/IdentifierUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/IdentifierUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/IdentifierUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/IdentifierUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JExcelEditorManager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JExcelEditorManager.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JExcelEditorManager.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JExcelEditorManager.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JupyterUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JupyterUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JupyterUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/JupyterUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/PrintUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/PrintUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/PrintUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/PrintUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Select2Manager.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Select2Manager.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Select2Manager.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Select2Manager.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/TreeUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/TreeUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/TreeUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/TreeUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Util.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Util.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Util.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/util/Util.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/AdvancedSearch/AdvancedSearchView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ArchivingHelper/ArchivingHelperView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/CustomImport/CustomImportView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/DataGridController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/ExperimentDataGridUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataGrid/SampleDataGridUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/DataSetFormView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/AdvancedEntitySearchDropdown.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/AdvancedEntitySearchDropdown.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/AdvancedEntitySearchDropdown.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/AdvancedEntitySearchDropdown.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/DatasetViewerView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/ImagePreviewIconLoader.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/ImagePreviewIconLoader.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/ImagePreviewIconLoader.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/ImagePreviewIconLoader.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterCopyNotebookView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DataSetForm/widgets/JupyterNotebookView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DrawingBoards/DrawingBoardsView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorUtil.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorUtil.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorUtil.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorUtil.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/DropboxMonitorView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/DropboxMonitor/modal/DropboxLogsView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentForm/ExperimentFormView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ExperimentTable/ExperimentTableView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Export/ExportTreeView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/HierarchyTableView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/HierarchyTable/widgets/HierarchyFilterView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/History/HistoryView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Inventory/InventoryView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/LabNotebook/LabNotebookView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ProjectForm/ProjectFormView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ResearchCollectionExport/ResearchCollectionExportView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/SampleFormView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/CommentsView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DeleteEntityView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/DilutionTableView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/FreeFormTableView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/LinksView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/SampleField.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/StorageListView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleForm/widgets/ordering/NewProductsView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/SampleTableView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/BatchView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/MoveSampleView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SampleTable/widgets/TypeAndFileView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SettingsForm/SettingsFormView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Shared/widgets/MoveEntityView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SideMenu/SideMenuWidgetView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/SpaceForm/SpaceFormView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/Stock/StockView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/StorageManagerView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/GridView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/StorageManager/widgets/StorageView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/TrashManager/TrashManagerView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UnarchivingHelper/UnarchivingHelperView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManagementConfig/UserManagementConfigView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/UserManagerView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/CreateUserView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserManager/modal/ResetPasswordView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/UserProfile/UserProfileView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/VocabularyManager/VocabularyManagerView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportController.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportController.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportController.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportController.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportModel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportModel.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportModel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportModel.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportView.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportView.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportView.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/ZenodoExport/ZenodoExportView.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/legacy/SampleHierarchy.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/legacy/SampleHierarchy.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/legacy/SampleHierarchy.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/views/legacy/SampleHierarchy.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js.map similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js.map rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/DOMPurify/purify.js.map diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker-standalone.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker-standalone.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker-standalone.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker-standalone.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/moment.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/moment.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/moment.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-datetimepicker/js/moment.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/js/bootstrap-filestyle.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/js/bootstrap-filestyle.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/js/bootstrap-filestyle.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-filestyle/js/bootstrap-filestyle.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/css/bootstrap-multiselect.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/css/bootstrap-multiselect.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/css/bootstrap-multiselect.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/css/bootstrap-multiselect.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/js/bootstrap-multiselect.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/js/bootstrap-multiselect.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/js/bootstrap-multiselect.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-multiselect/js/bootstrap-multiselect.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/css/bootstrap-slider.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/css/bootstrap-slider.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/css/bootstrap-slider.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/css/bootstrap-slider.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js similarity index 96% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js index fe752f529576ce012934a20024edec876a8d57aa..0dcdf1a7edbe52ee6f30d9ded8542178fc285985 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-slider/js/bootstrap-slider.js @@ -1,388 +1,388 @@ -/* ========================================================= - * bootstrap-slider.js v2.0.0 - * http://www.eyecon.ro/bootstrap-slider - * ========================================================= - * Copyright 2012 Stefan Petre - * - * 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. - * ========================================================= */ - -!function( $ ) { - - var Slider = function(element, options) { - this.element = $(element); - this.picker = $('<div class="slider">'+ - '<div class="slider-track">'+ - '<div class="slider-selection"></div>'+ - '<div class="slider-handle"></div>'+ - '<div class="slider-handle"></div>'+ - '</div>'+ - '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'+ - '</div>') - .insertBefore(this.element) - .append(this.element); - this.id = this.element.data('slider-id')||options.id; - if (this.id) { - this.picker[0].id = this.id; - } - - if (typeof Modernizr !== 'undefined' && Modernizr.touch) { - this.touchCapable = true; - } - - var tooltip = this.element.data('slider-tooltip')||options.tooltip; - - this.tooltip = this.picker.find('.tooltip'); - this.tooltipInner = this.tooltip.find('div.tooltip-inner'); - - this.orientation = this.element.data('slider-orientation')||options.orientation; - switch(this.orientation) { - case 'vertical': - this.picker.addClass('slider-vertical'); - this.stylePos = 'top'; - this.mousePos = 'pageY'; - this.sizePos = 'offsetHeight'; - this.tooltip.addClass('right')[0].style.left = '100%'; - break; - default: - this.picker - .addClass('slider-horizontal') - .css('width', this.element.outerWidth()); - this.orientation = 'horizontal'; - this.stylePos = 'left'; - this.mousePos = 'pageX'; - this.sizePos = 'offsetWidth'; - this.tooltip.addClass('top')[0].style.top = -this.tooltip.outerHeight() - 14 + 'px'; - break; - } - - this.min = this.element.data('slider-min')||options.min; - this.max = this.element.data('slider-max')||options.max; - this.step = this.element.data('slider-step')||options.step; - this.value = this.element.data('slider-value')||options.value; - if (this.value[1]) { - this.range = true; - } - - this.selection = this.element.data('slider-selection')||options.selection; - this.selectionEl = this.picker.find('.slider-selection'); - if (this.selection === 'none') { - this.selectionEl.addClass('hide'); - } - this.selectionElStyle = this.selectionEl[0].style; - - - this.handle1 = this.picker.find('.slider-handle:first'); - this.handle1Stype = this.handle1[0].style; - this.handle2 = this.picker.find('.slider-handle:last'); - this.handle2Stype = this.handle2[0].style; - - var handle = this.element.data('slider-handle')||options.handle; - switch(handle) { - case 'round': - this.handle1.addClass('round'); - this.handle2.addClass('round'); - break - case 'triangle': - this.handle1.addClass('triangle'); - this.handle2.addClass('triangle'); - break - } - - if (this.range) { - this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0])); - this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1])); - } else { - this.value = [ Math.max(this.min, Math.min(this.max, this.value))]; - this.handle2.addClass('hide'); - if (this.selection == 'after') { - this.value[1] = this.max; - } else { - this.value[1] = this.min; - } - } - this.diff = this.max - this.min; - this.percentage = [ - (this.value[0]-this.min)*100/this.diff, - (this.value[1]-this.min)*100/this.diff, - this.step*100/this.diff - ]; - - this.offset = this.picker.offset(); - this.size = this.picker[0][this.sizePos]; - - this.formater = options.formater; - - this.layout(); - - if (this.touchCapable) { - // Touch: Bind touch events: - this.picker.on({ - touchstart: $.proxy(this.mousedown, this) - }); - } else { - this.picker.on({ - mousedown: $.proxy(this.mousedown, this) - }); - } - - if (tooltip === 'show') { - this.picker.on({ - mouseenter: $.proxy(this.showTooltip, this), - mouseleave: $.proxy(this.hideTooltip, this) - }); - } else { - this.tooltip.addClass('hide'); - } - }; - - Slider.prototype = { - constructor: Slider, - - over: false, - inDrag: false, - - showTooltip: function(){ - this.tooltip.addClass('in'); - //var left = Math.round(this.percent*this.width); - //this.tooltip.css('left', left - this.tooltip.outerWidth()/2); - this.over = true; - }, - - hideTooltip: function(){ - if (this.inDrag === false) { - this.tooltip.removeClass('in'); - } - this.over = false; - }, - - layout: function(){ - this.handle1Stype[this.stylePos] = this.percentage[0]+'%'; - this.handle2Stype[this.stylePos] = this.percentage[1]+'%'; - if (this.orientation == 'vertical') { - this.selectionElStyle.top = Math.min(this.percentage[0], this.percentage[1]) +'%'; - this.selectionElStyle.height = Math.abs(this.percentage[0] - this.percentage[1]) +'%'; - } else { - this.selectionElStyle.left = Math.min(this.percentage[0], this.percentage[1]) +'%'; - this.selectionElStyle.width = Math.abs(this.percentage[0] - this.percentage[1]) +'%'; - } - if (this.range) { - this.tooltipInner.text( - this.formater(this.value[0]) + - ' : ' + - this.formater(this.value[1]) - ); - this.tooltip[0].style[this.stylePos] = this.size * (this.percentage[0] + (this.percentage[1] - this.percentage[0])/2)/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px'; - } else { - this.tooltipInner.text( - this.formater(this.value[0]) - ); - this.tooltip[0].style[this.stylePos] = this.size * this.percentage[0]/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px'; - } - }, - - mousedown: function(ev) { - - // Touch: Get the original event: - if (this.touchCapable && ev.type === 'touchstart') { - ev = ev.originalEvent; - } - - this.offset = this.picker.offset(); - this.size = this.picker[0][this.sizePos]; - - var percentage = this.getPercentage(ev); - - if (this.range) { - var diff1 = Math.abs(this.percentage[0] - percentage); - var diff2 = Math.abs(this.percentage[1] - percentage); - this.dragged = (diff1 < diff2) ? 0 : 1; - } else { - this.dragged = 0; - } - - this.percentage[this.dragged] = percentage; - this.layout(); - - if (this.touchCapable) { - // Touch: Bind touch events: - $(document).on({ - touchmove: $.proxy(this.mousemove, this), - touchend: $.proxy(this.mouseup, this) - }); - } else { - $(document).on({ - mousemove: $.proxy(this.mousemove, this), - mouseup: $.proxy(this.mouseup, this) - }); - } - - this.inDrag = true; - var val = this.calculateValue(); - this.element.trigger({ - type: 'slideStart', - value: val - }).trigger({ - type: 'slide', - value: val - }); - return false; - }, - - mousemove: function(ev) { - - // Touch: Get the original event: - if (this.touchCapable && ev.type === 'touchmove') { - ev = ev.originalEvent; - } - - var percentage = this.getPercentage(ev); - if (this.range) { - if (this.dragged === 0 && this.percentage[1] < percentage) { - this.percentage[0] = this.percentage[1]; - this.dragged = 1; - } else if (this.dragged === 1 && this.percentage[0] > percentage) { - this.percentage[1] = this.percentage[0]; - this.dragged = 0; - } - } - this.percentage[this.dragged] = percentage; - this.layout(); - var val = this.calculateValue(); - this.element - .trigger({ - type: 'slide', - value: val - }) - .data('value', val) - .prop('value', val); - return false; - }, - - mouseup: function(ev) { - if (this.touchCapable) { - // Touch: Bind touch events: - $(document).off({ - touchmove: this.mousemove, - touchend: this.mouseup - }); - } else { - $(document).off({ - mousemove: this.mousemove, - mouseup: this.mouseup - }); - } - - this.inDrag = false; - if (this.over == false) { - this.hideTooltip(); - } - this.element; - var val = this.calculateValue(); - this.element - .trigger({ - type: 'slideStop', - value: val - }) - .data('value', val) - .prop('value', val); - return false; - }, - - calculateValue: function() { - var val; - if (this.range) { - val = [ - (this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step), - (this.min + Math.round((this.diff * this.percentage[1]/100)/this.step)*this.step) - ]; - this.value = val; - } else { - val = (this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step); - this.value = [val, this.value[1]]; - } - return val; - }, - - getPercentage: function(ev) { - if (this.touchCapable) { - ev = ev.touches[0]; - } - var percentage = (ev[this.mousePos] - this.offset[this.stylePos])*100/this.size; - percentage = Math.round(percentage/this.percentage[2])*this.percentage[2]; - return Math.max(0, Math.min(100, percentage)); - }, - - getValue: function() { - if (this.range) { - return this.value; - } - return this.value[0]; - }, - - setValue: function(val) { - this.value = val; - - if (this.range) { - this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0])); - this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1])); - } else { - this.value = [ Math.max(this.min, Math.min(this.max, this.value))]; - this.handle2.addClass('hide'); - if (this.selection == 'after') { - this.value[1] = this.max; - } else { - this.value[1] = this.min; - } - } - this.diff = this.max - this.min; - this.percentage = [ - (this.value[0]-this.min)*100/this.diff, - (this.value[1]-this.min)*100/this.diff, - this.step*100/this.diff - ]; - this.layout(); - } - }; - - $.fn.slider = function ( option, val ) { - return this.each(function () { - var $this = $(this), - data = $this.data('slider'), - options = typeof option === 'object' && option; - if (!data) { - $this.data('slider', (data = new Slider(this, $.extend({}, $.fn.slider.defaults,options)))); - } - if (typeof option == 'string') { - data[option](val); - } - }) - }; - - $.fn.slider.defaults = { - min: 0, - max: 10, - step: 1, - orientation: 'horizontal', - value: 5, - selection: 'before', - tooltip: 'show', - handle: 'round', - formater: function(value) { - return value; - } - }; - - $.fn.slider.Constructor = Slider; - +/* ========================================================= + * bootstrap-slider.js v2.0.0 + * http://www.eyecon.ro/bootstrap-slider + * ========================================================= + * Copyright 2012 Stefan Petre + * + * 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. + * ========================================================= */ + +!function( $ ) { + + var Slider = function(element, options) { + this.element = $(element); + this.picker = $('<div class="slider">'+ + '<div class="slider-track">'+ + '<div class="slider-selection"></div>'+ + '<div class="slider-handle"></div>'+ + '<div class="slider-handle"></div>'+ + '</div>'+ + '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'+ + '</div>') + .insertBefore(this.element) + .append(this.element); + this.id = this.element.data('slider-id')||options.id; + if (this.id) { + this.picker[0].id = this.id; + } + + if (typeof Modernizr !== 'undefined' && Modernizr.touch) { + this.touchCapable = true; + } + + var tooltip = this.element.data('slider-tooltip')||options.tooltip; + + this.tooltip = this.picker.find('.tooltip'); + this.tooltipInner = this.tooltip.find('div.tooltip-inner'); + + this.orientation = this.element.data('slider-orientation')||options.orientation; + switch(this.orientation) { + case 'vertical': + this.picker.addClass('slider-vertical'); + this.stylePos = 'top'; + this.mousePos = 'pageY'; + this.sizePos = 'offsetHeight'; + this.tooltip.addClass('right')[0].style.left = '100%'; + break; + default: + this.picker + .addClass('slider-horizontal') + .css('width', this.element.outerWidth()); + this.orientation = 'horizontal'; + this.stylePos = 'left'; + this.mousePos = 'pageX'; + this.sizePos = 'offsetWidth'; + this.tooltip.addClass('top')[0].style.top = -this.tooltip.outerHeight() - 14 + 'px'; + break; + } + + this.min = this.element.data('slider-min')||options.min; + this.max = this.element.data('slider-max')||options.max; + this.step = this.element.data('slider-step')||options.step; + this.value = this.element.data('slider-value')||options.value; + if (this.value[1]) { + this.range = true; + } + + this.selection = this.element.data('slider-selection')||options.selection; + this.selectionEl = this.picker.find('.slider-selection'); + if (this.selection === 'none') { + this.selectionEl.addClass('hide'); + } + this.selectionElStyle = this.selectionEl[0].style; + + + this.handle1 = this.picker.find('.slider-handle:first'); + this.handle1Stype = this.handle1[0].style; + this.handle2 = this.picker.find('.slider-handle:last'); + this.handle2Stype = this.handle2[0].style; + + var handle = this.element.data('slider-handle')||options.handle; + switch(handle) { + case 'round': + this.handle1.addClass('round'); + this.handle2.addClass('round'); + break + case 'triangle': + this.handle1.addClass('triangle'); + this.handle2.addClass('triangle'); + break + } + + if (this.range) { + this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0])); + this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1])); + } else { + this.value = [ Math.max(this.min, Math.min(this.max, this.value))]; + this.handle2.addClass('hide'); + if (this.selection == 'after') { + this.value[1] = this.max; + } else { + this.value[1] = this.min; + } + } + this.diff = this.max - this.min; + this.percentage = [ + (this.value[0]-this.min)*100/this.diff, + (this.value[1]-this.min)*100/this.diff, + this.step*100/this.diff + ]; + + this.offset = this.picker.offset(); + this.size = this.picker[0][this.sizePos]; + + this.formater = options.formater; + + this.layout(); + + if (this.touchCapable) { + // Touch: Bind touch events: + this.picker.on({ + touchstart: $.proxy(this.mousedown, this) + }); + } else { + this.picker.on({ + mousedown: $.proxy(this.mousedown, this) + }); + } + + if (tooltip === 'show') { + this.picker.on({ + mouseenter: $.proxy(this.showTooltip, this), + mouseleave: $.proxy(this.hideTooltip, this) + }); + } else { + this.tooltip.addClass('hide'); + } + }; + + Slider.prototype = { + constructor: Slider, + + over: false, + inDrag: false, + + showTooltip: function(){ + this.tooltip.addClass('in'); + //var left = Math.round(this.percent*this.width); + //this.tooltip.css('left', left - this.tooltip.outerWidth()/2); + this.over = true; + }, + + hideTooltip: function(){ + if (this.inDrag === false) { + this.tooltip.removeClass('in'); + } + this.over = false; + }, + + layout: function(){ + this.handle1Stype[this.stylePos] = this.percentage[0]+'%'; + this.handle2Stype[this.stylePos] = this.percentage[1]+'%'; + if (this.orientation == 'vertical') { + this.selectionElStyle.top = Math.min(this.percentage[0], this.percentage[1]) +'%'; + this.selectionElStyle.height = Math.abs(this.percentage[0] - this.percentage[1]) +'%'; + } else { + this.selectionElStyle.left = Math.min(this.percentage[0], this.percentage[1]) +'%'; + this.selectionElStyle.width = Math.abs(this.percentage[0] - this.percentage[1]) +'%'; + } + if (this.range) { + this.tooltipInner.text( + this.formater(this.value[0]) + + ' : ' + + this.formater(this.value[1]) + ); + this.tooltip[0].style[this.stylePos] = this.size * (this.percentage[0] + (this.percentage[1] - this.percentage[0])/2)/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px'; + } else { + this.tooltipInner.text( + this.formater(this.value[0]) + ); + this.tooltip[0].style[this.stylePos] = this.size * this.percentage[0]/100 - (this.orientation === 'vertical' ? this.tooltip.outerHeight()/2 : this.tooltip.outerWidth()/2) +'px'; + } + }, + + mousedown: function(ev) { + + // Touch: Get the original event: + if (this.touchCapable && ev.type === 'touchstart') { + ev = ev.originalEvent; + } + + this.offset = this.picker.offset(); + this.size = this.picker[0][this.sizePos]; + + var percentage = this.getPercentage(ev); + + if (this.range) { + var diff1 = Math.abs(this.percentage[0] - percentage); + var diff2 = Math.abs(this.percentage[1] - percentage); + this.dragged = (diff1 < diff2) ? 0 : 1; + } else { + this.dragged = 0; + } + + this.percentage[this.dragged] = percentage; + this.layout(); + + if (this.touchCapable) { + // Touch: Bind touch events: + $(document).on({ + touchmove: $.proxy(this.mousemove, this), + touchend: $.proxy(this.mouseup, this) + }); + } else { + $(document).on({ + mousemove: $.proxy(this.mousemove, this), + mouseup: $.proxy(this.mouseup, this) + }); + } + + this.inDrag = true; + var val = this.calculateValue(); + this.element.trigger({ + type: 'slideStart', + value: val + }).trigger({ + type: 'slide', + value: val + }); + return false; + }, + + mousemove: function(ev) { + + // Touch: Get the original event: + if (this.touchCapable && ev.type === 'touchmove') { + ev = ev.originalEvent; + } + + var percentage = this.getPercentage(ev); + if (this.range) { + if (this.dragged === 0 && this.percentage[1] < percentage) { + this.percentage[0] = this.percentage[1]; + this.dragged = 1; + } else if (this.dragged === 1 && this.percentage[0] > percentage) { + this.percentage[1] = this.percentage[0]; + this.dragged = 0; + } + } + this.percentage[this.dragged] = percentage; + this.layout(); + var val = this.calculateValue(); + this.element + .trigger({ + type: 'slide', + value: val + }) + .data('value', val) + .prop('value', val); + return false; + }, + + mouseup: function(ev) { + if (this.touchCapable) { + // Touch: Bind touch events: + $(document).off({ + touchmove: this.mousemove, + touchend: this.mouseup + }); + } else { + $(document).off({ + mousemove: this.mousemove, + mouseup: this.mouseup + }); + } + + this.inDrag = false; + if (this.over == false) { + this.hideTooltip(); + } + this.element; + var val = this.calculateValue(); + this.element + .trigger({ + type: 'slideStop', + value: val + }) + .data('value', val) + .prop('value', val); + return false; + }, + + calculateValue: function() { + var val; + if (this.range) { + val = [ + (this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step), + (this.min + Math.round((this.diff * this.percentage[1]/100)/this.step)*this.step) + ]; + this.value = val; + } else { + val = (this.min + Math.round((this.diff * this.percentage[0]/100)/this.step)*this.step); + this.value = [val, this.value[1]]; + } + return val; + }, + + getPercentage: function(ev) { + if (this.touchCapable) { + ev = ev.touches[0]; + } + var percentage = (ev[this.mousePos] - this.offset[this.stylePos])*100/this.size; + percentage = Math.round(percentage/this.percentage[2])*this.percentage[2]; + return Math.max(0, Math.min(100, percentage)); + }, + + getValue: function() { + if (this.range) { + return this.value; + } + return this.value[0]; + }, + + setValue: function(val) { + this.value = val; + + if (this.range) { + this.value[0] = Math.max(this.min, Math.min(this.max, this.value[0])); + this.value[1] = Math.max(this.min, Math.min(this.max, this.value[1])); + } else { + this.value = [ Math.max(this.min, Math.min(this.max, this.value))]; + this.handle2.addClass('hide'); + if (this.selection == 'after') { + this.value[1] = this.max; + } else { + this.value[1] = this.min; + } + } + this.diff = this.max - this.min; + this.percentage = [ + (this.value[0]-this.min)*100/this.diff, + (this.value[1]-this.min)*100/this.diff, + this.step*100/this.diff + ]; + this.layout(); + } + }; + + $.fn.slider = function ( option, val ) { + return this.each(function () { + var $this = $(this), + data = $this.data('slider'), + options = typeof option === 'object' && option; + if (!data) { + $this.data('slider', (data = new Slider(this, $.extend({}, $.fn.slider.defaults,options)))); + } + if (typeof option == 'string') { + data[option](val); + } + }) + }; + + $.fn.slider.defaults = { + min: 0, + max: 10, + step: 1, + orientation: 'horizontal', + value: 5, + selection: 'before', + tooltip: 'show', + handle: 'round', + formater: function(value) { + return value; + } + }; + + $.fn.slider.Constructor = Slider; + }( window.jQuery ); \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/css/toggle-switch.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/css/toggle-switch.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/css/toggle-switch.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap-switch/css/toggle-switch.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css.map similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css.map rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.css.map diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap-theme.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css.map similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css.map rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.css.map diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/css/bootstrap.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.eot diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.svg diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/bootstrap.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/npm.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/npm.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/npm.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bootstrap/js/npm.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.BWIPP b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.BWIPP similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.BWIPP rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.BWIPP diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.CANVASTOBLOB b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.CANVASTOBLOB similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.CANVASTOBLOB rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.CANVASTOBLOB diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.EMSCRIPTEN b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.EMSCRIPTEN similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.EMSCRIPTEN rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.EMSCRIPTEN diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FILESAVER b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FILESAVER similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FILESAVER rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FILESAVER diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FREETYPE b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FREETYPE similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FREETYPE rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.FREETYPE diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA similarity index 97% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA index f1a20ac1a8ade9c6aa7dea55d39661b7e4e7624c..1456c1809da62fb01a5ef2403d6e6f271cfedb13 100755 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/LICENSE.INCONSOLATA @@ -1,97 +1,97 @@ -Copyright (c) <dates>, <Copyright Holder> (<URL|email>), -with Reserved Font Name <Reserved Font Name>. -Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>), -with Reserved Font Name <additional Reserved Font Name>. -Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>). - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +Copyright (c) <dates>, <Copyright Holder> (<URL|email>), +with Reserved Font Name <Reserved Font Name>. +Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>), +with Reserved Font Name <additional Reserved Font Name>. +Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>). + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/README.md b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/README.md similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/README.md rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/README.md diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/barcode.ps b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/barcode.ps similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/barcode.ps rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/barcode.ps diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.cmd b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.cmd similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.cmd rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.cmd diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bin/node-bwipjs.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bitmap.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bitmap.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bitmap.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bitmap.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bwipjs.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bwipjs.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-bwipjs.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-fonts.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-fonts.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-fonts.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/browser-fonts.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipjs.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipjs.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipjs.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp-min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp-min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp-min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp-min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/bwipp.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/cli-bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/cli-bwipjs.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/cli-bwipjs.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/cli-bwipjs.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/demo.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/demo.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/demo.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/demo.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/BWIPJS-Symbol.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/BWIPJS-Symbol.otf similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/BWIPJS-Symbol.otf rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/BWIPJS-Symbol.otf diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/Inconsolata.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/Inconsolata.otf similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/Inconsolata.otf rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/Inconsolata.otf diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRA.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRA.otf similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRA.otf rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRA.otf diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRB.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRB.otf similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRB.otf rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/OCRB.otf diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0-desc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0-desc.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0-desc.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0-desc.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-10.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-10.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-10.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-108.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-108.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-108.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-108.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-12.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-12.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-12.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-12.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-16.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-16.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-16.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-16.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-18.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-18.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-18.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-18.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-20.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-20.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-20.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-24.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-24.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-24.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-24.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-27.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-27.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-27.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-27.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-30.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-30.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-30.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-32.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-32.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-32.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-32.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-36.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-36.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-36.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-36.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-40.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-40.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-40.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-45.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-45.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-45.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-45.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-48.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-48.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-48.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-48.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-50.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-50.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-50.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-54.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-54.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-54.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-54.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-56.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-56.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-56.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-56.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-60.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-60.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-60.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-63.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-63.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-63.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-63.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-64.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-64.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-64.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-64.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-70.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-70.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-70.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-72.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-72.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-72.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-72.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-8.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-8.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-8.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-8.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-80.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-80.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-80.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-81.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-81.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-81.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-81.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-84.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-84.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-84.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-84.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-9.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-9.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-9.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-9.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-90.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-90.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-90.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-96.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-96.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-96.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0a-96.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-10.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-10.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-10.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-108.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-108.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-108.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-108.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-12.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-12.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-12.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-12.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-16.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-16.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-16.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-16.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-18.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-18.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-18.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-18.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-20.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-20.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-20.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-24.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-24.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-24.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-24.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-27.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-27.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-27.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-27.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-30.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-30.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-30.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-32.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-32.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-32.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-32.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-36.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-36.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-36.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-36.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-40.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-40.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-40.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-45.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-45.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-45.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-45.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-48.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-48.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-48.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-48.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-50.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-50.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-50.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-54.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-54.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-54.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-54.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-56.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-56.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-56.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-56.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-60.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-60.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-60.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-63.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-63.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-63.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-63.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-64.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-64.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-64.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-64.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-70.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-70.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-70.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-72.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-72.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-72.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-72.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-8.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-8.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-8.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-8.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-80.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-80.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-80.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-81.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-81.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-81.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-81.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-84.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-84.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-84.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-84.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-9.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-9.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-9.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-9.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-90.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-90.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-90.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-96.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-96.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-96.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt0m-96.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1-desc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1-desc.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1-desc.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1-desc.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-10.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-10.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-10.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-108.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-108.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-108.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-108.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-12.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-12.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-12.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-12.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-16.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-16.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-16.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-16.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-18.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-18.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-18.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-18.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-20.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-20.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-20.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-24.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-24.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-24.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-24.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-27.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-27.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-27.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-27.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-30.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-30.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-30.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-32.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-32.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-32.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-32.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-36.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-36.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-36.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-36.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-40.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-40.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-40.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-45.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-45.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-45.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-45.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-48.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-48.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-48.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-48.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-50.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-50.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-50.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-54.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-54.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-54.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-54.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-56.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-56.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-56.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-56.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-60.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-60.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-60.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-63.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-63.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-63.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-63.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-64.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-64.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-64.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-64.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-70.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-70.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-70.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-72.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-72.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-72.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-72.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-8.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-8.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-8.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-8.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-80.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-80.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-80.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-81.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-81.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-81.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-81.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-84.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-84.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-84.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-84.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-9.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-9.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-9.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-9.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-90.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-90.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-90.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-96.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-96.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-96.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1a-96.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-10.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-10.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-10.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-108.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-108.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-108.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-108.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-12.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-12.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-12.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-12.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-16.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-16.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-16.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-16.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-18.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-18.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-18.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-18.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-20.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-20.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-20.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-24.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-24.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-24.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-24.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-27.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-27.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-27.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-27.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-30.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-30.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-30.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-32.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-32.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-32.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-32.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-36.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-36.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-36.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-36.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-40.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-40.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-40.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-45.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-45.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-45.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-45.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-48.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-48.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-48.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-48.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-50.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-50.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-50.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-54.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-54.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-54.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-54.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-56.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-56.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-56.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-56.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-60.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-60.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-60.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-63.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-63.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-63.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-63.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-64.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-64.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-64.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-64.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-70.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-70.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-70.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-72.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-72.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-72.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-72.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-8.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-8.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-8.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-8.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-80.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-80.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-80.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-81.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-81.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-81.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-81.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-84.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-84.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-84.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-84.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-9.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-9.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-9.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-9.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-90.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-90.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-90.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-96.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-96.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-96.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt1m-96.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2-desc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2-desc.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2-desc.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2-desc.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-10.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-10.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-10.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-20.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-20.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-20.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-30.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-30.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-30.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-40.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-40.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-40.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-50.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-50.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-50.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-60.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-60.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-60.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-70.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-70.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-70.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-80.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-80.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-80.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-90.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-90.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2a-90.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-10.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-10.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-10.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-10.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-20.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-20.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-20.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-20.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-30.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-30.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-30.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-30.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-40.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-40.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-40.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-40.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-50.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-50.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-50.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-50.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-60.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-60.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-60.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-60.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-70.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-70.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-70.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-70.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-80.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-80.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-80.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-80.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-90.bin b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-90.bin similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-90.bin rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/fonts/fnt2m-90.bin diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/freetype.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/freetype.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/freetype.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/freetype.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/bitmap.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/bitmap.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/bitmap.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/bitmap.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/canvas-toblob.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/canvas-toblob.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/canvas-toblob.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/canvas-toblob.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/demo.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/demo.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/demo.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/demo.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filedrop-min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filedrop-min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filedrop-min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filedrop-min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filesaver.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filesaver.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filesaver.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/filesaver.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/fonts.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/fonts.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/fonts.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/fonts.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_0_aaaaaa_40x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_0_aaaaaa_40x100.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_0_aaaaaa_40x100.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_0_aaaaaa_40x100.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_75_ffffff_40x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_75_ffffff_40x100.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_75_ffffff_40x100.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_flat_75_ffffff_40x100.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_55_fbf9ee_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_55_fbf9ee_1x400.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_55_fbf9ee_1x400.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_55_fbf9ee_1x400.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_65_ffffff_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_65_ffffff_1x400.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_dadada_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_dadada_1x400.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_dadada_1x400.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_dadada_1x400.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_e6e6e6_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_e6e6e6_1x400.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_e6e6e6_1x400.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_75_e6e6e6_1x400.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_95_fef1ec_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_95_fef1ec_1x400.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_95_fef1ec_1x400.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_glass_95_fef1ec_1x400.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-bg_highlight-soft_75_cccccc_1x100.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_222222_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_222222_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_222222_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_222222_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_2e83ff_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_2e83ff_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_2e83ff_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_2e83ff_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_454545_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_454545_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_454545_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_454545_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_888888_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_888888_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_888888_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_888888_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_cd0a0a_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_cd0a0a_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_cd0a0a_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/images/ui-icons_cd0a0a_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery-ui.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/jquery.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/symdesc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/symdesc.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/symdesc.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/symdesc.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/xhr-fonts.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/xhr-fonts.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/xhr-fonts.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/lib/xhr-fonts.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/mydemo.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/mydemo.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/mydemo.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/mydemo.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bitmap.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bitmap.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bitmap.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bitmap.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bwipjs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bwipjs.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bwipjs.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-bwipjs.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-fonts.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-fonts.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-fonts.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/node-fonts.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/package.json b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/package.json similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/package.json rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/package.json diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/server.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/server.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/server.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/bwip-js/server.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/c3/c3.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/html4.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/html4.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/html4.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/html4.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/uri.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/uri.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/uri.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/lib/uri.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/sanitizer.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/sanitizer.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/sanitizer.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/caja-HTML-sanitizer/js/sanitizer.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build.sh b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build.sh similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build.sh rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build.sh diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build/DELETE_ME b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build/DELETE_ME similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build/DELETE_ME rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/build/DELETE_ME diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/package.json b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/package.json similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/package.json rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/package.json diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/src/ckeditor.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/src/ckeditor.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/src/ckeditor.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/src/ckeditor.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/webpack.config.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/webpack.config.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/webpack.config.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-18-src/webpack.config.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build.sh b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build.sh similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build.sh rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build.sh diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/flow.py b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build/DELETE_ME similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/flow.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/build/DELETE_ME diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/package.json b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/package.json similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/package.json rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/package.json diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/src/ckeditor.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/src/ckeditor.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/src/ckeditor.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/src/ckeditor.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/webpack.config.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/webpack.config.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/webpack.config.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/custom-build-34-src/webpack.config.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js.map similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js.map rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/ckeditor.js.map diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/af.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/af.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/af.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/af.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ar.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ar.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ar.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ar.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ast.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ast.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ast.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ast.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/az.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/az.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/az.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/az.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/bg.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/bg.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/bg.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/bg.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ca.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ca.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ca.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ca.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/cs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/cs.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/cs.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/cs.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/da.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/da.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/da.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/da.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de-ch.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de-ch.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de-ch.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de-ch.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/de.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/el.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/el.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/el.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/el.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-au.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-au.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-au.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-au.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-gb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-gb.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-gb.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/en-gb.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eo.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eo.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eo.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eo.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/es.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/es.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/es.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/es.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/et.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/et.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/et.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/et.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eu.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eu.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/eu.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fa.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fa.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fa.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fa.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fi.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fi.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fi.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fr.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fr.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/fr.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gu.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gu.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/gu.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/he.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/he.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/he.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/he.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hr.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hr.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hr.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hu.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hu.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/hu.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/id.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/id.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/id.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/id.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/it.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/it.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/it.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/it.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ja.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ja.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ja.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ja.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/km.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/km.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/km.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/km.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/kn.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/kn.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/kn.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/kn.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ko.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ko.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ko.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ko.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ku.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ku.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ku.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ku.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lt.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lt.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lt.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lv.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lv.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lv.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/lv.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ms.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ms.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ms.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ms.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nb.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nb.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nb.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ne.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ne.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ne.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ne.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/nl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/no.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/no.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/no.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/no.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/oc.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/oc.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/oc.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/oc.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt-br.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt-br.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt-br.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt-br.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/pt.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ro.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ro.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ro.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ro.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ru.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ru.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ru.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ru.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/si.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/si.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/si.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/si.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sk.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sk.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sk.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sq.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sq.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sq.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sq.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr-latn.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr-latn.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr-latn.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr-latn.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sr.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sv.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sv.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sv.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/sv.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/th.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/th.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/th.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/th.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tr.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tr.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tr.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tt.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tt.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/tt.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ug.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ug.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ug.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/ug.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/uk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/uk.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/uk.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/uk.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/vi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/vi.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/vi.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/vi.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh-cn.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh-cn.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh-cn.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh-cn.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/ckeditor/js/translations/zh.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/cycle/js/cycle.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/cycle/js/cycle.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/cycle/js/cycle.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/cycle/js/cycle.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/js/dagre-d3.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/js/dagre-d3.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/js/dagre-d3.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3-dagre/js/dagre-d3.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/d3/js/d3.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/css/drawingboard.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/css/drawingboard.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/css/drawingboard.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/css/drawingboard.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/js/drawingboard.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/js/drawingboard.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/js/drawingboard.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/drawingboard/js/drawingboard.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/js/FileSaver.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/js/FileSaver.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/js/FileSaver.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/filesaver/js/FileSaver.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/css/font-awesome.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/FontAwesome.otf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/FontAwesome.otf similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/FontAwesome.otf rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/FontAwesome.otf diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.eot b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.eot similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.eot rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.eot diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.svg similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.svg rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.svg diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.ttf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.ttf similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.ttf rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.ttf diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff2 b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff2 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff2 rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/font-awesome/fonts/fontawesome-webfont.woff2 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css.map similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css.map rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.css.map diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/css/fuelux.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.eot b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.eot similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.eot rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.eot diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.svg b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.svg similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.svg rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.svg diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.ttf b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.ttf similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.ttf rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.ttf diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.woff b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.woff similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.woff rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/fonts/fuelux.woff diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/fuelux/js/fuelux.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/doc/index.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/doc/index.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/doc/index.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/doc/index.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/grid/js/Grid.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js similarity index 97% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js index a39a4ecfdd3245aabe64a815d3d322869fb68ca4..1ab25fc059f845deb73bb4bbcf43d40b2b1c142b 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jexcel/jexcel.js @@ -1,12921 +1,12921 @@ -/** - * (c) jExcel v3.6.1 - * - * Author: Paul Hodel <paul.hodel@gmail.com> - * Website: https://bossanova.uk/jexcel/ - * Description: Create amazing web based spreadsheets. - * - * This software is distribute under MIT License - * - * ROADMAP: - * Frozen columns - * Meta information - */ - -'use strict'; - -if (! jSuites && typeof(require) === 'function') { - var jSuites = require('jsuites'); - require('jsuites/dist/jsuites.css'); -} - -var jexcel = (function(el, options) { - // Create jexcel object - var obj = {}; - obj.options = {}; - - // Loading default configuration - var defaults = { - // External data - url:null, - // Data - data:null, - // Copy behavior - copyCompatibility:false, - // Rows and columns definitions - rows:[], - columns:[], - // Deprected legacy options - colHeaders:[], - colWidths:[], - colAlignments:[], - nestedHeaders:null, - // Column width that is used by default - defaultColWidth:50, - defaultColAlign:'center', - // Spare rows and columns - minSpareRows:0, - minSpareCols:0, - // Minimal table dimensions - minDimensions:[0,0], - // Allow Export - allowExport:true, - // Allow column sorting - columnSorting:true, - // Allow column dragging - columnDrag:false, - // Allow column resizing - columnResize:true, - // Allow row resizing - rowResize:false, - // Allow row dragging - rowDrag:true, - // Allow table edition - editable:true, - // Allow new rows - allowInsertRow:true, - // Allow new rows - allowManualInsertRow:true, - // Allow new columns - allowInsertColumn:true, - // Allow new rows - allowManualInsertColumn:true, - // Allow row delete - allowDeleteRow:true, - // Allow deleting of all rows - allowDeletingAllRows:false, - // Allow column delete - allowDeleteColumn:true, - // Allow rename column - allowRenameColumn:true, - // Allow comments - allowComments:false, - // Global wrap - wordWrap:false, - // Image options - imageOptions: null, - // CSV source - csv:null, - // Filename - csvFileName:'jexcel', - // Consider first line as header - csvHeaders:true, - // Delimiters - csvDelimiter:',', - // Disable corner selection - selectionCopy:true, - // Merged cells - mergeCells:{}, - // Create toolbar - toolbar:null, - // Allow search - search:false, - // Create pagination - pagination:false, - paginationOptions:null, - // Full screen - fullscreen:false, - // Lazy loading - lazyLoading:false, - loadingSpin:false, - // Table overflow - tableOverflow:false, - tableHeight:'300px', - tableWidth:null, - // Meta - meta: null, - // Style - style:null, - // Execute formulas - parseFormulas:true, - autoIncrement:true, - // Event handles - onundo:null, - onredo:null, - onload:null, - onchange:null, - onbeforechange:null, - onafterchanges:null, - onbeforeinsertrow: null, - oninsertrow:null, - onbeforeinsertcolumn: null, - oninsertcolumn:null, - onbeforedeleterow:null, - ondeleterow:null, - onbeforedeletecolumn:null, - ondeletecolumn:null, - onmoverow:null, - onmovecolumn:null, - onresizerow:null, - onresizecolumn:null, - onsort:null, - onselection:null, - onpaste:null, - onbeforepaste:null, - onmerge:null, - onfocus:null, - onblur:null, - onchangeheader:null, - oneditionstart:null, - oneditionend:null, - onchangestyle:null, - onchangemeta:null, - // Customize any cell behavior - updateTable:null, - // Texts - text:{ - noRecordsFound: 'No records found', - showingPage: 'Showing page {0} of {1} entries', - show: 'Show ', - search: 'Search', - entries: ' entries', - columnName: 'Column name', - insertANewColumnBefore: 'Insert a new column before', - insertANewColumnAfter: 'Insert a new column after', - deleteSelectedColumns: 'Delete selected columns', - renameThisColumn: 'Rename this column', - orderAscending: 'Order ascending', - orderDescending: 'Order descending', - insertANewRowBefore: 'Insert a new row before', - insertANewRowAfter: 'Insert a new row after', - deleteSelectedRows: 'Delete selected rows', - editComments: 'Edit comments', - addComments: 'Add comments', - comments: 'Comments', - clearComments: 'Clear comments', - copy: 'Copy...', - paste: 'Paste...', - saveAs: 'Save as...', - about: 'About', - areYouSureToDeleteTheSelectedRows: 'Are you sure to delete the selected rows?', - areYouSureToDeleteTheSelectedColumns: 'Are you sure to delete the selected columns?', - thisActionWillDestroyAnyExistingMergedCellsAreYouSure: 'This action will destroy any existing merged cells. Are you sure?', - thisActionWillClearYourSearchResultsAreYouSure: 'This action will clear your search results. Are you sure?', - thereIsAConflictWithAnotherMergedCell: 'There is a conflict with another merged cell', - invalidMergeProperties: 'Invalid merged properties', - cellAlreadyMerged: 'Cell already merged', - noCellsSelected: 'No cells selected', - }, - // About message - about:"jExcel CE Spreadsheet\nVersion 3.6.1\nAuthor: Paul Hodel <paul.hodel@gmail.com>\nWebsite: https://bossanova.uk/jexcel/v3", - }; - - // Loading initial configuration from user - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = (property == 'text') ? Object.assign(defaults[property], options[property]) : options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Global elements - obj.el = el; - obj.corner = null; - obj.contextMenu = null; - obj.textarea = null; - obj.ads = null; - obj.content = null; - obj.table = null; - obj.thead = null; - obj.tbody = null; - obj.rows = []; - obj.results = null; - obj.searchInput = null; - obj.toolbar = null; - obj.pagination = null; - obj.pageNumber = null; - obj.headerContainer = null; - obj.colgroupContainer = null; - - // Containers - obj.headers = []; - obj.records = []; - obj.history = []; - obj.formula = []; - obj.colgroup = []; - obj.selection = []; - obj.highlighted = []; - obj.selectedCell = null; - obj.selectedContainer = null; - obj.style = []; - obj.data = null; - - // Internal controllers - obj.cursor = null; - obj.historyIndex = -1; - obj.ignoreEvents = false; - obj.ignoreHistory = false; - obj.edition = null; - obj.hashString = null; - obj.resizing = null; - obj.dragging = null; - - // Lazy loading - if (obj.options.lazyLoading == true && (obj.options.tableOverflow == false && obj.options.fullscreen == false)) { - console.error('JEXCEL: The lazyloading only works when tableOverflow = yes or fullscreen = yes'); - obj.options.lazyLoading = false; - } - - /** - * Activate/Disable fullscreen - * use programmatically : table.fullscreen(); or table.fullscreen(true); or table.fullscreen(false); - * @Param {boolean} activate - */ - obj.fullscreen = function(activate) { - // If activate not defined, get reverse options.fullscreen - if (activate == null) { - activate = ! obj.options.fullscreen; - } - - // If change - if (obj.options.fullscreen != activate) { - obj.options.fullscreen = activate; - - // Test LazyLoading conflict - if (activate == true) { - el.classList.add('fullscreen'); - } else { - el.classList.remove('fullscreen'); - } - } - } - - /** - * Prepare the jexcel table - * - * @Param config - */ - obj.prepareTable = function() { - // Loading initial data from remote sources - var results = []; - - // Number of columns - var size = obj.options.columns.length; - - if (obj.options.data && typeof(obj.options.data[0]) !== 'undefined') { - // Data keys - var keys = Object.keys(obj.options.data[0]); - - if (keys.length > size) { - size = keys.length; - } - } - - // Minimal dimensions - if (obj.options.minDimensions[0] > size) { - size = obj.options.minDimensions[0]; - } - - // Requests - var multiple = []; - - // Preparations - for (var i = 0; i < size; i++) { - // Deprected options. You should use only columns - if (! obj.options.colHeaders[i]) { - obj.options.colHeaders[i] = ''; - } - if (! obj.options.colWidths[i]) { - obj.options.colWidths[i] = obj.options.defaultColWidth; - } - if (! obj.options.colAlignments[i]) { - obj.options.colAlignments[i] = obj.options.defaultColAlign; - } - - // Default column description - if (! obj.options.columns[i]) { - obj.options.columns[i] = { type:'text' }; - } else if (! obj.options.columns[i].type) { - obj.options.columns[i].type = 'text'; - } - if (! obj.options.columns[i].name) { - obj.options.columns[i].name = keys && keys[i] ? keys[i] : i; - } - if (! obj.options.columns[i].source) { - obj.options.columns[i].source = []; - } - if (! obj.options.columns[i].options) { - obj.options.columns[i].options = []; - } - if (! obj.options.columns[i].editor) { - obj.options.columns[i].editor = null; - } - if (! obj.options.columns[i].allowEmpty) { - obj.options.columns[i].allowEmpty = false; - } - if (! obj.options.columns[i].title) { - obj.options.columns[i].title = obj.options.colHeaders[i] ? obj.options.colHeaders[i] : ''; - } - if (! obj.options.columns[i].width) { - obj.options.columns[i].width = obj.options.colWidths[i] ? obj.options.colWidths[i] : '50'; - } - if (! obj.options.columns[i].align) { - obj.options.columns[i].align = obj.options.colAlignments[i] ? obj.options.colAlignments[i] : 'center'; - } - - // Pre-load initial source for json autocomplete - if (obj.options.columns[i].type == 'autocomplete' || obj.options.columns[i].type == 'dropdown') { - // if remote content - if (obj.options.columns[i].url) { - multiple.push(jSuites.ajax({ - url: obj.options.columns[i].url, - index: i, - method: 'GET', - dataType: 'json', - multiple: multiple, - success: function(data) { - var source = []; - for (var i = 0; i < data.length; i++) { - obj.options.columns[this.index].source.push(data[i]); - } - }, - complete: function() { - obj.createTable(); - } - })); - } - } else if (obj.options.columns[i].type == 'calendar') { - // Default format for date columns - if (! obj.options.columns[i].options.format) { - obj.options.columns[i].options.format = 'DD/MM/YYYY'; - } - } - } - - // On complete - if (! multiple.length) { - obj.createTable(); - } - } - - obj.createTable = function() { - // Elements - obj.table = document.createElement('table'); - obj.thead = document.createElement('thead'); - obj.tbody = document.createElement('tbody'); - - // Create headers controllers - obj.headers = []; - obj.colgroup = []; - - // Create table container - obj.content = document.createElement('div'); - obj.content.classList.add('jexcel_content'); - - // Create toolbar object - obj.toolbar = document.createElement('div'); - obj.toolbar.classList.add('jexcel_toolbar'); - - // Search - var searchContainer = document.createElement('div'); - var searchText = document.createTextNode((obj.options.text.search) + ': '); - obj.searchInput = document.createElement('input'); - obj.searchInput.classList.add('jexcel_search'); - searchContainer.appendChild(searchText); - searchContainer.appendChild(obj.searchInput); - obj.searchInput.onfocus = function() { - obj.resetSelection(); - } - - // Pagination select option - var paginationUpdateContainer = document.createElement('div'); - - if (obj.options.pagination > 0 && obj.options.paginationOptions && obj.options.paginationOptions.length > 0) { - obj.paginationDropdown = document.createElement('select'); - obj.paginationDropdown.classList.add('jexcel_pagination_dropdown'); - obj.paginationDropdown.onchange = function() { - obj.options.pagination = parseInt(this.value); - obj.page(0); - } - - for (var i = 0; i < obj.options.paginationOptions.length; i++) { - var temp = document.createElement('option'); - temp.value = obj.options.paginationOptions[i]; - temp.innerHTML = obj.options.paginationOptions[i]; - obj.paginationDropdown.appendChild(temp); - } - - paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.show)); - paginationUpdateContainer.appendChild(obj.paginationDropdown); - paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.entries)); - } - - // Filter and pagination container - obj.filter = document.createElement('div'); - obj.filter.classList.add('jexcel_filter'); - obj.filter.appendChild(paginationUpdateContainer); - obj.filter.appendChild(searchContainer); - - // Colsgroup - obj.colgroupContainer = document.createElement('colgroup'); - var tempCol = document.createElement('col'); - tempCol.setAttribute('width', 50); - obj.colgroupContainer.appendChild(tempCol); - - // Nested - if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { - // Flexible way to handle nestedheaders - if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { - for (var j = 0; j < obj.options.nestedHeaders.length; j++) { - obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders[j])); - } - } else { - obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders)); - } - } - - // Row - obj.headerContainer = document.createElement('tr'); - var tempCol = document.createElement('td'); - tempCol.classList.add('jexcel_selectall'); - obj.headerContainer.appendChild(tempCol); - - for (var i = 0; i < obj.options.columns.length; i++) { - // Create header - obj.createCellHeader(i); - // Append cell to the container - obj.headerContainer.appendChild(obj.headers[i]); - obj.colgroupContainer.appendChild(obj.colgroup[i]); - } - - obj.thead.appendChild(obj.headerContainer); - - // Content table - obj.table = document.createElement('table'); - obj.table.classList.add('jexcel'); - obj.table.setAttribute('cellpadding', '0'); - obj.table.setAttribute('cellspacing', '0'); - obj.table.setAttribute('unselectable', 'yes'); - obj.table.setAttribute('onselectstart', 'return false'); - obj.table.appendChild(obj.colgroupContainer); - obj.table.appendChild(obj.thead); - obj.table.appendChild(obj.tbody); - - // Spreadsheet corner - obj.corner = document.createElement('div'); - obj.corner.className = 'jexcel_corner'; - obj.corner.setAttribute('unselectable', 'on'); - obj.corner.setAttribute('onselectstart', 'return false'); - - if (obj.options.selectionCopy == false) { - obj.corner.style.display = 'none'; - } - - // Textarea helper - obj.textarea = document.createElement('textarea'); - obj.textarea.className = 'jexcel_textarea'; - obj.textarea.id = 'jexcel_textarea'; - - // Contextmenu container - obj.contextMenu = document.createElement('div'); - obj.contextMenu.className = 'jexcel_contextmenu'; - - // Create element - jSuites.contextmenu(obj.contextMenu, { - onclick:function() { - obj.contextMenu.contextmenu.close(false); - } - }); - - // Powered by jExcel - var ads = '<a href="https://bossanova.uk/jexcel/"><img src="//bossanova.uk/jexcel/logo.png">jExcel Spreadsheet</a>'; - obj.ads = document.createElement('div'); - obj.ads.className = 'jexcel_about'; - if (typeof(sessionStorage) !== "undefined") { - if (! sessionStorage.getItem('jexcel')) { - sessionStorage.setItem('jexcel', true); - obj.ads.innerHTML = ads; - } - } else { - obj.ads.innerHTML = ads; - } - - // Create table container TODO: frozen columns - var container = document.createElement('div'); - container.classList.add('jexcel_table'); - - // Pagination - obj.pagination = document.createElement('div'); - obj.pagination.classList.add('jexcel_pagination'); - var paginationInfo = document.createElement('div'); - var paginationPages = document.createElement('div'); - obj.pagination.appendChild(paginationInfo); - obj.pagination.appendChild(paginationPages); - - // Append containers to the table - if (obj.options.search == true) { - el.appendChild(obj.filter); - } - - // Elements - obj.content.appendChild(obj.table); - obj.content.appendChild(obj.corner); - obj.content.appendChild(obj.textarea); - - el.appendChild(obj.toolbar); - el.appendChild(obj.content); - el.appendChild(obj.pagination); - el.appendChild(obj.contextMenu); - el.appendChild(obj.ads); - el.classList.add('jexcel_container'); - - // Create toolbar - if (obj.options.toolbar && obj.options.toolbar.length) { - obj.createToolbar(); - } - - // Fullscreen - if (obj.options.fullscreen == true) { - el.classList.add('fullscreen'); - } else { - // Overflow - if (obj.options.tableOverflow == true) { - if (obj.options.tableHeight) { - obj.content.style['overflow-y'] = 'auto'; - obj.content.style.height = obj.options.tableHeight; - } - if (obj.options.tableWidth) { - obj.content.style['overflow-x'] = 'auto'; - obj.content.style.width = obj.options.tableWidth; - } - } - } - - // With toolbars - if (obj.options.tableOverflow != true && obj.options.toolbar) { - el.classList.add('with-toolbar'); - } - - // Actions - if (obj.options.columnDrag == true) { - obj.thead.classList.add('draggable'); - } - if (obj.options.columnResize == true) { - obj.thead.classList.add('resizable'); - } - if (obj.options.rowDrag == true) { - obj.tbody.classList.add('draggable'); - } - if (obj.options.rowResize == true) { - obj.tbody.classList.add('resizable'); - } - - // Load data - obj.setData(); - - // Style - if (obj.options.style) { - obj.setStyle(obj.options.style, null, null, 1, 1); - } - } - - /** - * Set data - * - * @param array data In case no data is sent, default is reloaded - * @return void - */ - obj.setData = function(data) { - // Update data - if (data) { - if (typeof(data) == 'string') { - data = JSON.parse(data); - } - - obj.options.data = data; - } - - // Data - if (! obj.options.data) { - obj.options.data = []; - } - - // Prepare data - if (obj.options.data) { - var data = []; - for (var j = 0; j < obj.options.data.length; j++) { - var row = []; - for (var i = 0; i < obj.options.columns.length; i++) { - row[i] = obj.options.data[j][obj.options.columns[i].name]; - } - data.push(row); - } - - obj.options.data = data; - } - - // Adjust minimal dimensions - var j = 0; - var i = 0; - var size_i = obj.options.columns.length; - var size_j = obj.options.data.length; - var min_i = obj.options.minDimensions[0]; - var min_j = obj.options.minDimensions[1]; - var max_i = min_i > size_i ? min_i : size_i; - var max_j = min_j > size_j ? min_j : size_j; - - for (j = 0; j < max_j; j++) { - for (i = 0; i < max_i; i++) { - if (obj.options.data[j] == undefined) { - obj.options.data[j] = []; - } - - if (obj.options.data[j][i] == undefined) { - obj.options.data[j][i] = ''; - } - } - } - - // Reset containers - obj.rows = []; - obj.results = null; - obj.records = []; - obj.history = []; - - // Reset internal controllers - obj.historyIndex = -1; - - // Reset data - obj.tbody.innerHTML = ''; - - // Lazy loading - if (obj.options.lazyLoading == true) { - // Load only 100 records - var startNumber = 0 - var finalNumber = obj.options.data.length < 100 ? obj.options.data.length : 100; - - if (obj.options.pagination) { - obj.options.pagination = false; - console.error('JEXCEL: Pagination will be disable due the lazyLoading'); - } - } else if (obj.options.pagination) { - // Pagination - if (! obj.pageNumber) { - obj.pageNumber = 0; - } - var quantityPerPage = obj.options.pagination; - startNumber = (obj.options.pagination * obj.pageNumber); - finalNumber = (obj.options.pagination * obj.pageNumber) + obj.options.pagination; - - if (obj.options.data.length < finalNumber) { - finalNumber = obj.options.data.length; - } - } else { - var startNumber = 0; - var finalNumber = obj.options.data.length; - } - - // Append nodes to the HTML - for (j = 0; j < obj.options.data.length; j++) { - // Create row - var tr = obj.createRow(j, obj.options.data[j]); - // Append line to the table - if (j >= startNumber && j < finalNumber) { - obj.tbody.appendChild(tr); - } - } - - if (obj.options.lazyLoading == true) { - // Do not create pagination with lazyloading activated - } else if (obj.options.pagination) { - obj.updatePagination(); - } - - // Merge cells - if (obj.options.mergeCells) { - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - var num = obj.options.mergeCells[keys[i]]; - obj.setMerge(keys[i], num[0], num[1], 1); - } - } - - // Updata table with custom configurations if applicable - obj.updateTable(); - - // Onload - if (! obj.ignoreEvents) { - if (typeof(obj.options.onload) == 'function') { - obj.options.onload(el, obj); - } - } - } - - /** - * Get the whole table data - * - * @param integer row number - * @return string value - */ - obj.getData = function(highlighted) { - // Control vars - var dataset = []; - var px = 0; - var py = 0; - - // Column and row length - var x = obj.options.columns.length - var y = obj.options.data.length - - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - px = 0; - for (var i = 0; i < x; i++) { - // Cell selected or fullset - if (! highlighted || obj.records[j][i].classList.contains('highlight')) { - // Get value - if (! dataset[py]) { - dataset[py] = []; - } - if (obj.options.copyCompatibility == true) { - dataset[py][px] = obj.records[j][i].innerHTML; - } else { - dataset[py][px] = obj.options.data[j][i]; - } - px++; - } - } - if (px > 0) { - py++; - } - } - - return dataset; - } - - /** - * Get the whole table data - * - * @param integer row number - * @return string value - */ - obj.getJson = function(highlighted) { - // Control vars - var data = []; - - // Column and row length - var x = obj.options.columns.length - var y = obj.options.data.length - - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - var row = null; - for (var i = 0; i < x; i++) { - if (! highlighted || obj.records[j][i].classList.contains('highlight')) { - if (row == null) { - row = {}; - } - row[obj.options.columns[i].name] = obj.options.data[j][i]; - } - } - - if (row != null) { - data.push(row); - } - } - - return data; - } - - /** - * Get a row data by rowNumber - */ - obj.getRowData = function(rowNumber) { - return obj.options.data[rowNumber]; - } - - /** - * Set a row data by rowNumber - */ - obj.setRowData = function(rowNumber, data) { - for (var i = 0; i < obj.headers.length; i++) { - // Update cell - var columnName = jexcel.getColumnNameFromId([ i, rowNumber ]); - // Set value - if (data[i] != null) { - obj.setValue(columnName, data[i]); - } - } - } - - /** - * Get a column data by columnNumber - */ - obj.getColumnData = function(columnNumber) { - var dataset = []; - // Go through the rows to get the data - for (var j = 0; j < obj.options.data.length; j++) { - dataset.push(obj.options.data[j][columnNumber]); - } - return dataset; - } - - /** - * Set a column data by colNumber - */ - obj.setColumnData = function(colNumber, data) { - for (var j = 0; j < obj.rows.length; j++) { - // Update cell - var columnName = jexcel.getColumnNameFromId([ colNumber, j ]); - // Set value - if (data[j] != null) { - obj.setValue(columnName, data[j]); - } - } - } - - /** - * Create row - */ - obj.createRow = function(j, data) { - // Create container - if (! obj.records[j]) { - obj.records[j] = []; - } - // Default data - if (! data) { - var data = obj.options.data[j]; - } - // New line of data to be append in the table - obj.rows[j] = document.createElement('tr'); - obj.rows[j].setAttribute('data-y', j); - // Definitions - if (obj.options.rows[j]) { - if (obj.options.rows[j].height) { - obj.rows[j].style.height = obj.options.rows[j].height; - } - } - // Row number label - var td = document.createElement('td'); - td.innerHTML = parseInt(j + 1); - td.setAttribute('data-y', j); - td.className = 'jexcel_row'; - obj.rows[j].appendChild(td); - - // Data columns - for (i = 0; i < obj.options.columns.length; i++) { - // New column of data to be append in the line - obj.records[j][i] = obj.createCell(i, j, data[i]); - // Add column to the row - obj.rows[j].appendChild(obj.records[j][i]); - } - - // Add row to the table body - return obj.rows[j]; - } - - /** - * Create cell - */ - obj.createCell = function(i, j, value) { - // Create cell and properties - var td = document.createElement('td'); - td.setAttribute('data-x', i); - td.setAttribute('data-y', j); - // Hidden column - if (obj.options.columns[i].type == 'hidden') { - td.style.display = 'none'; - td.innerHTML = value; - } else if (obj.options.columns[i].type == 'checkbox' || obj.options.columns[i].type == 'radio') { - // Create input - var element = document.createElement('input'); - element.type = obj.options.columns[i].type; - element.name = 'c' + i; - element.checked = (value == 1 || value == true || value == 'true') ? true : false; - element.onclick = function() { - obj.setValue(td, this.checked); - } - - if (obj.options.columns[i].readOnly == true) { - element.setAttribute('disabled', 'disabled'); - } - - // Append to the table - td.appendChild(element); - // Make sure the values are correct - obj.options.data[j][i] = element.checked; - } else if (obj.options.columns[i].type == 'calendar') { - // Try formatted date - var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[i].options.format); - // Create calendar cell - td.innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[i].options.format); - } else if (obj.options.columns[i].type == 'dropdown' || obj.options.columns[i].type == 'autocomplete') { - // Create dropdown cell - td.classList.add('dropdown'); - td.innerHTML = obj.getDropDownValue(i, value); - } else if (obj.options.columns[i].type == 'color') { - if (obj.options.columns[i].render == 'square') { - var color = document.createElement('div'); - color.className = 'color'; - color.style.backgroundColor = value; - td.appendChild(color); - } else { - td.style.color = value; - td.innerHTML = value; - } - } else if (obj.options.columns[i].type == 'image') { - if (value && value.substr(0, 10) == 'data:image') { - var img = document.createElement('img'); - img.src = value; - td.appendChild(img); - } - } else { - if ((''+value).substr(0,1) == '=' && obj.options.parseFormulas == true) { - value = obj.executeFormula(value, i, j) - } - if (obj.options.columns[i].mask) { - var decimal = obj.options.columns[i].decimal || '.'; - value = '' + jSuites.mask.run(value, obj.options.columns[i].mask, decimal); - } - - td.innerHTML = value; - } - - // Readonly - if (obj.options.columns[i].readOnly == true) { - td.className = 'readonly'; - } - - // Text align - var colAlign = obj.options.columns[i].align ? obj.options.columns[i].align : 'center'; - td.style.textAlign = colAlign; - - // Wrap option - if (obj.options.columns[i].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[i].wordWrap == true || td.innerHTML.length > 200)) { - td.style.whiteSpace = 'pre-wrap'; - } - - // Overflow - if (i > 0) { - if (value || td.innerHTML) { - obj.records[j][i-1].style.overflow = 'hidden'; - } else { - if (i == obj.options.columns.length - 1) { - td.style.overflow = 'hidden'; - } - } - } - - return td; - } - - obj.createCellHeader = function(colNumber) { - // Create col global control - var colWidth = obj.options.columns[colNumber].width ? obj.options.columns[colNumber].width : obj.options.defaultColWidth; - var colAlign = obj.options.columns[colNumber].align ? obj.options.columns[colNumber].align : obj.options.defaultColAlign; - - // Create header cell - obj.headers[colNumber] = document.createElement('td'); - obj.headers[colNumber].innerHTML = obj.options.columns[colNumber].title ? obj.options.columns[colNumber].title : jexcel.getColumnName(colNumber); - obj.headers[colNumber].setAttribute('data-x', colNumber); - obj.headers[colNumber].style.textAlign = colAlign; - if (obj.options.columns[colNumber].title) { - obj.headers[colNumber].setAttribute('title', obj.options.columns[colNumber].title); - } - - // Width control - obj.colgroup[colNumber] = document.createElement('col'); - obj.colgroup[colNumber].setAttribute('width', colWidth); - - // Hidden column - if (obj.options.columns[colNumber].type == 'hidden') { - obj.headers[colNumber].style.display = 'none'; - obj.colgroup[colNumber].style.display = 'none'; - } - } - - obj.createNestedHeader = function(nestedInformation) { - var tr = document.createElement('tr'); - tr.classList.add('jexcel_nested'); - var td = document.createElement('td'); - tr.appendChild(td); - - var headerIndex = 0; - for (var i = 0; i < nestedInformation.length; i++) { - // Default values - if (! nestedInformation[i].colspan) { - nestedInformation[i].colspan = 1; - } - if (! nestedInformation[i].align) { - nestedInformation[i].align = 'center'; - } - if (! nestedInformation[i].title) { - nestedInformation[i].title = ''; - } - - // Number of columns - var numberOfColumns = nestedInformation[i].colspan; - - // Classes container - var column = []; - // Header classes for this cell - for (var x = 0; x < numberOfColumns; x++) { - if (obj.options.columns[headerIndex] && obj.options.columns[headerIndex].type == 'hidden') { - numberOfColumns++; - } - column.push(headerIndex); - headerIndex++; - } - - // Created the nested cell - var td = document.createElement('td'); - td.setAttribute('data-column', column.join(',')); - td.setAttribute('colspan', nestedInformation[i].colspan); - td.setAttribute('align', nestedInformation[i].align); - td.innerHTML = nestedInformation[i].title; - tr.appendChild(td); - } - - return tr; - } - - /** - * Create toolbar - */ - obj.createToolbar = function(toolbar) { - if (toolbar) { - obj.options.toolbar = toolbar; - } else { - var toolbar = obj.options.toolbar; - } - - for (var i = 0; i < toolbar.length; i++) { - if (toolbar[i].type == 'i') { - var toolbarItem = document.createElement('i'); - toolbarItem.classList.add('jexcel_toolbar_item'); - toolbarItem.classList.add('material-icons'); - toolbarItem.setAttribute('data-k', toolbar[i].k); - toolbarItem.setAttribute('data-v', toolbar[i].v); - // Tooltip - if (toolbar[i].tooltip) { - toolbarItem.setAttribute('title', toolbar[i].tooltip); - } - // Handle click - if (toolbar[i].onclick && typeof(toolbar[i].onclick)) { - toolbarItem.onclick = toolbar[i].onclick; - } else { - toolbarItem.onclick = function() { - var k = this.getAttribute('data-k'); - var v = this.getAttribute('data-v'); - obj.setStyle(obj.highlighted, k, v); - } - } - // Append element - toolbarItem.innerHTML = toolbar[i].content; - obj.toolbar.appendChild(toolbarItem); - } else if (toolbar[i].type == 'select') { - var toolbarItem = document.createElement('select'); - toolbarItem.classList.add('jexcel_toolbar_item'); - toolbarItem.setAttribute('data-k', toolbar[i].k); - // Tooltip - if (toolbar[i].tooltip) { - toolbarItem.setAttribute('title', toolbar[i].tooltip); - } - // Handle onchange - if (toolbar[i].onchange && typeof(toolbar[i].onchange)) { - toolbarItem.onchange = toolbar[i].onchange; - } else { - toolbarItem.onchange = function() { - var k = this.getAttribute('data-k'); - obj.setStyle(obj.highlighted, k, this.value); - } - } - // Add options to the dropdown - for(var j = 0; j < toolbar[i].v.length; j++) { - var toolbarDropdownOption = document.createElement('option'); - toolbarDropdownOption.value = toolbar[i].v[j]; - toolbarDropdownOption.innerHTML = toolbar[i].v[j]; - toolbarItem.appendChild(toolbarDropdownOption); - } - obj.toolbar.appendChild(toolbarItem); - } else if (toolbar[i].type == 'color') { - var toolbarItem = document.createElement('i'); - toolbarItem.classList.add('jexcel_toolbar_item'); - toolbarItem.classList.add('material-icons'); - toolbarItem.setAttribute('data-k', toolbar[i].k); - toolbarItem.setAttribute('data-v', ''); - // Tooltip - if (toolbar[i].tooltip) { - toolbarItem.setAttribute('title', toolbar[i].tooltip); - } - obj.toolbar.appendChild(toolbarItem); - toolbarItem.onclick = function() { - this.color.open(); - } - toolbarItem.innerHTML = toolbar[i].content; - jSuites.color(toolbarItem, { - onchange:function(o, v) { - var k = o.getAttribute('data-k'); - obj.setStyle(obj.highlighted, k, v); - } - }); - } - } - } - - /** - * Merge cells - * @param cellName - * @param colspan - * @param rowspan - * @param ignoreHistoryAndEvents - */ - obj.setMerge = function(cellName, colspan, rowspan, ignoreHistoryAndEvents) { - var test = false; - - if (! cellName) { - if (! obj.highlighted.length) { - alert(obj.options.text.noCellsSelected); - return null; - } else { - var x1 = parseInt(obj.highlighted[0].getAttribute('data-x')); - var y1 = parseInt(obj.highlighted[0].getAttribute('data-y')); - var x2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-x')); - var y2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-y')); - var cellName = jexcel.getColumnNameFromId([ x1, y1 ]); - var colspan = (x2 - x1) + 1; - var rowspan = (y2 - y1) + 1; - } - } - - var cell = jexcel.getIdFromColumnName(cellName, true); - - if (obj.options.mergeCells[cellName]) { - if (obj.records[cell[1]][cell[0]].getAttribute('data-merged')) { - test = obj.options.text.cellAlreadyMerged; - } - } else if ((! colspan || colspan < 2) && (! rowspan || rowspan < 2)) { - test = obj.options.text.invalidMergeProperties; - } else { - var cells = []; - for (var j = cell[1]; j < cell[1] + rowspan; j++) { - for (var i = cell[0]; i < cell[0] + colspan; i++) { - var columnName = jexcel.getColumnNameFromId([i, j]); - if (obj.records[j][i].getAttribute('data-merged')) { - test = obj.options.text.thereIsAConflictWithAnotherMergedCell; - } - } - } - } - - if (test) { - alert(test); - } else { - // Add property - if (colspan > 1) { - obj.records[cell[1]][cell[0]].setAttribute('colspan', colspan); - } else { - colspan = 1; - } - if (rowspan > 1) { - obj.records[cell[1]][cell[0]].setAttribute('rowspan', rowspan); - } else { - rowspan = 1; - } - // Keep links to the existing nodes - obj.options.mergeCells[cellName] = [ colspan, rowspan, [] ]; - // Mark cell as merged - obj.records[cell[1]][cell[0]].setAttribute('data-merged', 'true'); - // Overflow - obj.records[cell[1]][cell[0]].style.overflow = 'hidden'; - // History data - var data = []; - // Adjust the nodes - for (var y = cell[1]; y < cell[1] + rowspan; y++) { - for (var x = cell[0]; x < cell[0] + colspan; x++) { - if (! (cell[0] == x && cell[1] == y)) { - data.push(obj.options.data[y][x]); - obj.updateCell(x, y, '', true); - obj.options.mergeCells[cellName][2].push(obj.records[y][x]); - obj.records[y][x].style.display = 'none'; - obj.records[y][x] = obj.records[cell[1]][cell[0]]; - } - } - } - // In the initialization is not necessary keep the history - obj.updateSelection(obj.records[cell[1]][cell[0]]); - - if (! ignoreHistoryAndEvents) { - obj.setHistory({ - action:'setMerge', - column:cellName, - colspan:colspan, - rowspan:rowspan, - data:data, - }); - - if (typeof(obj.options.onmerge) == 'function') { - obj.options.onmerge(el, cellName, colspan, rowspan); - } - } - } - } - - /** - * Merge cells - * @param cellName - * @param colspan - * @param rowspan - * @param ignoreHistoryAndEvents - */ - obj.getMerge = function(cellName) { - var data = {}; - if (cellName) { - if (obj.options.mergeCells[cellName]) { - data = [ obj.options.mergeCells[cellName][0], obj.options.mergeCells[cellName][1] ]; - } else { - data = null; - } - } else { - if (obj.options.mergeCells) { - var mergedCells = obj.options.mergeCells; - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - data[keys[i]] = [ obj.options.mergeCells[keys[i]][0], obj.options.mergeCells[keys[i]][1] ]; - } - } - } - - return data; - } - - /** - * Remove merge by cellname - * @param cellName - */ - obj.removeMerge = function(cellName, data, keepOptions) { - if (obj.options.mergeCells[cellName]) { - var cell = jexcel.getIdFromColumnName(cellName, true); - obj.records[cell[1]][cell[0]].removeAttribute('colspan'); - obj.records[cell[1]][cell[0]].removeAttribute('rowspan'); - obj.records[cell[1]][cell[0]].removeAttribute('data-merged'); - var info = obj.options.mergeCells[cellName]; - - var index = 0; - for (var j = 0; j < info[1]; j++) { - for (var i = 0; i < info[0]; i++) { - if (j > 0 || i > 0) { - obj.records[cell[1]+j][cell[0]+i] = info[2][index]; - obj.records[cell[1]+j][cell[0]+i].style.display = ''; - // Recover data - if (data && data[index]) { - obj.updateCell(cell[0]+i, cell[1]+j, data[index]); - } - index++; - } - } - } - - // Update selection - obj.updateSelection(obj.records[cell[1]][cell[0]], obj.records[cell[1]+j-1][cell[0]+i-1]); - - if (! keepOptions) { - delete(obj.options.mergeCells[cellName]); - } - } - } - - /** - * Remove all merged cells - */ - obj.destroyMerged = function(keepOptions) { - // Remove any merged cells - if (obj.options.mergeCells) { - var mergedCells = obj.options.mergeCells; - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - obj.removeMerge(keys[i], null, keepOptions); - } - } - } - - /** - * Is column merged - */ - obj.isColMerged = function(x, insertBefore) { - var cols = []; - // Remove any merged cells - if (obj.options.mergeCells) { - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - var info = jexcel.getIdFromColumnName(keys[i], true); - var colspan = obj.options.mergeCells[keys[i]][0]; - var x1 = info[0]; - var x2 = info[0] + (colspan > 1 ? colspan - 1 : 0); - - if (insertBefore == null) { - if ((x1 <= x && x2 >= x)) { - cols.push(keys[i]); - } - } else { - if (insertBefore) { - if ((x1 < x && x2 >= x)) { - cols.push(keys[i]); - } - } else { - if ((x1 <= x && x2 > x)) { - cols.push(keys[i]); - } - } - } - } - } - - return cols; - } - - /** - * Is rows merged - */ - obj.isRowMerged = function(y, insertBefore) { - var rows = []; - // Remove any merged cells - if (obj.options.mergeCells) { - var keys = Object.keys(obj.options.mergeCells); - for (var i = 0; i < keys.length; i++) { - var info = jexcel.getIdFromColumnName(keys[i], true); - var rowspan = obj.options.mergeCells[keys[i]][1]; - var y1 = info[1]; - var y2 = info[1] + (rowspan > 1 ? rowspan - 1 : 0); - - if (insertBefore == null) { - if ((y1 <= y && y2 >= y)) { - rows.push(keys[i]); - } - } else { - if (insertBefore) { - if ((y1 < y && y2 >= y)) { - rows.push(keys[i]); - } - } else { - if ((y1 <= y && y2 > y)) { - rows.push(keys[i]); - } - } - } - } - } - - return rows; - } - - /** - * Open the editor - * - * @param object cell - * @return void - */ - obj.openEditor = function(cell, empty, e) { - // Get cell position - var y = cell.getAttribute('data-y'); - var x = cell.getAttribute('data-x'); - - // On edition start - if (! obj.ignoreEvents) { - if (typeof(obj.options.oneditionstart) == 'function') { - obj.options.oneditionstart(el, cell, x, y); - } - } - - // Overflow - if (x > 0) { - obj.records[y][x-1].style.overflow = 'hidden'; - } - - // Create editor - var createEditor = function(type) { - // Cell information - var info = cell.getBoundingClientRect(); - - // Create dropdown - var editor = document.createElement(type); - editor.style.width = (info.width) + 'px'; - editor.style.height = (info.height - 2) + 'px'; - editor.style.minHeight = (info.height - 2) + 'px'; - - // Edit cell - cell.classList.add('editor'); - cell.innerHTML = ''; - cell.appendChild(editor); - - return editor; - } - - // Readonly - if (cell.classList.contains('readonly') == true) { - // Do nothing - } else { - // Holder - obj.edition = [ obj.records[y][x], obj.records[y][x].innerHTML, x, y ]; - - // If there is a custom editor for it - if (obj.options.columns[x].editor) { - // Custom editors - obj.options.columns[x].editor.openEditor(cell, el); - } else { - // Native functions - if (obj.options.columns[x].type == 'hidden') { - // Do nothing - } else if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') { - // Get value - var value = cell.children[0].checked ? false : true; - // Toogle value - obj.setValue(cell, value); - // Do not keep edition open - obj.edition = null; - } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') { - // Get current value - var value = obj.options.data[y][x]; - - // Create dropdown - if (typeof(obj.options.columns[x].filter) == 'function') { - var source = obj.options.columns[x].filter(el, cell, x, y, obj.options.columns[x].source); - } else { - var source = obj.options.columns[x].source; - } - - // Create editor - var editor = createEditor('div'); - var options = { - data: source, - multiple: obj.options.columns[x].multiple ? true : false, - autocomplete: obj.options.columns[x].autocomplete || obj.options.columns[x].type == 'autocomplete' ? true : false, - opened:true, - value: obj.options.columns[x].multiple ? value.split(';') : value, - width:'100%', - height:editor.style.minHeight, - position: (obj.options.tableOverflow == true || obj.options.fullscreen == true) ? true : false, - onclose:function() { - obj.closeEditor(cell, true); - } - }; - if (obj.options.columns[x].options && obj.options.columns[x].options.type) { - options.type = obj.options.columns[x].options.type; - } - jSuites.dropdown(editor, options); - } else if (obj.options.columns[x].type == 'calendar' || obj.options.columns[x].type == 'color') { - // Value - var value = obj.options.data[y][x]; - // Create editor - var editor = createEditor('input'); - editor.value = value; - - if (obj.options.tableOverflow == true || obj.options.fullscreen == true) { - obj.options.columns[x].options.position = true; - } - obj.options.columns[x].options.value = obj.options.data[y][x]; - obj.options.columns[x].options.opened = true; - obj.options.columns[x].options.onclose = function(el, value) { - obj.closeEditor(cell, true); - } - // Current value - if (obj.options.columns[x].type == 'color') { - jSuites.color(editor, obj.options.columns[x].options); - } else { - var calendar = jSuites.calendar(editor, obj.options.columns[x].options); - calendar.setValue(value); - } - // Focus on editor - editor.focus(); - } else if (obj.options.columns[x].type == 'image') { - // Value - var img = cell.children[0]; - // Create editor - var editor = createEditor('div'); - editor.style.position = 'relative'; - var div = document.createElement('div'); - div.classList.add('jclose'); - if (img && img.src) { - div.appendChild(img); - } - editor.appendChild(div); - jSuites.image(div, obj.options.imageOptions); - const rect = cell.getBoundingClientRect(); - const rectContent = div.getBoundingClientRect(); - if (window.innerHeight < rect.bottom + rectContent.height) { - div.style.top = (rect.top - (rectContent.height + 2)) + 'px'; - } else { - div.style.top = (rect.top) + 'px'; - } - } else { - // Value - var value = empty == true ? '' : obj.options.data[y][x]; - - // Basic editor - if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true)) { - var editor = createEditor('textarea'); - } else { - var editor = createEditor('input'); - // Mask - if (obj.options.columns[x].mask) { - editor.setAttribute('data-mask', obj.options.columns[x].mask); - } - } - - editor.value = value; - editor.onblur = function() { - obj.closeEditor(cell, true); - }; - editor.focus(); - } - } - } - } - - /** - * Close the editor and save the information - * - * @param object cell - * @param boolean save - * @return void - */ - obj.closeEditor = function(cell, save) { - var x = parseInt(cell.getAttribute('data-x')); - var y = parseInt(cell.getAttribute('data-y')); - - // Get cell properties - if (save == true) { - // If custom editor - if (obj.options.columns[x].editor) { - // Custom editor - var value = obj.options.columns[x].editor.closeEditor(cell, save); - } else { - // Native functions - if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio' || obj.options.columns[x].type == 'hidden') { - // Do nothing - } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') { - var value = cell.children[0].dropdown.close(true); - } else if (obj.options.columns[x].type == 'calendar') { - var value = cell.children[0].calendar.close(true); - } else if (obj.options.columns[x].type == 'color') { - var value = cell.children[1].color.close(true); - } else if (obj.options.columns[x].type == 'image') { - var img = cell.children[0].children[0].children[0]; - var value = img && img.tagName == 'IMG' ? img.src : ''; - } else if (obj.options.columns[x].type == 'numeric') { - var value = cell.children[0].value; - if (value.substr(0,1) != '=') { - if (value == '') { - value = obj.options.columns[x].allowEmpty ? '' : 0; - } - } - cell.children[0].onblur = null; - } else { - var value = cell.children[0].value; - cell.children[0].onblur = null; - } - } - - // Ignore changes if the value is the same - if (obj.options.data[y][x] == value) { - cell.innerHTML = obj.edition[1]; - } else { - obj.setValue(cell, value); - } - } else { - if (obj.options.columns[x].editor) { - // Custom editor - obj.options.columns[x].editor.closeEditor(cell, save); - } else { - if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') { - cell.children[0].dropdown.close(true); - } else if (obj.options.columns[x].type == 'calendar') { - cell.children[0].calendar.close(true); - } else if (obj.options.columns[x].type == 'color') { - cell.children[1].color.close(true); - } else { - cell.children[0].onblur = null; - } - } - - // Restore value - cell.innerHTML = obj.edition && obj.edition[1] ? obj.edition[1] : ''; - } - - // On edition end - if (! obj.ignoreEvents) { - if (typeof(obj.options.oneditionend) == 'function') { - obj.options.oneditionend(el, cell, x, y, value, save); - } - } - - // Remove editor class - cell.classList.remove('editor'); - - // Finish edition - obj.edition = null; - } - - /** - * Get the cell object - * - * @param object cell - * @return string value - */ - obj.getCell = function(cell) { - // Convert in case name is excel liked ex. A10, BB92 - cell = jexcel.getIdFromColumnName(cell, true); - var x = cell[0]; - var y = cell[1]; - - return obj.records[y][x]; - } - - /** - * Get the cell object from coords - * - * @param object cell - * @return string value - */ - obj.getCellFromCoords = function(x, y) { - return obj.records[y][x].element; - } - - /** - * Get label - * - * @param object cell - * @return string value - */ - obj.getLabel = function(cell) { - // Convert in case name is excel liked ex. A10, BB92 - cell = jexcel.getIdFromColumnName(cell, true); - var x = cell[0]; - var y = cell[1]; - - return obj.records[y][x].innerHTML; - } - - /** - * Get labelfrom coords - * - * @param object cell - * @return string value - */ - obj.getLabelFromCoords = function(x, y) { - return obj.records[y][x].element.innerHTML; - } - - /** - * Get the value from a cell - * - * @param object cell - * @return string value - */ - obj.getValue = function(cell, processedValue) { - if (typeof(cell) == 'object') { - var x = cell.getAttribute('data-x'); - var y = cell.getAttribute('data-y'); - } else { - cell = jexcel.getIdFromColumnName(cell, true); - var x = cell[0]; - var y = cell[1]; - } - - var value = null; - - if (x != null && y != null) { - if (obj.records[y] && obj.records[y][x] && (processedValue || obj.options.copyCompatibility == true)) { - value = obj.records[y][x].innerHTML; - } else { - if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') { - value = obj.options.data[y][x]; - } - } - } - - return value; - } - - /** - * Get the value from a coords - * - * @param int x - * @param int y - * @return string value - */ - obj.getValueFromCoords = function(x, y, processedValue) { - var value = null; - - if (x != null && y != null) { - if ((obj.records[y] && obj.records[y][x]) && processedValue || obj.options.copyCompatibility == true) { - value = obj.records[y][x].innerHTML; - } else { - if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') { - value = obj.options.data[y][x]; - } - } - } - - return value; - } - - /** - * Set a cell value - * - * @param mixed cell destination cell - * @param string value value - * @return void - */ - obj.setValue = function(cell, value, force) { - var records = []; - - if (typeof(cell) == 'string') { - var columnId = jexcel.getIdFromColumnName(cell, true); - var x = columnId[0]; - var y = columnId[1]; - - // Update cell - records.push(obj.updateCell(x, y, value, force)); - - // Update all formulas in the chain - obj.updateFormulaChain(x, y, records); - } else { - var x = null; - var y = null; - if (cell && cell.getAttribute) { - var x = cell.getAttribute('data-x'); - var y = cell.getAttribute('data-y'); - } - - // Update cell - if (x != null && y != null) { - records.push(obj.updateCell(x, y, value, force)); - - // Update all formulas in the chain - obj.updateFormulaChain(x, y, records); - } else { - var keys = Object.keys(cell); - if (keys.length > 0) { - for (var i = 0; i < keys.length; i++) { - if (typeof(cell[i]) == 'string') { - var columnId = jexcel.getIdFromColumnName(cell[i], true); - var x = columnId[0]; - var y = columnId[1]; - } else { - var x = cell[i].getAttribute('data-x'); - var y = cell[i].getAttribute('data-y'); - } - - // Update cell - if (x != null && y != null) { - records.push(obj.updateCell(x, y, value, force)); - - // Update all formulas in the chain - obj.updateFormulaChain(x, y, records); - } - } - } - } - } - - // Update history - obj.setHistory({ - action:'setValue', - records:records, - selection:obj.selectedCell, - }); - - // Update table with custom configurations if applicable - obj.updateTable(); - - // On after changes - obj.onafterchanges(el, records); - } - - /** - * Set a cell value based on coordinates - * - * @param int x destination cell - * @param int y destination cell - * @param string value - * @return void - */ - obj.setValueFromCoords = function(x, y, value, force) { - var records = []; - records.push(obj.updateCell(x, y, value, force)); - - // Update all formulas in the chain - obj.updateFormulaChain(x, y, records); - - // Update history - obj.setHistory({ - action:'setValue', - records:records, - selection:obj.selectedCell, - }); - - // Update table with custom configurations if applicable - obj.updateTable(); - - // On after changes - obj.onafterchanges(el, records); - } - - /** - * Toogle - */ - obj.setCheckRadioValue = function() { - var records = []; - var keys = Object.keys(obj.highlighted); - for (var i = 0; i < keys.length; i++) { - var x = obj.highlighted[i].getAttribute('data-x'); - var y = obj.highlighted[i].getAttribute('data-y'); - - if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') { - // Update cell - records.push(obj.updateCell(x, y, ! obj.options.data[y][x])); - } - } - - if (records.length) { - // Update history - obj.setHistory({ - action:'setValue', - records:records, - selection:obj.selectedCell, - }); - - // On after changes - obj.onafterchanges(el, records); - } - } - - /** - * Update cell content - * - * @param object cell - * @return void - */ - obj.updateCell = function(x, y, value, force) { - // Changing value depending on the column type - if (obj.records[y][x].classList.contains('readonly') == true && ! force) { - // Do nothing - } else { - // On change - if (! obj.ignoreEvents) { - if (typeof(obj.options.onbeforechange) == 'function') { - // Overwrite a value - var val = obj.options.onbeforechange(el, obj.records[y][x], x, y, value); - - // If you return something this will overwrite the value - if (val != undefined) { - value = val; - } - } - } - - // History format - var record = { - col: x, - row: y, - newValue: value, - oldValue: obj.options.data[y][x], - } - - if (obj.options.columns[x].editor) { - // Update data and cell - obj.options.data[y][x] = value; - obj.options.columns[x].editor.setValue(obj.records[y][x], value, force); - } else { - // Native functions - if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') { - // Unchecked all options - if (obj.options.columns[x].type == 'radio') { - for (var j = 0; j < obj.options.data.length; j++) { - obj.options.data[j][x] = false; - } - } - - // Update data and cell - obj.records[y][x].children[0].checked = (value == 1 || value == true || value == 'true' || value == 'TRUE') ? true : false; - obj.options.data[y][x] = obj.records[y][x].children[0].checked; - } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') { - // Update data and cell - obj.options.data[y][x] = value; - obj.records[y][x].innerHTML = obj.getDropDownValue(x, value); - } else if (obj.options.columns[x].type == 'calendar') { - // Update calendar - var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[x].options.format); - // Update data and cell - obj.options.data[y][x] = value; - obj.records[y][x].innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[x].options.format); - } else if (obj.options.columns[x].type == 'color') { - // Update color - obj.options.data[y][x] = value; - // Render - if (obj.options.columns[x].render == 'square') { - var color = document.createElement('div'); - color.className = 'color'; - color.style.backgroundColor = value; - obj.records[y][x].innerHTML = ''; - obj.records[y][x].appendChild(color); - } else { - obj.records[y][x].style.color = value; - obj.records[y][x].innerHTML = value; - } - } else if (obj.options.columns[x].type == 'image') { - value = ''+value; - obj.options.data[y][x] = value; - obj.records[y][x].innerHTML = ''; - if (value && value.substr(0, 10) == 'data:image') { - var img = document.createElement('img'); - img.src = value; - obj.records[y][x].appendChild(img); - } - } else { - // Update data and cell - obj.options.data[y][x] = value; - // Label - if (('' + value).substr(0,1) == '=' && obj.options.parseFormulas == true) { - value = obj.executeFormula(value, x, y); - } - if (obj.options.columns[x].mask) { - var decimal = obj.options.columns[x].decimal || '.'; - value = '' + jSuites.mask.run(value, obj.options.columns[x].mask, decimal); - } - obj.records[y][x].innerHTML = value; - - // Handle big text inside a cell - if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true || obj.records[y][x].innerHTML.length > 200)) { - obj.records[y][x].style.whiteSpace = 'pre-wrap'; - } else { - obj.records[y][x].style.whiteSpace = ''; - } - } - } - - // Overflow - if (x > 0) { - if (obj.options.data[y][x] || (obj.options.columns[x].type != 'text' && obj.options.columns[x].type != 'number')) { - obj.records[y][x-1].style.overflow = 'hidden'; - } else { - obj.records[y][x-1].style.overflow = ''; - } - } - - // On change - if (! obj.ignoreEvents) { - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(el, (obj.records[y] && obj.records[y][x] ? obj.records[y][x] : null), x, y, value, record.oldValue); - } - } - } - - return record; - } - - /** - * Helper function to copy data using the corner icon - */ - obj.copyData = function(o, d) { - // Get data from all selected cells - var data = obj.getData(true); - - // Selected cells - var t0 = obj.selectedContainer[1]; - var t1 = obj.selectedContainer[3]; - - // Cells - var x1 = parseInt(o.getAttribute('data-x')); - var y1 = parseInt(o.getAttribute('data-y')); - var x2 = parseInt(d.getAttribute('data-x')); - var y2 = parseInt(d.getAttribute('data-y')); - - // Records - var records = []; - var lineNumber = 1; - var breakControl = false; - - // Copy data procedure - var posx = 0; - var posy = 0; - - for (var j = y1; j <= y2; j++) { - // Skip hidden rows - if (obj.rows[j] && obj.rows[j].style.display == 'none') { - continue; - } - - // Controls - if (data[posy] == undefined) { - posy = 0; - } - posx = 0; - - // Data columns - for (var i = x1; i <= x2; i++) { - // Update non-readonly - if (obj.records[j][i] && ! obj.records[j][i].classList.contains('readonly') && obj.records[j][i].style.display != 'none' && breakControl == false) { - // Stop if contains value - if (! obj.selection.length) { - if (obj.options.data[j][i] != '') { - breakControl = true; - continue; - } - } - - // Column - if (data[posy] == undefined) { - posx = 0; - } else if (data[posy][posx] == undefined) { - posx = 0; - } else { - var value = data[posy][posx]; - } - - if (value && t0 == t1 && obj.options.autoIncrement == true) { - if (obj.options.columns[i].type == 'text' || obj.options.columns[i].type == 'number') { - if ((''+value).substr(0,1) == '=') { - var tokens = value.match(/([A-Z]+[0-9]+)/g); - - if (tokens) { - var affectedTokens = []; - for (var index = 0; index < tokens.length; index++) { - var position = jexcel.getIdFromColumnName(tokens[index], 1); - position[1] += lineNumber; - var token = jexcel.getColumnNameFromId([position[0], position[1]]); - - if (token != tokens[index]) { - affectedTokens[tokens[index]] = token; - } - } - // Update formula - if (affectedTokens) { - value = obj.updateFormula(value, affectedTokens) - } - } - } else { - if (value == Number(value)) { - value = Number(value) + lineNumber; - } - } - } else if (obj.options.columns[i].type == 'calendar') { - var date = new Date(value); - date.setDate(date.getDate() + lineNumber); - value = date.getFullYear() + '-' + parseInt(date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':00'; - } - } - - records.push(obj.updateCell(i, j, value)); - - // Update all formulas in the chain - obj.updateFormulaChain(i, j, records); - } - posx++; - } - posy++; - lineNumber++; - } - - // Update history - obj.setHistory({ - action:'setValue', - records:records, - selection:obj.selectedCell, - }); - - // Update table with custom configuration if applicable - obj.updateTable(); - - // On after changes - obj.onafterchanges(el, records); - } - - /** - * Refresh current selection - */ - obj.refreshSelection = function() { - if (obj.selectedCell) { - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - } - } - - /** - * Move coords to A1 in case ovelaps with an excluded cell - */ - obj.conditionalSelectionUpdate = function(type, o, d) { - if (type == 1) { - if (obj.selectedCell && ((o >= obj.selectedCell[1] && o <= obj.selectedCell[3]) || (d >= obj.selectedCell[1] && d <= obj.selectedCell[3]))) { - obj.resetSelection(); - return; - } - } else { - if (obj.selectedCell && ((o >= obj.selectedCell[0] && o <= obj.selectedCell[2]) || (d >= obj.selectedCell[0] && d <= obj.selectedCell[2]))) { - obj.resetSelection(); - return; - } - } - } - - /** - * Clear table selection - */ - obj.resetSelection = function(blur) { - // Remove style - if (! obj.highlighted.length) { - var previousStatus = 0; - } else { - var previousStatus = 1; - - for (var i = 0; i < obj.highlighted.length; i++) { - obj.highlighted[i].classList.remove('highlight'); - obj.highlighted[i].classList.remove('highlight-left'); - obj.highlighted[i].classList.remove('highlight-right'); - obj.highlighted[i].classList.remove('highlight-top'); - obj.highlighted[i].classList.remove('highlight-bottom'); - obj.highlighted[i].classList.remove('highlight-selected'); - - var px = parseInt(obj.highlighted[i].getAttribute('data-x')); - var py = parseInt(obj.highlighted[i].getAttribute('data-y')); - - // Check for merged cells - if (obj.highlighted[i].getAttribute('data-merged')) { - var colspan = parseInt(obj.highlighted[i].getAttribute('colspan')); - var rowspan = parseInt(obj.highlighted[i].getAttribute('rowspan')); - var ux = colspan > 0 ? px + (colspan - 1) : px; - var uy = rowspan > 0 ? py + (rowspan - 1): py; - } else { - var ux = px; - var uy = py; - } - - // Remove selected from headers - for (var j = px; j <= ux; j++) { - if (obj.headers[j]) { - obj.headers[j].classList.remove('selected'); - } - } - - // Remove selected from rows - for (var j = py; j <= uy; j++) { - if (obj.rows[j]) { - obj.rows[j].classList.remove('selected'); - } - } - } - } - - // Reset highlighed cells - obj.highlighted = []; - - // Reset - obj.selectedCell = null; - - // Hide corner - obj.corner.style.top = '-2000px'; - obj.corner.style.left = '-2000px'; - - if (obj.ignoreEvents != true && blur == true) { - if (obj.options.onblur) { - if (typeof(obj.options.onblur) == 'function') { - if (previousStatus == 1) { - obj.options.onblur(el); - } - } - } - } - - return previousStatus; - } - - /** - * Update selection based on two cells - */ - obj.updateSelection = function(el1, el2, origin) { - var x1 = el1.getAttribute('data-x'); - var y1 = el1.getAttribute('data-y'); - if (el2) { - var x2 = el2.getAttribute('data-x'); - var y2 = el2.getAttribute('data-y'); - } else { - var x2 = x1; - var y2 = y1; - } - - obj.updateSelectionFromCoords(x1, y1, x2, y2, origin); - } - - /** - * Update selection from coords - */ - obj.updateSelectionFromCoords = function(x1, y1, x2, y2, origin) { - // Reset Selection - var updated = null; - var previousState = obj.resetSelection(); - - // Same element - if (x2 == null) { - x2 = x1; - } - if (y2 == null) { - y2 = y1; - } - - // Selection must be within the existing data - if (x1 >= obj.headers.length) { - x1 = obj.headers.length - 1; - } - if (y1 >= obj.rows.length) { - y1 = obj.rows.length - 1; - } - if (x2 >= obj.headers.length) { - x2 = obj.headers.length - 1; - } - if (y2 >= obj.rows.length) { - y2 = obj.rows.length - 1; - } - - // Keep selected cell - obj.selectedCell = [x1, y1, x2, y2]; - - // Select cells - if (x1 != null) { - // Add selected cell - if (obj.records[y1][x1]) { - obj.records[y1][x1].classList.add('highlight-selected'); - } - - // Origin & Destination - if (parseInt(x1) < parseInt(x2)) { - var px = parseInt(x1); - var ux = parseInt(x2); - } else { - var px = parseInt(x2); - var ux = parseInt(x1); - } - - if (parseInt(y1) < parseInt(y2)) { - var py = parseInt(y1); - var uy = parseInt(y2); - } else { - var py = parseInt(y2); - var uy = parseInt(y1); - } - - // Verify merged columns - for (var i = px; i <= ux; i++) { - for (var j = py; j <= uy; j++) { - if (obj.records[j][i] && obj.records[j][i].getAttribute('data-merged')) { - var x = parseInt(obj.records[j][i].getAttribute('data-x')); - var y = parseInt(obj.records[j][i].getAttribute('data-y')); - var colspan = parseInt(obj.records[j][i].getAttribute('colspan')); - var rowspan = parseInt(obj.records[j][i].getAttribute('rowspan')); - - if (colspan > 1) { - if (x < px) { - px = x; - } - if (x + colspan > ux) { - ux = x + colspan - 1; - } - } - - if (rowspan) { - if (y < py) { - py = y; - - } - if (y + rowspan > uy) { - uy = y + rowspan - 1; - } - } - } - } - } - - // Limits - var borderLeft = null; - var borderRight = null; - var borderTop = null; - var borderBottom = null; - - // Vertical limits - for (var j = py; j <= uy; j++) { - if (obj.rows[j].style.display != 'none') { - if (borderTop == null) { - borderTop = j; - } - borderBottom = j; - } - } - - // Redefining styles - for (var i = px; i <= ux; i++) { - for (var j = py; j <= uy; j++) { - if (obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') { - obj.records[j][i].classList.add('highlight'); - obj.highlighted.push(obj.records[j][i]); - } - } - - // Horizontal limits - if (obj.options.columns[i].type != 'hidden') { - if (borderLeft == null) { - borderLeft = i; - } - borderRight = i; - } - } - - // Create borders - if (! borderLeft) { - borderLeft = 0; - } - if (! borderRight) { - borderRight = 0; - } - for (var i = borderLeft; i <= borderRight; i++) { - if (obj.options.columns[i].type != 'hidden') { - // Top border - if (obj.records[borderTop][i]) { - obj.records[borderTop][i].classList.add('highlight-top'); - } - // Bottom border - if (obj.records[borderBottom][i]) { - obj.records[borderBottom][i].classList.add('highlight-bottom'); - } - // Add selected from headers - obj.headers[i].classList.add('selected'); - } - } - - for (var j = borderTop; j <= borderBottom; j++) { - if (obj.rows[j].style.display != 'none') { - // Left border - obj.records[j][borderLeft].classList.add('highlight-left'); - // Right border - obj.records[j][borderRight].classList.add('highlight-right'); - // Add selected from rows - obj.rows[j].classList.add('selected'); - } - } - - obj.selectedContainer = [ borderLeft, borderTop, borderRight, borderBottom ]; - } - - // Handle events - if (obj.ignoreEvents != true) { - if (obj.options.onfocus) { - if (typeof(obj.options.onfocus) == 'function') { - if (previousState == 0) { - obj.options.onfocus(el); - } - } - } - - if (typeof(obj.options.onselection) == 'function') { - obj.options.onselection(el, borderLeft, borderTop, borderRight, borderBottom, origin); - } - } - - // Find corner cell - obj.updateCornerPosition(); - } - - /** - * Remove copy selection - * - * @return void - */ - obj.removeCopySelection = function() { - // Remove current selection - for (var i = 0; i < obj.selection.length; i++) { - obj.selection[i].classList.remove('selection'); - obj.selection[i].classList.remove('selection-left'); - obj.selection[i].classList.remove('selection-right'); - obj.selection[i].classList.remove('selection-top'); - obj.selection[i].classList.remove('selection-bottom'); - } - - obj.selection = []; - } - - /** - * Update copy selection - * - * @param int x, y - * @return void - */ - obj.updateCopySelection = function(x3, y3) { - // Remove selection - obj.removeCopySelection(); - - // Get elements first and last - var x1 = obj.selectedContainer[0]; - var y1 = obj.selectedContainer[1]; - var x2 = obj.selectedContainer[2]; - var y2 = obj.selectedContainer[3]; - - if (x3 && y3) { - if (x3 - x2 > 0) { - var px = parseInt(x2) + 1; - var ux = parseInt(x3); - } else { - var px = parseInt(x3); - var ux = parseInt(x1) - 1; - } - - if (y3 - y2 > 0) { - var py = parseInt(y2) + 1; - var uy = parseInt(y3); - } else { - var py = parseInt(y3); - var uy = parseInt(y1) - 1; - } - - if (ux - px < uy - py) { - var px = parseInt(x1); - var ux = parseInt(x2); - } else { - var py = parseInt(y1); - var uy = parseInt(y2); - } - - for (var j = py; j <= uy; j++) { - for (var i = px; i <= ux; i++) { - if (obj.records[j][i] && obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') { - obj.records[j][i].classList.add('selection'); - obj.records[py][i].classList.add('selection-top'); - obj.records[uy][i].classList.add('selection-bottom'); - obj.records[j][px].classList.add('selection-left'); - obj.records[j][ux].classList.add('selection-right'); - - // Persist selected elements - obj.selection.push(obj.records[j][i]); - } - } - } - } - } - - /** - * Update corner position - * - * @return void - */ - obj.updateCornerPosition = function() { - // If any selected cells - if (! obj.highlighted.length) { - obj.corner.style.top = '-2000px'; - obj.corner.style.left = '-2000px'; - } else { - // Get last cell - var last = obj.highlighted[obj.highlighted.length-1]; - var x1 = obj.content.getBoundingClientRect().left; - var y1 = obj.content.getBoundingClientRect().top; - - var x2 = last.getBoundingClientRect().left; - var y2 = last.getBoundingClientRect().top; - var w2 = last.getBoundingClientRect().width; - var h2 = last.getBoundingClientRect().height; - - var x = (x2 - x1) + obj.content.scrollLeft + w2 - 4; - var y = (y2 - y1) + obj.content.scrollTop + h2 - 4; - - // Place the corner in the correct place - obj.corner.style.top = y + 'px'; - obj.corner.style.left = x + 'px'; - } - } - - /** - * Update scroll position based on the selection - */ - obj.updateScroll = function(direction) { - // jExcel Container information - var x1 = obj.content.getBoundingClientRect().left; - var y1 = obj.content.getBoundingClientRect().top; - var w1 = obj.content.getBoundingClientRect().width; - var h1 = obj.content.getBoundingClientRect().height; - - // Direction Left or Up - var reference = obj.records[obj.selectedCell[3]][obj.selectedCell[2]]; - - var x2 = reference.getBoundingClientRect().left; - var y2 = reference.getBoundingClientRect().top; - var w2 = reference.getBoundingClientRect().width; - var h2 = reference.getBoundingClientRect().height; - - // Direction - if (direction == 0 || direction == 1) { - var x = (x2 - x1) + obj.content.scrollLeft; - var y = (y2 - y1) + obj.content.scrollTop - 2; - } else { - var x = (x2 - x1) + obj.content.scrollLeft + w2; - var y = (y2 - y1) + obj.content.scrollTop + h2; - } - - // Top position check - if (y > (obj.content.scrollTop + 30) && y < (obj.content.scrollTop + h1)) { - // In the viewport - } else { - // Out of viewport - if (y < obj.content.scrollTop + 30) { - obj.content.scrollTop = y - h2; - } else { - obj.content.scrollTop = y - (h1 - 2); - } - } - - // Left position check - TODO: change that to the bottom border of the element - if (x > (obj.content.scrollLeft) && x < (obj.content.scrollLeft + w1)) { - // In the viewport - } else { - // Out of viewport - if (x < obj.content.scrollLeft + 30) { - obj.content.scrollLeft = x; - if (obj.content.scrollLeft < 50) { - obj.content.scrollLeft = 0; - } - } else { - obj.content.scrollLeft = x - (w1 - 20); - } - } - } - - /** - * Get the column width - * - * @param int column column number (first column is: 0) - * @return int current width - */ - obj.getWidth = function(column) { - if (! column) { - // Get all headers - var data = []; - for (var i = 0; i < obj.headers.length; i++) { - data.push(obj.options.columns[i].width); - } - } else { - // In case the column is an object - if (typeof(column) == 'object') { - column = $(column).getAttribute('data-x'); - } - - data = obj.colgroup[column].getAttribute('width') - } - - return data; - } - - /** - * Set the column width - * - * @param int column number (first column is: 0) - * @param int new column width - * @param int old column width - */ - obj.setWidth = function (column, width, oldWidth) { - if (width > 0) { - // In case the column is an object - if (typeof(column) == 'object') { - column = $(column).getAttribute('data-x'); - } - - // Oldwidth - if (! oldWidth) { - obj.colgroup[column].getAttribute('width'); - } - - // Set width - obj.colgroup[column].setAttribute('width', width); - obj.options.columns[column].width = width; - - // Keeping history of changes - obj.setHistory({ - action:'setWidth', - column:column, - oldValue:oldWidth, - newValue:width, - }); - - // On resize column - if (obj.ignoreEvents != true) { - if (typeof(obj.options.onresizecolumn) == 'function') { - obj.options.onresizecolumn(el, column, width, oldWidth); - } - } - - // Update corner position - obj.updateCornerPosition(); - } - } - - /** - * Set the row height - * - * @param row - row number (first row is: 0) - * @param height - new row height - * @param oldHeight - old row height - */ - obj.setHeight = function (row, height, oldHeight) { - if (height > 0) { - // In case the column is an object - if (typeof(row) == 'object') { - row = $(row).getAttribute('data-y'); - } - - // Oldwidth - if (! oldHeight) { - obj.rows[row].getAttribute('height'); - } - - // Set width - obj.rows[row].setAttribute('height', height); - - // Keep options updated - if (! obj.options.rows[row]) { - obj.options.rows[row] = {}; - } - obj.options.rows[row].height = height; - - // Keeping history of changes - obj.setHistory({ - action:'setHeight', - row:row, - oldValue:oldHeight, - newValue:height, - }); - - // On resize column - if (obj.ignoreEvents != true) { - if (typeof(obj.options.onresizerow) == 'function') { - obj.options.onresizerow(el, row, height, oldHeight); - } - } - - // Update corner position - obj.updateCornerPosition(); - } - } - - /** - * Get the row height - * - * @param row - row number (first row is: 0) - * @return height - current row height - */ - obj.getHeight = function(row) { - if (! row) { - // Get height of all rows - var data = []; - for (var j = 0; j < obj.rows.length; j++) { - var h = obj.rows[j].style.height; - if (h) { - data[j] = h; - } - } - } else { - // In case the row is an object - if (typeof(row) == 'object') { - row = $(row).getAttribute('data-y'); - } - - var data = obj.rows[row].style.height; - } - - return data; - } - - /** - * Get the column title - * - * @param column - column number (first column is: 0) - * @param title - new column title - */ - obj.getHeader = function(column) { - return obj.headers[column].innerText; - } - - /** - * Set the column title - * - * @param column - column number (first column is: 0) - * @param title - new column title - */ - obj.setHeader = function(column, newValue) { - if (obj.headers[column]) { - var oldValue = obj.headers[column].innerText; - - if (! newValue) { - newValue = prompt(obj.options.text.columnName, oldValue) - } - - if (newValue) { - obj.headers[column].innerHTML = newValue; - } - - obj.setHistory({ - action: 'setHeader', - column: column, - oldValue: oldValue, - newValue: newValue - }); - - // On change - if (! obj.ignoreEvents) { - if (typeof(obj.options.onchangeheader) == 'function') { - obj.options.onchangeheader(el, column, oldValue, newValue); - } - } - } - } - - /** - * Get the headers - * - * @param asArray - * @return mixed - */ - obj.getHeaders = function (asArray) { - var title = []; - - for (var i = 0; i < obj.headers.length; i++) { - title.push(obj.getHeader(i)); - } - - return asArray ? title : title.join(obj.options.csvDelimiter); - } - - /** - * Get meta information from cell(s) - * - * @return integer - */ - obj.getMeta = function(cell, key) { - if (! cell) { - return obj.options.meta; - } else { - if (key) { - return obj.options.meta[cell] && obj.options.meta[cell][key] ? obj.options.meta[cell][key] : null; - } else { - return obj.options.meta[cell] ? obj.options.meta[cell] : null; - } - } - } - - /** - * Set meta information to cell(s) - * - * @return integer - */ - obj.setMeta = function(o, k, v) { - if (! obj.options.meta) { - obj.options.meta = {} - } - - if (k && v) { - // Set data value - if (! obj.options.meta[o]) { - obj.options.meta[o] = {}; - } - obj.options.meta[o][k] = v; - } else { - // Apply that for all cells - var keys = Object.keys(o); - for (var i = 0; i < keys.length; i++) { - if (! obj.options.meta[keys[i]]) { - obj.options.meta[keys[i]] = {}; - } - - var prop = Object.keys(o[keys[i]]); - for (var j = 0; j < prop.length; j++) { - obj.options.meta[keys[i]][prop[j]] = o[keys[i]][prop[j]]; - } - } - } - - if (obj.ignoreEvents != true) { - if (typeof(obj.options.onchangemeta) == 'function') { - obj.options.onchangemeta(el, o, k, v); - } - } - } - - /** - * Update meta information - * - * @return integer - */ - obj.updateMeta = function(affectedCells) { - if (obj.options.meta) { - var newMeta = {}; - var keys = Object.keys(obj.options.meta); - for (var i = 0; i < keys.length; i++) { - if (affectedCells[keys[i]]) { - newMeta[affectedCells[keys[i]]] = obj.options.meta[keys[i]]; - } else { - newMeta[keys[i]] = obj.options.meta[keys[i]]; - } - } - // Update meta information - obj.options.meta = newMeta; - } - } - - /** - * Get style information from cell(s) - * - * @return integer - */ - obj.getStyle = function(cell, key) { - // Cell - if (! cell) { - // Control vars - var data = {}; - - // Column and row length - var x = obj.options.data[0].length; - var y = obj.options.data.length; - - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - for (var i = 0; i < x; i++) { - // Value - var v = key ? obj.records[j][i].style[key] : obj.records[j][i].getAttribute('style'); - - // Any meta data for this column? - if (v) { - // Column name - var k = jexcel.getColumnNameFromId([i, j]); - // Value - data[k] = v; - } - } - } - - return data; - } else { - cell = jexcel.getIdFromColumnName(cell, true); - - return key ? obj.records[cell[1]][cell[0]].style[key] : obj.records[cell[1]][cell[0]].getAttribute('style'); - } - }, - - obj.resetStyle = function(o, ignoreHistoryAndEvents) { - var keys = Object.keys(o); - for (var i = 0; i < keys.length; i++) { - // Position - var cell = jexcel.getIdFromColumnName(keys[i], true); - if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) { - obj.records[cell[1]][cell[0]].setAttribute('style', ''); - } - } - obj.setStyle(o, null, null, null, ignoreHistoryAndEvents); - } - - /** - * Set meta information to cell(s) - * - * @return integer - */ - obj.setStyle = function(o, k, v, force, ignoreHistoryAndEvents) { - var newValue = {}; - var oldValue = {}; - - // Apply style - var applyStyle = function(cellId, key, value) { - // Position - var cell = jexcel.getIdFromColumnName(cellId, true); - - if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) { - // Current value - var currentValue = obj.records[cell[1]][cell[0]].style[key]; - - // Change layout - if (currentValue == value && ! force) { - value = ''; - obj.records[cell[1]][cell[0]].style[key] = ''; - } else { - obj.records[cell[1]][cell[0]].style[key] = value; - } - - // History - if (! oldValue[cellId]) { - oldValue[cellId] = []; - } - if (! newValue[cellId]) { - newValue[cellId] = []; - } - - oldValue[cellId].push([key + ':' + currentValue]); - newValue[cellId].push([key + ':' + value]); - } - } - - if (k && v) { - // Get object from string - if (typeof(o) == 'string') { - applyStyle(o, k, v); - } else { - // Avoid duplications - var oneApplication = []; - // Apply that for all cells - for (var i = 0; i < o.length; i++) { - var x = o[i].getAttribute('data-x'); - var y = o[i].getAttribute('data-y'); - var cellName = jexcel.getColumnNameFromId([x, y]); - // This happens when is a merged cell - if (! oneApplication[cellName]) { - applyStyle(cellName, k, v); - oneApplication[cellName] = true; - } - } - } - } else { - var keys = Object.keys(o); - for (var i = 0; i < keys.length; i++) { - var style = o[keys[i]]; - if (typeof(style) == 'string') { - style = style.split(';'); - } - for (var j = 0; j < style.length; j++) { - if (typeof(style[j]) == 'string') { - style[j] = style[j].split(':'); - } - // Apply value - if (style[j][0].trim()) { - applyStyle(keys[i], style[j][0].trim(), style[j][1]); - } - } - } - } - - var keys = Object.keys(oldValue); - for (var i = 0; i < keys.length; i++) { - oldValue[keys[i]] = oldValue[keys[i]].join(';'); - } - var keys = Object.keys(newValue); - for (var i = 0; i < keys.length; i++) { - newValue[keys[i]] = newValue[keys[i]].join(';'); - } - - if (! ignoreHistoryAndEvents) { - // Keeping history of changes - obj.setHistory({ - action: 'setStyle', - oldValue: oldValue, - newValue: newValue, - }); - } - - if (obj.ignoreEvents != true) { - if (typeof(obj.options.onchangestyle) == 'function') { - obj.options.onchangestyle(el, o, k, v); - } - } - } - - /** - * Get cell comments - */ - obj.getComments = function(cell, withAuthor) { - if (typeof(cell) == 'string') { - var cell = jexcel.getIdFromColumnName(cell, true); - } - - if (withAuthor) { - return [obj.records[cell[1]][cell[0]].getAttribute('title'), obj.records[cell[1]][cell[0]].getAttribute('author')]; - } else { - return obj.records[cell[1]][cell[0]].getAttribute('title') || ''; - } - } - - /** - * Set cell comments - */ - obj.setComments = function(cellId, comments, author) { - if (typeof(cellId) == 'string') { - var cell = jexcel.getIdFromColumnName(cellId, true); - } else { - var cell = cellId; - } - - // Keep old value - var title = obj.records[cell[1]][cell[0]].getAttribute('title'); - var author = obj.records[cell[1]][cell[0]].getAttribute('data-author'); - var oldValue = [ title, author ]; - - // Set new values - obj.records[cell[1]][cell[0]].setAttribute('title', comments ? comments : ''); - obj.records[cell[1]][cell[0]].setAttribute('data-author', author ? author : ''); - - // Remove class if there is no comment - if (comments) { - obj.records[cell[1]][cell[0]].classList.add('jexcel_comments'); - } else { - obj.records[cell[1]][cell[0]].classList.remove('jexcel_comments'); - } - - // Save history - obj.setHistory({ - action:'setComments', - column: cellId, - newValue: [ comments, author ], - oldValue: oldValue, - }); - } - - /** - * Get table config information - */ - obj.getConfig = function() { - var options = obj.options; - options.style = obj.getStyle(); - options.mergeCells = obj.getMerge(); - - return options; - } - - /** - * Sort data and reload table - */ - obj.orderBy = function(column, order) { - if (column >= 0) { - // Merged cells - if (Object.keys(obj.options.mergeCells).length > 0) { - if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { - return false; - } else { - // Remove merged cells - obj.destroyMerged(); - } - } - - // Direction - if (order == null) { - order = obj.headers[column].classList.contains('arrow-down') ? 1 : 0; - } else { - order = order ? 1 : 0; - } - - // Filter - Array.prototype.orderBy = function(p, o) { - return this.slice(0).sort(function(a, b) { - var valueA = a[p] == '' ? '' : Number(a[p]) == a[p] ? Number(a[p]) : a[p].toLowerCase(); - var valueB = b[p] == '' ? '' : Number(b[p]) == b[p] ? Number(b[p]) : b[p].toLowerCase(); - - if (! o) { - return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? 1 : (valueA < valueB) ? -1 : 0; - } else { - return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? -1 : (valueA < valueB) ? 1 : 0; - } - }); - } - - // Test order - var temp = []; - if (obj.options.columns[column].type == 'calendar' || - obj.options.columns[column].type == 'checkbox' || - obj.options.columns[column].type == 'radio') { - for (var j = 0; j < obj.options.data.length; j++) { - temp[j] = [ j, obj.options.data[j][column] ]; - } - } else { - for (var j = 0; j < obj.options.data.length; j++) { - temp[j] = [ j, obj.records[j][column].innerHTML ]; - } - } - temp = temp.orderBy(1, order); - - // Save history - var newValue = []; - for (var j = 0; j < temp.length; j++) { - newValue[j] = temp[j][0]; - } - - // Save history - obj.setHistory({ - action: 'orderBy', - rows: newValue, - column: column, - order: order, - }); - - // Update order - obj.updateOrderArrow(column, order); - obj.updateOrder(newValue); - - // On sort event - if (obj.ignoreEvents != true) { - if (typeof(obj.options.onsort) == 'function') { - obj.options.onsort(el, column, order); - } - } - - return true; - } - } - - /** - * Update order arrow - */ - obj.updateOrderArrow = function(column, order) { - // Remove order - for (var i = 0; i < obj.headers.length; i++) { - obj.headers[i].classList.remove('arrow-up'); - obj.headers[i].classList.remove('arrow-down'); - } - - // No order specified then toggle order - if (order) { - obj.headers[column].classList.add('arrow-up'); - } else { - obj.headers[column].classList.add('arrow-down'); - } - } - - /** - * Update rows position - */ - obj.updateOrder = function(rows) { - // History - var data = [] - for (var j = 0; j < rows.length; j++) { - data[j] = obj.options.data[rows[j]]; - } - obj.options.data = data; - - var data = [] - for (var j = 0; j < rows.length; j++) { - data[j] = obj.records[rows[j]]; - } - obj.records = data; - - var data = [] - for (var j = 0; j < rows.length; j++) { - data[j] = obj.rows[rows[j]]; - } - obj.rows = data; - - // Update references - obj.updateTableReferences(); - - // Redo search - if (obj.searchInput.value) { - obj.search(obj.searchInput.value); - } else { - // Create page - obj.results = null; - obj.pageNumber = 0; - - if (obj.options.pagination > 0) { - obj.page(0); - } else if (obj.options.lazyLoading == true) { - obj.loadPage(0); - } else { - for (var j = 0; j < obj.rows.length; j++) { - obj.tbody.appendChild(obj.rows[j]); - } - } - } - } - - /** - * Move row - * - * @return void - */ - obj.moveRow = function(o, d, ignoreDom) { - if (Object.keys(obj.options.mergeCells).length > 0) { - if (obj.isRowMerged(d).length) { - if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { - return false; - } else { - obj.destroyMerged(); - } - } - } - - if (obj.options.search == true) { - if (obj.results && obj.results.length != obj.rows.length) { - if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) { - obj.resetSearch(); - } else { - return false; - } - } - - obj.results = null; - } - - if (! ignoreDom) { - if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[d]) >= 0) { - if (o > d) { - obj.tbody.insertBefore(obj.rows[o], obj.rows[d]); - } else { - obj.tbody.insertBefore(obj.rows[o], obj.rows[d].nextSibling); - } - } else { - obj.tbody.removeChild(obj.rows[o]); - } - } - - // Place references in the correct position - obj.rows.splice(d, 0, obj.rows.splice(o, 1)[0]); - obj.records.splice(d, 0, obj.records.splice(o, 1)[0]); - obj.options.data.splice(d, 0, obj.options.data.splice(o, 1)[0]); - - // Respect pagination - if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) { - obj.page(obj.pageNumber); - } - - // Keeping history of changes - obj.setHistory({ - action:'moveRow', - oldValue: o, - newValue: d, - }); - - // Update table references - obj.updateTableReferences(); - - // Events - if (obj.ignoreEvents != true) { - if (typeof(obj.options.onmoverow) == 'function') { - obj.options.onmoverow(el, o, d); - } - } - } - - /** - * Insert a new row - * - * @param mixed - number of blank lines to be insert or a single array with the data of the new row - * @param rowNumber - * @param insertBefore - * @return void - */ - obj.insertRow = function(mixed, rowNumber, insertBefore) { - // Configuration - if (obj.options.allowInsertRow == true) { - // Records - var records = []; - - // Data to be insert - var data = []; - - // The insert could be lead by number of rows or the array of data - if (mixed > 0) { - var numOfRows = mixed; - } else { - var numOfRows = 1; - - if (mixed) { - data = mixed; - } - } - - // Direction - var insertBefore = insertBefore ? true : false; - - // Current column number - var lastRow = obj.options.data.length - 1; - - if (rowNumber == undefined || rowNumber >= parseInt(lastRow) || rowNumber < 0) { - rowNumber = lastRow; - } - - // Onbeforeinsertrow - if (typeof(obj.options.onbeforeinsertrow) == 'function') { - if (! obj.options.onbeforeinsertrow(el, rowNumber, numOfRows, insertBefore)) { - console.log('onbeforeinsertrow returned false'); - - return false; - } - } - - // Merged cells - if (Object.keys(obj.options.mergeCells).length > 0) { - if (obj.isRowMerged(rowNumber, insertBefore).length) { - if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { - return false; - } else { - obj.destroyMerged(); - } - } - } - - // Clear any search - if (obj.options.search == true) { - if (obj.results && obj.results.length != obj.rows.length) { - if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) { - obj.resetSearch(); - } else { - return false; - } - } - - obj.results = null; - } - - // Insertbefore - var rowIndex = (! insertBefore) ? rowNumber + 1 : rowNumber; - - // Keep the current data - var currentRecords = obj.records.splice(rowIndex); - var currentData = obj.options.data.splice(rowIndex); - var currentRows = obj.rows.splice(rowIndex); - - // Adding lines - var rowRecords = []; - var rowData = []; - var rowNode = []; - - for (var row = rowIndex; row < (numOfRows + rowIndex); row++) { - // Push data to the data container - obj.options.data[row] = []; - for (var col = 0; col < obj.options.columns.length; col++) { - obj.options.data[row][col] = data[col] ? data[col] : ''; - } - // Create row - var tr = obj.createRow(row, obj.options.data[row]); - // Append node - if (! currentRows[0] || Array.prototype.indexOf.call(obj.tbody.children, currentRows[0]) >= 0) { - obj.tbody.insertBefore(tr, currentRows[0]); - } - // Record History - rowRecords.push(obj.records[row]); - rowData.push(obj.options.data[row]); - rowNode.push(tr); - } - - // Copy the data back to the main data - Array.prototype.push.apply(obj.records, currentRecords); - Array.prototype.push.apply(obj.options.data, currentData); - Array.prototype.push.apply(obj.rows, currentRows); - - // Respect pagination - if (obj.options.pagination > 0) { - obj.page(obj.pageNumber); - } - - // Keep history - obj.setHistory({ - action: 'insertRow', - rowNumber: rowNumber, - numOfRows: numOfRows, - insertBefore: insertBefore, - rowRecords: rowRecords, - rowData: rowData, - rowNode: rowNode, - }); - - // Remove table references - obj.updateTableReferences(); - - // Events - if (obj.ignoreEvents != true) { - if (typeof(obj.options.oninsertrow) == 'function') { - obj.options.oninsertrow(el, rowNumber, numOfRows, rowRecords, insertBefore); - } - } - } - } - - /** - * Delete a row by number - * - * @param integer rowNumber - row number to be excluded - * @param integer numOfRows - number of lines - * @return void - */ - obj.deleteRow = function(rowNumber, numOfRows) { - // Global Configuration - if (obj.options.allowDeleteRow == true) { - if (obj.options.allowDeletingAllRows == true || obj.options.data.length > 1) { - // Delete row definitions - if (rowNumber == undefined) { - var number = obj.getSelectedRows(); - - if (! number[0]) { - rowNumber = obj.options.data.length - 1; - numOfRows = 1; - } else { - rowNumber = parseInt(number[0].getAttribute('data-y')); - numOfRows = number.length; - } - } - - // Last column - var lastRow = obj.options.data.length - 1; - - if (rowNumber == undefined || rowNumber > lastRow || rowNumber < 0) { - rowNumber = lastRow; - } - - if (! numOfRows) { - numOfRows = 1; - } - - // Do not delete more than the number of recoreds - if (rowNumber + numOfRows >= obj.options.data.length) { - numOfRows = obj.options.data.length - rowNumber; - } - - // Onbeforedeleterow - if (typeof(obj.options.onbeforedeleterow) == 'function') { - if (! obj.options.onbeforedeleterow(el, rowNumber, numOfRows)) { - console.log('onbeforedeleterow returned false'); - return false; - } - } - - if (parseInt(rowNumber) > -1) { - // Merged cells - var mergeExists = false; - if (Object.keys(obj.options.mergeCells).length > 0) { - for (var row = rowNumber; row < rowNumber + numOfRows; row++) { - if (obj.isRowMerged(row, false).length) { - mergeExists = true; - } - } - } - if (mergeExists) { - if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { - return false; - } else { - obj.destroyMerged(); - } - } - - // Clear any search - if (obj.options.search == true) { - if (obj.results && obj.results.length != obj.rows.length) { - if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) { - obj.resetSearch(); - } else { - return false; - } - } - - obj.results = null; - } - - // Remove node - for (var row = rowNumber; row < rowNumber + numOfRows; row++) { - if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[row]) >= 0) { - obj.rows[row].className = ''; - obj.rows[row].parentNode.removeChild(obj.rows[row]); - } - } - - // Remove data - var rowRecords = obj.records.splice(rowNumber, numOfRows); - var rowData = obj.options.data.splice(rowNumber, numOfRows); - var rowNode = obj.rows.splice(rowNumber, numOfRows); - - // Respect pagination - if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) { - obj.page(obj.pageNumber); - } - - // Remove selection - obj.conditionalSelectionUpdate(1, rowNumber, (rowNumber + numOfRows) - 1); - - // Keep history - obj.setHistory({ - action: 'deleteRow', - rowNumber: rowNumber, - numOfRows: numOfRows, - insertBefore: 1, - rowRecords: rowRecords, - rowData: rowData, - rowNode: rowNode - }); - - // Remove table references - obj.updateTableReferences(); - - // Events - if (obj.ignoreEvents != true) { - if (typeof(obj.options.ondeleterow) == 'function') { - obj.options.ondeleterow(el, rowNumber, numOfRows, rowRecords); - } - } - } - } else { - console.error('JEXCEL. It is not possible to delete the last row'); - } - } - } - - - /** - * Move column - * - * @return void - */ - obj.moveColumn = function(o, d) { - if (Object.keys(obj.options.mergeCells).length > 0) { - if (obj.isColMerged(d).length) { - if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { - return false; - } else { - obj.destroyMerged(); - } - } - } - - var o = parseInt(o); - var d = parseInt(d); - - if (o > d) { - obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d]); - obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d]); - - for (var j = 0; j < obj.rows.length; j++) { - obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d]); - } - } else { - obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d].nextSibling); - obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d].nextSibling); - - for (var j = 0; j < obj.rows.length; j++) { - obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d].nextSibling); - } - } - - obj.options.columns.splice(d, 0, obj.options.columns.splice(o, 1)[0]); - obj.headers.splice(d, 0, obj.headers.splice(o, 1)[0]); - obj.colgroup.splice(d, 0, obj.colgroup.splice(o, 1)[0]); - - for (var j = 0; j < obj.rows.length; j++) { - obj.options.data[j].splice(d, 0, obj.options.data[j].splice(o, 1)[0]); - obj.records[j].splice(d, 0, obj.records[j].splice(o, 1)[0]); - } - - // Keeping history of changes - obj.setHistory({ - action:'moveColumn', - oldValue: o, - newValue: d, - }); - - // Update table references - obj.updateTableReferences(); - - // Events - if (obj.ignoreEvents != true) { - if (typeof(obj.options.onmovecolumn) == 'function') { - obj.options.onmovecolumn(el, o, d); - } - } - } - - - /** - * Insert a new column - * - * @param mixed - num of columns to be added or data to be added in one single column - * @param int columnNumber - number of columns to be created - * @param bool insertBefore - * @param object properties - column properties - * @return void - */ - obj.insertColumn = function(mixed, columnNumber, insertBefore, properties) { - // Configuration - if (obj.options.allowInsertColumn == true) { - // Records - var records = []; - - // Data to be insert - var data = []; - - // The insert could be lead by number of rows or the array of data - if (mixed > 0) { - var numOfColumns = mixed; - } else { - var numOfColumns = 1; - - if (mixed) { - data = mixed; - } - } - - // Direction - var insertBefore = insertBefore ? true : false; - - // Current column number - var lastColumn = obj.options.columns.length - 1; - - // Confirm position - if (columnNumber == undefined || columnNumber >= parseInt(lastColumn) || columnNumber < 0) { - columnNumber = lastColumn; - } - - // Onbeforeinsertcolumn - if (typeof(obj.options.onbeforeinsertcolumn) == 'function') { - if (! obj.options.onbeforeinsertcolumn(el, columnNumber, numOfColumns, insertBefore)) { - console.log('onbeforeinsertcolumn returned false'); - - return false; - } - } - - // Merged cells - if (Object.keys(obj.options.mergeCells).length > 0) { - if (obj.isColMerged(columnNumber, insertBefore).length) { - if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { - return false; - } else { - obj.destroyMerged(); - } - } - } - - // Create default properties - if (! properties) { - properties = []; - } - - for (var i = 0; i < numOfColumns; i++) { - if (! properties[i]) { - properties[i] = { type:'text', source:[], options:[], width:obj.options.defaultColWidth, align:obj.options.defaultColAlign }; - } - } - - // Insert before - var columnIndex = (! insertBefore) ? columnNumber + 1 : columnNumber; - obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, properties); - - // Open space in the containers - var currentHeaders = obj.headers.splice(columnIndex); - var currentColgroup = obj.colgroup.splice(columnIndex); - - // History - var historyHeaders = []; - var historyColgroup = []; - var historyRecords = []; - var historyData = []; - - // Add new headers - for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) { - obj.createCellHeader(col); - obj.headerContainer.insertBefore(obj.headers[col], obj.headerContainer.children[col+1]); - obj.colgroupContainer.insertBefore(obj.colgroup[col], obj.colgroupContainer.children[col+1]); - - historyHeaders.push(obj.headers[col]); - historyColgroup.push(obj.colgroup[col]); - } - - // Adding visual columns - for (var row = 0; row < obj.options.data.length; row++) { - // Keep the current data - var currentData = obj.options.data[row].splice(columnIndex); - var currentRecord = obj.records[row].splice(columnIndex); - - // History - historyData[row] = []; - historyRecords[row] = []; - - for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) { - // New value - var value = data[row] ? data[row] : ''; - obj.options.data[row][col] = value; - // New cell - var td = obj.createCell(col, row, obj.options.data[row][col]); - obj.records[row][col] = td; - // Add cell to the row - if (obj.rows[row]) { - obj.rows[row].insertBefore(td, obj.rows[row].children[col+1]); - } - - // Record History - historyData[row].push(value); - historyRecords[row].push(td); - } - - // Copy the data back to the main data - Array.prototype.push.apply(obj.options.data[row], currentData); - Array.prototype.push.apply(obj.records[row], currentRecord); - } - - Array.prototype.push.apply(obj.headers, currentHeaders); - Array.prototype.push.apply(obj.colgroup, currentColgroup); - - // Adjust nested headers - if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { - // Flexible way to handle nestedheaders - if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { - for (var j = 0; j < obj.options.nestedHeaders.length; j++) { - var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + numOfColumns; - obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan; - obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan); - } - } else { - var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + numOfColumns; - obj.options.nestedHeaders[0].colspan = colspan; - obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan); - } - } - - // Keep history - obj.setHistory({ - action: 'insertColumn', - columnNumber:columnNumber, - numOfColumns:numOfColumns, - insertBefore:insertBefore, - columns:properties, - headers:historyHeaders, - colgroup:historyColgroup, - records:historyRecords, - data:historyData, - }); - - // Remove table references - obj.updateTableReferences(); - - // Events - if (obj.ignoreEvents != true) { - if (typeof(obj.options.oninsertcolumn) == 'function') { - obj.options.oninsertcolumn(el, columnNumber, numOfColumns); - } - } - } - } - - /** - * Delete a column by number - * - * @param integer columnNumber - reference column to be excluded - * @param integer numOfColumns - number of columns to be excluded from the reference column - * @return void - */ - obj.deleteColumn = function(columnNumber, numOfColumns) { - // Global Configuration - if (obj.options.allowDeleteColumn == true) { - if (obj.headers.length > 1) { - // Delete column definitions - if (columnNumber == undefined) { - var number = obj.getSelectedColumns(true); - - if (! number.length) { - // Remove last column - columnNumber = obj.headers.length - 1; - numOfColumns = 1; - } else { - // Remove selected - columnNumber = parseInt(number[0]); - numOfColumns = parseInt(number.length); - } - } - - // Lasat column - var lastColumn = obj.options.data[0].length - 1; - - if (columnNumber == undefined || columnNumber > lastColumn || columnNumber < 0) { - columnNumber = lastColumn; - } - - // Minimum of columns to be delete is 1 - if (! numOfColumns) { - numOfColumns = 1; - } - - - - // Can't delete more than the limit of the table - if (numOfColumns > obj.options.data[0].length - columnNumber) { - numOfColumns = obj.options.data[0].length - columnNumber; - } - - // onbeforedeletecolumn - if (typeof(obj.options.onbeforedeletecolumn) == 'function') { - if (! obj.options.onbeforedeletecolumn(el, columnNumber, numOfColumns)) { - console.log('onbeforedeletecolumn returned false'); - return false; - } - } - - // Can't remove the last column - if (parseInt(columnNumber) > -1) { - // Merged cells - var mergeExists = false; - if (Object.keys(obj.options.mergeCells).length > 0) { - for (var col = columnNumber; col < columnNumber + numOfColumns; col++) { - if (obj.isColMerged(col, false).length) { - mergeExists = true; - } - } - } - if (mergeExists) { - if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { - return false; - } else { - obj.destroyMerged(); - } - } - - // Delete the column properties - var columns = obj.options.columns.splice(columnNumber, numOfColumns); - - for (var col = columnNumber; col < columnNumber + numOfColumns; col++) { - obj.colgroup[col].className = ''; - obj.headers[col].className = ''; - obj.colgroup[col].parentNode.removeChild(obj.colgroup[col]); - obj.headers[col].parentNode.removeChild(obj.headers[col]); - } - - var historyHeaders = obj.headers.splice(columnNumber, numOfColumns); - var historyColgroup = obj.colgroup.splice(columnNumber, numOfColumns); - var historyRecords = []; - var historyData = []; - - for (var row = 0; row < obj.options.data.length; row++) { - for (var col = columnNumber; col < columnNumber + numOfColumns; col++) { - obj.records[row][col].className = ''; - obj.records[row][col].parentNode.removeChild(obj.records[row][col]); - } - } - - // Delete headers - for (var row = 0; row < obj.options.data.length; row++) { - // History - historyData[row] = obj.options.data[row].splice(columnNumber, numOfColumns); - historyRecords[row] = obj.records[row].splice(columnNumber, numOfColumns); - } - - // Remove selection - obj.conditionalSelectionUpdate(0, columnNumber, (columnNumber + numOfColumns) - 1); - - // Adjust nested headers - if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { - // Flexible way to handle nestedheaders - if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { - for (var j = 0; j < obj.options.nestedHeaders.length; j++) { - var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - numOfColumns; - obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan; - obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan); - } - } else { - var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - numOfColumns; - obj.options.nestedHeaders[0].colspan = colspan; - obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan); - } - } - - // Keeping history of changes - obj.setHistory({ - action:'deleteColumn', - columnNumber:columnNumber, - numOfColumns:numOfColumns, - insertBefore: 1, - columns:columns, - headers:historyHeaders, - colgroup:historyColgroup, - records:historyRecords, - data:historyData, - }); - - // Update table references - obj.updateTableReferences(); - - // Delete - if (obj.ignoreEvents != true) { - if (typeof(obj.options.ondeletecolumn) == 'function') { - obj.options.ondeletecolumn(el, columnNumber, numOfColumns, historyRecords); - } - } - } - } else { - console.error('JEXCEL. It is not possible to delete the last column'); - } - } - } - - /** - * Get seleted rows numbers - * - * @return array - */ - obj.getSelectedRows = function(asIds) { - var rows = []; - // Get all selected rows - for (var j = 0; j < obj.rows.length; j++) { - if (obj.rows[j].classList.contains('selected')) { - if (asIds) { - rows.push(j); - } else { - rows.push(obj.rows[j]); - } - } - } - - return rows; - }, - - /** - * Get seleted column numbers - * - * @return array - */ - obj.getSelectedColumns = function() { - var cols = []; - // Get all selected cols - for (var i = 0; i < obj.headers.length; i++) { - if (obj.headers[i].classList.contains('selected')) { - cols.push(i); - } - } - - return cols; - } - - /** - * Get highlighted - * - * @return array - */ - obj.getHighlighted = function() { - return obj.highlighted; - } - - /** - * Update cell references - * - * @return void - */ - obj.updateTableReferences = function() { - // Update headers - for (var i = 0; i < obj.headers.length; i++) { - var x = obj.headers[i].getAttribute('data-x'); - - if (x != i) { - // Update coords - obj.headers[i].setAttribute('data-x', i); - // Title - if (! obj.headers[i].getAttribute('title')) { - obj.headers[i].innerHTML = jexcel.getColumnName(i); - } - } - } - - // Update all rows - for (var j = 0; j < obj.rows.length; j++) { - if (obj.rows[j]) { - var y = obj.rows[j].getAttribute('data-y'); - - if (y != j) { - // Update coords - obj.rows[j].setAttribute('data-y', j); - obj.rows[j].children[0].setAttribute('data-y', j); - // Row number - obj.rows[j].children[0].innerHTML = j + 1; - } - } - } - - // Regular cells affected by this change - var affectedTokens = []; - var mergeCellUpdates = []; - - // Update cell - var updatePosition = function(x,y,i,j) { - if (x != i) { - obj.records[j][i].setAttribute('data-x', i); - } - if (y != j) { - obj.records[j][i].setAttribute('data-y', j); - } - - // Other updates - if (x != i || y != j) { - var columnIdFrom = jexcel.getColumnNameFromId([x, y]); - var columnIdTo = jexcel.getColumnNameFromId([i, j]); - affectedTokens[columnIdFrom] = columnIdTo; - } - } - - for (var j = 0; j < obj.records.length; j++) { - for (var i = 0; i < obj.records[0].length; i++) { - if (obj.records[j][i]) { - // Current values - var x = obj.records[j][i].getAttribute('data-x'); - var y = obj.records[j][i].getAttribute('data-y'); - - // Update column - if (obj.records[j][i].getAttribute('data-merged')) { - var columnIdFrom = jexcel.getColumnNameFromId([x, y]); - var columnIdTo = jexcel.getColumnNameFromId([i, j]); - if (mergeCellUpdates[columnIdFrom] == null) { - if (columnIdFrom == columnIdTo) { - mergeCellUpdates[columnIdFrom] = false; - } else { - var totalX = parseInt(i - x); - var totalY = parseInt(j - y); - mergeCellUpdates[columnIdFrom] = [ columnIdTo, totalX, totalY ]; - } - } - } else { - updatePosition(x,y,i,j); - } - } - } - } - - // Update merged if applicable - var keys = Object.keys(mergeCellUpdates); - if (keys.length) { - for (var i = 0; i < keys.length; i++) { - if (mergeCellUpdates[keys[i]]) { - var info = jexcel.getIdFromColumnName(keys[i], true) - var x = info[0]; - var y = info[1]; - updatePosition(x,y,x + mergeCellUpdates[keys[i]][1],y + mergeCellUpdates[keys[i]][2]); - - var columnIdFrom = keys[i]; - var columnIdTo = mergeCellUpdates[keys[i]][0]; - for (var j = 0; j < obj.options.mergeCells[columnIdFrom][2].length; j++) { - var x = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-x')); - var y = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-y')); - obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-x', x + mergeCellUpdates[keys[i]][1]); - obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-y', y + mergeCellUpdates[keys[i]][2]); - } - - obj.options.mergeCells[columnIdTo] = obj.options.mergeCells[columnIdFrom]; - delete(obj.options.mergeCells[columnIdFrom]); - } - } - } - - // Update formulas - obj.updateFormulas(affectedTokens); - - // Update meta data - obj.updateMeta(affectedTokens); - - // Refresh selection - obj.refreshSelection(); - - // Update table with custom configuration if applicable - obj.updateTable(); - } - - /** - * Custom settings for the cells - */ - obj.updateTable = function() { - // Check for spare - if (obj.options.minSpareRows > 0) { - var numBlankRows = 0; - for (var j = obj.rows.length - 1; j >= 0; j--) { - var test = false; - for (var i = 0; i < obj.headers.length; i++) { - if (obj.options.data[j][i]) { - test = true; - } - } - if (test) { - break; - } else { - numBlankRows++; - } - } - - if (obj.options.minSpareRows - numBlankRows > 0) { - obj.insertRow(obj.options.minSpareRows - numBlankRows) - } - } - - if (obj.options.minSpareCols > 0) { - var numBlankCols = 0; - for (var i = obj.headers.length - 1; i >= 0 ; i--) { - var test = false; - for (var j = 0; j < obj.rows.length; j++) { - if (obj.options.data[j][i]) { - test = true; - } - } - if (test) { - break; - } else { - numBlankCols++; - } - } - - if (obj.options.minSpareCols - numBlankCols > 0) { - obj.insertColumn(obj.options.minSpareCols - numBlankCols) - } - } - - // Customizations by the developer - if (typeof(obj.options.updateTable) == 'function') { - for (var j = 0; j < obj.rows.length; j++) { - for (var i = 0; i < obj.headers.length; i++) { - obj.options.updateTable(el, obj.records[j][i], i, j, obj.options.data[j][i], obj.records[j][i].innerText, jexcel.getColumnNameFromId([i, j])); - } - } - } - - // Update corner position - setTimeout(function() { - obj.updateCornerPosition(); - },0); - } - - /** - * Show index column - */ - obj.showIndex = function() { - obj.table.classList.remove('jexcel_hidden_index'); - } - - /** - * Hide index column - */ - obj.hideIndex = function() { - obj.table.classList.add('jexcel_hidden_index'); - } - - /** - * Update all related cells in the chain - */ - var chainLoopProtection = []; - - obj.updateFormulaChain = function(x, y, records) { - var cellId = jexcel.getColumnNameFromId([x, y]); - if (obj.formula[cellId] && obj.formula[cellId].length > 0) { - if (chainLoopProtection[cellId]) { - obj.records[y][x].innerHTML = '#ERROR'; - obj.formula[cellId] = ''; - } else { - // Protection - chainLoopProtection[cellId] = true; - - for (var i = 0; i < obj.formula[cellId].length; i++) { - var cell = jexcel.getIdFromColumnName(obj.formula[cellId][i], true); - // Update cell - var value = ''+obj.options.data[cell[1]][cell[0]]; - if (value.substr(0,1) == '=') { - records.push(obj.updateCell(cell[0], cell[1], value, true)); - } else { - // No longer a formula, remove from the chain - Object.keys(obj.formula)[i] = null; - } - obj.updateFormulaChain(cell[0], cell[1], records); - } - } - } - - chainLoopProtection = []; - } - - /** - * Update formulas - */ - obj.updateFormulas = function(referencesToUpdate) { - // Update formulas - for (var j = 0; j < obj.options.data.length; j++) { - for (var i = 0; i < obj.options.data[0].length; i++) { - var value = '' + obj.options.data[j][i]; - // Is formula - if (value.substr(0,1) == '=') { - // Replace tokens - var newFormula = obj.updateFormula(value, referencesToUpdate); - if (newFormula != value) { - obj.options.data[j][i] = newFormula; - } - } - } - } - - // Update formula chain - var formula = []; - var keys = Object.keys(obj.formula); - for (var j = 0; j < keys.length; j++) { - // Current key and values - var key = keys[j]; - var value = obj.formula[key]; - // Update key - if (referencesToUpdate[key]) { - key = referencesToUpdate[key]; - } - // Update values - formula[key] = []; - for (var i = 0; i < value.length; i++) { - var letter = value[i]; - if (referencesToUpdate[letter]) { - letter = referencesToUpdate[letter]; - } - formula[key].push(letter); - } - } - obj.formula = formula; - } - - /** - * Update formula - */ - obj.updateFormula = function(formula, referencesToUpdate) { - var testLetter = /[A-Z]/; - var testNumber = /[0-9]/; - - var newFormula = ''; - var letter = null; - var number = null; - var token = ''; - - for (var index = 0; index < formula.length; index++) { - if (testLetter.exec(formula[index])) { - letter = 1; - number = 0; - token += formula[index]; - } else if (testNumber.exec(formula[index])) { - number = letter ? 1 : 0; - token += formula[index]; - } else { - if (letter && number) { - token = referencesToUpdate[token] ? referencesToUpdate[token] : token; - } - newFormula += token; - newFormula += formula[index]; - letter = 0; - number = 0; - token = ''; - } - } - - if (token) { - if (letter && number) { - token = referencesToUpdate[token] ? referencesToUpdate[token] : token; - } - newFormula += token; - } - - return newFormula; - } - - /** - * Parse formulas - */ - obj.executeFormula = function(expression, x, y) { - - var formulaResults = []; - var formulaLoopProtection = []; - - // Execute formula with loop protection - var execute = function(expression, x, y) { - // Parent column identification - var parentId = jexcel.getColumnNameFromId([x, y]); - - // Code protection - if (formulaLoopProtection[parentId]) { - console.error('Reference loop detected'); - return '#ERROR'; - } - - formulaLoopProtection[parentId] = true; - - // Convert range tokens - var tokensUpdate = function(tokens) { - for (var index = 0; index < tokens.length; index++) { - var f = []; - var token = tokens[index].split(':'); - var e1 = jexcel.getIdFromColumnName(token[0], true); - var e2 = jexcel.getIdFromColumnName(token[1], true); - - if (e1[0] <= e2[0]) { - var x1 = e1[0]; - var x2 = e2[0]; - } else { - var x1 = e2[0]; - var x2 = e1[0]; - } - - if (e1[1] <= e2[1]) { - var y1 = e1[1]; - var y2 = e2[1]; - } else { - var y1 = e2[1]; - var y2 = e1[1]; - } - - for (var j = y1; j <= y2; j++) { - for (var i = x1; i <= x2; i++) { - f.push(jexcel.getColumnNameFromId([i, j])); - } - } - - expression = expression.replace(tokens[index], f.join(',')); - } - } - - var tokens = expression.match(/([A-Z]+[0-9]+)\:([A-Z]+[0-9]+)/g); - if (tokens && tokens.length) { - tokensUpdate(tokens); - } - - // String - var evalstring = ''; - - // Get tokens - var tokens = expression.match(/([A-Z]+[0-9]+)/g); - - // Direct self-reference protection - if (tokens && tokens.indexOf(parentId) > -1) { - console.error('Self Reference detected'); - return '#ERROR'; - } else { - if (tokens) { - for (var i = 0; i < tokens.length; i++) { - // Keep chain - if (! obj.formula[tokens[i]]) { - obj.formula[tokens[i]] = []; - } - // Is already in the register - if (obj.formula[tokens[i]].indexOf(parentId) < 0) { - obj.formula[tokens[i]].push(parentId); - } - - // Do not calculate again - if (eval('typeof(' + tokens[i] + ') == "undefined"')) { - // Coords - var position = jexcel.getIdFromColumnName(tokens[i], 1); - // Get value - if (typeof(obj.options.data[position[1]]) != 'undefined' && typeof(obj.options.data[position[1]][position[0]]) != 'undefined') { - var value = obj.options.data[position[1]][position[0]]; - } else { - var value = ''; - } - // Get column data - if ((''+value).substr(0,1) == '=') { - if (formulaResults[tokens[i]]) { - value = formulaResults[tokens[i]]; - } else { - value = execute(value, position[0], position[1]); - formulaResults[tokens[i]] = value; - } - } - // Type! - if ((''+value).trim() == '') { - // Null - evalstring += "var " + tokens[i] + " = null;"; - } else { - if (value == Number(value)) { - // Number - evalstring += "var " + tokens[i] + " = " + value + ";"; - } else { - // Trying any formatted number - var number = null; - if (number = obj.parseNumber(value, position[0])) { - // Render as number - evalstring += "var " + tokens[i] + " = " + number + ";"; - } else { - // Render as string - evalstring += "var " + tokens[i] + " = '" + value + "';"; - } - } - } - } - } - } - - // Convert formula to javascript - try { - evalstring += "function COLUMN() { return parseInt(x) + 1; }; function ROW() { return parseInt(y) + 1; }; function CELL() { return parentId; };"; - - var res = eval(evalstring + expression.substr(1)); - } catch (e) { - var res = '#ERROR'; - } - - return res; - } - } - - return execute(expression, x, y); - } - - /** - * Trying to extract a number from a string - */ - obj.parseNumber = function(value, columnNumber) { - // Decimal point - var decimal = columnNumber && obj.options.columns[columnNumber].decimal ? obj.options.columns[columnNumber].decimal : '.'; - - // Parse both parts of the number - var number = ('' + value); - number = number.split(decimal); - number[0] = number[0].match(/[+-]?[0-9]/g); - if (number[0]) { - number[0] = number[0].join(''); - } - if (number[1]) { - number[1] = number[1].match(/[0-9]*/g).join(''); - } - - // Is a valid number - if (number[0] && Number(number[0]) >= 0) { - if (! number[1]) { - var value = Number(number[0] + '.00'); - } else { - var value = Number(number[0] + '.' + number[1]); - } - } else { - var value = null; - } - - return value; - } - - /** - * Get row number - */ - obj.row = function(cell) { - } - - /** - * Get col number - */ - obj.col = function(cell) { - } - - obj.up = function(shiftKey, ctrlKey) { - if (shiftKey) { - if (obj.selectedCell[3] > 0) { - obj.up.visible(1, ctrlKey ? 0 : 1) - } - } else { - if (obj.selectedCell[1] > 0) { - obj.up.visible(0, ctrlKey ? 0 : 1) - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - // Update selection - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - - // Change page - if (obj.options.lazyLoading == true) { - if (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0) { - obj.loadPage(0); - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - } else { - if (obj.loadValidation()) { - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - } else { - var item = parseInt(obj.tbody.firstChild.getAttribute('data-y')); - if (obj.selectedCell[1] - item < 30) { - obj.loadUp(); - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - } - } - } - } else if (obj.options.pagination > 0) { - var pageNumber = obj.whichPage(obj.selectedCell[3]); - if (pageNumber != obj.pageNumber) { - obj.page(pageNumber); - } - } - - obj.updateScroll(1); - } - - obj.up.visible = function(group, direction) { - if (group == 0) { - var x = parseInt(obj.selectedCell[0]); - var y = parseInt(obj.selectedCell[1]); - } else { - var x = parseInt(obj.selectedCell[2]); - var y = parseInt(obj.selectedCell[3]); - } - - if (direction == 0) { - for (var j = 0; j < y; j++) { - if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') { - y = j; - break; - } - } - } else { - y = obj.up.get(x, y); - } - - if (group == 0) { - obj.selectedCell[0] = x; - obj.selectedCell[1] = y; - } else { - obj.selectedCell[2] = x; - obj.selectedCell[3] = y; - } - } - - obj.up.get = function(x, y) { - var x = parseInt(x); - var y = parseInt(y); - for (var j = (y - 1); j >= 0; j--) { - if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') { - if (obj.records[j][x].getAttribute('data-merged')) { - if (obj.records[j][x] == obj.records[y][x]) { - continue; - } - } - y = j; - break; - } - } - - return y; - } - - obj.down = function(shiftKey, ctrlKey) { - if (shiftKey) { - if (obj.selectedCell[3] < obj.records.length - 1) { - obj.down.visible(1, ctrlKey ? 0 : 1) - } - } else { - if (obj.selectedCell[1] < obj.records.length - 1) { - obj.down.visible(0, ctrlKey ? 0 : 1) - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - - // Change page - if (obj.options.lazyLoading == true) { - if ((obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) { - obj.loadPage(-1); - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - } else { - if (obj.loadValidation()) { - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - } else { - var item = parseInt(obj.tbody.lastChild.getAttribute('data-y')); - if (item - obj.selectedCell[3] < 30) { - obj.loadDown(); - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - } - } - } - } else if (obj.options.pagination > 0) { - var pageNumber = obj.whichPage(obj.selectedCell[3]); - if (pageNumber != obj.pageNumber) { - obj.page(pageNumber); - } - } - - obj.updateScroll(3); - } - - obj.down.visible = function(group, direction) { - if (group == 0) { - var x = parseInt(obj.selectedCell[0]); - var y = parseInt(obj.selectedCell[1]); - } else { - var x = parseInt(obj.selectedCell[2]); - var y = parseInt(obj.selectedCell[3]); - } - - if (direction == 0) { - for (var j = obj.rows.length - 1; j > y; j--) { - if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') { - y = j; - break; - } - } - } else { - y = obj.down.get(x, y); - } - - if (group == 0) { - obj.selectedCell[0] = x; - obj.selectedCell[1] = y; - } else { - obj.selectedCell[2] = x; - obj.selectedCell[3] = y; - } - } - - obj.down.get = function(x, y) { - var x = parseInt(x); - var y = parseInt(y); - for (var j = (y + 1); j < obj.rows.length; j++) { - if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') { - if (obj.records[j][x].getAttribute('data-merged')) { - if (obj.records[j][x] == obj.records[y][x]) { - continue; - } - } - y = j; - break; - } - } - - return y; - } - - obj.right = function(shiftKey, ctrlKey) { - if (shiftKey) { - if (obj.selectedCell[2] < obj.headers.length - 1) { - obj.right.visible(1, ctrlKey ? 0 : 1) - } - } else { - if (obj.selectedCell[0] < obj.headers.length - 1) { - obj.right.visible(0, ctrlKey ? 0 : 1) - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - obj.updateScroll(2); - } - - obj.right.visible = function(group, direction) { - if (group == 0) { - var x = parseInt(obj.selectedCell[0]); - var y = parseInt(obj.selectedCell[1]); - } else { - var x = parseInt(obj.selectedCell[2]); - var y = parseInt(obj.selectedCell[3]); - } - - if (direction == 0) { - for (var i = obj.headers.length - 1; i > x; i--) { - if (obj.records[y][i].style.display != 'none') { - x = i; - break; - } - } - } else { - x = obj.right.get(x, y); - } - - if (group == 0) { - obj.selectedCell[0] = x; - obj.selectedCell[1] = y; - } else { - obj.selectedCell[2] = x; - obj.selectedCell[3] = y; - } - } - - obj.right.get = function(x, y) { - var x = parseInt(x); - var y = parseInt(y); - - for (var i = (x + 1); i < obj.headers.length; i++) { - if (obj.records[y][i].style.display != 'none') { - if (obj.records[y][i].getAttribute('data-merged')) { - if (obj.records[y][i] == obj.records[y][x]) { - continue; - } - } - x = i; - break; - } - } - - return x; - } - - obj.left = function(shiftKey, ctrlKey) { - if (shiftKey) { - if (obj.selectedCell[2] > 0) { - obj.left.visible(1, ctrlKey ? 0 : 1) - } - } else { - if (obj.selectedCell[0] > 0) { - obj.left.visible(0, ctrlKey ? 0 : 1) - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - obj.updateScroll(0); - } - - obj.left.visible = function(group, direction) { - if (group == 0) { - var x = parseInt(obj.selectedCell[0]); - var y = parseInt(obj.selectedCell[1]); - } else { - var x = parseInt(obj.selectedCell[2]); - var y = parseInt(obj.selectedCell[3]); - } - - if (direction == 0) { - for (var i = 0; i < x; i++) { - if (obj.records[y][i].style.display != 'none') { - x = i; - break; - } - } - } else { - x = obj.left.get(x, y); - } - - if (group == 0) { - obj.selectedCell[0] = x; - obj.selectedCell[1] = y; - } else { - obj.selectedCell[2] = x; - obj.selectedCell[3] = y; - } - } - - obj.left.get = function(x, y) { - var x = parseInt(x); - var y = parseInt(y); - for (var i = (x - 1); i >= 0; i--) { - if (obj.records[y][i].style.display != 'none') { - if (obj.records[y][i].getAttribute('data-merged')) { - if (obj.records[y][i] == obj.records[y][x]) { - continue; - } - } - x = i; - break; - } - } - - return x; - } - - obj.first = function(shiftKey, ctrlKey) { - if (shiftKey) { - if (ctrlKey) { - obj.selectedCell[3] = 0; - } else { - obj.left.visible(1, 0); - } - } else { - if (ctrlKey) { - obj.selectedCell[1] = 0; - } else { - obj.left.visible(0, 0); - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - // Change page - if (obj.options.lazyLoading == true && (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0)) { - obj.loadPage(0); - } else if (obj.options.pagination > 0) { - var pageNumber = obj.whichPage(obj.selectedCell[3]); - if (pageNumber != obj.pageNumber) { - obj.page(pageNumber); - } - } - - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - obj.updateScroll(1); - } - - obj.last = function(shiftKey, ctrlKey) { - if (shiftKey) { - if (ctrlKey) { - obj.selectedCell[3] = obj.records.length - 1; - } else { - obj.right.visible(1, 0); - } - } else { - if (ctrlKey) { - obj.selectedCell[1] = obj.records.length - 1; - } else { - obj.right.visible(0, 0); - } - obj.selectedCell[2] = obj.selectedCell[0]; - obj.selectedCell[3] = obj.selectedCell[1]; - } - - // Change page - if (obj.options.lazyLoading == true && (obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) { - obj.loadPage(-1); - } else if (obj.options.pagination > 0) { - var pageNumber = obj.whichPage(obj.selectedCell[3]); - if (pageNumber != obj.pageNumber) { - obj.page(pageNumber); - } - } - - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - obj.updateScroll(3); - } - - obj.selectAll = function() { - if (! obj.selectedCell) { - obj.selectedCell = []; - } - - obj.selectedCell[0] = 0; - obj.selectedCell[1] = 0; - obj.selectedCell[2] = obj.headers.length - 1; - obj.selectedCell[3] = obj.records.length - 1; - - obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); - } - - /** - * Go to a page in a lazyLoading - */ - obj.loadPage = function(pageNumber) { - // Search - if (obj.options.search == true && obj.results) { - var results = obj.results; - } else { - var results = obj.rows; - } - - // Per page - var quantityPerPage = 100; - - // pageNumber - if (pageNumber == null || pageNumber == -1) { - // Last page - pageNumber = Math.ceil(results.length / quantityPerPage); - } - - var startRow = (pageNumber * quantityPerPage); - var finalRow = (pageNumber * quantityPerPage) + quantityPerPage; - if (finalRow > results.length) { - finalRow = results.length; - } - startRow = finalRow - 100; - if (startRow < 0) { - startRow = 0; - } - - // Appeding items - for (var j = startRow; j < finalRow; j++) { - if (obj.options.search == true && obj.results) { - obj.tbody.appendChild(obj.rows[results[j]]); - } else { - obj.tbody.appendChild(obj.rows[j]); - } - - if (obj.tbody.children.length > quantityPerPage) { - obj.tbody.removeChild(obj.tbody.firstChild); - } - } - } - - obj.loadUp = function() { - // Search - if (obj.options.search == true && obj.results) { - var results = obj.results; - } else { - var results = obj.rows; - } - var test = 0; - if (results.length > 100) { - // Get the first element in the page - var item = parseInt(obj.tbody.firstChild.getAttribute('data-y')); - if (obj.options.search == true && obj.results) { - item = results.indexOf(item); - } - if (item > 0) { - for (var j = 0; j < 30; j++) { - item = item - 1; - if (item > -1) { - if (obj.options.search == true && obj.results) { - obj.tbody.insertBefore(obj.rows[results[item]], obj.tbody.firstChild); - } else { - obj.tbody.insertBefore(obj.rows[item], obj.tbody.firstChild); - } - if (obj.tbody.children.length > 100) { - obj.tbody.removeChild(obj.tbody.lastChild); - test = 1; - } - } - } - } - } - return test; - } - - obj.loadDown = function() { - // Search - if (obj.options.search == true && obj.results) { - var results = obj.results; - } else { - var results = obj.rows; - } - var test = 0; - if (results.length > 100) { - // Get the last element in the page - var item = parseInt(obj.tbody.lastChild.getAttribute('data-y')); - if (obj.options.search == true && obj.results) { - item = results.indexOf(item); - } - if (item < obj.rows.length - 1) { - for (var j = 0; j <= 30; j++) { - if (item < results.length) { - if (obj.options.search == true && obj.results) { - obj.tbody.appendChild(obj.rows[results[item]]); - } else { - obj.tbody.appendChild(obj.rows[item]); - } - if (obj.tbody.children.length > 100) { - obj.tbody.removeChild(obj.tbody.firstChild); - test = 1; - } - } - item = item + 1; - } - } - } - - return test; - } - - obj.loadValidation = function() { - if (obj.selectedCell) { - var currentPage = parseInt(obj.tbody.firstChild.getAttribute('data-y')) / 100; - var selectedPage = parseInt(obj.selectedCell[3] / 100); - var totalPages = parseInt(obj.rows.length / 100); - - if (currentPage != selectedPage && selectedPage <= totalPages) { - if (! Array.prototype.indexOf.call(obj.tbody.children, obj.rows[obj.selectedCell[3]])) { - obj.loadPage(selectedPage); - return true; - } - } - } - - return false; - } - - /** - * Reset search - */ - obj.resetSearch = function() { - obj.searchInput.value = ''; - obj.search(''); - obj.results = null; - } - - /** - * Search - */ - obj.search = function(query) { - // Query - if (query) { - var query = query.toLowerCase(); - } - - // Reset selection - obj.resetSelection(); - - // Total of results - obj.pageNumber = 0; - obj.results = []; - - if (query) { - // Search filter - var search = function(item, query, index) { - for (var i = 0; i < item.length; i++) { - if ((''+item[i]).toLowerCase().search(query) >= 0 || - (''+obj.records[index][i].innerHTML).toLowerCase().search(query) >= 0) { - return true; - } - } - return false; - } - - // Result - var addToResult = function(k) { - if (obj.results.indexOf(k) == -1) { - obj.results.push(k); - } - } - - // Filter - var data = obj.options.data.filter(function(v, k) { - if (search(v, query, k)) { - // Merged rows found - var rows = obj.isRowMerged(k); - if (rows.length) { - for (var i = 0; i < rows.length; i++) { - var row = jexcel.getIdFromColumnName(rows[i], true); - for (var j = 0; j < obj.options.mergeCells[rows[i]][1]; j++) { - addToResult(row[1]+j); - } - } - } else { - // Normal row found - addToResult(k); - } - return true; - } else { - return false; - } - }); - } else { - obj.results = null; - } - - var total = 0; - var index = 0; - - // Page 1 - if (obj.options.lazyLoading == true) { - total = 100; - } else if (obj.options.pagination > 0) { - total = obj.options.pagination; - } else { - if (obj.results) { - total = obj.results.length; - } else { - total = obj.rows.length; - } - } - - // Reset current nodes - while (obj.tbody.firstChild) { - obj.tbody.removeChild(obj.tbody.firstChild); - } - - // Hide all records from the table - for (var j = 0; j < obj.rows.length; j++) { - if (! obj.results || obj.results.indexOf(j) > -1) { - if (index < total) { - obj.tbody.appendChild(obj.rows[j]); - index++; - } - obj.rows[j].style.display = ''; - } else { - obj.rows[j].style.display = 'none'; - } - } - - // Update pagination - if (obj.options.pagination > 0) { - obj.updatePagination(); - } - - return total; - } - - /** - * Which page the cell is - */ - obj.whichPage = function(cell) { - // Search - if (obj.options.search == true && obj.results) { - cell = obj.results.indexOf(cell); - } - - return (Math.ceil((parseInt(cell) + 1) / parseInt(obj.options.pagination))) - 1; - } - - /** - * Go to page - */ - obj.page = function(pageNumber) { - // Search - if (obj.options.search == true && obj.results) { - var results = obj.results; - } else { - var results = obj.rows; - } - - // Per page - var quantityPerPage = parseInt(obj.options.pagination); - - // pageNumber - if (pageNumber == null || pageNumber == -1) { - // Last page - pageNumber = Math.ceil(results.length / quantityPerPage); - } - - // Page number - obj.pageNumber = pageNumber; - - var startRow = (pageNumber * quantityPerPage); - var finalRow = (pageNumber * quantityPerPage) + quantityPerPage; - if (finalRow > results.length) { - finalRow = results.length; - } - if (startRow < 0) { - startRow = 0; - } - - // Reset container - while (obj.tbody.firstChild) { - obj.tbody.removeChild(obj.tbody.firstChild); - } - - // Appeding items - for (var j = startRow; j < finalRow; j++) { - if (obj.options.search == true && obj.results) { - obj.tbody.appendChild(obj.rows[results[j]]); - } else { - obj.tbody.appendChild(obj.rows[j]); - } - } - - if (obj.options.pagination > 0) { - obj.updatePagination(); - } - - // Update corner position - obj.updateCornerPosition(); - } - - /** - * Update the pagination - */ - obj.updatePagination = function() { - // Reset container - obj.pagination.children[0].innerHTML = ''; - obj.pagination.children[1].innerHTML = ''; - - // Start pagination - if (obj.options.pagination) { - // Searchable - if (obj.options.search == true && obj.results) { - var results = obj.results.length; - } else { - var results = obj.rows.length; - } - - if (! results) { - // No records found - obj.pagination.children[0].innerHTML = obj.options.text.noRecordsFound; - } else { - // Pagination container - var quantyOfPages = Math.ceil(results / obj.options.pagination); - - if (obj.pageNumber < 6) { - var startNumber = 1; - var finalNumber = quantyOfPages < 10 ? quantyOfPages : 10; - } else if (quantyOfPages - obj.pageNumber < 5) { - var startNumber = quantyOfPages - 9; - var finalNumber = quantyOfPages; - if (startNumber < 1) { - startNumber = 1; - } - } else { - var startNumber = obj.pageNumber - 4; - var finalNumber = obj.pageNumber + 5; - } - - // First - if (startNumber > 1) { - var paginationItem = document.createElement('div'); - paginationItem.className = 'jexcel_page'; - paginationItem.innerHTML = '<'; - paginationItem.title = 1; - obj.pagination.children[1].appendChild(paginationItem); - } - - // Get page links - for (var i = startNumber; i <= finalNumber; i++) { - var paginationItem = document.createElement('div'); - paginationItem.className = 'jexcel_page'; - paginationItem.innerHTML = i; - obj.pagination.children[1].appendChild(paginationItem); - - if (obj.pageNumber == (i-1)) { - paginationItem.classList.add('jexcel_page_selected'); - } - } - - // Last - if (finalNumber < quantyOfPages) { - var paginationItem = document.createElement('div'); - paginationItem.className = 'jexcel_page'; - paginationItem.innerHTML = '>'; - paginationItem.title = quantyOfPages; - obj.pagination.children[1].appendChild(paginationItem); - } - - // Text - var format = function(format) { - var args = Array.prototype.slice.call(arguments, 1); - return format.replace(/{(\d+)}/g, function(match, number) { - return typeof args[number] != 'undefined' - ? args[number] - : match - ; - }); - }; - - obj.pagination.children[0].innerHTML = format(obj.options.text.showingPage, obj.pageNumber + 1, quantyOfPages) - } - } - } - - /** - * Download CSV table - * - * @return null - */ - obj.download = function(includeHeaders) { - if (obj.options.allowExport == false) { - console.error('Export not allowed'); - } else { - // Data - var data = ''; - if (includeHeaders == true) { - data += obj.getHeaders(); - data += "\r\n"; - } - // Get data - data += obj.copy(false, obj.options.csvDelimiter, true); - // Download element - var pom = document.createElement('a'); - var blob = new Blob([data], {type: 'text/csv;charset=utf-8;'}); - var url = URL.createObjectURL(blob); - pom.href = url; - pom.setAttribute('download', obj.options.csvFileName + '.csv'); - document.body.appendChild(pom); - pom.click(); - pom.parentNode.removeChild(pom); - } - } - - /** - * Initializes a new history record for undo/redo - * - * @return null - */ - obj.setHistory = function(changes) { - if (obj.ignoreHistory != true) { - // Increment and get the current history index - var index = ++obj.historyIndex; - - // Slice the array to discard undone changes - obj.history = (obj.history = obj.history.slice(0, index + 1)); - - // Keep history - obj.history[index] = changes; - } - } - - /** - * Copy method - * - * @param bool highlighted - Get only highlighted cells - * @param delimiter - \t default to keep compatibility with excel - * @return string value - */ - obj.copy = function(highlighted, delimiter, returnData) { - if (! delimiter) { - delimiter = "\t"; - } - - // Controls - var col = []; - var colLabel = []; - var row = []; - var rowLabel = []; - var x = obj.options.data[0].length - var y = obj.options.data.length - var tmp = ''; - - // Reset container - obj.style = []; - - // Go through the columns to get the data - for (var j = 0; j < y; j++) { - col = []; - colLabel = []; - - for (var i = 0; i < x; i++) { - // If cell is highlighted - if (! highlighted || obj.records[j][i].classList.contains('highlight')) { - // Values - var value = obj.options.data[j][i]; - if (value.match && (value.match(/,/g) || value.match(/\n/) || value.match(/\"/))) { - value = value.replace(new RegExp('"', 'g'), '""'); - value = '"' + value + '"'; - } - col.push(value); - - // Labels - var label = obj.records[j][i].innerHTML; - if (label.match && (label.match(/,/g) || label.match(/\n/) || label.match(/\"/))) { - // Scape double quotes - label = label.replace(new RegExp('"', 'g'), '""'); - label = '"' + label + '"'; - } - colLabel.push(label); - - // Get style - tmp = obj.records[j][i].getAttribute('style'); - obj.style.push(tmp ? tmp : ''); - } - } - - if (col.length) { - row.push(col.join(delimiter)); - } - if (colLabel.length) { - rowLabel.push(colLabel.join(delimiter)); - } - } - - // Final string - var str = row.join("\n"); - var strLabel = rowLabel.join("\n"); - - // Create a hidden textarea to copy the values - if (! returnData) { - if (obj.options.copyCompatibility == true) { - obj.textarea.value = strLabel; - } else { - obj.textarea.value = str; - } - obj.textarea.select(); - document.execCommand("copy"); - } - - // Keep data - if (obj.options.copyCompatibility == true) { - obj.data = strLabel; - } else { - obj.data = str; - } - // Keep non visible information - obj.hashString = obj.hash(obj.data); - - return obj.data; - } - - /** - * jExcel paste method - * - * @param integer row number - * @return string value - */ - obj.paste = function(x, y, data) { - // Paste filter - if (typeof(obj.options.onbeforepaste) == 'function') { - var data = obj.options.onbeforepaste(el, data); - } - - // Controls - var hash = obj.hash(data); - var style = (hash == obj.hashString) ? obj.style : null; - - // Depending on the behavior - if (obj.options.copyCompatibility == true && hash == obj.hashString) { - var data = obj.data; - } - - // Split new line - var data = obj.parseCSV(data, "\t"); - - if (x != null && y != null && data) { - // Records - var i = 0; - var j = 0; - var records = []; - var newStyle = {}; - var oldStyle = {}; - var styleIndex = 0; - - // Index - var colIndex = parseInt(x); - var rowIndex = parseInt(y); - var row = null; - - // Go through the columns to get the data - while (row = data[j]) { - i = 0; - colIndex = parseInt(x); - - while (row[i] != null) { - // Update and keep history - var record = obj.updateCell(colIndex, rowIndex, row[i]); - // Keep history - records.push(record); - // Update all formulas in the chain - obj.updateFormulaChain(colIndex, rowIndex, records); - // Style - if (style) { - var columnName = jexcel.getColumnNameFromId([colIndex, rowIndex]); - newStyle[columnName] = style[styleIndex]; - oldStyle[columnName] = obj.getStyle(columnName); - obj.records[rowIndex][colIndex].setAttribute('style', style[styleIndex]); - styleIndex++ - } - i++; - if (row[i] != null) { - if (colIndex >= obj.headers.length - 1) { - obj.insertColumn(); - } - colIndex = obj.right.get(colIndex, rowIndex); - } - } - - j++; - if (data[j]) { - if (rowIndex >= obj.rows.length-1) { - obj.insertRow(); - } - rowIndex = obj.down.get(x, rowIndex); - } - } - - // Select the new cells - obj.updateSelectionFromCoords(x, y, colIndex, rowIndex); - - // Update history - obj.setHistory({ - action:'setValue', - records:records, - selection:obj.selectedCell, - newStyle:newStyle, - oldStyle:oldStyle, - }); - - // Update table - obj.updateTable(); - - // Paste event - if (typeof(obj.options.onpaste) == 'function') { - obj.options.onpaste(el, records); - } - - // On after changes - obj.onafterchanges(el, records); - } - } - - /** - * Process row - */ - obj.historyProcessRow = function(type, historyRecord) { - var rowIndex = (! historyRecord.insertBefore) ? historyRecord.rowNumber + 1 : historyRecord.rowNumber; - - if (obj.options.search == true) { - if (obj.results && obj.results.length != obj.rows.length) { - obj.resetSearch(); - } - } - - // Remove row - if (type == 1) { - var numOfRows = historyRecord.numOfRows; - // Remove nodes - for (var j = rowIndex; j < (numOfRows + rowIndex); j++) { - obj.rows[j].parentNode.removeChild(obj.rows[j]); - } - // Remove references - obj.records.splice(rowIndex, numOfRows); - obj.options.data.splice(rowIndex, numOfRows); - obj.rows.splice(rowIndex, numOfRows); - - obj.conditionalSelectionUpdate(1, rowIndex, (numOfRows + rowIndex) - 1); - } else { - // Insert data - obj.records = jexcel.injectArray(obj.records, rowIndex, historyRecord.rowRecords); - obj.options.data = jexcel.injectArray(obj.options.data, rowIndex, historyRecord.rowData); - obj.rows = jexcel.injectArray(obj.rows, rowIndex, historyRecord.rowNode); - // Insert nodes - var index = 0 - for (var j = rowIndex; j < (historyRecord.numOfRows + rowIndex); j++) { - obj.tbody.insertBefore(historyRecord.rowNode[index], obj.tbody.children[j]); - index++; - } - } - - // Respect pagination - if (obj.options.pagination > 0) { - obj.page(obj.pageNumber); - } - - obj.updateTableReferences(); - } - - /** - * Process column - */ - obj.historyProcessColumn = function(type, historyRecord) { - var columnIndex = (! historyRecord.insertBefore) ? historyRecord.columnNumber + 1 : historyRecord.columnNumber; - - // Remove column - if (type == 1) { - var numOfColumns = historyRecord.numOfColumns; - - obj.options.columns.splice(columnIndex, numOfColumns); - for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) { - obj.headers[i].parentNode.removeChild(obj.headers[i]); - obj.colgroup[i].parentNode.removeChild(obj.colgroup[i]); - } - obj.headers.splice(columnIndex, numOfColumns); - obj.colgroup.splice(columnIndex, numOfColumns); - for (var j = 0; j < historyRecord.data.length; j++) { - for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) { - obj.records[j][i].parentNode.removeChild(obj.records[j][i]); - } - obj.records[j].splice(columnIndex, numOfColumns); - obj.options.data[j].splice(columnIndex, numOfColumns); - } - - obj.conditionalSelectionUpdate(0, columnIndex, (numOfColumns + columnIndex) - 1); - } else { - // Insert data - obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, historyRecord.columns); - obj.headers = jexcel.injectArray(obj.headers, columnIndex, historyRecord.headers); - obj.colgroup = jexcel.injectArray(obj.colgroup, columnIndex, historyRecord.colgroup); - - var index = 0 - for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) { - obj.headerContainer.insertBefore(historyRecord.headers[index], obj.headerContainer.children[i+1]); - obj.colgroupContainer.insertBefore(historyRecord.colgroup[index], obj.colgroupContainer.children[i+1]); - index++; - } - - for (var j = 0; j < historyRecord.data.length; j++) { - obj.options.data[j] = jexcel.injectArray(obj.options.data[j], columnIndex, historyRecord.data[j]); - obj.records[j] = jexcel.injectArray(obj.records[j], columnIndex, historyRecord.records[j]); - var index = 0 - for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) { - obj.rows[j].insertBefore(historyRecord.records[j][index], obj.rows[j].children[i+1]); - index++; - } - } - } - - // Adjust nested headers - if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { - // Flexible way to handle nestedheaders - if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { - for (var j = 0; j < obj.options.nestedHeaders.length; j++) { - if (type == 1) { - var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - historyRecord.numOfColumns; - } else { - var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + historyRecord.numOfColumns; - } - obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan; - obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan); - } - } else { - if (type == 1) { - var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - historyRecord.numOfColumns; - } else { - var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + historyRecord.numOfColumns; - } - obj.options.nestedHeaders[0].colspan = colspan; - obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan); - } - } - - obj.updateTableReferences(); - } - - /** - * Undo last action - */ - obj.undo = function() { - // Ignore events and history - var ignoreEvents = obj.ignoreEvents ? true : false; - var ignoreHistory = obj.ignoreHistory ? true : false; - - obj.ignoreEvents = true; - obj.ignoreHistory = true; - - // Records - var records = []; - - // Update cells - if (obj.historyIndex >= 0) { - // History - var historyRecord = obj.history[obj.historyIndex--]; - - if (historyRecord.action == 'insertRow') { - obj.historyProcessRow(1, historyRecord); - } else if (historyRecord.action == 'deleteRow') { - obj.historyProcessRow(0, historyRecord); - } else if (historyRecord.action == 'insertColumn') { - obj.historyProcessColumn(1, historyRecord); - } else if (historyRecord.action == 'deleteColumn') { - obj.historyProcessColumn(0, historyRecord); - } else if (historyRecord.action == 'moveRow') { - obj.moveRow(historyRecord.newValue, historyRecord.oldValue); - } else if (historyRecord.action == 'moveColumn') { - obj.moveColumn(historyRecord.newValue, historyRecord.oldValue); - } else if (historyRecord.action == 'setMerge') { - obj.removeMerge(historyRecord.column, historyRecord.data); - } else if (historyRecord.action == 'setStyle') { - obj.setStyle(historyRecord.oldValue, null, null, 1); - } else if (historyRecord.action == 'setWidth') { - obj.setWidth(historyRecord.column, historyRecord.oldValue); - } else if (historyRecord.action == 'setHeight') { - obj.setHeight(historyRecord.row, historyRecord.oldValue); - } else if (historyRecord.action == 'setHeader') { - obj.setHeader(historyRecord.column, historyRecord.oldValue); - } else if (historyRecord.action == 'setComments') { - obj.setComments(historyRecord.column, historyRecord.oldValue[0], historyRecord.oldValue[1]); - } else if (historyRecord.action == 'orderBy') { - var rows = []; - for (var j = 0; j < historyRecord.rows.length; j++) { - rows[historyRecord.rows[j]] = j; - } - obj.updateOrderArrow(historyRecord.column, historyRecord.order ? 0 : 1); - obj.updateOrder(rows); - } else if (historyRecord.action == 'setValue') { - // Redo for changes in cells - for (var i = 0; i < historyRecord.records.length; i++) { - obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].oldValue); - obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records); - if (historyRecord.oldStyle) { - obj.resetStyle(historyRecord.oldStyle, true); - } - } - // Update selection - if (! historyRecord.selection) { - historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row]; - } - obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]); - // Update table - obj.updateTable(); - } - } - obj.ignoreEvents = ignoreEvents; - obj.ignoreHistory = ignoreHistory; - - if (typeof(obj.options.onundo) == 'function') { - obj.options.onundo(el, historyRecord); - } - } - - /** - * Redo previously undone action - */ - obj.redo = function() { - // Ignore events and history - var ignoreEvents = obj.ignoreEvents ? true : false; - var ignoreHistory = obj.ignoreHistory ? true : false; - - obj.ignoreEvents = true; - obj.ignoreHistory = true; - - // Records - var records = []; - - // Update cells - if (obj.historyIndex < obj.history.length - 1) { - // History - var historyRecord = obj.history[++obj.historyIndex]; - - if (historyRecord.action == 'insertRow') { - obj.historyProcessRow(0, historyRecord); - } else if (historyRecord.action == 'deleteRow') { - obj.historyProcessRow(1, historyRecord); - } else if (historyRecord.action == 'insertColumn') { - obj.historyProcessColumn(0, historyRecord); - } else if (historyRecord.action == 'deleteColumn') { - obj.historyProcessColumn(1, historyRecord); - } else if (historyRecord.action == 'moveRow') { - obj.moveRow(historyRecord.oldValue, historyRecord.newValue); - } else if (historyRecord.action == 'moveColumn') { - obj.moveColumn(historyRecord.oldValue, historyRecord.newValue); - } else if (historyRecord.action == 'setMerge') { - obj.setMerge(historyRecord.column, historyRecord.colspan, historyRecord.rowspan, 1); - } else if (historyRecord.action == 'setStyle') { - obj.setStyle(historyRecord.newValue, null, null, 1); - } else if (historyRecord.action == 'setWidth') { - obj.setWidth(historyRecord.column, historyRecord.newValue); - } else if (historyRecord.action == 'setHeight') { - obj.setHeight(historyRecord.row, historyRecord.newValue); - } else if (historyRecord.action == 'setHeader') { - obj.setHeader(historyRecord.column, historyRecord.newValue); - } else if (historyRecord.action == 'setComments') { - obj.setComments(historyRecord.column, historyRecord.newValue[0], historyRecord.newValue[1]); - } else if (historyRecord.action == 'orderBy') { - obj.updateOrderArrow(historyRecord.column, historyRecord.order); - obj.updateOrder(historyRecord.rows); - } else if (historyRecord.action == 'setValue') { - // Redo for changes in cells - for (var i = 0; i < historyRecord.records.length; i++) { - obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].newValue); - obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records); - if (historyRecord.newStyle) { - obj.resetStyle(historyRecord.newStyle, true); - } - } - - // Update selection - if (! historyRecord.selection) { - historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row]; - } - obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]); - // Update table - obj.updateTable(); - } - } - obj.ignoreEvents = ignoreEvents; - obj.ignoreHistory = ignoreHistory; - - if (typeof(obj.options.onredo) == 'function') { - obj.options.onredo(el, historyRecord); - } - } - - /** - * Get dropdown value from key - */ - obj.getDropDownValue = function(column, key) { - var value = []; - - if (obj.options.columns[column] && obj.options.columns[column].source) { - // Create array from source - var combo = []; - var source = obj.options.columns[column].source; - - for (var i = 0; i < source.length; i++) { - if (typeof(source[i]) == 'object') { - combo[source[i].id] = source[i].name; - } else { - combo[source[i]] = source[i]; - } - } - - // Garante single multiple compatibily - var keys = ('' + key).split(';') - - for (var i = 0; i < keys.length; i++) { - if (combo[keys[i]]) { - value.push(combo[keys[i]]); - } - } - } else { - console.error('Invalid column'); - } - - return (value.length > 0) ? value.join('; ') : ''; - } - - /** - * From starckoverflow contributions - */ - obj.parseCSV = function(str, delimiter) { - // Remove last line break - str = str.replace(/\r?\n$|\r$|\n$/g, ""); - // Last caracter is the delimiter - if (str.charCodeAt(str.length-1) == 9) { - str += "\0"; - } - // user-supplied delimeter or default comma - delimiter = (delimiter || ","); - - var arr = []; - var quote = false; // true means we're inside a quoted field - // iterate over each character, keep track of current row and column (of the returned array) - for (var row = 0, col = 0, c = 0; c < str.length; c++) { - var cc = str[c], nc = str[c+1]; - arr[row] = arr[row] || []; - arr[row][col] = arr[row][col] || ''; - - // If the current character is a quotation mark, and we're inside a quoted field, and the next character is also a quotation mark, add a quotation mark to the current column and skip the next character - if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; } - - // If it's just one quotation mark, begin/end quoted field - if (cc == '"') { quote = !quote; continue; } - - // If it's a comma and we're not in a quoted field, move on to the next column - if (cc == delimiter && !quote) { ++col; continue; } - - // If it's a newline (CRLF) and we're not in a quoted field, skip the next character and move on to the next row and move to column 0 of that new row - if (cc == '\r' && nc == '\n' && !quote) { ++row; col = 0; ++c; continue; } - - // If it's a newline (LF or CR) and we're not in a quoted field, move on to the next row and move to column 0 of that new row - if (cc == '\n' && !quote) { ++row; col = 0; continue; } - if (cc == '\r' && !quote) { ++row; col = 0; continue; } - - // Otherwise, append the current character to the current column - arr[row][col] += cc; - } - return arr; - } - - obj.hash = function(str) { - var hash = 0, i, chr; - - if (str.length === 0) { - return hash; - } else { - for (i = 0; i < str.length; i++) { - chr = str.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; - } - } - return hash; - } - - obj.onafterchanges = function(el, records) { - if (! obj.ignoreEvents) { - // On after changes - if (typeof(obj.options.onafterchanges) == 'function') { - obj.options.onafterchanges(el, records); - } - } - } - - /** - * Initialization method - */ - obj.init = function() { - jexcel.current = obj; - - // Build handlers - if (typeof(jexcel.build) == 'function') { - jexcel.build(); - jexcel.build = null; - } - - // Load the table data based on an CSV file - if (obj.options.csv) { - // Loading - if (obj.options.loadingSpin == true) { - jSuites.loading.show(); - } - - // Load CSV file - jSuites.ajax({ - url: obj.options.csv, - method: 'GET', - dataType: 'text', - success: function(result) { - // Convert data - var newData = obj.parseCSV(result, obj.options.csvDelimiter) - - // Headers - if (obj.options.csvHeaders == true && newData.length > 0) { - var headers = newData.shift(); - for(var i = 0; i < headers.length; i++) { - if (! obj.options.columns[i]) { - obj.options.columns[i] = { type:'text', align:obj.options.defaultColAlign, width:obj.options.defaultColWidth }; - } - // Precedence over pre-configurated titles - if (typeof obj.options.columns[i].title === 'undefined') { - obj.options.columns[i].title = headers[i]; - } - } - } - // Data - obj.options.data = newData; - // Prepare table - obj.prepareTable(); - // Hide spin - if (obj.options.loadingSpin == true) { - jSuites.loading.hide(); - } - } - }); - } else if (obj.options.url) { - // Loading - if (obj.options.loadingSpin == true) { - jSuites.loading.show(); - } - - jSuites.ajax({ - url: obj.options.url, - method: 'GET', - dataType: 'json', - success: function(result) { - // Data - obj.options.data = (result.data) ? result.data : result; - // Prepare table - obj.prepareTable(); - // Hide spin - if (obj.options.loadingSpin == true) { - jSuites.loading.hide(); - } - } - }); - } else { - // Prepare table - obj.prepareTable(); - } - } - - // Context menu - if (options && options.contextMenu != null) { - obj.options.contextMenu = options.contextMenu; - } else { - obj.options.contextMenu = function(el, x, y, e) { - var items = []; - - if (y == null) { - // Insert a new column - if (obj.options.allowInsertColumn == true) { - items.push({ - title:obj.options.text.insertANewColumnBefore, - onclick:function() { - obj.insertColumn(1, parseInt(x), 1); - } - }); - } - - if (obj.options.allowInsertColumn == true) { - items.push({ - title:obj.options.text.insertANewColumnAfter, - onclick:function() { - obj.insertColumn(1, parseInt(x), 0); - } - }); - } - - // Delete a column - if (obj.options.allowDeleteColumn == true) { - items.push({ - title:obj.options.text.deleteSelectedColumns, - onclick:function() { - obj.deleteColumn(obj.getSelectedColumns().length ? undefined : parseInt(x)); - } - }); - } - - // Rename column - if (obj.options.allowRenameColumn == true) { - items.push({ - title:obj.options.text.renameThisColumn, - onclick:function() { - obj.setHeader(x); - } - }); - } - - // Sorting - if (obj.options.columnSorting == true) { - // Line - items.push({ type:'line' }); - - items.push({ - title:obj.options.text.orderAscending, - onclick:function() { - obj.orderBy(x, 0); - } - }); - items.push({ - title:obj.options.text.orderDescending, - onclick:function() { - obj.orderBy(x, 1); - } - }); - } - } else { - // Insert new row - if (obj.options.allowInsertRow == true) { - items.push({ - title:obj.options.text.insertANewRowBefore, - onclick:function() { - obj.insertRow(1, parseInt(y), 1); - } - }); - - items.push({ - title:obj.options.text.insertANewRowAfter, - onclick:function() { - obj.insertRow(1, parseInt(y)); - } - }); - } - - if (obj.options.allowDeleteRow == true) { - items.push({ - title:obj.options.text.deleteSelectedRows, - onclick:function() { - obj.deleteRow(obj.getSelectedRows().length ? undefined : parseInt(y)); - } - }); - } - - if (x) { - if (obj.options.allowComments == true) { - items.push({ type:'line' }); - - var title = obj.records[y][x].getAttribute('title') || ''; - - items.push({ - title: title ? obj.options.text.editComments : obj.options.text.addComments, - onclick:function() { - obj.setComments([ x, y ], prompt(obj.options.text.comments, title)); - } - }); - - if (title) { - items.push({ - title:obj.options.text.clearComments, - onclick:function() { - obj.setComments([ x, y ], ''); - } - }); - } - } - } - } - - // Line - items.push({ type:'line' }); - - // Copy - items.push({ - title:obj.options.text.copy, - shortcut:'Ctrl + C', - onclick:function() { - obj.copy(true); - } - }); - - // Paste - if (navigator && navigator.clipboard) { - items.push({ - title:obj.options.text.paste, - shortcut:'Ctrl + V', - onclick:function() { - if (obj.selectedCell) { - navigator.clipboard.readText().then(function(text) { - if (text) { - jexcel.current.paste(obj.selectedCell[0], obj.selectedCell[1], text); - } - }); - } - } - }); - } - - // Save - if (obj.options.allowExport) { - items.push({ - title: obj.options.text.saveAs, - shortcut: 'Ctrl + S', - onclick: function () { - obj.download(); - } - }); - } - - // About - if (obj.options.about) { - items.push({ - title:obj.options.text.about, - onclick:function() { - alert(obj.options.about); - } - }); - } - - return items; - } - } - - obj.scrollControls = function(e) { - if (obj.options.lazyLoading == true) { - if (jexcel.timeControlLoading == null) { - jexcel.timeControlLoading = setTimeout(function() { - if (obj.content.scrollTop + obj.content.clientHeight >= obj.content.scrollHeight) { - if (obj.loadDown()) { - if (obj.content.scrollTop + obj.content.clientHeight > obj.content.scrollHeight - 10) { - obj.content.scrollTop = obj.content.scrollTop - obj.content.clientHeight; - } - obj.updateCornerPosition(); - } - } else if (obj.content.scrollTop <= obj.content.clientHeight) { - if (obj.loadUp()) { - if (obj.content.scrollTop < 10) { - obj.content.scrollTop = obj.content.scrollTop + obj.content.clientHeight; - } - obj.updateCornerPosition(); - } - } - - jexcel.timeControlLoading = null; - }, 100); - } - } - - // Close editor - if (obj.options.lazyLoading == true || obj.options.tableOverflow == true) { - if (obj.edition && e.target.className.substr(0,9) != 'jdropdown') { - obj.closeEditor(obj.edition[0], true); - } - } - } - - el.addEventListener("DOMMouseScroll", obj.scrollControls); - el.addEventListener("mousewheel", obj.scrollControls); - - el.jexcel = obj; - - obj.init(); - - return obj; -}); - -jexcel.current = null; -jexcel.timeControl = null; -jexcel.timeControlLoading= null; - -jexcel.destroy = function(element, destroyEventHandlers) { - if (element.jexcel) { - element.jexcel = null; - element.innerHTML = ''; - - if (destroyEventHandlers) { - document.removeEventListener("keydown", jexcel.keyDownControls); - document.removeEventListener("mouseup", jexcel.mouseUpControls); - document.removeEventListener("mousedown", jexcel.mouseDownControls); - document.removeEventListener("mousemove", jexcel.mouseMoveControls); - document.removeEventListener("mouseover", jexcel.mouseOverControls); - document.removeEventListener("dblclick", jexcel.doubleClickControls); - document.removeEventListener("paste", jexcel.pasteControls); - document.removeEventListener("contextmenu", jexcel.contextMenuControls); - document.removeEventListener("touchstart", jexcel.touchStartControls); - document.removeEventListener("touchend", jexcel.touchEndControls); - document.removeEventListener("touchcancel", jexcel.touchEndControls); - jexcel = null; - } - } -} - -jexcel.build = function() { - document.addEventListener("keydown", jexcel.keyDownControls); - document.addEventListener("mouseup", jexcel.mouseUpControls); - document.addEventListener("mousedown", jexcel.mouseDownControls); - document.addEventListener("mousemove", jexcel.mouseMoveControls); - document.addEventListener("mouseover", jexcel.mouseOverControls); - document.addEventListener("dblclick", jexcel.doubleClickControls); - document.addEventListener("paste", jexcel.pasteControls); - document.addEventListener("contextmenu", jexcel.contextMenuControls); - document.addEventListener("touchstart", jexcel.touchStartControls); - document.addEventListener("touchend", jexcel.touchEndControls); - document.addEventListener("touchcancel", jexcel.touchEndControls); - document.addEventListener("touchmove", jexcel.touchEndControls); -} - -/** - * Valid international letter - */ - -jexcel.validLetter = function (text) { - var regex = /([\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+)/g; - return text.match(regex) ? 1 : 0; -} - -/** - * Helper injectArray - */ -jexcel.injectArray = function(o, idx, arr) { - return o.slice(0, idx).concat(arr).concat(o.slice(idx)); -} - -/** - * Get letter based on a number - * - * @param integer i - * @return string letter - */ -jexcel.getColumnName = function(i) { - var letter = ''; - if (i > 701) { - letter += String.fromCharCode(64 + parseInt(i / 676)); - letter += String.fromCharCode(64 + parseInt((i % 676) / 26)); - } else if (i > 25) { - letter += String.fromCharCode(64 + parseInt(i / 26)); - } - letter += String.fromCharCode(65 + (i % 26)); - - return letter; -} - -/** - * Convert excel like column to jexcel id - * - * @param string id - * @return string id - */ -jexcel.getIdFromColumnName = function (id, arr) { - // Get the letters - var t = /^[a-zA-Z]+/.exec(id); - - if (t) { - // Base 26 calculation - var code = 0; - for (var i = 0; i < t[0].length; i++) { - code += parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, (t[0].length - 1 - i)); - } - code--; - // Make sure jexcel starts on zero - if (code < 0) { - code = 0; - } - - // Number - var number = parseInt(/[0-9]+$/.exec(id)); - if (number > 0) { - number--; - } - - if (arr == true) { - id = [ code, number ]; - } else { - id = code + '-' + number; - } - } - - return id; -} - -/** - * Convert jexcel id to excel like column name - * - * @param string id - * @return string id - */ -jexcel.getColumnNameFromId = function (cellId) { - if (! Array.isArray(cellId)) { - cellId = cellId.split('-'); - } - - return jexcel.getColumnName(parseInt(cellId[0])) + (parseInt(cellId[1]) + 1); -} - -/** - * Inside jexcel table - * - * @param string id - * @return string id - */ -jexcel.getElement = function(element) { - var jexcelSection = 0; - var jexcelElement = 0; - - function path (element) { - if (element.className) { - if (element.classList.contains('jexcel_container')) { - jexcelElement = element; - } - } - - if (element.tagName == 'THEAD') { - jexcelSection = 1; - } else if (element.tagName == 'TBODY') { - jexcelSection = 2; - } - - if (element.parentNode) { - path(element.parentNode); - } - } - - path(element); - - return [ jexcelElement, jexcelSection ]; -} - -/** - * Events - */ -jexcel.keyDownControls = function(e) { - if (jexcel.current) { - if (jexcel.current.edition) { - if (e.which == 27) { - // Escape - if (jexcel.current.edition) { - // Exit without saving - jexcel.current.closeEditor(jexcel.current.edition[0], false); - } - e.preventDefault(); - } else if (e.which == 13) { - // Enter - if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') { - jexcel.current.editor[0].children[0].calendar.close(1); - } else if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'dropdown' || - jexcel.current.options.columns[jexcel.current.edition[2]].type == 'autocomplete') { - // Do nothing - } else { - // Alt enter -> do not close editor - if ((jexcel.current.options.wordWrap == true || - jexcel.current.options.columns[jexcel.current.edition[2]].wordWrap == true || - jexcel.current.options.data[jexcel.current.edition[3]][jexcel.current.edition[2]].length > 200) && e.altKey) { - // Add new line to the editor - var editorTextarea = jexcel.current.edition[0].children[0]; - var editorValue = jexcel.current.edition[0].children[0].value; - var editorIndexOf = editorTextarea.selectionStart; - editorValue = editorValue.slice(0, editorIndexOf) + "\n" + editorValue.slice(editorIndexOf); - editorTextarea.value = editorValue; - editorTextarea.focus(); - editorTextarea.selectionStart = editorIndexOf + 1; - editorTextarea.selectionEnd = editorIndexOf + 1; - } else { - jexcel.current.edition[0].children[0].blur(); - } - } - } else if (e.which == 9) { - // Tab - if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') { - jexcel.current.edition[0].children[0].calendar.close(1); - } else { - jexcel.current.edition[0].children[0].blur(); - } - } - } - - if (! jexcel.current.edition && jexcel.current.selectedCell) { - // Which key - if (e.which == 37) { - jexcel.current.left(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 39) { - jexcel.current.right(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 38) { - jexcel.current.up(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 40) { - jexcel.current.down(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 36) { - jexcel.current.first(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 35) { - jexcel.current.last(e.shiftKey, e.ctrlKey); - e.preventDefault(); - } else if (e.which == 32) { - if (jexcel.current.options.editable == true) { - jexcel.current.setCheckRadioValue(); - } - e.preventDefault(); - } else if (e.which == 46) { - // Delete - if (jexcel.current.options.editable == true) { - if (jexcel.current.selectedRow) { - if (jexcel.current.options.allowDeleteRow == true) { - if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedRows)) { - jexcel.current.deleteRow(); - } - } - } else if (jexcel.current.selectedHeader) { - if (jexcel.current.options.allowDeleteColumn == true) { - if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedColumns)) { - jexcel.current.deleteColumn(); - } - } - } else { - // Change value - jexcel.current.setValue(jexcel.current.highlighted, ''); - } - } - } else if (e.which == 13) { - // Move cursor - if (e.shiftKey) { - jexcel.current.up(); - } else { - if (jexcel.current.options.allowInsertRow == true) { - if (jexcel.current.options.allowManualInsertRow == true) { - if (jexcel.current.selectedCell[1] == jexcel.current.options.data.length - 1) { - // New record in case selectedCell in the last row - jexcel.current.insertRow(); - } - } - } - - jexcel.current.down(); - } - e.preventDefault(); - } else if (e.which == 9) { - // Tab - if (e.shiftKey) { - jexcel.current.left(); - } else { - if (jexcel.current.options.allowInsertColumn == true) { - if (jexcel.current.options.allowManualInsertColumn == true) { - if (jexcel.current.selectedCell[0] == jexcel.current.options.data[0].length - 1) { - // New record in case selectedCell in the last column - jexcel.current.insertColumn(); - } - } - } - - jexcel.current.right(); - } - e.preventDefault(); - } else { - if ((e.ctrlKey || e.metaKey) && ! e.shiftKey) { - if (e.which == 65) { - // Ctrl + A - jexcel.current.selectAll(); - e.preventDefault(); - } else if (e.which == 83) { - // Ctrl + S - jexcel.current.download(); - e.preventDefault(); - } else if (e.which == 89) { - // Ctrl + Y - jexcel.current.redo(); - e.preventDefault(); - } else if (e.which == 90) { - // Ctrl + Z - jexcel.current.undo(); - e.preventDefault(); - } else if (e.which == 67) { - // Ctrl + C - jexcel.current.copy(true); - e.preventDefault(); - } else if (e.which == 67) { - // Ctrl + C - jexcel.current.copy(true); - e.preventDefault(); - } else if (e.which == 88) { - // Ctrl + X - if (jexcel.current.options.editable == true) { - jexcel.cutControls(); - } else { - jexcel.copyControls(); - } - e.preventDefault(); - } else if (e.which == 86) { - // Ctrl + V - jexcel.pasteControls(); - } - } else { - if (jexcel.current.selectedCell) { - if (jexcel.current.options.editable == true) { - var rowId = jexcel.current.selectedCell[1]; - var columnId = jexcel.current.selectedCell[0]; - - // If is not readonly - if (jexcel.current.options.columns[columnId].type != 'readonly') { - // Characters able to start a edition - if (e.keyCode == 32) { - // Space - if (jexcel.current.options.columns[columnId].type == 'checkbox' || - jexcel.current.options.columns[columnId].type == 'radio') { - e.preventDefault(); - } else { - // Start edition - jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true); - } - } else if (e.keyCode == 113) { - // Start edition with current content F2 - jexcel.current.openEditor(jexcel.current.records[rowId][columnId], false); - } else if ((e.keyCode == 8) || - (e.keyCode >= 48 && e.keyCode <= 57) || - (e.keyCode >= 97 && e.keyCode <= 111) || - (e.keyCode == 187) || - ((String.fromCharCode(e.keyCode) == e.key || String.fromCharCode(e.keyCode).toLowerCase() == e.key.toLowerCase()) && jexcel.validLetter(String.fromCharCode(e.keyCode)))) { - // Start edition - jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true); - // Prevent entries in the calendar - if (jexcel.current.options.columns[columnId].type == 'calendar') { - e.preventDefault(); - } - } - } - } - } - } - } - } else { - if (e.target.classList.contains('jexcel_search')) { - if (jexcel.timeControl) { - clearTimeout(jexcel.timeControl); - } - - jexcel.timeControl = setTimeout(function() { - jexcel.current.search(e.target.value); - }, 200); - } - } - } -} - -jexcel.isMouseAction = false; - -jexcel.mouseDownControls = function(e) { - e = e || window.event; - if (e.buttons) { - var mouseButton = e.buttons; - } else if (e.button) { - var mouseButton = e.button; - } else { - var mouseButton = e.which; - } - - // Get elements - var jexcelTable = jexcel.getElement(e.target); - - if (jexcelTable[0]) { - if (jexcel.current != jexcelTable[0].jexcel) { - if (jexcel.current) { - jexcel.current.resetSelection(); - } - jexcel.current = jexcelTable[0].jexcel; - } - } else { - if (jexcel.current) { - jexcel.current.resetSelection(true); - jexcel.current = null; - } - } - - if (jexcel.current && mouseButton == 1) { - if (e.target.classList.contains('jexcel_selectall')) { - if (jexcel.current) { - jexcel.current.selectAll(); - } - } else if (e.target.classList.contains('jexcel_corner')) { - if (jexcel.current.options.editable == true) { - jexcel.current.selectedCorner = true; - } - } else { - // Header found - if (jexcelTable[1] == 1) { - var columnId = e.target.getAttribute('data-x'); - if (columnId) { - // Update cursor - var info = e.target.getBoundingClientRect(); - if (jexcel.current.options.columnResize == true && info.width - e.offsetX < 6) { - // Resize helper - jexcel.current.resizing = { - mousePosition: e.pageX, - column: columnId, - width: info.width, - }; - - // Border indication - jexcel.current.headers[columnId].classList.add('resizing'); - for (var j = 0; j < jexcel.current.records.length; j++) { - if (jexcel.current.records[j][columnId]) { - jexcel.current.records[j][columnId].classList.add('resizing'); - } - } - } else if (jexcel.current.options.columnDrag == true && info.height - e.offsetY < 6) { - if (jexcel.current.isColMerged(columnId).length) { - console.error('JEXCEL: This column is part of a merged cell.'); - } else { - // Reset selection - jexcel.current.resetSelection(); - // Drag helper - jexcel.current.dragging = { - element: e.target, - column:columnId, - destination:columnId, - }; - // Border indication - jexcel.current.headers[columnId].classList.add('dragging'); - for (var j = 0; j < jexcel.current.records.length; j++) { - if (jexcel.current.records[j][columnId]) { - jexcel.current.records[j][columnId].classList.add('dragging'); - } - } - } - } else { - if (jexcel.current.selectedHeader && (e.shiftKey || e.ctrlKey)) { - var o = jexcel.current.selectedHeader; - var d = columnId; - } else { - // Press to rename - if (jexcel.current.selectedHeader == columnId && jexcel.current.options.allowRenameColumn == true) { - jexcel.timeControl = setTimeout(function() { - jexcel.current.setHeader(columnId); - }, 800); - } - - // Keep track of which header was selected first - jexcel.current.selectedHeader = columnId; - - // Update selection single column - var o = columnId; - var d = columnId; - } - - // Update selection - jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1); - } - } else { - if (e.target.parentNode.classList.contains('jexcel_nested')) { - var column = e.target.getAttribute('data-column').split(','); - var c1 = parseInt(column[0]); - var c2 = parseInt(column[column.length-1]); - jexcel.current.updateSelectionFromCoords(c1, 0, c2, jexcel.current.options.data.length - 1); - } - } - } else { - jexcel.current.selectedHeader = false; - } - - // Body found - if (jexcelTable[1] == 2) { - var rowId = e.target.getAttribute('data-y'); - - if (e.target.classList.contains('jexcel_row')) { - var info = e.target.getBoundingClientRect(); - if (jexcel.current.options.rowResize == true && info.height - e.offsetY < 6) { - // Resize helper - jexcel.current.resizing = { - element: e.target.parentNode, - mousePosition: e.pageY, - row: rowId, - height: info.height, - }; - // Border indication - e.target.parentNode.classList.add('resizing'); - } else if (jexcel.current.options.rowDrag == true && info.width - e.offsetX < 6) { - if (jexcel.current.isRowMerged(rowId).length) { - console.error('JEXCEL: This row is part of a merged cell'); - } else if (jexcel.current.options.search == true && jexcel.current.results) { - console.error('JEXCEL: Please clear your search before perform this action'); - } else { - // Reset selection - jexcel.current.resetSelection(); - // Drag helper - jexcel.current.dragging = { - element: e.target.parentNode, - row:rowId, - destination:rowId, - }; - // Border indication - e.target.parentNode.classList.add('dragging'); - } - } else { - if (jexcel.current.selectedRow && (e.shiftKey || e.ctrlKey)) { - var o = jexcel.current.selectedRow; - var d = rowId; - } else { - // Keep track of which header was selected first - jexcel.current.selectedRow = rowId; - - // Update selection single column - var o = rowId; - var d = rowId; - } - - // Update selection - jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d); - } - } else { - // Jclose - if (e.target.classList.contains('jclose') && e.target.clientWidth - e.offsetX < 50 && e.offsetY < 50) { - jexcel.current.closeEditor(jexcel.current.edition[0], true); - } else { - var getCellCoords = function(element) { - var x = element.getAttribute('data-x'); - var y = element.getAttribute('data-y'); - if (x && y) { - return [x, y]; - } else { - if (element.parentNode) { - return getCellCoords(element.parentNode); - } - } - }; - - var position = getCellCoords(e.target); - if (position) { - var columnId = position[0]; - var rowId = position[1]; - // Close edition - if (jexcel.current.edition) { - if (jexcel.current.edition[2] != columnId || jexcel.current.edition[3] != rowId) { - jexcel.current.closeEditor(jexcel.current.edition[0], true); - } - } - - if (! jexcel.current.edition) { - // Update cell selection - if (e.shiftKey) { - jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId); - } else { - jexcel.current.updateSelectionFromCoords(columnId, rowId); - } - } - - // No full row selected - jexcel.current.selectedHeader = null; - jexcel.current.selectedRow = null; - } - } - } - } else { - jexcel.current.selectedRow = false; - } - - // Pagination - if (e.target.classList.contains('jexcel_page')) { - if (e.target.innerText == '<') { - jexcel.current.page(0); - } else if (e.target.innerText == '>') { - jexcel.current.page(e.target.getAttribute('title') - 1); - } else { - jexcel.current.page(e.target.innerText - 1); - } - } - } - - if (jexcel.current.edition) { - jexcel.isMouseAction = false; - } else { - jexcel.isMouseAction = true; - } - } else { - jexcel.isMouseAction = false; - } -} - -jexcel.mouseUpControls = function(e) { - if (jexcel.current) { - // Update cell size - if (jexcel.current.resizing) { - // Columns to be updated - if (jexcel.current.resizing.column) { - // Remove Class - jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing'); - var newWidth = jexcel.current.colgroup[jexcel.current.resizing.column].getAttribute('width'); - jexcel.current.setWidth(jexcel.current.resizing.column, newWidth, jexcel.current.resizing.width); - // Remove border - jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing'); - for (var j = 0; j < jexcel.current.records.length; j++) { - if (jexcel.current.records[j][jexcel.current.resizing.column]){ - jexcel.current.records[j][jexcel.current.resizing.column].classList.remove('resizing'); - } - } - } else { - // Remove Class - jexcel.current.rows[jexcel.current.resizing.row].children[0].classList.remove('resizing'); - var newHeight = jexcel.current.rows[jexcel.current.resizing.row].getAttribute('height'); - jexcel.current.setHeight(jexcel.current.resizing.row, newHeight, jexcel.current.resizing.height); - // Remove border - jexcel.current.resizing.element.classList.remove('resizing'); - } - // Reset resizing helper - jexcel.current.resizing = null; - } else if (jexcel.current.dragging) { - // Reset dragging helper - if (jexcel.current.dragging) { - if (jexcel.current.dragging.column) { - // Target - var columnId = e.target.getAttribute('data-x'); - // Remove move style - jexcel.current.headers[jexcel.current.dragging.column].classList.remove('dragging'); - for (var j = 0; j < jexcel.current.rows.length; j++) { - if (jexcel.current.records[j][jexcel.current.dragging.column]) { - jexcel.current.records[j][jexcel.current.dragging.column].classList.remove('dragging'); - } - } - for (var i = 0; i < jexcel.current.headers.length; i++) { - jexcel.current.headers[i].classList.remove('dragging-left'); - jexcel.current.headers[i].classList.remove('dragging-right'); - } - // Update position - if (columnId) { - if (jexcel.current.dragging.column != jexcel.current.dragging.destination) { - jexcel.current.moveColumn(jexcel.current.dragging.column, jexcel.current.dragging.destination); - } - } - } else { - var position = Array.prototype.indexOf.call(jexcel.current.dragging.element.parentNode.children, jexcel.current.dragging.element); - if (jexcel.current.dragging.row != position) { - jexcel.current.moveRow(jexcel.current.dragging.row, position, true); - } - jexcel.current.dragging.element.classList.remove('dragging'); - } - jexcel.current.dragging = null; - } - } else { - // Close any corner selection - if (jexcel.current.selectedCorner) { - jexcel.current.selectedCorner = false; - - // Data to be copied - if (jexcel.current.selection.length > 0) { - // Copy data - jexcel.current.copyData(jexcel.current.selection[0], jexcel.current.selection[jexcel.current.selection.length - 1]); - - // Remove selection - jexcel.current.removeCopySelection(); - } - } - } - } - - // Clear any time control - if (jexcel.timeControl) { - clearTimeout(jexcel.timeControl); - jexcel.timeControl = null; - } - - // Mouse up - jexcel.isMouseAction = false; -} - -// Mouse move controls -jexcel.mouseMoveControls = function(e) { - e = e || window.event; - if (e.buttons) { - var mouseButton = e.buttons; - } else if (e.button) { - var mouseButton = e.button; - } else { - var mouseButton = e.which; - } - - if (! mouseButton) { - jexcel.isMouseAction = false; - } - - if (jexcel.current) { - if (jexcel.isMouseAction == true) { - // Resizing is ongoing - if (jexcel.current.resizing) { - if (jexcel.current.resizing.column) { - var width = e.pageX - jexcel.current.resizing.mousePosition; - - if (jexcel.current.resizing.width + width > 0) { - var tempWidth = jexcel.current.resizing.width + width; - jexcel.current.colgroup[jexcel.current.resizing.column].setAttribute('width', tempWidth); - - jexcel.current.updateCornerPosition(); - } - } else { - var height = e.pageY - jexcel.current.resizing.mousePosition; - - if (jexcel.current.resizing.height + height > 0) { - var tempHeight = jexcel.current.resizing.height + height; - jexcel.current.rows[jexcel.current.resizing.row].setAttribute('height', tempHeight); - - jexcel.current.updateCornerPosition(); - } - } - } - } else { - var x = e.target.getAttribute('data-x'); - var y = e.target.getAttribute('data-y'); - var rect = e.target.getBoundingClientRect(); - - if (jexcel.current.cursor) { - jexcel.current.cursor.style.cursor = ''; - jexcel.current.cursor = null; - } - - if (e.target.parentNode.parentNode && e.target.parentNode.parentNode.className) { - if (e.target.parentNode.parentNode.classList.contains('resizable')) { - if (e.target && x && ! y && (rect.width - (e.clientX - rect.left) < 6)) { - jexcel.current.cursor = e.target; - jexcel.current.cursor.style.cursor = 'col-resize'; - } else if (e.target && ! x && y && (rect.height - (e.clientY - rect.top) < 6)) { - jexcel.current.cursor = e.target; - jexcel.current.cursor.style.cursor = 'row-resize'; - } - } - - if (e.target.parentNode.parentNode.classList.contains('draggable')) { - if (e.target && ! x && y && (rect.width - (e.clientX - rect.left) < 6)) { - jexcel.current.cursor = e.target; - jexcel.current.cursor.style.cursor = 'move'; - } else if (e.target && x && ! y && (rect.height - (e.clientY - rect.top) < 6)) { - jexcel.current.cursor = e.target; - jexcel.current.cursor.style.cursor = 'move'; - } - } - } - } - } -} - -jexcel.mouseOverControls = function(e) { - e = e || window.event; - if (e.buttons) { - var mouseButton = e.buttons; - } else if (e.button) { - var mouseButton = e.button; - } else { - var mouseButton = e.which; - } - - if (! mouseButton) { - jexcel.isMouseAction = false; - } - - if (jexcel.current && jexcel.isMouseAction == true) { - // Get elements - var jexcelTable = jexcel.getElement(e.target); - - if (jexcelTable[0]) { - // Avoid cross reference - if (jexcel.current != jexcelTable[0].jexcel) { - if (jexcel.current) { - return false; - } - } - - var columnId = e.target.getAttribute('data-x'); - var rowId = e.target.getAttribute('data-y'); - - if (jexcel.current.dragging) { - if (jexcel.current.dragging.column) { - if (columnId) { - if (jexcel.current.isColMerged(columnId).length) { - console.error('JEXCEL: This column is part of a merged cell.'); - } else { - for (var i = 0; i < jexcel.current.headers.length; i++) { - jexcel.current.headers[i].classList.remove('dragging-left'); - jexcel.current.headers[i].classList.remove('dragging-right'); - } - - if (jexcel.current.dragging.column == columnId) { - jexcel.current.dragging.destination = parseInt(columnId); - } else { - if (e.target.clientWidth / 2 > e.offsetX) { - if (jexcel.current.dragging.column < columnId) { - jexcel.current.dragging.destination = parseInt(columnId) - 1; - } else { - jexcel.current.dragging.destination = parseInt(columnId); - } - jexcel.current.headers[columnId].classList.add('dragging-left'); - } else { - if (jexcel.current.dragging.column < columnId) { - jexcel.current.dragging.destination = parseInt(columnId); - } else { - jexcel.current.dragging.destination = parseInt(columnId) + 1; - } - jexcel.current.headers[columnId].classList.add('dragging-right'); - } - } - } - } - } else { - if (rowId) { - if (jexcel.current.isRowMerged(rowId).length) { - console.error('JEXCEL: This row is part of a merged cell.'); - } else { - var target = (e.target.clientHeight / 2 > e.offsetY) ? e.target.parentNode.nextSibling : e.target.parentNode; - e.target.parentNode.parentNode.insertBefore(jexcel.current.dragging.element, target); - } - } - } - } else if (jexcel.current.resizing) { - } else { - // Header found - if (jexcelTable[1] == 1) { - if (jexcel.current.selectedHeader) { - var columnId = e.target.getAttribute('data-x'); - var o = jexcel.current.selectedHeader; - var d = columnId; - // Update selection - jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1); - } - } - - // Body found - if (jexcelTable[1] == 2) { - if (e.target.classList.contains('jexcel_row')) { - if (jexcel.current.selectedRow) { - var o = jexcel.current.selectedRow; - var d = rowId; - // Update selection - jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d); - } - } else { - // Do not select edtion is in progress - if (! jexcel.current.edition) { - if (columnId && rowId) { - if (jexcel.current.selectedCorner) { - jexcel.current.updateCopySelection(columnId, rowId); - } else { - if (jexcel.current.selectedCell) { - jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId); - } - } - } - } - } - } - } - } - } - - // Clear any time control - if (jexcel.timeControl) { - clearTimeout(jexcel.timeControl); - jexcel.timeControl = null; - } -} - -/** - * Double click event handler: controls the double click in the corner, cell edition or column re-ordering. - */ -jexcel.doubleClickControls = function(e) { - // Jexcel is selected - if (jexcel.current) { - // Corner action - if (e.target.classList.contains('jexcel_corner')) { - // Any selected cells - if (jexcel.current.highlighted.length > 0) { - // Copy from this - var x1 = jexcel.current.highlighted[0].getAttribute('data-x'); - var y1 = parseInt(jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-y')) + 1; - // Until this - var x2 = jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-x'); - var y2 = jexcel.current.records.length - 1 - // Execute copy - jexcel.current.copyData(jexcel.current.records[y1][x1], jexcel.current.records[y2][x2]); - } - } else { - // Get table - var jexcelTable = jexcel.getElement(e.target); - - // Double click over header - if (jexcelTable[1] == 1 && jexcel.current.options.columnSorting == true) { - // Check valid column header coords - var columnId = e.target.getAttribute('data-x'); - if (columnId) { - jexcel.current.orderBy(columnId); - } - } - - // Double click over body - if (jexcelTable[1] == 2 && jexcel.current.options.editable == true) { - if (! jexcel.current.edition) { - var getCellCoords = function(element) { - if (element.parentNode) { - var x = element.getAttribute('data-x'); - var y = element.getAttribute('data-y'); - if (x && y) { - return element; - } else { - return getCellCoords(element.parentNode); - } - } - } - var cell = getCellCoords(e.target); - if (cell && cell.classList.contains('highlight')) { - jexcel.current.openEditor(cell); - } - } - } - } - } -} - -jexcel.copyControls = function(e) { - if (jexcel.current && jexcel.copyControls.enabled) { - if (! jexcel.current.edition) { - jexcel.current.copy(true); - } - } -} - -jexcel.cutControls = function(e) { - if (jexcel.current) { - if (! jexcel.current.edition) { - jexcel.current.copy(true); - if (jexcel.current.options.editable == true) { - jexcel.current.setValue(jexcel.current.highlighted, ''); - } - } - } -} - -jexcel.pasteControls = function(e) { - if (jexcel.current && jexcel.current.selectedCell) { - if (! jexcel.current.edition) { - if (jexcel.current.options.editable == true) { - if (e && e.clipboardData) { - jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], e.clipboardData.getData('text')); - e.preventDefault(); - } else if (window.clipboardData) { - jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], window.clipboardData.getData('text')); - } - } - } - } -} - -jexcel.contextMenuControls = function(e) { - e = e || window.event; - if ("buttons" in e) { - var mouseButton = e.buttons; - } else { - var mouseButton = e.which || e.button; - } - - if (jexcel.current) { - if (jexcel.current.edition) { - e.preventDefault(); - } else if (jexcel.current.options.contextMenu) { - jexcel.current.contextMenu.contextmenu.close(); - - if (jexcel.current) { - var x = e.target.getAttribute('data-x'); - var y = e.target.getAttribute('data-y'); - - if (x || y) { - // Table found - var items = jexcel.current.options.contextMenu(jexcel.current, x, y, e); - // The id is depending on header and body - jexcel.current.contextMenu.contextmenu.open(e, items); - // Avoid the real one - e.preventDefault(); - } - } - } - } -} - -jexcel.touchStartControls = function(e) { - var jexcelTable = jexcel.getElement(e.target); - - if (jexcelTable[0]) { - if (jexcel.current != jexcelTable[0].jexcel) { - if (jexcel.current) { - jexcel.current.resetSelection(); - } - jexcel.current = jexcelTable[0].jexcel; - } - } else { - if (jexcel.current) { - jexcel.current.resetSelection(); - jexcel.current = null; - } - } - - if (jexcel.current) { - if (! jexcel.current.edition) { - var columnId = e.target.getAttribute('data-x'); - var rowId = e.target.getAttribute('data-y'); - - if (columnId && rowId) { - jexcel.current.updateSelectionFromCoords(columnId, rowId); - - jexcel.timeControl = setTimeout(function() { - jexcel.current.openEditor(e.target, false, e); - }, 500); - } - } - } -} - -jexcel.touchEndControls = function(e) { - // Clear any time control - if (jexcel.timeControl) { - clearTimeout(jexcel.timeControl); - jexcel.timeControl = null; - } -} - -/** - * Jquery Support - */ - -if (typeof(jQuery) != 'undefined') { - (function($){ - $.fn.jexcel = function(method) { - var spreadsheetContainer = $(this).get(0); - if (! spreadsheetContainer.jexcel) { - return jexcel($(this).get(0), arguments[0]); - } else { - return spreadsheetContainer.jexcel[method].apply(this, Array.prototype.slice.call( arguments, 1 )); - } - }; - - })(jQuery); -} - -/** - * Jexcel extensions - */ - -jexcel.createTabs = function(tabs, result) { - // Create tab container - tabs.innerHTML = ''; - tabs.classList.add('jexcel_tabs'); - var spreadsheet = [] - var link = []; - for (var i = 0; i < result.length; i++) { - // Spreadsheet container - spreadsheet[i] = document.createElement('div'); - spreadsheet[i].classList.add('jexcel_tab'); - // Tab link - link[i] = document.createElement('div'); - link[i].classList.add('jexcel_tab_link'); - link[i].setAttribute('data-spreadsheet', i); - link[i].innerHTML = result[i].sheetName; - link[i].onclick = function() { - for (var j = 0; j < spreadsheet.length; j++) { - spreadsheet[j].style.display = 'none'; - link[j].classList.remove('selected'); - } - var i = this.getAttribute('data-spreadsheet'); - spreadsheet[i].style.display = 'block'; - link[i].classList.add('selected') - } - tabs.appendChild(link[i]); - } - - // Append spreadsheet - for (var i = 0; i < spreadsheet.length - 1; i++) { - tabs.appendChild(spreadsheet[i]); - jexcel(spreadsheet[i], result[i]); - } - - // First tab - spreadsheet[0].style.display = 'block'; - link[0].classList.add('selected') -} - -jexcel.fromSpreadsheet = function(file, __callback) { - var convert = function(workbook) { - var spreadsheets = []; - workbook.SheetNames.forEach(function(sheetName) { - var spreadsheet = {}; - spreadsheet.rows = []; - spreadsheet.columns = []; - spreadsheet.data = []; - spreadsheet.style = {}; - spreadsheet.sheetName = sheetName; - - // Column widths - var temp = workbook.Sheets[sheetName]['!cols']; - if (temp && temp.length) { - for (var i = 0; i < temp.length; i++) { - spreadsheet.columns[i] = {}; - if (temp[i] && temp[i].wpx) { - spreadsheet.columns[i].width = temp[i].wpx + 'px'; - } - } - } - // Rows heights - var temp = workbook.Sheets[sheetName]['!rows']; - if (temp && temp.length) { - for (var i = 0; i < temp.length; i++) { - if (temp[i] && temp[i].hpx) { - spreadsheet.rows[i] = {}; - spreadsheet.rows[i].height = temp[i].hpx + 'px'; - } - } - } - // Merge cells - var temp = workbook.Sheets[sheetName]['!merges']; - if (temp && temp.length > 0) { - spreadsheet.mergeCells = []; - for (var i = 0; i < temp.length; i++) { - var x1 = temp[i].s.c; - var y1 = temp[i].s.r; - var x2 = temp[i].e.c; - var y2 = temp[i].e.r; - var key = jexcel.getColumnNameFromId([x1,y1]); - spreadsheet.mergeCells[key] = [ x2-x1+1, y2-y1+1 ]; - } - } - // Data container - var max_x = 0; - var max_y = 0; - var temp = Object.keys(workbook.Sheets[sheetName]); - for (var i = 0; i < temp.length; i++) { - if (temp[i].substr(0,1) != '!') { - var cell = workbook.Sheets[sheetName][temp[i]]; - var info = jexcel.getIdFromColumnName(temp[i], true); - if (! spreadsheet.data[info[1]]) { - spreadsheet.data[info[1]] = []; - } - spreadsheet.data[info[1]][info[0]] = cell.f ? '=' + cell.f : cell.w; - if (max_x < info[0]) { - max_x = info[0]; - } - if (max_y < info[1]) { - max_y = info[1]; - } - // Style - if (cell.style && Object.keys(cell.style).length > 0) { - spreadsheet.style[temp[i]] = cell.style; - } - if (cell.s && cell.s.fgColor) { - if (spreadsheet.style[temp[i]]) { - spreadsheet.style[temp[i]] += ';'; - } - spreadsheet.style[temp[i]] += 'background-color:#' + cell.s.fgColor.rgb; - } - } - } - var numColumns = spreadsheet.columns; - for (var j = 0; j <= max_y; j++) { - for (var i = 0; i <= max_x; i++) { - if (! spreadsheet.data[j]) { - spreadsheet.data[j] = []; - } - if (! spreadsheet.data[j][i]) { - if (numColumns < i) { - spreadsheet.data[j][i] = ''; - } - } - } - } - spreadsheets.push(spreadsheet); - }); - - return spreadsheets; - } - - var oReq; - oReq = new XMLHttpRequest(); - oReq.open("GET", file, true); - - if(typeof Uint8Array !== 'undefined') { - oReq.responseType = "arraybuffer"; - oReq.onload = function(e) { - var arraybuffer = oReq.response; - var data = new Uint8Array(arraybuffer); - var wb = XLSX.read(data, {type:"array", cellFormula:true, cellStyles:true }); - __callback(convert(wb)) - }; - } else { - oReq.setRequestHeader("Accept-Charset", "x-user-defined"); - oReq.onreadystatechange = function() { if(oReq.readyState == 4 && oReq.status == 200) { - var ff = convertResponseBodyToText(oReq.responseBody); - var wb = XLSX.read(ff, {type:"binary", cellFormula:true, cellStyles:true }); - __callback(convert(wb)) - }}; - } - - oReq.send(); -} - -// Based on sutoiku work (https://github.com/sutoiku) - -var error = (function() { - var exports = {}; - - exports.nil = new Error('#NULL!'); - exports.div0 = new Error('#DIV/0!'); - exports.value = new Error('#VALUE!'); - exports.ref = new Error('#REF!'); - exports.name = new Error('#NAME?'); - exports.num = new Error('#NUM!'); - exports.na = new Error('#N/A'); - exports.error = new Error('#ERROR!'); - exports.data = new Error('#GETTING_DATA'); - - return exports; -})(); - -var utils = (function() { - var exports = {}; - - exports.flattenShallow = function(array) { - if (!array || !array.reduce) { - return array; - } - - return array.reduce(function(a, b) { - var aIsArray = Array.isArray(a); - var bIsArray = Array.isArray(b); - - if (aIsArray && bIsArray) { - return a.concat(b); - } - if (aIsArray) { - a.push(b); - - return a; - } - if (bIsArray) { - return [ a ].concat(b); - } - - return [ a, b ]; - }); - }; - - exports.isFlat = function(array) { - if (!array) { - return false; - } - - for (var i = 0; i < array.length; ++i) { - if (Array.isArray(array[i])) { - return false; - } - } - - return true; - }; - - exports.flatten = function() { - var result = exports.argsToArray.apply(null, arguments); - - while (!exports.isFlat(result)) { - result = exports.flattenShallow(result); - } - - return result; - }; - - exports.argsToArray = function(args) { - var result = []; - - exports.arrayEach(args, function(value) { - result.push(value); - }); - - return result; - }; - - exports.numbers = function() { - var possibleNumbers = this.flatten.apply(null, arguments); - return possibleNumbers.filter(function(el) { - return typeof el === 'number'; - }); - }; - - exports.cleanFloat = function(number) { - var power = 1e14; - return Math.round(number * power) / power; - }; - - exports.parseBool = function(bool) { - if (typeof bool === 'boolean') { - return bool; - } - - if (bool instanceof Error) { - return bool; - } - - if (typeof bool === 'number') { - return bool !== 0; - } - - if (typeof bool === 'string') { - var up = bool.toUpperCase(); - if (up === 'TRUE') { - return true; - } - - if (up === 'FALSE') { - return false; - } - } - - if (bool instanceof Date && !isNaN(bool)) { - return true; - } - - return error.value; - }; - - exports.parseNumber = function(string) { - if (string === undefined || string === '') { - return error.value; - } - if (!isNaN(string)) { - return parseFloat(string); - } - - return error.value; - }; - - exports.parseNumberArray = function(arr) { - var len; - - if (!arr || (len = arr.length) === 0) { - return error.value; - } - - var parsed; - - while (len--) { - parsed = exports.parseNumber(arr[len]); - if (parsed === error.value) { - return parsed; - } - arr[len] = parsed; - } - - return arr; - }; - - exports.parseMatrix = function(matrix) { - var n; - - if (!matrix || (n = matrix.length) === 0) { - return error.value; - } - var pnarr; - - for (var i = 0; i < matrix.length; i++) { - pnarr = exports.parseNumberArray(matrix[i]); - matrix[i] = pnarr; - - if (pnarr instanceof Error) { - return pnarr; - } - } - - return matrix; - }; - - var d1900 = new Date(Date.UTC(1900, 0, 1)); - exports.parseDate = function(date) { - if (!isNaN(date)) { - if (date instanceof Date) { - return new Date(date); - } - var d = parseInt(date, 10); - if (d < 0) { - return error.num; - } - if (d <= 60) { - return new Date(d1900.getTime() + (d - 1) * 86400000); - } - return new Date(d1900.getTime() + (d - 2) * 86400000); - } - if (typeof date === 'string') { - date = new Date(date); - if (!isNaN(date)) { - return date; - } - } - return error.value; - }; - - exports.parseDateArray = function(arr) { - var len = arr.length; - var parsed; - while (len--) { - parsed = this.parseDate(arr[len]); - if (parsed === error.value) { - return parsed; - } - arr[len] = parsed; - } - return arr; - }; - - exports.anyIsError = function() { - var n = arguments.length; - while (n--) { - if (arguments[n] instanceof Error) { - return true; - } - } - return false; - }; - - exports.arrayValuesToNumbers = function(arr) { - var n = arr.length; - var el; - while (n--) { - el = arr[n]; - if (typeof el === 'number') { - continue; - } - if (el === true) { - arr[n] = 1; - continue; - } - if (el === false) { - arr[n] = 0; - continue; - } - if (typeof el === 'string') { - var number = this.parseNumber(el); - if (number instanceof Error) { - arr[n] = 0; - } else { - arr[n] = number; - } - } - } - return arr; - }; - - exports.rest = function(array, idx) { - idx = idx || 1; - if (!array || typeof array.slice !== 'function') { - return array; - } - return array.slice(idx); - }; - - exports.initial = function(array, idx) { - idx = idx || 1; - if (!array || typeof array.slice !== 'function') { - return array; - } - return array.slice(0, array.length - idx); - }; - - exports.arrayEach = function(array, iteratee) { - var index = -1, length = array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - - return array; - }; - - exports.transpose = function(matrix) { - if (!matrix) { - return error.value; - } - - return matrix[0].map(function(col, i) { - return matrix.map(function(row) { - return row[i]; - }); - }); - }; - - return exports; -})(); - -jexcel.methods = {}; - -jexcel.methods.datetime = (function() { - var exports = {}; - - var d1900 = new Date(1900, 0, 1); - var WEEK_STARTS = [ - undefined, - 0, - 1, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - undefined, - 1, - 2, - 3, - 4, - 5, - 6, - 0 - ]; - var WEEK_TYPES = [ - [], - [1, 2, 3, 4, 5, 6, 7], - [7, 1, 2, 3, 4, 5, 6], - [6, 0, 1, 2, 3, 4, 5], - [], - [], - [], - [], - [], - [], - [], - [7, 1, 2, 3, 4, 5, 6], - [6, 7, 1, 2, 3, 4, 5], - [5, 6, 7, 1, 2, 3, 4], - [4, 5, 6, 7, 1, 2, 3], - [3, 4, 5, 6, 7, 1, 2], - [2, 3, 4, 5, 6, 7, 1], - [1, 2, 3, 4, 5, 6, 7] - ]; - var WEEKEND_TYPES = [ - [], - [6, 0], - [0, 1], - [1, 2], - [2, 3], - [3, 4], - [4, 5], - [5, 6], - undefined, - undefined, - undefined, [0, 0], - [1, 1], - [2, 2], - [3, 3], - [4, 4], - [5, 5], - [6, 6] - ]; - - exports.DATE = function(year, month, day) { - year = utils.parseNumber(year); - month = utils.parseNumber(month); - day = utils.parseNumber(day); - if (utils.anyIsError(year, month, day)) { - return error.value; - } - if (year < 0 || month < 0 || day < 0) { - return error.num; - } - var date = new Date(year, month - 1, day); - return date; - }; - - exports.DATEVALUE = function(date_text) { - if (typeof date_text !== 'string') { - return error.value; - } - var date = Date.parse(date_text); - if (isNaN(date)) { - return error.value; - } - if (date <= -2203891200000) { - return (date - d1900) / 86400000 + 1; - } - return (date - d1900) / 86400000 + 2; - }; - - exports.DAY = function(serial_number) { - var date = utils.parseDate(serial_number); - if (date instanceof Error) { - return date; - } - return date.getDate(); - }; - - exports.DAYS = function(end_date, start_date) { - end_date = utils.parseDate(end_date); - start_date = utils.parseDate(start_date); - if (end_date instanceof Error) { - return end_date; - } - if (start_date instanceof Error) { - return start_date; - } - return serial(end_date) - serial(start_date); - }; - - exports.DAYS360 = function(start_date, end_date, method) { - }; - - exports.EDATE = function(start_date, months) { - start_date = utils.parseDate(start_date); - if (start_date instanceof Error) { - return start_date; - } - if (isNaN(months)) { - return error.value; - } - months = parseInt(months, 10); - start_date.setMonth(start_date.getMonth() + months); - return serial(start_date); - }; - - exports.EOMONTH = function(start_date, months) { - start_date = utils.parseDate(start_date); - if (start_date instanceof Error) { - return start_date; - } - if (isNaN(months)) { - return error.value; - } - months = parseInt(months, 10); - return serial(new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0)); - }; - - exports.HOUR = function(serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getHours(); - }; - - exports.INTERVAL = function(second) { - if (typeof second !== 'number' && typeof second !== 'string') { - return error.value; - } else { - second = parseInt(second, 10); - } - - var year = Math.floor(second/946080000); - second = second%946080000; - var month = Math.floor(second/2592000); - second = second%2592000; - var day = Math.floor(second/86400); - second = second%86400; - - var hour = Math.floor(second/3600); - second = second%3600; - var min = Math.floor(second/60); - second = second%60; - var sec = second; - - year = (year > 0) ? year + 'Y' : ''; - month = (month > 0) ? month + 'M' : ''; - day = (day > 0) ? day + 'D' : ''; - hour = (hour > 0) ? hour + 'H' : ''; - min = (min > 0) ? min + 'M' : ''; - sec = (sec > 0) ? sec + 'S' : ''; - - return 'P' + year + month + day + 'T' + hour + min + sec; - }; - - exports.ISOWEEKNUM = function(date) { - date = utils.parseDate(date); - if (date instanceof Error) { - return date; - } - - date.setHours(0, 0, 0); - date.setDate(date.getDate() + 4 - (date.getDay() || 7)); - var yearStart = new Date(date.getFullYear(), 0, 1); - return Math.ceil((((date - yearStart) / 86400000) + 1) / 7); - }; - - exports.MINUTE = function(serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getMinutes(); - }; - - exports.MONTH = function(serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getMonth() + 1; - }; - - exports.NETWORKDAYS = function(start_date, end_date, holidays) { - }; - - exports.NETWORKDAYS.INTL = function(start_date, end_date, weekend, holidays) { - }; - - exports.NOW = function() { - return new Date(); - }; - - exports.SECOND = function(serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getSeconds(); - }; - - exports.TIME = function(hour, minute, second) { - hour = utils.parseNumber(hour); - minute = utils.parseNumber(minute); - second = utils.parseNumber(second); - if (utils.anyIsError(hour, minute, second)) { - return error.value; - } - if (hour < 0 || minute < 0 || second < 0) { - return error.num; - } - return (3600 * hour + 60 * minute + second) / 86400; - }; - - exports.TIMEVALUE = function(time_text) { - time_text = utils.parseDate(time_text); - if (time_text instanceof Error) { - return time_text; - } - return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400; - }; - - exports.TODAY = function() { - return new Date(); - }; - - exports.WEEKDAY = function(serial_number, return_type) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - if (return_type === undefined) { - return_type = 1; - } - var day = serial_number.getDay(); - return WEEK_TYPES[return_type][day]; - }; - - exports.WEEKNUM = function(serial_number, return_type) { - }; - - exports.WORKDAY = function(start_date, days, holidays) { - }; - - exports.WORKDAY.INTL = function(start_date, days, weekend, holidays) { - }; - - exports.YEAR = function(serial_number) { - serial_number = utils.parseDate(serial_number); - if (serial_number instanceof Error) { - return serial_number; - } - return serial_number.getFullYear(); - }; - - function isLeapYear(year) { - return new Date(year, 1, 29).getMonth() === 1; - } - - exports.YEARFRAC = function(start_date, end_date, basis) { - }; - - function serial(date) { - var addOn = (date > -2203891200000)?2:1; - return (date - d1900) / 86400000 + addOn; - } - - return exports; -})(); - -jexcel.methods.database = (function() { - var exports = {}; - - function compact(array) { - if (!array) { - return array; - } - var result = []; - for (var i = 0; i < array.length; ++i) { - if (!array[i]) { - continue; - } - result.push(array[i]); - } - return result; - } - - exports.FINDFIELD = function(database, title) { - var index = null; - for (var i = 0; i < database.length; i++) { - if (database[i][0] === title) { - index = i; - break; - } - } - - // Return error if the input field title is incorrect - if (index == null) { - return error.value; - } - return index; - }; - - function findResultIndex(database, criterias) { - var matches = {}; - for (var i = 1; i < database[0].length; ++i) { - matches[i] = true; - } - var maxCriteriaLength = criterias[0].length; - for (i = 1; i < criterias.length; ++i) { - if (criterias[i].length > maxCriteriaLength) { - maxCriteriaLength = criterias[i].length; - } - } - - for (var k = 1; k < database.length; ++k) { - for (var l = 1; l < database[k].length; ++l) { - var currentCriteriaResult = false; - var hasMatchingCriteria = false; - for (var j = 0; j < criterias.length; ++j) { - var criteria = criterias[j]; - if (criteria.length < maxCriteriaLength) { - continue; - } - - var criteriaField = criteria[0]; - if (database[k][0] !== criteriaField) { - continue; - } - hasMatchingCriteria = true; - for (var p = 1; p < criteria.length; ++p) { - currentCriteriaResult = currentCriteriaResult - || eval(database[k][l] + criteria[p]); // jshint - // ignore:line - } - } - if (hasMatchingCriteria) { - matches[l] = matches[l] && currentCriteriaResult; - } - } - } - - var result = []; - for (var n = 0; n < database[0].length; ++n) { - if (matches[n]) { - result.push(n - 1); - } - } - return result; - } - - // Database functions - exports.DAVERAGE = function(database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && (typeof field !== "string")) { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - var sum = 0; - for (var i = 0; i < resultIndexes.length; i++) { - sum += targetFields[resultIndexes[i]]; - } - return resultIndexes.length === 0 ? error.div0 : sum / resultIndexes.length; - }; - - exports.DCOUNT = function(database, field, criteria) { - }; - - exports.DCOUNTA = function(database, field, criteria) { - }; - - exports.DGET = function(database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && (typeof field !== "string")) { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - // Return error if no record meets the criteria - if (resultIndexes.length === 0) { - return error.value; - } - // Returns the #NUM! error value because more than one record meets the - // criteria - if (resultIndexes.length > 1) { - return error.num; - } - - return targetFields[resultIndexes[0]]; - }; - - exports.DMAX = function(database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && (typeof field !== "string")) { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - var maxValue = targetFields[resultIndexes[0]]; - for (var i = 1; i < resultIndexes.length; i++) { - if (maxValue < targetFields[resultIndexes[i]]) { - maxValue = targetFields[resultIndexes[i]]; - } - } - return maxValue; - }; - - exports.DMIN = function(database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && (typeof field !== "string")) { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - var minValue = targetFields[resultIndexes[0]]; - for (var i = 1; i < resultIndexes.length; i++) { - if (minValue > targetFields[resultIndexes[i]]) { - minValue = targetFields[resultIndexes[i]]; - } - } - return minValue; - }; - - exports.DPRODUCT = function(database, field, criteria) { - // Return error if field is not a number and not a string - if (isNaN(field) && (typeof field !== "string")) { - return error.value; - } - var resultIndexes = findResultIndex(database, criteria); - var targetFields = []; - if (typeof field === "string") { - var index = exports.FINDFIELD(database, field); - targetFields = utils.rest(database[index]); - } else { - targetFields = utils.rest(database[field]); - } - var targetValues = []; - for (var i = 0; i < resultIndexes.length; i++) { - targetValues[i] = targetFields[resultIndexes[i]]; - } - targetValues = compact(targetValues); - var result = 1; - for (i = 0; i < targetValues.length; i++) { - result *= targetValues[i]; - } - return result; - }; - - exports.DSTDEV = function(database, field, criteria) { - }; - - exports.DSTDEVP = function(database, field, criteria) { - }; - - exports.DSUM = function(database, field, criteria) { - }; - - exports.DVAR = function(database, field, criteria) { - }; - - exports.DVARP = function(database, field, criteria) { - }; - - exports.MATCH = function(lookupValue, lookupArray, matchType) { - if (!lookupValue && !lookupArray) { - return error.na; - } - if (arguments.length === 2) { - matchType = 1; - } - if (!(lookupArray instanceof Array)) { - return error.na; - } - if (matchType !== -1 && matchType !== 0 && matchType !== 1) { - return error.na; - } - - var index; - var indexValue; - - for (var idx = 0; idx < lookupArray.length; idx++) { - if (matchType === 1) { - if (lookupArray[idx] === lookupValue) { - return idx + 1; - } else if (lookupArray[idx] < lookupValue) { - if (!indexValue) { - index = idx + 1; - indexValue = lookupArray[idx]; - } else if (lookupArray[idx] > indexValue) { - index = idx + 1; - indexValue = lookupArray[idx]; - } - } - } else if (matchType === 0) { - if (typeof lookupValue === 'string') { - lookupValue = lookupValue.replace(/\?/g, '.'); - if (lookupArray[idx].toLowerCase().match(lookupValue.toLowerCase())) { - return idx + 1; - } - } else { - if (lookupArray[idx] === lookupValue) { - return idx + 1; - } - } - } else if (matchType === -1) { - if (lookupArray[idx] === lookupValue) { - return idx + 1; - } else if (lookupArray[idx] > lookupValue) { - if (!indexValue) { - index = idx + 1; - indexValue = lookupArray[idx]; - } else if (lookupArray[idx] < indexValue) { - index = idx + 1; - indexValue = lookupArray[idx]; - } - } - } - } - - return index ? index : error.na; - }; - - return exports; -})(); - -jexcel.methods.engineering = (function() { - var exports = {}; - - function isValidBinaryNumber(number) { - return (/^[01]{1,10}$/).test(number); - } - - exports.BESSELI = function(x, n) { - }; - - exports.BESSELJ = function(x, n) { - }; - - exports.BESSELK = function(x, n) { - }; - - exports.BESSELY = function(x, n) { - }; - - exports.BIN2DEC = function(number) { - // Return error if number is not binary or contains more than 10 - // characters (10 digits) - if (!isValidBinaryNumber(number)) { - return error.num; - } - - // Convert binary number to decimal - var result = parseInt(number, 2); - - // Handle negative numbers - var stringified = number.toString(); - if (stringified.length === 10 && stringified.substring(0, 1) === '1') { - return parseInt(stringified.substring(1), 2) - 512; - } else { - return result; - } - }; - - exports.BIN2HEX = function(number, places) { - // Return error if number is not binary or contains more than 10 - // characters (10 digits) - if (!isValidBinaryNumber(number)) { - return error.num; - } - - // Ignore places and return a 10-character hexadecimal number if number - // is negative - var stringified = number.toString(); - if (stringified.length === 10 && stringified.substring(0, 1) === '1') { - return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16); - } - - // Convert binary number to hexadecimal - var result = parseInt(number, 2).toString(16); - - // Return hexadecimal number using the minimum number of characters - // necessary if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - exports.BIN2OCT = function(number, places) { - // Return error if number is not binary or contains more than 10 - // characters (10 digits) - if (!isValidBinaryNumber(number)) { - return error.num; - } - - // Ignore places and return a 10-character octal number if number is - // negative - var stringified = number.toString(); - if (stringified.length === 10 && stringified.substring(0, 1) === '1') { - return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8); - } - - // Convert binary number to octal - var result = parseInt(number, 2).toString(8); - - // Return octal number using the minimum number of characters necessary - // if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - exports.BITAND = function(number1, number2) { - // Return error if either number is a non-numeric value - number1 = utils.parseNumber(number1); - number2 = utils.parseNumber(number2); - if (utils.anyIsError(number1, number2)) { - return error.value; - } - - // Return error if either number is less than 0 - if (number1 < 0 || number2 < 0) { - return error.num; - } - - // Return error if either number is a non-integer - if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { - return error.num; - } - - // Return error if either number is greater than (2^48)-1 - if (number1 > 281474976710655 || number2 > 281474976710655) { - return error.num; - } - - // Return bitwise AND of two numbers - return number1 & number2; - }; - - exports.BITLSHIFT = function(number, shift) { - number = utils.parseNumber(number); - shift = utils.parseNumber(shift); - if (utils.anyIsError(number, shift)) { - return error.value; - } - - // Return error if number is less than 0 - if (number < 0) { - return error.num; - } - - // Return error if number is a non-integer - if (Math.floor(number) !== number) { - return error.num; - } - - // Return error if number is greater than (2^48)-1 - if (number > 281474976710655) { - return error.num; - } - - // Return error if the absolute value of shift is greater than 53 - if (Math.abs(shift) > 53) { - return error.num; - } - - // Return number shifted by shift bits to the left or to the right if - // shift is negative - return (shift >= 0) ? number << shift : number >> -shift; - }; - - exports.BITOR = function(number1, number2) { - number1 = utils.parseNumber(number1); - number2 = utils.parseNumber(number2); - if (utils.anyIsError(number1, number2)) { - return error.value; - } - - // Return error if either number is less than 0 - if (number1 < 0 || number2 < 0) { - return error.num; - } - - // Return error if either number is a non-integer - if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { - return error.num; - } - - // Return error if either number is greater than (2^48)-1 - if (number1 > 281474976710655 || number2 > 281474976710655) { - return error.num; - } - - // Return bitwise OR of two numbers - return number1 | number2; - }; - - exports.BITRSHIFT = function(number, shift) { - number = utils.parseNumber(number); - shift = utils.parseNumber(shift); - if (utils.anyIsError(number, shift)) { - return error.value; - } - - // Return error if number is less than 0 - if (number < 0) { - return error.num; - } - - // Return error if number is a non-integer - if (Math.floor(number) !== number) { - return error.num; - } - - // Return error if number is greater than (2^48)-1 - if (number > 281474976710655) { - return error.num; - } - - // Return error if the absolute value of shift is greater than 53 - if (Math.abs(shift) > 53) { - return error.num; - } - - // Return number shifted by shift bits to the right or to the left if - // shift is negative - return (shift >= 0) ? number >> shift : number << -shift; - }; - - exports.BITXOR = function(number1, number2) { - number1 = utils.parseNumber(number1); - number2 = utils.parseNumber(number2); - if (utils.anyIsError(number1, number2)) { - return error.value; - } - - // Return error if either number is less than 0 - if (number1 < 0 || number2 < 0) { - return error.num; - } - - // Return error if either number is a non-integer - if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { - return error.num; - } - - // Return error if either number is greater than (2^48)-1 - if (number1 > 281474976710655 || number2 > 281474976710655) { - return error.num; - } - - // Return bitwise XOR of two numbers - return number1 ^ number2; - }; - - exports.COMPLEX = function(real, imaginary, suffix) { - real = utils.parseNumber(real); - imaginary = utils.parseNumber(imaginary); - if (utils.anyIsError(real, imaginary)) { - return real; - } - - // Set suffix - suffix = (suffix === undefined) ? 'i' : suffix; - - // Return error if suffix is neither "i" nor "j" - if (suffix !== 'i' && suffix !== 'j') { - return error.value; - } - - // Return complex number - if (real === 0 && imaginary === 0) { - return 0; - } else if (real === 0) { - return (imaginary === 1) ? suffix : imaginary.toString() + suffix; - } else if (imaginary === 0) { - return real.toString(); - } else { - var sign = (imaginary > 0) ? '+' : ''; - return real.toString() + sign + ((imaginary === 1) ? suffix : imaginary.toString() + suffix); - } - }; - - exports.CONVERT = function(number, from_unit, to_unit) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - - // List of units supported by CONVERT and units defined by the - // International System of Units - // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion - // ratio] - var units = [ - ["a.u. of action", "?", null, "action", false, false, 1.05457168181818e-34], - ["a.u. of charge", "e", null, "electric_charge", false, false, 1.60217653141414e-19], - ["a.u. of energy", "Eh", null, "energy", false, false, 4.35974417757576e-18], - ["a.u. of length", "a?", null, "length", false, false, 5.29177210818182e-11], - ["a.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31], - ["a.u. of time", "?/Eh", null, "time", false, false, 2.41888432650516e-17], - ["admiralty knot", "admkn", null, "speed", false, true, 0.514773333], - ["ampere", "A", null, "electric_current", true, false, 1], - ["ampere per meter", "A/m", null, "magnetic_field_intensity", true, false, 1], - ["ångström", "Å", ["ang"], "length", false, true, 1e-10], - ["are", "ar", null, "area", false, true, 100], - ["astronomical unit", "ua", null, "length", false, false, 1.49597870691667e-11], - ["bar", "bar", null, "pressure", false, false, 100000], - ["barn", "b", null, "area", false, false, 1e-28], - ["becquerel", "Bq", null, "radioactivity", true, false, 1], - ["bit", "bit", ["b"], "information", false, true, 1], - ["btu", "BTU", ["btu"], "energy", false, true, 1055.05585262], - ["byte", "byte", null, "information", false, true, 8], - ["candela", "cd", null, "luminous_intensity", true, false, 1], - ["candela per square metre", "cd/m?", null, "luminance", true, false, 1], - ["coulomb", "C", null, "electric_charge", true, false, 1], - ["cubic ångström", "ang3", ["ang^3"], "volume", false, true, 1e-30], - ["cubic foot", "ft3", ["ft^3"], "volume", false, true, 0.028316846592], - ["cubic inch", "in3", ["in^3"], "volume", false, true, 0.000016387064], - ["cubic light-year", "ly3", ["ly^3"], "volume", false, true, 8.46786664623715e-47], - ["cubic metre", "m?", null, "volume", true, true, 1], - ["cubic mile", "mi3", ["mi^3"], "volume", false, true, 4168181825.44058], - ["cubic nautical mile", "Nmi3", ["Nmi^3"], "volume", false, true, 6352182208], - ["cubic Pica", "Pica3", ["Picapt3", "Pica^3", "Picapt^3"], "volume", false, true, 7.58660370370369e-8], - ["cubic yard", "yd3", ["yd^3"], "volume", false, true, 0.764554857984], - ["cup", "cup", null, "volume", false, true, 0.0002365882365], - ["dalton", "Da", ["u"], "mass", false, false, 1.66053886282828e-27], - ["day", "d", ["day"], "time", false, true, 86400], - ["degree", "°", null, "angle", false, false, 0.0174532925199433], - ["degrees Rankine", "Rank", null, "temperature", false, true, 0.555555555555556], - ["dyne", "dyn", ["dy"], "force", false, true, 0.00001], - ["electronvolt", "eV", ["ev"], "energy", false, true, 1.60217656514141], - ["ell", "ell", null, "length", false, true, 1.143], - ["erg", "erg", ["e"], "energy", false, true, 1e-7], - ["farad", "F", null, "electric_capacitance", true, false, 1], - ["fluid ounce", "oz", null, "volume", false, true, 0.0000295735295625], - ["foot", "ft", null, "length", false, true, 0.3048], - ["foot-pound", "flb", null, "energy", false, true, 1.3558179483314], - ["gal", "Gal", null, "acceleration", false, false, 0.01], - ["gallon", "gal", null, "volume", false, true, 0.003785411784], - ["gauss", "G", ["ga"], "magnetic_flux_density", false, true, 1], - ["grain", "grain", null, "mass", false, true, 0.0000647989], - ["gram", "g", null, "mass", false, true, 0.001], - ["gray", "Gy", null, "absorbed_dose", true, false, 1], - ["gross registered ton", "GRT", ["regton"], "volume", false, true, 2.8316846592], - ["hectare", "ha", null, "area", false, true, 10000], - ["henry", "H", null, "inductance", true, false, 1], - ["hertz", "Hz", null, "frequency", true, false, 1], - ["horsepower", "HP", ["h"], "power", false, true, 745.69987158227], - ["horsepower-hour", "HPh", ["hh", "hph"], "energy", false, true, 2684519.538], - ["hour", "h", ["hr"], "time", false, true, 3600], - ["imperial gallon (U.K.)", "uk_gal", null, "volume", false, true, 0.00454609], - ["imperial hundredweight", "lcwt", ["uk_cwt", "hweight"], "mass", false, true, 50.802345], - ["imperial quart (U.K)", "uk_qt", null, "volume", false, true, 0.0011365225], - ["imperial ton", "brton", ["uk_ton", "LTON"], "mass", false, true, 1016.046909], - ["inch", "in", null, "length", false, true, 0.0254], - ["international acre", "uk_acre", null, "area", false, true, 4046.8564224], - ["IT calorie", "cal", null, "energy", false, true, 4.1868], - ["joule", "J", null, "energy", true, true, 1], - ["katal", "kat", null, "catalytic_activity", true, false, 1], - ["kelvin", "K", ["kel"], "temperature", true, true, 1], - ["kilogram", "kg", null, "mass", true, true, 1], - ["knot", "kn", null, "speed", false, true, 0.514444444444444], - ["light-year", "ly", null, "length", false, true, 9460730472580800], - ["litre", "L", ["l", "lt"], "volume", false, true, 0.001], - ["lumen", "lm", null, "luminous_flux", true, false, 1], - ["lux", "lx", null, "illuminance", true, false, 1], - ["maxwell", "Mx", null, "magnetic_flux", false, false, 1e-18], - ["measurement ton", "MTON", null, "volume", false, true, 1.13267386368], - ["meter per hour", "m/h", ["m/hr"], "speed", false, true, 0.00027777777777778], - ["meter per second", "m/s", ["m/sec"], "speed", true, true, 1], - ["meter per second squared", "m?s??", null, "acceleration", true, false, 1], - ["parsec", "pc", ["parsec"], "length", false, true, 30856775814671900], - ["meter squared per second", "m?/s", null, "kinematic_viscosity", true, false, 1], - ["metre", "m", null, "length", true, true, 1], - ["miles per hour", "mph", null, "speed", false, true, 0.44704], - ["millimetre of mercury", "mmHg", null, "pressure", false, false, 133.322], - ["minute", "?", null, "angle", false, false, 0.000290888208665722], - ["minute", "min", ["mn"], "time", false, true, 60], - ["modern teaspoon", "tspm", null, "volume", false, true, 0.000005], - ["mole", "mol", null, "amount_of_substance", true, false, 1], - ["morgen", "Morgen", null, "area", false, true, 2500], - ["n.u. of action", "?", null, "action", false, false, 1.05457168181818e-34], - ["n.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31], - ["n.u. of speed", "c?", null, "speed", false, false, 299792458], - ["n.u. of time", "?/(me?c??)", null, "time", false, false, 1.28808866778687e-21], - ["nautical mile", "M", ["Nmi"], "length", false, true, 1852], - ["newton", "N", null, "force", true, true, 1], - ["œrsted", "Oe ", null, "magnetic_field_intensity", false, false, 79.5774715459477], - ["ohm", "Ω", null, "electric_resistance", true, false, 1], - ["ounce mass", "ozm", null, "mass", false, true, 0.028349523125], - ["pascal", "Pa", null, "pressure", true, false, 1], - ["pascal second", "Pa?s", null, "dynamic_viscosity", true, false, 1], - ["pferdestärke", "PS", null, "power", false, true, 735.49875], - ["phot", "ph", null, "illuminance", false, false, 0.0001], - ["pica (1/6 inch)", "pica", null, "length", false, true, 0.00035277777777778], - ["pica (1/72 inch)", "Pica", ["Picapt"], "length", false, true, 0.00423333333333333], - ["poise", "P", null, "dynamic_viscosity", false, false, 0.1], - ["pond", "pond", null, "force", false, true, 0.00980665], - ["pound force", "lbf", null, "force", false, true, 4.4482216152605], - ["pound mass", "lbm", null, "mass", false, true, 0.45359237], - ["quart", "qt", null, "volume", false, true, 0.000946352946], - ["radian", "rad", null, "angle", true, false, 1], - ["second", "?", null, "angle", false, false, 0.00000484813681109536], - ["second", "s", ["sec"], "time", true, true, 1], - ["short hundredweight", "cwt", ["shweight"], "mass", false, true, 45.359237], - ["siemens", "S", null, "electrical_conductance", true, false, 1], - ["sievert", "Sv", null, "equivalent_dose", true, false, 1], - ["slug", "sg", null, "mass", false, true, 14.59390294], - ["square ångström", "ang2", ["ang^2"], "area", false, true, 1e-20], - ["square foot", "ft2", ["ft^2"], "area", false, true, 0.09290304], - ["square inch", "in2", ["in^2"], "area", false, true, 0.00064516], - ["square light-year", "ly2", ["ly^2"], "area", false, true, 8.95054210748189e+31], - ["square meter", "m?", null, "area", true, true, 1], - ["square mile", "mi2", ["mi^2"], "area", false, true, 2589988.110336], - ["square nautical mile", "Nmi2", ["Nmi^2"], "area", false, true, 3429904], - ["square Pica", "Pica2", ["Picapt2", "Pica^2", "Picapt^2"], "area", false, true, 0.00001792111111111], - ["square yard", "yd2", ["yd^2"], "area", false, true, 0.83612736], - ["statute mile", "mi", null, "length", false, true, 1609.344], - ["steradian", "sr", null, "solid_angle", true, false, 1], - ["stilb", "sb", null, "luminance", false, false, 0.0001], - ["stokes", "St", null, "kinematic_viscosity", false, false, 0.0001], - ["stone", "stone", null, "mass", false, true, 6.35029318], - ["tablespoon", "tbs", null, "volume", false, true, 0.0000147868], - ["teaspoon", "tsp", null, "volume", false, true, 0.00000492892], - ["tesla", "T", null, "magnetic_flux_density", true, true, 1], - ["thermodynamic calorie", "c", null, "energy", false, true, 4.184], - ["ton", "ton", null, "mass", false, true, 907.18474], - ["tonne", "t", null, "mass", false, false, 1000], - ["U.K. pint", "uk_pt", null, "volume", false, true, 0.00056826125], - ["U.S. bushel", "bushel", null, "volume", false, true, 0.03523907], - ["U.S. oil barrel", "barrel", null, "volume", false, true, 0.158987295], - ["U.S. pint", "pt", ["us_pt"], "volume", false, true, 0.000473176473], - ["U.S. survey mile", "survey_mi", null, "length", false, true, 1609.347219], - ["U.S. survey/statute acre", "us_acre", null, "area", false, true, 4046.87261], - ["volt", "V", null, "voltage", true, false, 1], - ["watt", "W", null, "power", true, true, 1], - ["watt-hour", "Wh", ["wh"], "energy", false, true, 3600], - ["weber", "Wb", null, "magnetic_flux", true, false, 1], - ["yard", "yd", null, "length", false, true, 0.9144], - ["year", "yr", null, "time", false, true, 31557600] - ]; - - // Binary prefixes - // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived - // from] - var binary_prefixes = { - Yi: ["yobi", 80, 1208925819614629174706176, "Yi", "yotta"], - Zi: ["zebi", 70, 1180591620717411303424, "Zi", "zetta"], - Ei: ["exbi", 60, 1152921504606846976, "Ei", "exa"], - Pi: ["pebi", 50, 1125899906842624, "Pi", "peta"], - Ti: ["tebi", 40, 1099511627776, "Ti", "tera"], - Gi: ["gibi", 30, 1073741824, "Gi", "giga"], - Mi: ["mebi", 20, 1048576, "Mi", "mega"], - ki: ["kibi", 10, 1024, "ki", "kilo"] - }; - - // Unit prefixes - // [Name, Multiplier, Abbreviation] - var unit_prefixes = { - Y: ["yotta", 1e+24, "Y"], - Z: ["zetta", 1e+21, "Z"], - E: ["exa", 1e+18, "E"], - P: ["peta", 1e+15, "P"], - T: ["tera", 1e+12, "T"], - G: ["giga", 1e+09, "G"], - M: ["mega", 1e+06, "M"], - k: ["kilo", 1e+03, "k"], - h: ["hecto", 1e+02, "h"], - e: ["dekao", 1e+01, "e"], - d: ["deci", 1e-01, "d"], - c: ["centi", 1e-02, "c"], - m: ["milli", 1e-03, "m"], - u: ["micro", 1e-06, "u"], - n: ["nano", 1e-09, "n"], - p: ["pico", 1e-12, "p"], - f: ["femto", 1e-15, "f"], - a: ["atto", 1e-18, "a"], - z: ["zepto", 1e-21, "z"], - y: ["yocto", 1e-24, "y"] - }; - - // Initialize units and multipliers - var from = null; - var to = null; - var base_from_unit = from_unit; - var base_to_unit = to_unit; - var from_multiplier = 1; - var to_multiplier = 1; - var alt; - - // Lookup from and to units - for (var i = 0; i < units.length; i++) { - alt = (units[i][2] === null) ? [] : units[i][2]; - if (units[i][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) { - from = units[i]; - } - if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) { - to = units[i]; - } - } - - // Lookup from prefix - if (from === null) { - var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)]; - var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)]; - - // Handle dekao unit prefix (only unit prefix with two characters) - if (from_unit.substring(0, 2) === 'da') { - from_unit_prefix = ["dekao", 1e+01, "da"]; - } - - // Handle binary prefixes first (so that 'Yi' is processed before - // 'Y') - if (from_binary_prefix) { - from_multiplier = from_binary_prefix[2]; - base_from_unit = from_unit.substring(2); - } else if (from_unit_prefix) { - from_multiplier = from_unit_prefix[1]; - base_from_unit = from_unit.substring(from_unit_prefix[2].length); - } - - // Lookup from unit - for (var j = 0; j < units.length; j++) { - alt = (units[j][2] === null) ? [] : units[j][2]; - if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) { - from = units[j]; - } - } - } - - // Lookup to prefix - if (to === null) { - var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)]; - var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)]; - - // Handle dekao unit prefix (only unit prefix with two characters) - if (to_unit.substring(0, 2) === 'da') { - to_unit_prefix = ["dekao", 1e+01, "da"]; - } - - // Handle binary prefixes first (so that 'Yi' is processed before - // 'Y') - if (to_binary_prefix) { - to_multiplier = to_binary_prefix[2]; - base_to_unit = to_unit.substring(2); - } else if (to_unit_prefix) { - to_multiplier = to_unit_prefix[1]; - base_to_unit = to_unit.substring(to_unit_prefix[2].length); - } - - // Lookup to unit - for (var k = 0; k < units.length; k++) { - alt = (units[k][2] === null) ? [] : units[k][2]; - if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) { - to = units[k]; - } - } - } - - // Return error if a unit does not exist - if (from === null || to === null) { - return error.na; - } - - // Return error if units represent different quantities - if (from[3] !== to[3]) { - return error.na; - } - - // Return converted number - return number * from[6] * from_multiplier / (to[6] * to_multiplier); - }; - - exports.DEC2BIN = function(number, places) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - - // Return error if number is not decimal, is lower than -512, or is - // greater than 511 - if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) { - return error.num; - } - - // Ignore places and return a 10-character binary number if number is - // negative - if (number < 0) { - return '1' + REPT('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2); - } - - // Convert decimal number to binary - var result = parseInt(number, 10).toString(2); - - // Return binary number using the minimum number of characters necessary - // if places is undefined - if (typeof places === 'undefined') { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - exports.DEC2HEX = function(number, places) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - - // Return error if number is not decimal, is lower than -549755813888, - // or is greater than 549755813887 - if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) { - return error.num; - } - - // Ignore places and return a 10-character hexadecimal number if number - // is negative - if (number < 0) { - return (1099511627776 + number).toString(16); - } - - // Convert decimal number to hexadecimal - var result = parseInt(number, 10).toString(16); - - // Return hexadecimal number using the minimum number of characters - // necessary if places is undefined - if (typeof places === 'undefined') { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - exports.DEC2OCT = function(number, places) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - - // Return error if number is not decimal, is lower than -549755813888, - // or is greater than 549755813887 - if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) { - return error.num; - } - - // Ignore places and return a 10-character octal number if number is - // negative - if (number < 0) { - return (1073741824 + number).toString(8); - } - - // Convert decimal number to octal - var result = parseInt(number, 10).toString(8); - - // Return octal number using the minimum number of characters necessary - // if places is undefined - if (typeof places === 'undefined') { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - exports.DELTA = function(number1, number2) { - // Set number2 to zero if undefined - number2 = (number2 === undefined) ? 0 : number2; - number1 = utils.parseNumber(number1); - number2 = utils.parseNumber(number2); - if (utils.anyIsError(number1, number2)) { - return error.value; - } - - // Return delta - return (number1 === number2) ? 1 : 0; - }; - - exports.ERF = function(lower_bound, upper_bound) { - }; - - exports.ERF.PRECISE = function() { - }; - - exports.ERFC = function(x) { - }; - - exports.ERFC.PRECISE = function() { - }; - - exports.GESTEP = function(number, step) { - step = step || 0; - number = utils.parseNumber(number); - if (utils.anyIsError(step, number)) { - return number; - } - - // Return delta - return (number >= step) ? 1 : 0; - }; - - exports.HEX2BIN = function(number, places) { - // Return error if number is not hexadecimal or contains more than ten - // characters (10 digits) - if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { - return error.num; - } - - // Check if number is negative - var negative = (number.length === 10 && number.substring(0, 1).toLowerCase() === 'f') ? true : false; - - // Convert hexadecimal number to decimal - var decimal = (negative) ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16); - - // Return error if number is lower than -512 or greater than 511 - if (decimal < -512 || decimal > 511) { - return error.num; - } - - // Ignore places and return a 10-character binary number if number is - // negative - if (negative) { - return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2); - } - - // Convert decimal number to binary - var result = decimal.toString(2); - - // Return binary number using the minimum number of characters necessary - // if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - exports.HEX2DEC = function(number) { - // Return error if number is not hexadecimal or contains more than ten - // characters (10 digits) - if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { - return error.num; - } - - // Convert hexadecimal number to decimal - var decimal = parseInt(number, 16); - - // Return decimal number - return (decimal >= 549755813888) ? decimal - 1099511627776 : decimal; - }; - - exports.HEX2OCT = function(number, places) { - // Return error if number is not hexadecimal or contains more than ten - // characters (10 digits) - if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { - return error.num; - } - - // Convert hexadecimal number to decimal - var decimal = parseInt(number, 16); - - // Return error if number is positive and greater than 0x1fffffff - // (536870911) - if (decimal > 536870911 && decimal < 1098974756864) { - return error.num; - } - - // Ignore places and return a 10-character octal number if number is - // negative - if (decimal >= 1098974756864) { - return (decimal - 1098437885952).toString(8); - } - - // Convert decimal number to octal - var result = decimal.toString(8); - - // Return octal number using the minimum number of characters necessary - // if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - exports.IMABS = function(inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - // Return error if either coefficient is not a number - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return absolute value of complex number - return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); - }; - - exports.IMAGINARY = function(inumber) { - if (inumber === undefined || inumber === true || inumber === false) { - return error.value; - } - - // Return 0 if inumber is equal to 0 - if (inumber === 0 || inumber === '0') { - return 0; - } - - // Handle special cases - if (['i', 'j'].indexOf(inumber) >= 0) { - return 1; - } - - // Normalize imaginary coefficient - inumber = inumber.replace('+i', '+1i').replace('-i', '-1i').replace('+j', '+1j').replace('-j', '-1j'); - - // Lookup sign - var plus = inumber.indexOf('+'); - var minus = inumber.indexOf('-'); - if (plus === 0) { - plus = inumber.indexOf('+', 1); - } - - if (minus === 0) { - minus = inumber.indexOf('-', 1); - } - - // Lookup imaginary unit - var last = inumber.substring(inumber.length - 1, inumber.length); - var unit = (last === 'i' || last === 'j'); - - if (plus >= 0 || minus >= 0) { - // Return error if imaginary unit is neither i nor j - if (!unit) { - return error.num; - } - - // Return imaginary coefficient of complex number - if (plus >= 0) { - return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ? - error.num : - Number(inumber.substring(plus + 1, inumber.length - 1)); - } else { - return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ? - error.num : - -Number(inumber.substring(minus + 1, inumber.length - 1)); - } - } else { - if (unit) { - return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : inumber.substring(0, inumber.length - 1); - } else { - return (isNaN(inumber)) ? error.num : 0; - } - } - }; - - exports.IMARGUMENT = function(inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - // Return error if either coefficient is not a number - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return error if inumber is equal to zero - if (x === 0 && y === 0) { - return error.div0; - } - - // Return PI/2 if x is equal to zero and y is positive - if (x === 0 && y > 0) { - return Math.PI / 2; - } - - // Return -PI/2 if x is equal to zero and y is negative - if (x === 0 && y < 0) { - return -Math.PI / 2; - } - - // Return zero if x is negative and y is equal to zero - if (y === 0 && x > 0) { - return 0; - } - - // Return zero if x is negative and y is equal to zero - if (y === 0 && x < 0) { - return -Math.PI; - } - - // Return argument of complex number - if (x > 0) { - return Math.atan(y / x); - } else if (x < 0 && y >= 0) { - return Math.atan(y / x) + Math.PI; - } else { - return Math.atan(y / x) - Math.PI; - } - }; - - exports.IMCONJUGATE = function(inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return conjugate of complex number - return (y !== 0) ? exports.COMPLEX(x, -y, unit) : inumber; - }; - - exports.IMCOS = function(inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return cosine of complex number - return exports.COMPLEX(Math.cos(x) * (Math.exp(y) + Math.exp(-y)) / 2, -Math.sin(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit); - }; - - exports.IMCOSH = function(inumber) { - // Lookup real and imaginary coefficients using exports.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return hyperbolic cosine of complex number - return exports.COMPLEX(Math.cos(y) * (Math.exp(x) + Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) - Math.exp(-x)) / 2, unit); - }; - - exports.IMCOT = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return cotangent of complex number - return exports.IMDIV(exports.IMCOS(inumber), exports.IMSIN(inumber)); - }; - - exports.IMDIV = function(inumber1, inumber2) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var a = exports.IMREAL(inumber1); - var b = exports.IMAGINARY(inumber1); - var c = exports.IMREAL(inumber2); - var d = exports.IMAGINARY(inumber2); - - if (utils.anyIsError(a, b, c, d)) { - return error.value; - } - - // Lookup imaginary unit - var unit1 = inumber1.substring(inumber1.length - 1); - var unit2 = inumber2.substring(inumber2.length - 1); - var unit = 'i'; - if (unit1 === 'j') { - unit = 'j'; - } else if (unit2 === 'j') { - unit = 'j'; - } - - // Return error if inumber2 is null - if (c === 0 && d === 0) { - return error.num; - } - - // Return exponential of complex number - var den = c * c + d * d; - return exports.COMPLEX((a * c + b * d) / den, (b * c - a * d) / den, unit); - }; - - exports.IMEXP = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return exponential of complex number - var e = Math.exp(x); - return exports.COMPLEX(e * Math.cos(y), e * Math.sin(y), unit); - }; - - exports.IMLN = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return exponential of complex number - return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)), Math.atan(y / x), unit); - }; - - exports.IMLOG10 = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return exponential of complex number - return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), Math.atan(y / x) / Math.log(10), unit); - }; - - exports.IMLOG2 = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return exponential of complex number - return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), Math.atan(y / x) / Math.log(2), unit); - }; - - exports.IMPOWER = function(inumber, number) { - number = utils.parseNumber(number); - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - if (utils.anyIsError(number, x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Calculate power of modulus - var p = Math.pow(exports.IMABS(inumber), number); - - // Calculate argument - var t = exports.IMARGUMENT(inumber); - - // Return exponential of complex number - return exports.COMPLEX(p * Math.cos(number * t), p * Math.sin(number * t), unit); - }; - - exports.IMPRODUCT = function() { - // Initialize result - var result = arguments[0]; - - // Loop on all numbers - for (var i = 1; i < arguments.length; i++) { - // Lookup coefficients of two complex numbers - var a = exports.IMREAL(result); - var b = exports.IMAGINARY(result); - var c = exports.IMREAL(arguments[i]); - var d = exports.IMAGINARY(arguments[i]); - - if (utils.anyIsError(a, b, c, d)) { - return error.value; - } - - // Complute product of two complex numbers - result = exports.COMPLEX(a * c - b * d, a * d + b * c); - } - - // Return product of complex numbers - return result; - }; - - exports.IMREAL = function(inumber) { - if (inumber === undefined || inumber === true || inumber === false) { - return error.value; - } - - // Return 0 if inumber is equal to 0 - if (inumber === 0 || inumber === '0') { - return 0; - } - - // Handle special cases - if (['i', '+i', '1i', '+1i', '-i', '-1i', 'j', '+j', '1j', '+1j', '-j', '-1j'].indexOf(inumber) >= 0) { - return 0; - } - - // Lookup sign - var plus = inumber.indexOf('+'); - var minus = inumber.indexOf('-'); - if (plus === 0) { - plus = inumber.indexOf('+', 1); - } - if (minus === 0) { - minus = inumber.indexOf('-', 1); - } - - // Lookup imaginary unit - var last = inumber.substring(inumber.length - 1, inumber.length); - var unit = (last === 'i' || last === 'j'); - - if (plus >= 0 || minus >= 0) { - // Return error if imaginary unit is neither i nor j - if (!unit) { - return error.num; - } - - // Return real coefficient of complex number - if (plus >= 0) { - return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ? - error.num : - Number(inumber.substring(0, plus)); - } else { - return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ? - error.num : - Number(inumber.substring(0, minus)); - } - } else { - if (unit) { - return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : 0; - } else { - return (isNaN(inumber)) ? error.num : inumber; - } - } - }; - - exports.IMSEC = function(inumber) { - // Return error if inumber is a logical value - if (inumber === true || inumber === false) { - return error.value; - } - - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return secant of complex number - return exports.IMDIV('1', exports.IMCOS(inumber)); - }; - - exports.IMSECH = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return hyperbolic secant of complex number - return exports.IMDIV('1', exports.IMCOSH(inumber)); - }; - - exports.IMSIN = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return sine of complex number - return exports.COMPLEX(Math.sin(x) * (Math.exp(y) + Math.exp(-y)) / 2, Math.cos(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit); - }; - - exports.IMSINH = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Return hyperbolic sine of complex number - return exports.COMPLEX(Math.cos(y) * (Math.exp(x) - Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) + Math.exp(-x)) / 2, unit); - }; - - exports.IMSQRT = function(inumber) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Lookup imaginary unit - var unit = inumber.substring(inumber.length - 1); - unit = (unit === 'i' || unit === 'j') ? unit : 'i'; - - // Calculate power of modulus - var s = Math.sqrt(exports.IMABS(inumber)); - - // Calculate argument - var t = exports.IMARGUMENT(inumber); - - // Return exponential of complex number - return exports.COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit); - }; - - exports.IMCSC = function (inumber) { - // Return error if inumber is a logical value - if (inumber === true || inumber === false) { - return error.value; - } - - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - // Return error if either coefficient is not a number - if (utils.anyIsError(x, y)) { - return error.num; - } - - // Return cosecant of complex number - return exports.IMDIV('1', exports.IMSIN(inumber)); - }; - - exports.IMCSCH = function (inumber) { - // Return error if inumber is a logical value - if (inumber === true || inumber === false) { - return error.value; - } - - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - // Return error if either coefficient is not a number - if (utils.anyIsError(x, y)) { - return error.num; - } - - // Return hyperbolic cosecant of complex number - return exports.IMDIV('1', exports.IMSINH(inumber)); - }; - - exports.IMSUB = function(inumber1, inumber2) { - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var a = this.IMREAL(inumber1); - var b = this.IMAGINARY(inumber1); - var c = this.IMREAL(inumber2); - var d = this.IMAGINARY(inumber2); - - if (utils.anyIsError(a, b, c, d)) { - return error.value; - } - - // Lookup imaginary unit - var unit1 = inumber1.substring(inumber1.length - 1); - var unit2 = inumber2.substring(inumber2.length - 1); - var unit = 'i'; - if (unit1 === 'j') { - unit = 'j'; - } else if (unit2 === 'j') { - unit = 'j'; - } - - // Return _ of two complex numbers - return this.COMPLEX(a - c, b - d, unit); - }; - - exports.IMSUM = function() { - var args = utils.flatten(arguments); - - // Initialize result - var result = args[0]; - - // Loop on all numbers - for (var i = 1; i < args.length; i++) { - // Lookup coefficients of two complex numbers - var a = this.IMREAL(result); - var b = this.IMAGINARY(result); - var c = this.IMREAL(args[i]); - var d = this.IMAGINARY(args[i]); - - if (utils.anyIsError(a, b, c, d)) { - return error.value; - } - - // Complute product of two complex numbers - result = this.COMPLEX(a + c, b + d); - } - - // Return sum of complex numbers - return result; - }; - - exports.IMTAN = function(inumber) { - // Return error if inumber is a logical value - if (inumber === true || inumber === false) { - return error.value; - } - - // Lookup real and imaginary coefficients using Formula.js - // [http://formulajs.org] - var x = exports.IMREAL(inumber); - var y = exports.IMAGINARY(inumber); - - if (utils.anyIsError(x, y)) { - return error.value; - } - - // Return tangent of complex number - return this.IMDIV(this.IMSIN(inumber), this.IMCOS(inumber)); - }; - - exports.OCT2BIN = function(number, places) { - // Return error if number is not hexadecimal or contains more than ten - // characters (10 digits) - if (!/^[0-7]{1,10}$/.test(number)) { - return error.num; - } - - // Check if number is negative - var negative = (number.length === 10 && number.substring(0, 1) === '7') ? true : false; - - // Convert octal number to decimal - var decimal = (negative) ? parseInt(number, 8) - 1073741824 : parseInt(number, 8); - - // Return error if number is lower than -512 or greater than 511 - if (decimal < -512 || decimal > 511) { - return error.num; - } - - // Ignore places and return a 10-character binary number if number is - // negative - if (negative) { - return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2); - } - - // Convert decimal number to binary - var result = decimal.toString(2); - - // Return binary number using the minimum number of characters necessary - // if places is undefined - if (typeof places === 'undefined') { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - exports.OCT2DEC = function(number) { - // Return error if number is not octal or contains more than ten - // characters (10 digits) - if (!/^[0-7]{1,10}$/.test(number)) { - return error.num; - } - - // Convert octal number to decimal - var decimal = parseInt(number, 8); - - // Return decimal number - return (decimal >= 536870912) ? decimal - 1073741824 : decimal; - }; - - exports.OCT2HEX = function(number, places) { - // Return error if number is not octal or contains more than ten - // characters (10 digits) - if (!/^[0-7]{1,10}$/.test(number)) { - return error.num; - } - - // Convert octal number to decimal - var decimal = parseInt(number, 8); - - // Ignore places and return a 10-character octal number if number is - // negative - if (decimal >= 536870912) { - return 'ff' + (decimal + 3221225472).toString(16); - } - - // Convert decimal number to hexadecimal - var result = decimal.toString(16); - - // Return hexadecimal number using the minimum number of characters - // necessary if places is undefined - if (places === undefined) { - return result; - } else { - // Return error if places is nonnumeric - if (isNaN(places)) { - return error.value; - } - - // Return error if places is negative - if (places < 0) { - return error.num; - } - - // Truncate places in case it is not an integer - places = Math.floor(places); - - // Pad return value with leading 0s (zeros) if necessary (using - // Underscore.string) - return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; - } - }; - - return exports; -})(); - -jexcel.methods.financial = (function() { - var exports = {}; - - function validDate(d) { - return d && d.getTime && !isNaN(d.getTime()); - } - - function ensureDate(d) { - return (d instanceof Date)?d:new Date(d); - } - - exports.ACCRINT = function(issue, first, settlement, rate, par, frequency, basis) { - // Return error if either date is invalid - issue = ensureDate(issue); - first = ensureDate(first); - settlement = ensureDate(settlement); - if (!validDate(issue) || !validDate(first) || !validDate(settlement)) { - return '#VALUE!'; - } - - // Return error if either rate or par are lower than or equal to zero - if (rate <= 0 || par <= 0) { - return '#NUM!'; - } - - // Return error if frequency is neither 1, 2, or 4 - if ([1, 2, 4].indexOf(frequency) === -1) { - return '#NUM!'; - } - - // Return error if basis is neither 0, 1, 2, 3, or 4 - if ([0, 1, 2, 3, 4].indexOf(basis) === -1) { - return '#NUM!'; - } - - // Return error if settlement is before or equal to issue - if (settlement <= issue) { - return '#NUM!'; - } - - // Set default values - par = par || 0; - basis = basis || 0; - - // Compute accrued interest - return par * rate * YEARFRAC(issue, settlement, basis); - }; - - exports.ACCRINTM = null; - - exports.AMORDEGRC = null; - - exports.AMORLINC = null; - - exports.COUPDAYBS = null; - - exports.COUPDAYS = null; - - exports.COUPDAYSNC = null; - - exports.COUPNCD = null; - - exports.COUPNUM = null; - - exports.COUPPCD = null; - - exports.CUMIPMT = function(rate, periods, value, start, end, type) { - // Credits: algorithm inspired by Apache OpenOffice - // Credits: Hannes Stiebitzhofer for the translations of function and - // variable names - // Requires exports.FV() and exports.PMT() from exports.js - // [http://stoic.com/exports/] - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - value = utils.parseNumber(value); - if (utils.anyIsError(rate, periods, value)) { - return error.value; - } - - // Return error if either rate, periods, or value are lower than or - // equal to zero - if (rate <= 0 || periods <= 0 || value <= 0) { - return error.num; - } - - // Return error if start < 1, end < 1, or start > end - if (start < 1 || end < 1 || start > end) { - return error.num; - } - - // Return error if type is neither 0 nor 1 - if (type !== 0 && type !== 1) { - return error.num; - } - - // Compute cumulative interest - var payment = exports.PMT(rate, periods, value, 0, type); - var interest = 0; - - if (start === 1) { - if (type === 0) { - interest = -value; - start++; - } - } - - for (var i = start; i <= end; i++) { - if (type === 1) { - interest += exports.FV(rate, i - 2, payment, value, 1) - payment; - } else { - interest += exports.FV(rate, i - 1, payment, value, 0); - } - } - interest *= rate; - - // Return cumulative interest - return interest; - }; - - exports.CUMPRINC = function(rate, periods, value, start, end, type) { - // Credits: algorithm inspired by Apache OpenOffice - // Credits: Hannes Stiebitzhofer for the translations of function and - // variable names - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - value = utils.parseNumber(value); - if (utils.anyIsError(rate, periods, value)) { - return error.value; - } - - // Return error if either rate, periods, or value are lower than or - // equal to zero - if (rate <= 0 || periods <= 0 || value <= 0) { - return error.num; - } - - // Return error if start < 1, end < 1, or start > end - if (start < 1 || end < 1 || start > end) { - return error.num; - } - - // Return error if type is neither 0 nor 1 - if (type !== 0 && type !== 1) { - return error.num; - } - - // Compute cumulative principal - var payment = exports.PMT(rate, periods, value, 0, type); - var principal = 0; - if (start === 1) { - if (type === 0) { - principal = payment + value * rate; - } else { - principal = payment; - } - start++; - } - for (var i = start; i <= end; i++) { - if (type > 0) { - principal += payment - (exports.FV(rate, i - 2, payment, value, 1) - payment) * rate; - } else { - principal += payment - exports.FV(rate, i - 1, payment, value, 0) * rate; - } - } - - // Return cumulative principal - return principal; - }; - - exports.DB = function(cost, salvage, life, period, month) { - // Initialize month - month = (month === undefined) ? 12 : month; - - cost = utils.parseNumber(cost); - salvage = utils.parseNumber(salvage); - life = utils.parseNumber(life); - period = utils.parseNumber(period); - month = utils.parseNumber(month); - if (utils.anyIsError(cost, salvage, life, period, month)) { - return error.value; - } - - // Return error if any of the parameters is negative - if (cost < 0 || salvage < 0 || life < 0 || period < 0) { - return error.num; - } - - // Return error if month is not an integer between 1 and 12 - if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) { - return error.num; - } - - // Return error if period is greater than life - if (period > life) { - return error.num; - } - - // Return 0 (zero) if salvage is greater than or equal to cost - if (salvage >= cost) { - return 0; - } - - // Rate is rounded to three decimals places - var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3); - - // Compute initial depreciation - var initial = cost * rate * month / 12; - - // Compute total depreciation - var total = initial; - var current = 0; - var ceiling = (period === life) ? life - 1 : period; - for (var i = 2; i <= ceiling; i++) { - current = (cost - total) * rate; - total += current; - } - - // Depreciation for the first and last periods are special cases - if (period === 1) { - // First period - return initial; - } else if (period === life) { - // Last period - return (cost - total) * rate; - } else { - return current; - } - }; - - exports.DDB = function(cost, salvage, life, period, factor) { - // Initialize factor - factor = (factor === undefined) ? 2 : factor; - - cost = utils.parseNumber(cost); - salvage = utils.parseNumber(salvage); - life = utils.parseNumber(life); - period = utils.parseNumber(period); - factor = utils.parseNumber(factor); - if (utils.anyIsError(cost, salvage, life, period, factor)) { - return error.value; - } - - // Return error if any of the parameters is negative or if factor is - // null - if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) { - return error.num; - } - - // Return error if period is greater than life - if (period > life) { - return error.num; - } - - // Return 0 (zero) if salvage is greater than or equal to cost - if (salvage >= cost) { - return 0; - } - - // Compute depreciation - var total = 0; - var current = 0; - for (var i = 1; i <= period; i++) { - current = Math.min((cost - total) * (factor / life), (cost - salvage - total)); - total += current; - } - - // Return depreciation - return current; - }; - - exports.DISC = null; - - exports.DOLLARDE = function(dollar, fraction) { - // Credits: algorithm inspired by Apache OpenOffice - - dollar = utils.parseNumber(dollar); - fraction = utils.parseNumber(fraction); - if (utils.anyIsError(dollar, fraction)) { - return error.value; - } - - // Return error if fraction is negative - if (fraction < 0) { - return error.num; - } - - // Return error if fraction is greater than or equal to 0 and less than - // 1 - if (fraction >= 0 && fraction < 1) { - return error.div0; - } - - // Truncate fraction if it is not an integer - fraction = parseInt(fraction, 10); - - // Compute integer part - var result = parseInt(dollar, 10); - - // Add decimal part - result += (dollar % 1) * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10)) / fraction; - - // Round result - var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1); - result = Math.round(result * power) / power; - - // Return converted dollar price - return result; - }; - - exports.DOLLARFR = function(dollar, fraction) { - // Credits: algorithm inspired by Apache OpenOffice - - dollar = utils.parseNumber(dollar); - fraction = utils.parseNumber(fraction); - if (utils.anyIsError(dollar, fraction)) { - return error.value; - } - - // Return error if fraction is negative - if (fraction < 0) { - return error.num; - } - - // Return error if fraction is greater than or equal to 0 and less than - // 1 - if (fraction >= 0 && fraction < 1) { - return error.div0; - } - - // Truncate fraction if it is not an integer - fraction = parseInt(fraction, 10); - - // Compute integer part - var result = parseInt(dollar, 10); - - // Add decimal part - result += (dollar % 1) * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction; - - // Return converted dollar price - return result; - }; - - exports.DURATION = null; - - exports.EFFECT = function(rate, periods) { - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - if (utils.anyIsError(rate, periods)) { - return error.value; - } - - // Return error if rate <=0 or periods < 1 - if (rate <= 0 || periods < 1) { - return error.num; - } - - // Truncate periods if it is not an integer - periods = parseInt(periods, 10); - - // Return effective annual interest rate - return Math.pow(1 + rate / periods, periods) - 1; - }; - - exports.FV = function(rate, periods, payment, value, type) { - // Credits: algorithm inspired by Apache OpenOffice - - value = value || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - payment = utils.parseNumber(payment); - value = utils.parseNumber(value); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, periods, payment, value, type)) { - return error.value; - } - - // Return future value - var result; - if (rate === 0) { - result = value + payment * periods; - } else { - var term = Math.pow(1 + rate, periods); - if (type === 1) { - result = value * term + payment * (1 + rate) * (term - 1) / rate; - } else { - result = value * term + payment * (term - 1) / rate; - } - } - return -result; - }; - - exports.FVSCHEDULE = function(principal, schedule) { - principal = utils.parseNumber(principal); - schedule = utils.parseNumberArray(utils.flatten(schedule)); - if (utils.anyIsError(principal, schedule)) { - return error.value; - } - - var n = schedule.length; - var future = principal; - - // Apply all interests in schedule - for (var i = 0; i < n; i++) { - // Apply scheduled interest - future *= 1 + schedule[i]; - } - - // Return future value - return future; - }; - - exports.INTRATE = null; - - exports.IPMT = function(rate, period, periods, present, future, type) { - // Credits: algorithm inspired by Apache OpenOffice - - future = future || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - period = utils.parseNumber(period); - periods = utils.parseNumber(periods); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, period, periods, present, future, type)) { - return error.value; - } - - // Compute payment - var payment = exports.PMT(rate, periods, present, future, type); - - // Compute interest - var interest; - if (period === 1) { - if (type === 1) { - interest = 0; - } else { - interest = -present; - } - } else { - if (type === 1) { - interest = exports.FV(rate, period - 2, payment, present, 1) - payment; - } else { - interest = exports.FV(rate, period - 1, payment, present, 0); - } - } - - // Return interest - return interest * rate; - }; - - exports.IRR = function(values, guess) { - // Credits: algorithm inspired by Apache OpenOffice - - guess = guess || 0; - - values = utils.parseNumberArray(utils.flatten(values)); - guess = utils.parseNumber(guess); - if (utils.anyIsError(values, guess)) { - return error.value; - } - - // Calculates the resulting amount - var irrResult = function(values, dates, rate) { - var r = rate + 1; - var result = values[0]; - for (var i = 1; i < values.length; i++) { - result += values[i] / Math.pow(r, (dates[i] - dates[0]) / 365); - } - return result; - }; - - // Calculates the first derivation - var irrResultDeriv = function(values, dates, rate) { - var r = rate + 1; - var result = 0; - for (var i = 1; i < values.length; i++) { - var frac = (dates[i] - dates[0]) / 365; - result -= frac * values[i] / Math.pow(r, frac + 1); - } - return result; - }; - - // Initialize dates and check that values contains at least one positive - // value and one negative value - var dates = []; - var positive = false; - var negative = false; - for (var i = 0; i < values.length; i++) { - dates[i] = (i === 0) ? 0 : dates[i - 1] + 365; - if (values[i] > 0) { - positive = true; - } - if (values[i] < 0) { - negative = true; - } - } - - // Return error if values does not contain at least one positive value - // and one negative value - if (!positive || !negative) { - return error.num; - } - - // Initialize guess and resultRate - guess = (guess === undefined) ? 0.1 : guess; - var resultRate = guess; - - // Set maximum epsilon for end of iteration - var epsMax = 1e-10; - - // Implement Newton's method - var newRate, epsRate, resultValue; - var contLoop = true; - do { - resultValue = irrResult(values, dates, resultRate); - newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate); - epsRate = Math.abs(newRate - resultRate); - resultRate = newRate; - contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax); - } while (contLoop); - - // Return internal rate of return - return resultRate; - }; - - exports.ISPMT = function(rate, period, periods, value) { - rate = utils.parseNumber(rate); - period = utils.parseNumber(period); - periods = utils.parseNumber(periods); - value = utils.parseNumber(value); - if (utils.anyIsError(rate, period, periods, value)) { - return error.value; - } - - // Return interest - return value * rate * (period / periods - 1); - }; - - exports.MDURATION = null; - - exports.MIRR = function(values, finance_rate, reinvest_rate) { - values = utils.parseNumberArray(utils.flatten(values)); - finance_rate = utils.parseNumber(finance_rate); - reinvest_rate = utils.parseNumber(reinvest_rate); - if (utils.anyIsError(values, finance_rate, reinvest_rate)) { - return error.value; - } - - // Initialize number of values - var n = values.length; - - // Lookup payments (negative values) and incomes (positive values) - var payments = []; - var incomes = []; - for (var i = 0; i < n; i++) { - if (values[i] < 0) { - payments.push(values[i]); - } else { - incomes.push(values[i]); - } - } - - // Return modified internal rate of return - var num = -exports.NPV(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1); - var den = exports.NPV(finance_rate, payments) * (1 + finance_rate); - return Math.pow(num / den, 1 / (n - 1)) - 1; - }; - - exports.NOMINAL = function(rate, periods) { - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - if (utils.anyIsError(rate, periods)) { - return error.value; - } - - // Return error if rate <=0 or periods < 1 - if (rate <= 0 || periods < 1) { - return error.num; - } - - // Truncate periods if it is not an integer - periods = parseInt(periods, 10); - - // Return nominal annual interest rate - return (Math.pow(rate + 1, 1 / periods) - 1) * periods; - }; - - exports.NPER = function(rate, payment, present, future, type) { - type = (type === undefined) ? 0 : type; - future = (future === undefined) ? 0 : future; - - rate = utils.parseNumber(rate); - payment = utils.parseNumber(payment); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, payment, present, future, type)) { - return error.value; - } - - // Return number of periods - var num = payment * (1 + rate * type) - future * rate; - var den = (present * rate + payment * (1 + rate * type)); - return Math.log(num / den) / Math.log(1 + rate); - }; - - exports.NPV = function() { - var args = utils.parseNumberArray(utils.flatten(arguments)); - if (args instanceof Error) { - return args; - } - - // Lookup rate - var rate = args[0]; - - // Initialize net present value - var value = 0; - - // Loop on all values - for (var j = 1; j < args.length; j++) { - value += args[j] / Math.pow(1 + rate, j); - } - - // Return net present value - return value; - }; - - exports.ODDFPRICE = null; - - exports.ODDFYIELD = null; - - exports.ODDLPRICE = null; - - exports.ODDLYIELD = null; - - exports.PDURATION = function(rate, present, future) { - rate = utils.parseNumber(rate); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - if (utils.anyIsError(rate, present, future)) { - return error.value; - } - - // Return error if rate <=0 - if (rate <= 0) { - return error.num; - } - - // Return number of periods - return (Math.log(future) - Math.log(present)) / Math.log(1 + rate); - }; - - exports.PMT = function(rate, periods, present, future, type) { - // Credits: algorithm inspired by Apache OpenOffice - - future = future || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, periods, present, future, type)) { - return error.value; - } - - // Return payment - var result; - if (rate === 0) { - result = (present + future) / periods; - } else { - var term = Math.pow(1 + rate, periods); - if (type === 1) { - result = (future * rate / (term - 1) + present * rate / (1 - 1 / term)) / (1 + rate); - } else { - result = future * rate / (term - 1) + present * rate / (1 - 1 / term); - } - } - return -result; - }; - - exports.PPMT = function(rate, period, periods, present, future, type) { - future = future || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, periods, present, future, type)) { - return error.value; - } - - return exports.PMT(rate, periods, present, future, type) - exports.IPMT(rate, period, periods, present, future, type); - }; - - exports.PRICE = null; - - exports.PRICEDISC = null; - - exports.PRICEMAT = null; - - exports.PV = function(rate, periods, payment, future, type) { - future = future || 0; - type = type || 0; - - rate = utils.parseNumber(rate); - periods = utils.parseNumber(periods); - payment = utils.parseNumber(payment); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - if (utils.anyIsError(rate, periods, payment, future, type)) { - return error.value; - } - - // Return present value - if (rate === 0) { - return -payment * periods - future; - } else { - return (((1 - Math.pow(1 + rate, periods)) / rate) * payment * (1 + rate * type) - future) / Math.pow(1 + rate, periods); - } - }; - - exports.RATE = function(periods, payment, present, future, type, guess) { - // Credits: rabugento - - guess = (guess === undefined) ? 0.01 : guess; - future = (future === undefined) ? 0 : future; - type = (type === undefined) ? 0 : type; - - periods = utils.parseNumber(periods); - payment = utils.parseNumber(payment); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - type = utils.parseNumber(type); - guess = utils.parseNumber(guess); - if (utils.anyIsError(periods, payment, present, future, type, guess)) { - return error.value; - } - - // Set maximum epsilon for end of iteration - var epsMax = 1e-6; - - // Set maximum number of iterations - var iterMax = 100; - var iter = 0; - var close = false; - var rate = guess; - - while (iter < iterMax && !close) { - var t1 = Math.pow(rate + 1, periods); - var t2 = Math.pow(rate + 1, periods - 1); - - var f1 = future + t1 * present + payment * (t1 - 1) * (rate * type + 1) / rate; - var f2 = periods * t2 * present - payment * (t1 - 1) *(rate * type + 1) / Math.pow(rate,2); - var f3 = periods * payment * t2 * (rate * type + 1) / rate + payment * (t1 - 1) * type / rate; - - var newRate = rate - f1 / (f2 + f3); - - if (Math.abs(newRate - rate) < epsMax) close = true; - iter++ - rate = newRate; - } - - if (!close) return Number.NaN + rate; - return rate; - }; - - // TODO - exports.RECEIVED = null; - - exports.RRI = function(periods, present, future) { - periods = utils.parseNumber(periods); - present = utils.parseNumber(present); - future = utils.parseNumber(future); - if (utils.anyIsError(periods, present, future)) { - return error.value; - } - - // Return error if periods or present is equal to 0 (zero) - if (periods === 0 || present === 0) { - return error.num; - } - - // Return equivalent interest rate - return Math.pow(future / present, 1 / periods) - 1; - }; - - exports.SLN = function(cost, salvage, life) { - cost = utils.parseNumber(cost); - salvage = utils.parseNumber(salvage); - life = utils.parseNumber(life); - if (utils.anyIsError(cost, salvage, life)) { - return error.value; - } - - // Return error if life equal to 0 (zero) - if (life === 0) { - return error.num; - } - - // Return straight-line depreciation - return (cost - salvage) / life; - }; - - exports.SYD = function(cost, salvage, life, period) { - // Return error if any of the parameters is not a number - cost = utils.parseNumber(cost); - salvage = utils.parseNumber(salvage); - life = utils.parseNumber(life); - period = utils.parseNumber(period); - if (utils.anyIsError(cost, salvage, life, period)) { - return error.value; - } - - // Return error if life equal to 0 (zero) - if (life === 0) { - return error.num; - } - - // Return error if period is lower than 1 or greater than life - if (period < 1 || period > life) { - return error.num; - } - - // Truncate period if it is not an integer - period = parseInt(period, 10); - - // Return straight-line depreciation - return ((cost - salvage) * (life - period + 1) * 2) / (life * (life + 1)); - }; - - exports.TBILLEQ = function(settlement, maturity, discount) { - settlement = utils.parseDate(settlement); - maturity = utils.parseDate(maturity); - discount = utils.parseNumber(discount); - if (utils.anyIsError(settlement, maturity, discount)) { - return error.value; - } - - // Return error if discount is lower than or equal to zero - if (discount <= 0) { - return error.num; - } - - // Return error if settlement is greater than maturity - if (settlement > maturity) { - return error.num; - } - - // Return error if maturity is more than one year after settlement - if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { - return error.num; - } - - // Return bond-equivalent yield - return (365 * discount) / (360 - discount * DAYS360(settlement, maturity, false)); - }; - - exports.TBILLPRICE = function(settlement, maturity, discount) { - settlement = utils.parseDate(settlement); - maturity = utils.parseDate(maturity); - discount = utils.parseNumber(discount); - if (utils.anyIsError(settlement, maturity, discount)) { - return error.value; - } - - // Return error if discount is lower than or equal to zero - if (discount <= 0) { - return error.num; - } - - // Return error if settlement is greater than maturity - if (settlement > maturity) { - return error.num; - } - - // Return error if maturity is more than one year after settlement - if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { - return error.num; - } - - // Return bond-equivalent yield - return 100 * (1 - discount * DAYS360(settlement, maturity, false) / 360); - }; - - exports.TBILLYIELD = function(settlement, maturity, price) { - settlement = utils.parseDate(settlement); - maturity = utils.parseDate(maturity); - price = utils.parseNumber(price); - if (utils.anyIsError(settlement, maturity, price)) { - return error.value; - } - - // Return error if price is lower than or equal to zero - if (price <= 0) { - return error.num; - } - - // Return error if settlement is greater than maturity - if (settlement > maturity) { - return error.num; - } - - // Return error if maturity is more than one year after settlement - if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { - return error.num; - } - - // Return bond-equivalent yield - return (100 - price) * 360 / (price * DAYS360(settlement, maturity, false)); - }; - - exports.VDB = null; - - exports.XIRR = function(values, dates, guess) { - // Credits: algorithm inspired by Apache OpenOffice - - values = utils.parseNumberArray(utils.flatten(values)); - dates = utils.parseDateArray(utils.flatten(dates)); - guess = utils.parseNumber(guess); - if (utils.anyIsError(values, dates, guess)) { - return error.value; - } - - // Calculates the resulting amount - var irrResult = function(values, dates, rate) { - var r = rate + 1; - var result = values[0]; - for (var i = 1; i < values.length; i++) { - result += values[i] / Math.pow(r, DAYS(dates[i], dates[0]) / 365); - } - return result; - }; - - // Calculates the first derivation - var irrResultDeriv = function(values, dates, rate) { - var r = rate + 1; - var result = 0; - for (var i = 1; i < values.length; i++) { - var frac = DAYS(dates[i], dates[0]) / 365; - result -= frac * values[i] / Math.pow(r, frac + 1); - } - return result; - }; - - // Check that values contains at least one positive value and one - // negative value - var positive = false; - var negative = false; - for (var i = 0; i < values.length; i++) { - if (values[i] > 0) { - positive = true; - } - if (values[i] < 0) { - negative = true; - } - } - - // Return error if values does not contain at least one positive value - // and one negative value - if (!positive || !negative) { - return error.num; - } - - // Initialize guess and resultRate - guess = guess || 0.1; - var resultRate = guess; - - // Set maximum epsilon for end of iteration - var epsMax = 1e-10; - - // Implement Newton's method - var newRate, epsRate, resultValue; - var contLoop = true; - do { - resultValue = irrResult(values, dates, resultRate); - newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate); - epsRate = Math.abs(newRate - resultRate); - resultRate = newRate; - contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax); - } while (contLoop); - - // Return internal rate of return - return resultRate; - }; - - exports.XNPV = function(rate, values, dates) { - rate = utils.parseNumber(rate); - values = utils.parseNumberArray(utils.flatten(values)); - dates = utils.parseDateArray(utils.flatten(dates)); - if (utils.anyIsError(rate, values, dates)) { - return error.value; - } - - var result = 0; - for (var i = 0; i < values.length; i++) { - result += values[i] / Math.pow(1 + rate, DAYS(dates[i], dates[0]) / 365); - } - return result; - }; - - exports.YIELD = null; - - exports.YIELDDISC = null; - - exports.YIELDMAT = null; - - return exports; -})(); - -jexcel.methods.information = (function() { - var exports = {}; - exports.CELL = null; - - exports.ERROR = {}; - exports.ERROR.TYPE = function(error_val) { - switch (error_val) { - case error.nil: return 1; - case error.div0: return 2; - case error.value: return 3; - case error.ref: return 4; - case error.name: return 5; - case error.num: return 6; - case error.na: return 7; - case error.data: return 8; - } - return error.na; - }; - - exports.INFO = null; - - exports.ISBLANK = function(value) { - return value === null; - }; - - exports.ISBINARY = function (number) { - return (/^[01]{1,10}$/).test(number); - }; - - exports.ISERR = function(value) { - return ([error.value, error.ref, error.div0, error.num, error.name, error.nil]).indexOf(value) >= 0 || - (typeof value === 'number' && (isNaN(value) || !isFinite(value))); - }; - - exports.ISERROR = function(value) { - return exports.ISERR(value) || value === error.na; - }; - - exports.ISEVEN = function(number) { - return (Math.floor(Math.abs(number)) & 1) ? false : true; - }; - - // TODO - exports.ISFORMULA = null; - - exports.ISLOGICAL = function(value) { - return value === true || value === false; - }; - - exports.ISNA = function(value) { - return value === error.na; - }; - - exports.ISNONTEXT = function(value) { - return typeof(value) !== 'string'; - }; - - exports.ISNUMBER = function(value) { - return typeof(value) === 'number' && !isNaN(value) && isFinite(value); - }; - - exports.ISODD = function(number) { - return (Math.floor(Math.abs(number)) & 1) ? true : false; - }; - - exports.ISREF = null; - - exports.ISTEXT = function(value) { - return typeof(value) === 'string'; - }; - - exports.N = function(value) { - if (this.ISNUMBER(value)) { - return value; - } - if (value instanceof Date) { - return value.getTime(); - } - if (value === true) { - return 1; - } - if (value === false) { - return 0; - } - if (this.ISERROR(value)) { - return value; - } - return 0; - }; - - exports.NA = function() { - return error.na; - }; - - exports.SHEET = null; - - exports.SHEETS = null; - - exports.TYPE = function(value) { - if (this.ISNUMBER(value)) { - return 1; - } - if (this.ISTEXT(value)) { - return 2; - } - if (this.ISLOGICAL(value)) { - return 4; - } - if (this.ISERROR(value)) { - return 16; - } - if (Array.isArray(value)) { - return 64; - } - }; - - return exports; -})(); - -jexcel.methods.logical = (function() { - var exports = {}; - - exports.AND = function() { - var args = utils.flatten(arguments); - var result = true; - for (var i = 0; i < args.length; i++) { - if (!args[i]) { - result = false; - } - } - return result; - }; - - exports.CHOOSE = function() { - if (arguments.length < 2) { - return error.na; - } - - var index = arguments[0]; - if (index < 1 || index > 254) { - return error.value; - } - - if (arguments.length < index + 1) { - return error.value; - } - - return arguments[index]; - }; - - exports.FALSE = function() { - return false; - }; - - exports.IF = function(test, then_value, otherwise_value) { - return test ? then_value : otherwise_value; - }; - - exports.IFERROR = function(value, valueIfError) { - if (ISERROR(value)) { - return valueIfError; - } - return value; - }; - - exports.IFNA = function(value, value_if_na) { - return value === error.na ? value_if_na : value; - }; - - exports.NOT = function(logical) { - return !logical; - }; - - exports.OR = function() { - var args = utils.flatten(arguments); - var result = false; - for (var i = 0; i < args.length; i++) { - if (args[i]) { - result = true; - } - } - return result; - }; - - exports.TRUE = function() { - return true; - }; - - exports.XOR = function() { - var args = utils.flatten(arguments); - var result = 0; - for (var i = 0; i < args.length; i++) { - if (args[i]) { - result++; - } - } - return (Math.floor(Math.abs(result)) & 1) ? true : false; - }; - - exports.SWITCH = function() { - var result; - if (arguments.length > 0) { - var targetValue = arguments[0]; - var argc = arguments.length - 1; - var switchCount = Math.floor(argc / 2); - var switchSatisfied = false; - var defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1]; - - if (switchCount) { - for (var index = 0; index < switchCount; index++) { - if (targetValue === arguments[index * 2 + 1]) { - result = arguments[index * 2 + 2]; - switchSatisfied = true; - break; - } - } - } - - if (!switchSatisfied && defaultClause) { - result = defaultClause; - } - } - - return result; - }; - - return exports; -})(); - -jexcel.methods.math = (function() { - var exports = {}; - - exports.ABS = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.abs(utils.parseNumber(number)); - }; - - exports.ACOS = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.acos(number); - }; - - exports.ACOSH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log(number + Math.sqrt(number * number - 1)); - }; - - exports.ACOT = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.atan(1 / number); - }; - - exports.ACOTH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 0.5 * Math.log((number + 1) / (number - 1)); - }; - - exports.AGGREGATE = null - - exports.ARABIC = function(text) { - // Credits: Rafa? Kukawski - if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) { - return error.value; - } - var r = 0; - text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) { - r += { - M: 1000, - CM: 900, - D: 500, - CD: 400, - C: 100, - XC: 90, - L: 50, - XL: 40, - X: 10, - IX: 9, - V: 5, - IV: 4, - I: 1 - }[i]; - }); - return r; - }; - - exports.ASIN = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.asin(number); - }; - - exports.ASINH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log(number + Math.sqrt(number * number + 1)); - }; - - exports.ATAN = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.atan(number); - }; - - exports.ATAN2 = function(number_x, number_y) { - number_x = utils.parseNumber(number_x); - number_y = utils.parseNumber(number_y); - if (utils.anyIsError(number_x, number_y)) { - return error.value; - } - return Math.atan2(number_x, number_y); - }; - - exports.ATANH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log((1 + number) / (1 - number)) / 2; - }; - - exports.BASE = function(number, radix, min_length) { - min_length = min_length || 0; - - number = utils.parseNumber(number); - radix = utils.parseNumber(radix); - min_length = utils.parseNumber(min_length); - if (utils.anyIsError(number, radix, min_length)) { - return error.value; - } - min_length = (min_length === undefined) ? 0 : min_length; - var result = number.toString(radix); - return new Array(Math.max(min_length + 1 - result.length, 0)).join('0') + result; - }; - - exports.CEILING = function(number, significance, mode) { - significance = (significance === undefined) ? 1 : significance; - mode = (mode === undefined) ? 0 : mode; - - number = utils.parseNumber(number); - significance = utils.parseNumber(significance); - mode = utils.parseNumber(mode); - if (utils.anyIsError(number, significance, mode)) { - return error.value; - } - if (significance === 0) { - return 0; - } - - significance = Math.abs(significance); - if (number >= 0) { - return Math.ceil(number / significance) * significance; - } else { - if (mode === 0) { - return -1 * Math.floor(Math.abs(number) / significance) * significance; - } else { - return -1 * Math.ceil(Math.abs(number) / significance) * significance; - } - } - }; - - exports.CEILING.MATH = exports.CEILING; - - exports.CEILING.PRECISE = exports.CEILING; - - exports.COMBIN = function(number, number_chosen) { - number = utils.parseNumber(number); - number_chosen = utils.parseNumber(number_chosen); - if (utils.anyIsError(number, number_chosen)) { - return error.value; - } - return exports.FACT(number) / (exports.FACT(number_chosen) * exports.FACT(number - number_chosen)); - }; - - exports.COMBINA = function(number, number_chosen) { - number = utils.parseNumber(number); - number_chosen = utils.parseNumber(number_chosen); - if (utils.anyIsError(number, number_chosen)) { - return error.value; - } - return (number === 0 && number_chosen === 0) ? 1 : exports.COMBIN(number + number_chosen - 1, number - 1); - }; - - exports.COS = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.cos(number); - }; - - exports.COSH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return (Math.exp(number) + Math.exp(-number)) / 2; - }; - - exports.COT = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 1 / Math.tan(number); - }; - - exports.COTH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var e2 = Math.exp(2 * number); - return (e2 + 1) / (e2 - 1); - }; - - exports.CSC = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 1 / Math.sin(number); - }; - - exports.CSCH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 2 / (Math.exp(number) - Math.exp(-number)); - }; - - exports.DECIMAL = function(number, radix) { - if (arguments.length < 1) { - return error.value; - } - - - return parseInt(number, radix); - }; - - exports.DEGREES = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return number * 180 / Math.PI; - }; - - exports.EVEN = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return exports.CEILING(number, -2, -1); - }; - - exports.EXP = Math.exp; - - var MEMOIZED_FACT = []; - exports.FACT = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var n = Math.floor(number); - if (n === 0 || n === 1) { - return 1; - } else if (MEMOIZED_FACT[n] > 0) { - return MEMOIZED_FACT[n]; - } else { - MEMOIZED_FACT[n] = exports.FACT(n - 1) * n; - return MEMOIZED_FACT[n]; - } - }; - - exports.FACTDOUBLE = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var n = Math.floor(number); - if (n <= 0) { - return 1; - } else { - return n * exports.FACTDOUBLE(n - 2); - } - }; - - exports.FLOOR = function(number, significance, mode) { - significance = (significance === undefined) ? 1 : significance; - mode = (mode === undefined) ? 0 : mode; - - number = utils.parseNumber(number); - significance = utils.parseNumber(significance); - mode = utils.parseNumber(mode); - if (utils.anyIsError(number, significance, mode)) { - return error.value; - } - if (significance === 0) { - return 0; - } - - significance = Math.abs(significance); - if (number >= 0) { - return Math.floor(number / significance) * significance; - } else { - if (mode === 0) { - return -1 * Math.ceil(Math.abs(number) / significance) * significance; - } else { - return -1 * Math.floor(Math.abs(number) / significance) * significance; - } - } - }; - - exports.FLOOR.MATH = exports.FLOOR; - - exports.GCD = null; - - exports.INT = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.floor(number); - }; - - exports.LCM = function() { - // Credits: Jonas Raoni Soares Silva - var o = utils.parseNumberArray(utils.flatten(arguments)); - if (o instanceof Error) { - return o; - } - for (var i, j, n, d, r = 1; - (n = o.pop()) !== undefined;) { - while (n > 1) { - if (n % 2) { - for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) { - // empty - } - d = (i <= j) ? i : n; - } else { - d = 2; - } - for (n /= d, r *= d, i = o.length; i; - (o[--i] % d) === 0 && (o[i] /= d) === 1 && o.splice(i, 1)) { - // empty - } - } - } - return r; - }; - - exports.LN = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log(number); - }; - - exports.LOG = function(number, base) { - number = utils.parseNumber(number); - base = (base === undefined) ? 10 : utils.parseNumber(base); - - if (utils.anyIsError(number, base)) { - return error.value; - } - - return Math.log(number) / Math.log(base); - }; - - exports.LOG10 = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.log(number) / Math.log(10); - }; - - exports.MDETERM = null; - - exports.MINVERSE = null; - - exports.MMULT = null; - - exports.MOD = function(dividend, divisor) { - dividend = utils.parseNumber(dividend); - divisor = utils.parseNumber(divisor); - if (utils.anyIsError(dividend, divisor)) { - return error.value; - } - if (divisor === 0) { - return error.div0; - } - var modulus = Math.abs(dividend % divisor); - return (divisor > 0) ? modulus : -modulus; - }; - - exports.MROUND = function(number, multiple) { - number = utils.parseNumber(number); - multiple = utils.parseNumber(multiple); - if (utils.anyIsError(number, multiple)) { - return error.value; - } - if (number * multiple < 0) { - return error.num; - } - - return Math.round(number / multiple) * multiple; - }; - - exports.MULTINOMIAL = function() { - var args = utils.parseNumberArray(utils.flatten(arguments)); - if (args instanceof Error) { - return args; - } - var sum = 0; - var divisor = 1; - for (var i = 0; i < args.length; i++) { - sum += args[i]; - divisor *= exports.FACT(args[i]); - } - return exports.FACT(sum) / divisor; - }; - - exports.MUNIT = null; - - exports.ODD = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var temp = Math.ceil(Math.abs(number)); - temp = (temp & 1) ? temp : temp + 1; - return (number > 0) ? temp : -temp; - }; - - exports.PI = function() { - return Math.PI; - }; - - exports.POWER = function(number, power) { - number = utils.parseNumber(number); - power = utils.parseNumber(power); - if (utils.anyIsError(number, power)) { - return error.value; - } - var result = Math.pow(number, power); - if (isNaN(result)) { - return error.num; - } - - return result; - }; - - exports.PRODUCT = function() { - var args = utils.parseNumberArray(utils.flatten(arguments)); - if (args instanceof Error) { - return args; - } - var result = 1; - for (var i = 0; i < args.length; i++) { - result *= args[i]; - } - return result; - }; - - exports.QUOTIENT = function(numerator, denominator) { - numerator = utils.parseNumber(numerator); - denominator = utils.parseNumber(denominator); - if (utils.anyIsError(numerator, denominator)) { - return error.value; - } - return parseInt(numerator / denominator, 10); - }; - - exports.RADIANS = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return number * Math.PI / 180; - }; - - exports.RAND = function() { - return Math.random(); - }; - - exports.RANDBETWEEN = function(bottom, top) { - bottom = utils.parseNumber(bottom); - top = utils.parseNumber(top); - if (utils.anyIsError(bottom, top)) { - return error.value; - } - // Creative Commons Attribution 3.0 License - // Copyright (c) 2012 eqcode - return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1; - }; - - exports.ROMAN = null; - - exports.ROUND = function(number, digits) { - number = utils.parseNumber(number); - digits = utils.parseNumber(digits); - if (utils.anyIsError(number, digits)) { - return error.value; - } - return Math.round(number * Math.pow(10, digits)) / Math.pow(10, digits); - }; - - exports.ROUNDDOWN = function(number, digits) { - number = utils.parseNumber(number); - digits = utils.parseNumber(digits); - if (utils.anyIsError(number, digits)) { - return error.value; - } - var sign = (number > 0) ? 1 : -1; - return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits); - }; - - exports.ROUNDUP = function(number, digits) { - number = utils.parseNumber(number); - digits = utils.parseNumber(digits); - if (utils.anyIsError(number, digits)) { - return error.value; - } - var sign = (number > 0) ? 1 : -1; - return sign * (Math.ceil(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits); - }; - - exports.SEC = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 1 / Math.cos(number); - }; - - exports.SECH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return 2 / (Math.exp(number) + Math.exp(-number)); - }; - - exports.SERIESSUM = function(x, n, m, coefficients) { - x = utils.parseNumber(x); - n = utils.parseNumber(n); - m = utils.parseNumber(m); - coefficients = utils.parseNumberArray(coefficients); - if (utils.anyIsError(x, n, m, coefficients)) { - return error.value; - } - var result = coefficients[0] * Math.pow(x, n); - for (var i = 1; i < coefficients.length; i++) { - result += coefficients[i] * Math.pow(x, n + i * m); - } - return result; - }; - - exports.SIGN = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - if (number < 0) { - return -1; - } else if (number === 0) { - return 0; - } else { - return 1; - } - }; - - exports.SIN = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.sin(number); - }; - - exports.SINH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return (Math.exp(number) - Math.exp(-number)) / 2; - }; - - exports.SQRT = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - if (number < 0) { - return error.num; - } - return Math.sqrt(number); - }; - - exports.SQRTPI = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.sqrt(number * Math.PI); - }; - - exports.SUBTOTAL = null; - - exports.ADD = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.value; - } - - return num1 + num2; - }; - - exports.MINUS = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.value; - } - - return num1 - num2; - }; - - exports.DIVIDE = function (dividend, divisor) { - if (arguments.length !== 2) { - return error.na; - } - - dividend = utils.parseNumber(dividend); - divisor = utils.parseNumber(divisor); - if (utils.anyIsError(dividend, divisor)) { - return error.value; - } - - if (divisor === 0) { - return error.div0; - } - - return dividend / divisor; - }; - - exports.MULTIPLY = function (factor1, factor2) { - if (arguments.length !== 2) { - return error.na; - } - - factor1 = utils.parseNumber(factor1); - factor2 = utils.parseNumber(factor2); - if (utils.anyIsError(factor1, factor2)) { - return error.value; - } - - return factor1 * factor2; - }; - - exports.GTE = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.error; - } - - return num1 >= num2; - }; - - exports.LT = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.error; - } - - return num1 < num2; - }; - - exports.LTE = function (num1, num2) { - if (arguments.length !== 2) { - return error.na; - } - - num1 = utils.parseNumber(num1); - num2 = utils.parseNumber(num2); - if (utils.anyIsError(num1, num2)) { - return error.error; - } - - return num1 <= num2; - }; - - exports.EQ = function (value1, value2) { - if (arguments.length !== 2) { - return error.na; - } - - return value1 === value2; - }; - - exports.NE = function (value1, value2) { - if (arguments.length !== 2) { - return error.na; - } - - return value1 !== value2; - }; - - exports.POW = function (base, exponent) { - if (arguments.length !== 2) { - return error.na; - } - - base = utils.parseNumber(base); - exponent = utils.parseNumber(exponent); - if (utils.anyIsError(base, exponent)) { - return error.error; - } - - return exports.POWER(base, exponent); - }; - - exports.SUM = function() { - var result = 0; - var argsKeys = Object.keys(arguments); - for (var i = 0; i < argsKeys.length; ++i) { - var elt = arguments[argsKeys[i]]; - if (typeof elt === 'number') { - result += elt; - } else if (typeof elt === 'string') { - var parsed = parseFloat(elt); - !isNaN(parsed) && (result += parsed); - } else if (Array.isArray(elt)) { - result += exports.SUM.apply(null, elt); - } - } - return result; - }; - - exports.SUMIF = function(range, criteria) { - range = utils.parseNumberArray(utils.flatten(range)); - if (range instanceof Error) { - return range; - } - var result = 0; - for (var i = 0; i < range.length; i++) { - result += (eval(range[i] + criteria)) ? range[i] : 0; // jshint ignore:line - } - return result; - }; - - exports.SUMIFS = function() { - var args = utils.argsToArray(arguments); - var range = utils.parseNumberArray(utils.flatten(args.shift())); - if (range instanceof Error) { - return range; - } - var criteria = args; - - var n_range_elements = range.length; - var n_criterias = criteria.length; - - var result = 0; - for (var i = 0; i < n_range_elements; i++) { - var el = range[i]; - var condition = ''; - for (var c = 0; c < n_criterias; c++) { - condition += el + criteria[c]; - if (c !== n_criterias - 1) { - condition += '&&'; - } - } - if (eval(condition)) { // jshint ignore:line - result += el; - } - } - return result; - }; - - exports.SUMPRODUCT = null; - - exports.SUMSQ = function() { - var numbers = utils.parseNumberArray(utils.flatten(arguments)); - if (numbers instanceof Error) { - return numbers; - } - var result = 0; - var length = numbers.length; - for (var i = 0; i < length; i++) { - result += (ISNUMBER(numbers[i])) ? numbers[i] * numbers[i] : 0; - } - return result; - }; - - exports.SUMX2MY2 = function(array_x, array_y) { - array_x = utils.parseNumberArray(utils.flatten(array_x)); - array_y = utils.parseNumberArray(utils.flatten(array_y)); - if (utils.anyIsError(array_x, array_y)) { - return error.value; - } - var result = 0; - for (var i = 0; i < array_x.length; i++) { - result += array_x[i] * array_x[i] - array_y[i] * array_y[i]; - } - return result; - }; - - exports.SUMX2PY2 = function(array_x, array_y) { - array_x = utils.parseNumberArray(utils.flatten(array_x)); - array_y = utils.parseNumberArray(utils.flatten(array_y)); - if (utils.anyIsError(array_x, array_y)) { - return error.value; - } - var result = 0; - array_x = utils.parseNumberArray(utils.flatten(array_x)); - array_y = utils.parseNumberArray(utils.flatten(array_y)); - for (var i = 0; i < array_x.length; i++) { - result += array_x[i] * array_x[i] + array_y[i] * array_y[i]; - } - return result; - }; - - exports.SUMXMY2 = function(array_x, array_y) { - array_x = utils.parseNumberArray(utils.flatten(array_x)); - array_y = utils.parseNumberArray(utils.flatten(array_y)); - if (utils.anyIsError(array_x, array_y)) { - return error.value; - } - var result = 0; - array_x = utils.flatten(array_x); - array_y = utils.flatten(array_y); - for (var i = 0; i < array_x.length; i++) { - result += Math.pow(array_x[i] - array_y[i], 2); - } - return result; - }; - - exports.TAN = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return Math.tan(number); - }; - - exports.TANH = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - var e2 = Math.exp(2 * number); - return (e2 - 1) / (e2 + 1); - }; - - exports.TRUNC = function(number, digits) { - digits = (digits === undefined) ? 0 : digits; - number = utils.parseNumber(number); - digits = utils.parseNumber(digits); - if (utils.anyIsError(number, digits)) { - return error.value; - } - var sign = (number > 0) ? 1 : -1; - return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits); - }; - - return exports; -})(); - -jexcel.methods.misc = (function() { - var exports = {}; - - exports.UNIQUE = function () { - var result = []; - for (var i = 0; i < arguments.length; ++i) { - var hasElement = false; - var element = arguments[i]; - - // Check if we've already seen this element. - for (var j = 0; j < result.length; ++j) { - hasElement = result[j] === element; - if (hasElement) { break; } - } - - // If we did not find it, add it to the result. - if (!hasElement) { - result.push(element); - } - } - return result; - }; - - exports.FLATTEN = utils.flatten; - - exports.ARGS2ARRAY = function () { - return Array.prototype.slice.call(arguments, 0); - }; - - exports.REFERENCE = function (context, reference) { - try { - var path = reference.split('.'); - var result = context; - for (var i = 0; i < path.length; ++i) { - var step = path[i]; - if (step[step.length - 1] === ']') { - var opening = step.indexOf('['); - var index = step.substring(opening + 1, step.length - 1); - result = result[step.substring(0, opening)][index]; - } else { - result = result[step]; - } - } - return result; - } catch (error) {} - }; - - exports.JOIN = function (array, separator) { - return array.join(separator); - }; - - exports.NUMBERS = function () { - var possibleNumbers = utils.flatten(arguments); - return possibleNumbers.filter(function (el) { - return typeof el === 'number'; - }); - }; - - exports.NUMERAL = null; - - return exports; -})(); - -jexcel.methods.text = (function() { - var exports = {}; - - exports.ASC = null; - - exports.BAHTTEXT = null; - - exports.CHAR = function(number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return String.fromCharCode(number); - }; - - exports.CLEAN = function(text) { - text = text || ''; - var re = /[\0-\x1F]/g; - return text.replace(re, ""); - }; - - exports.CODE = function(text) { - text = text || ''; - return text.charCodeAt(0); - }; - - exports.CONCATENATE = function() { - var args = utils.flatten(arguments); - - var trueFound = 0; - while ((trueFound = args.indexOf(true)) > -1) { - args[trueFound] = 'TRUE'; - } - - var falseFound = 0; - while ((falseFound = args.indexOf(false)) > -1) { - args[falseFound] = 'FALSE'; - } - - return args.join(''); - }; - - exports.DBCS = null; - - exports.DOLLAR = null; - - exports.EXACT = function(text1, text2) { - return text1 === text2; - }; - - exports.FIND = function(find_text, within_text, position) { - position = (position === undefined) ? 0 : position; - return within_text ? within_text.indexOf(find_text, position - 1) + 1 : null; - }; - - exports.FIXED = null; - - exports.HTML2TEXT = function (value) { - var result = ''; - - if (value) { - if (value instanceof Array) { - value.forEach(function (line) { - if (result !== '') { - result += '\n'; - } - result += (line.replace(/<(?:.|\n)*?>/gm, '')); - }); - } else { - result = value.replace(/<(?:.|\n)*?>/gm, ''); - } - } - - return result; - }; - - exports.LEFT = function(text, number) { - number = (number === undefined) ? 1 : number; - number = utils.parseNumber(number); - if (number instanceof Error || typeof text !== 'string') { - return error.value; - } - return text ? text.substring(0, number) : null; - }; - - exports.LEN = function(text) { - if (arguments.length === 0) { - return error.error; - } - - if (typeof text === 'string') { - return text ? text.length : 0; - } - - if (text.length) { - return text.length; - } - - return error.value; - }; - - exports.LOWER = function(text) { - if (typeof text !== 'string') { - return error.value; - } - return text ? text.toLowerCase() : text; - }; - - exports.MID = function(text, start, number) { - start = utils.parseNumber(start); - number = utils.parseNumber(number); - if (utils.anyIsError(start, number) || typeof text !== 'string') { - return number; - } - - var begin = start - 1; - var end = begin + number; - - return text.substring(begin, end); - }; - - exports.NUMBERVALUE = null; - - exports.PRONETIC = null; - - exports.PROPER = function(text) { - if (text === undefined || text.length === 0) { - return error.value; - } - if (text === true) { - text = 'TRUE'; - } - if (text === false) { - text = 'FALSE'; - } - if (isNaN(text) && typeof text === 'number') { - return error.value; - } - if (typeof text === 'number') { - text = '' + text; - } - - return text.replace(/\w\S*/g, function(txt) { - return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); - }); - }; - - exports.REGEXEXTRACT = function (text, regular_expression) { - var match = text.match(new RegExp(regular_expression)); - return match ? (match[match.length > 1 ? match.length - 1 : 0]) : null; - }; - - exports.REGEXMATCH = function (text, regular_expression, full) { - var match = text.match(new RegExp(regular_expression)); - return full ? match : !!match; - }; - - exports.REGEXREPLACE = function (text, regular_expression, replacement) { - return text.replace(new RegExp(regular_expression), replacement); - }; - - exports.REPLACE = function(text, position, length, new_text) { - position = utils.parseNumber(position); - length = utils.parseNumber(length); - if (utils.anyIsError(position, length) || - typeof text !== 'string' || - typeof new_text !== 'string') { - return error.value; - } - return text.substr(0, position - 1) + new_text + text.substr(position - 1 + length); - }; - - exports.REPT = function(text, number) { - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return new Array(number + 1).join(text); - }; - - exports.RIGHT = function(text, number) { - number = (number === undefined) ? 1 : number; - number = utils.parseNumber(number); - if (number instanceof Error) { - return number; - } - return text ? text.substring(text.length - number) : null; - }; - - exports.SEARCH = function(find_text, within_text, position) { - var foundAt; - if (typeof find_text !== 'string' || typeof within_text !== 'string') { - return error.value; - } - position = (position === undefined) ? 0 : position; - foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), position - 1)+1; - return (foundAt === 0)?error.value:foundAt; - }; - - exports.SPLIT = function (text, separator) { - return text.split(separator); - }; - - exports.SUBSTITUTE = function(text, old_text, new_text, occurrence) { - if (!text || !old_text || !new_text) { - return text; - } else if (occurrence === undefined) { - return text.replace(new RegExp(old_text, 'g'), new_text); - } else { - var index = 0; - var i = 0; - while (text.indexOf(old_text, index) > 0) { - index = text.indexOf(old_text, index + 1); - i++; - if (i === occurrence) { - return text.substring(0, index) + new_text + text.substring(index + old_text.length); - } - } - } - }; - - exports.T = function(value) { - return (typeof value === "string") ? value : ''; - }; - - exports.TEXT = null; - - exports.TRIM = function(text) { - if (typeof text !== 'string') { - return error.value; - } - return text.replace(/ +/g, ' ').trim(); - }; - - exports.UNICHAR = exports.CHAR; - - exports.UNICODE = exports.CODE; - - exports.UPPER = function(text) { - if (typeof text !== 'string') { - return error.value; - } - return text.toUpperCase(); - }; - - exports.VALUE = null; - - return exports; -})(); - -jexcel.methods.stats = (function() { - var exports = {}; - - var SQRT2PI = 2.5066282746310002; - - exports.AVEDEV = null; - - exports.AVERAGE = function() { - var range = utils.numbers(utils.flatten(arguments)); - var n = range.length; - var sum = 0; - var count = 0; - for (var i = 0; i < n; i++) { - sum += range[i]; - count += 1; - } - return sum / count; - }; - - exports.AVERAGEA = function() { - var range = utils.flatten(arguments); - var n = range.length; - var sum = 0; - var count = 0; - for (var i = 0; i < n; i++) { - var el = range[i]; - if (typeof el === 'number') { - sum += el; - } - if (el === true) { - sum++; - } - if (el !== null) { - count++; - } - } - return sum / count; - }; - - exports.AVERAGEIF = function(range, criteria, average_range) { - average_range = average_range || range; - range = utils.flatten(range); - average_range = utils.parseNumberArray(utils.flatten(average_range)); - if (average_range instanceof Error) { - return average_range; - } - var average_count = 0; - var result = 0; - for (var i = 0; i < range.length; i++) { - if (eval(range[i] + criteria)) { // jshint ignore:line - result += average_range[i]; - average_count++; - } - } - return result / average_count; - }; - - exports.AVERAGEIFS = null; - - exports.COUNT = function() { - return utils.numbers(utils.flatten(arguments)).length; - }; - - exports.COUNTA = function() { - var range = utils.flatten(arguments); - return range.length - exports.COUNTBLANK(range); - }; - - exports.COUNTIN = function (range, value) { - var result = 0; - for (var i = 0; i < range.length; i++) { - if (range[i] === value) { - result++; - } - } - return result; - }; - - exports.COUNTBLANK = function() { - var range = utils.flatten(arguments); - var blanks = 0; - var element; - for (var i = 0; i < range.length; i++) { - element = range[i]; - if (element === null || element === '') { - blanks++; - } - } - return blanks; - }; - - exports.COUNTIF = function(range, criteria) { - range = utils.flatten(range); - if (!/[<>=!]/.test(criteria)) { - criteria = '=="' + criteria + '"'; - } - var matches = 0; - for (var i = 0; i < range.length; i++) { - if (typeof range[i] !== 'string') { - if (eval(range[i] + criteria)) { // jshint ignore:line - matches++; - } - } else { - if (eval('"' + range[i] + '"' + criteria)) { // jshint ignore:line - matches++; - } - } - } - return matches; - }; - - exports.COUNTIFS = function() { - var args = utils.argsToArray(arguments); - var results = new Array(utils.flatten(args[0]).length); - for (var i = 0; i < results.length; i++) { - results[i] = true; - } - for (i = 0; i < args.length; i += 2) { - var range = utils.flatten(args[i]); - var criteria = args[i + 1]; - if (!/[<>=!]/.test(criteria)) { - criteria = '=="' + criteria + '"'; - } - for (var j = 0; j < range.length; j++) { - if (typeof range[j] !== 'string') { - results[j] = results[j] && eval(range[j] + criteria); // jshint ignore:line - } else { - results[j] = results[j] && eval('"' + range[j] + '"' + criteria); // jshint ignore:line - } - } - } - var result = 0; - for (i = 0; i < results.length; i++) { - if (results[i]) { - result++; - } - } - return result; - }; - - exports.COUNTUNIQUE = function () { - return UNIQUE.apply(null, utils.flatten(arguments)).length; - }; - - exports.FISHER = function(x) { - x = utils.parseNumber(x); - if (x instanceof Error) { - return x; - } - return Math.log((1 + x) / (1 - x)) / 2; - }; - - exports.FISHERINV = function(y) { - y = utils.parseNumber(y); - if (y instanceof Error) { - return y; - } - var e2y = Math.exp(2 * y); - return (e2y - 1) / (e2y + 1); - }; - - exports.FREQUENCY = function(data, bins) { - data = utils.parseNumberArray(utils.flatten(data)); - bins = utils.parseNumberArray(utils.flatten(bins)); - if (utils.anyIsError(data, bins)) { - return error.value; - } - var n = data.length; - var b = bins.length; - var r = []; - for (var i = 0; i <= b; i++) { - r[i] = 0; - for (var j = 0; j < n; j++) { - if (i === 0) { - if (data[j] <= bins[0]) { - r[0] += 1; - } - } else if (i < b) { - if (data[j] > bins[i - 1] && data[j] <= bins[i]) { - r[i] += 1; - } - } else if (i === b) { - if (data[j] > bins[b - 1]) { - r[b] += 1; - } - } - } - } - return r; - }; - - exports.LARGE = function(range, k) { - range = utils.parseNumberArray(utils.flatten(range)); - k = utils.parseNumber(k); - if (utils.anyIsError(range, k)) { - return range; - } - return range.sort(function(a, b) { - return b - a; - })[k - 1]; - }; - - exports.MAX = function() { - var range = utils.numbers(utils.flatten(arguments)); - return (range.length === 0) ? 0 : Math.max.apply(Math, range); - }; - - exports.MAXA = function() { - var range = utils.arrayValuesToNumbers(utils.flatten(arguments)); - return (range.length === 0) ? 0 : Math.max.apply(Math, range); - }; - - exports.MIN = function() { - var range = utils.numbers(utils.flatten(arguments)); - return (range.length === 0) ? 0 : Math.min.apply(Math, range); - }; - - exports.MINA = function() { - var range = utils.arrayValuesToNumbers(utils.flatten(arguments)); - return (range.length === 0) ? 0 : Math.min.apply(Math, range); - }; - - exports.MODE = {}; - - exports.MODE.MULT = function() { - // Credits: Roönaän - var range = utils.parseNumberArray(utils.flatten(arguments)); - if (range instanceof Error) { - return range; - } - var n = range.length; - var count = {}; - var maxItems = []; - var max = 0; - var currentItem; - - for (var i = 0; i < n; i++) { - currentItem = range[i]; - count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1; - if (count[currentItem] > max) { - max = count[currentItem]; - maxItems = []; - } - if (count[currentItem] === max) { - maxItems[maxItems.length] = currentItem; - } - } - return maxItems; - }; - - exports.MODE.SNGL = function() { - var range = utils.parseNumberArray(utils.flatten(arguments)); - if (range instanceof Error) { - return range; - } - return exports.MODE.MULT(range).sort(function(a, b) { - return a - b; - })[0]; - }; - - exports.PERCENTILE = {}; - - exports.PERCENTILE.EXC = function(array, k) { - array = utils.parseNumberArray(utils.flatten(array)); - k = utils.parseNumber(k); - if (utils.anyIsError(array, k)) { - return error.value; - } - array = array.sort(function(a, b) { - { - return a - b; - } - }); - var n = array.length; - if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) { - return error.num; - } - var l = k * (n + 1) - 1; - var fl = Math.floor(l); - return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl])); - }; - - exports.PERCENTILE.INC = function(array, k) { - array = utils.parseNumberArray(utils.flatten(array)); - k = utils.parseNumber(k); - if (utils.anyIsError(array, k)) { - return error.value; - } - array = array.sort(function(a, b) { - return a - b; - }); - var n = array.length; - var l = k * (n - 1); - var fl = Math.floor(l); - return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl])); - }; - - exports.PERCENTRANK = {}; - - exports.PERCENTRANK.EXC = function(array, x, significance) { - significance = (significance === undefined) ? 3 : significance; - array = utils.parseNumberArray(utils.flatten(array)); - x = utils.parseNumber(x); - significance = utils.parseNumber(significance); - if (utils.anyIsError(array, x, significance)) { - return error.value; - } - array = array.sort(function(a, b) { - return a - b; - }); - var uniques = UNIQUE.apply(null, array); - var n = array.length; - var m = uniques.length; - var power = Math.pow(10, significance); - var result = 0; - var match = false; - var i = 0; - while (!match && i < m) { - if (x === uniques[i]) { - result = (array.indexOf(uniques[i]) + 1) / (n + 1); - match = true; - } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) { - result = (array.indexOf(uniques[i]) + 1 + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n + 1); - match = true; - } - i++; - } - return Math.floor(result * power) / power; - }; - - exports.PERCENTRANK.INC = function(array, x, significance) { - significance = (significance === undefined) ? 3 : significance; - array = utils.parseNumberArray(utils.flatten(array)); - x = utils.parseNumber(x); - significance = utils.parseNumber(significance); - if (utils.anyIsError(array, x, significance)) { - return error.value; - } - array = array.sort(function(a, b) { - return a - b; - }); - var uniques = UNIQUE.apply(null, array); - var n = array.length; - var m = uniques.length; - var power = Math.pow(10, significance); - var result = 0; - var match = false; - var i = 0; - while (!match && i < m) { - if (x === uniques[i]) { - result = array.indexOf(uniques[i]) / (n - 1); - match = true; - } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) { - result = (array.indexOf(uniques[i]) + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n - 1); - match = true; - } - i++; - } - return Math.floor(result * power) / power; - }; - - exports.PERMUT = function(number, number_chosen) { - number = utils.parseNumber(number); - number_chosen = utils.parseNumber(number_chosen); - if (utils.anyIsError(number, number_chosen)) { - return error.value; - } - return FACT(number) / FACT(number - number_chosen); - }; - - exports.PERMUTATIONA = function(number, number_chosen) { - number = utils.parseNumber(number); - number_chosen = utils.parseNumber(number_chosen); - if (utils.anyIsError(number, number_chosen)) { - return error.value; - } - return Math.pow(number, number_chosen); - }; - - exports.PHI = function(x) { - x = utils.parseNumber(x); - if (x instanceof Error) { - return error.value; - } - return Math.exp(-0.5 * x * x) / SQRT2PI; - }; - - exports.PROB = function(range, probability, lower, upper) { - if (lower === undefined) { - return 0; - } - upper = (upper === undefined) ? lower : upper; - - range = utils.parseNumberArray(utils.flatten(range)); - probability = utils.parseNumberArray(utils.flatten(probability)); - lower = utils.parseNumber(lower); - upper = utils.parseNumber(upper); - if (utils.anyIsError(range, probability, lower, upper)) { - return error.value; - } - - if (lower === upper) { - return (range.indexOf(lower) >= 0) ? probability[range.indexOf(lower)] : 0; - } - - var sorted = range.sort(function(a, b) { - return a - b; - }); - var n = sorted.length; - var result = 0; - for (var i = 0; i < n; i++) { - if (sorted[i] >= lower && sorted[i] <= upper) { - result += probability[range.indexOf(sorted[i])]; - } - } - return result; - }; - - exports.QUARTILE = {}; - - exports.QUARTILE.EXC = function(range, quart) { - range = utils.parseNumberArray(utils.flatten(range)); - quart = utils.parseNumber(quart); - if (utils.anyIsError(range, quart)) { - return error.value; - } - switch (quart) { - case 1: - return exports.PERCENTILE.EXC(range, 0.25); - case 2: - return exports.PERCENTILE.EXC(range, 0.5); - case 3: - return exports.PERCENTILE.EXC(range, 0.75); - default: - return error.num; - } - }; - - exports.QUARTILE.INC = function(range, quart) { - range = utils.parseNumberArray(utils.flatten(range)); - quart = utils.parseNumber(quart); - if (utils.anyIsError(range, quart)) { - return error.value; - } - switch (quart) { - case 1: - return exports.PERCENTILE.INC(range, 0.25); - case 2: - return exports.PERCENTILE.INC(range, 0.5); - case 3: - return exports.PERCENTILE.INC(range, 0.75); - default: - return error.num; - } - }; - - exports.RANK = {}; - - exports.RANK.AVG = function(number, range, order) { - number = utils.parseNumber(number); - range = utils.parseNumberArray(utils.flatten(range)); - if (utils.anyIsError(number, range)) { - return error.value; - } - range = utils.flatten(range); - order = order || false; - var sort = (order) ? function(a, b) { - return a - b; - } : function(a, b) { - return b - a; - }; - range = range.sort(sort); - - var length = range.length; - var count = 0; - for (var i = 0; i < length; i++) { - if (range[i] === number) { - count++; - } - } - - return (count > 1) ? (2 * range.indexOf(number) + count + 1) / 2 : range.indexOf(number) + 1; - }; - - exports.RANK.EQ = function(number, range, order) { - number = utils.parseNumber(number); - range = utils.parseNumberArray(utils.flatten(range)); - if (utils.anyIsError(number, range)) { - return error.value; - } - order = order || false; - var sort = (order) ? function(a, b) { - return a - b; - } : function(a, b) { - return b - a; - }; - range = range.sort(sort); - return range.indexOf(number) + 1; - }; - - exports.RSQ = function(data_x, data_y) { // no need to flatten here, PEARSON will take care of that - data_x = utils.parseNumberArray(utils.flatten(data_x)); - data_y = utils.parseNumberArray(utils.flatten(data_y)); - if (utils.anyIsError(data_x, data_y)) { - return error.value; - } - return Math.pow(exports.PEARSON(data_x, data_y), 2); - }; - - exports.SMALL = function(range, k) { - range = utils.parseNumberArray(utils.flatten(range)); - k = utils.parseNumber(k); - if (utils.anyIsError(range, k)) { - return range; - } - return range.sort(function(a, b) { - return a - b; - })[k - 1]; - }; - - exports.STANDARDIZE = function(x, mean, sd) { - x = utils.parseNumber(x); - mean = utils.parseNumber(mean); - sd = utils.parseNumber(sd); - if (utils.anyIsError(x, mean, sd)) { - return error.value; - } - return (x - mean) / sd; - }; - - exports.STDEV = {}; - - exports.STDEV.P = function() { - var v = exports.VAR.P.apply(this, arguments); - return Math.sqrt(v); - }; - - exports.STDEV.S = function() { - var v = exports.VAR.S.apply(this, arguments); - return Math.sqrt(v); - }; - - exports.STDEVA = function() { - var v = exports.VARA.apply(this, arguments); - return Math.sqrt(v); - }; - - exports.STDEVPA = function() { - var v = exports.VARPA.apply(this, arguments); - return Math.sqrt(v); - }; - - exports.VAR = {}; - - exports.VAR.P = function() { - var range = utils.numbers(utils.flatten(arguments)); - var n = range.length; - var sigma = 0; - var mean = exports.AVERAGE(range); - for (var i = 0; i < n; i++) { - sigma += Math.pow(range[i] - mean, 2); - } - return sigma / n; - }; - - exports.VAR.S = function() { - var range = utils.numbers(utils.flatten(arguments)); - var n = range.length; - var sigma = 0; - var mean = exports.AVERAGE(range); - for (var i = 0; i < n; i++) { - sigma += Math.pow(range[i] - mean, 2); - } - return sigma / (n - 1); - }; - - exports.VARA = function() { - var range = utils.flatten(arguments); - var n = range.length; - var sigma = 0; - var count = 0; - var mean = exports.AVERAGEA(range); - for (var i = 0; i < n; i++) { - var el = range[i]; - if (typeof el === 'number') { - sigma += Math.pow(el - mean, 2); - } else if (el === true) { - sigma += Math.pow(1 - mean, 2); - } else { - sigma += Math.pow(0 - mean, 2); - } - - if (el !== null) { - count++; - } - } - return sigma / (count - 1); - }; - - exports.VARPA = function() { - var range = utils.flatten(arguments); - var n = range.length; - var sigma = 0; - var count = 0; - var mean = exports.AVERAGEA(range); - for (var i = 0; i < n; i++) { - var el = range[i]; - if (typeof el === 'number') { - sigma += Math.pow(el - mean, 2); - } else if (el === true) { - sigma += Math.pow(1 - mean, 2); - } else { - sigma += Math.pow(0 - mean, 2); - } - - if (el !== null) { - count++; - } - } - return sigma / count; - }; - - exports.WEIBULL = {}; - - exports.WEIBULL.DIST = function(x, alpha, beta, cumulative) { - x = utils.parseNumber(x); - alpha = utils.parseNumber(alpha); - beta = utils.parseNumber(beta); - if (utils.anyIsError(x, alpha, beta)) { - return error.value; - } - return (cumulative) ? 1 - Math.exp(-Math.pow(x / beta, alpha)) : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha); - }; - - exports.Z = {}; - - exports.Z.TEST = function(range, x, sd) { - range = utils.parseNumberArray(utils.flatten(range)); - x = utils.parseNumber(x); - if (utils.anyIsError(range, x)) { - return error.value; - } - - sd = sd || exports.STDEV.S(range); - var n = range.length; - return 1 - exports.NORM.S.DIST((exports.AVERAGE(range) - x) / (sd / Math.sqrt(n)), true); - }; - - return exports; -})(); - -for (var i = 0; i < Object.keys(jexcel.methods).length; i++) { - var methods = jexcel.methods[Object.keys(jexcel.methods)[i]]; - for (var j = 0; j < Object.keys(methods).length; j++) { - if (typeof(methods[Object.keys(methods)[j]]) == 'function') { - window[Object.keys(methods)[j]] = methods[Object.keys(methods)[j]]; - } else { - window[Object.keys(methods)[j]] = function() { - return Object.keys(methods)[j] + 'Not implemented'; - } - } - } -} - -if (typeof exports === 'object' && typeof module !== 'undefined') { - module.exports = jexcel; -} +/** + * (c) jExcel v3.6.1 + * + * Author: Paul Hodel <paul.hodel@gmail.com> + * Website: https://bossanova.uk/jexcel/ + * Description: Create amazing web based spreadsheets. + * + * This software is distribute under MIT License + * + * ROADMAP: + * Frozen columns + * Meta information + */ + +'use strict'; + +if (! jSuites && typeof(require) === 'function') { + var jSuites = require('jsuites'); + require('jsuites/dist/jsuites.css'); +} + +var jexcel = (function(el, options) { + // Create jexcel object + var obj = {}; + obj.options = {}; + + // Loading default configuration + var defaults = { + // External data + url:null, + // Data + data:null, + // Copy behavior + copyCompatibility:false, + // Rows and columns definitions + rows:[], + columns:[], + // Deprected legacy options + colHeaders:[], + colWidths:[], + colAlignments:[], + nestedHeaders:null, + // Column width that is used by default + defaultColWidth:50, + defaultColAlign:'center', + // Spare rows and columns + minSpareRows:0, + minSpareCols:0, + // Minimal table dimensions + minDimensions:[0,0], + // Allow Export + allowExport:true, + // Allow column sorting + columnSorting:true, + // Allow column dragging + columnDrag:false, + // Allow column resizing + columnResize:true, + // Allow row resizing + rowResize:false, + // Allow row dragging + rowDrag:true, + // Allow table edition + editable:true, + // Allow new rows + allowInsertRow:true, + // Allow new rows + allowManualInsertRow:true, + // Allow new columns + allowInsertColumn:true, + // Allow new rows + allowManualInsertColumn:true, + // Allow row delete + allowDeleteRow:true, + // Allow deleting of all rows + allowDeletingAllRows:false, + // Allow column delete + allowDeleteColumn:true, + // Allow rename column + allowRenameColumn:true, + // Allow comments + allowComments:false, + // Global wrap + wordWrap:false, + // Image options + imageOptions: null, + // CSV source + csv:null, + // Filename + csvFileName:'jexcel', + // Consider first line as header + csvHeaders:true, + // Delimiters + csvDelimiter:',', + // Disable corner selection + selectionCopy:true, + // Merged cells + mergeCells:{}, + // Create toolbar + toolbar:null, + // Allow search + search:false, + // Create pagination + pagination:false, + paginationOptions:null, + // Full screen + fullscreen:false, + // Lazy loading + lazyLoading:false, + loadingSpin:false, + // Table overflow + tableOverflow:false, + tableHeight:'300px', + tableWidth:null, + // Meta + meta: null, + // Style + style:null, + // Execute formulas + parseFormulas:true, + autoIncrement:true, + // Event handles + onundo:null, + onredo:null, + onload:null, + onchange:null, + onbeforechange:null, + onafterchanges:null, + onbeforeinsertrow: null, + oninsertrow:null, + onbeforeinsertcolumn: null, + oninsertcolumn:null, + onbeforedeleterow:null, + ondeleterow:null, + onbeforedeletecolumn:null, + ondeletecolumn:null, + onmoverow:null, + onmovecolumn:null, + onresizerow:null, + onresizecolumn:null, + onsort:null, + onselection:null, + onpaste:null, + onbeforepaste:null, + onmerge:null, + onfocus:null, + onblur:null, + onchangeheader:null, + oneditionstart:null, + oneditionend:null, + onchangestyle:null, + onchangemeta:null, + // Customize any cell behavior + updateTable:null, + // Texts + text:{ + noRecordsFound: 'No records found', + showingPage: 'Showing page {0} of {1} entries', + show: 'Show ', + search: 'Search', + entries: ' entries', + columnName: 'Column name', + insertANewColumnBefore: 'Insert a new column before', + insertANewColumnAfter: 'Insert a new column after', + deleteSelectedColumns: 'Delete selected columns', + renameThisColumn: 'Rename this column', + orderAscending: 'Order ascending', + orderDescending: 'Order descending', + insertANewRowBefore: 'Insert a new row before', + insertANewRowAfter: 'Insert a new row after', + deleteSelectedRows: 'Delete selected rows', + editComments: 'Edit comments', + addComments: 'Add comments', + comments: 'Comments', + clearComments: 'Clear comments', + copy: 'Copy...', + paste: 'Paste...', + saveAs: 'Save as...', + about: 'About', + areYouSureToDeleteTheSelectedRows: 'Are you sure to delete the selected rows?', + areYouSureToDeleteTheSelectedColumns: 'Are you sure to delete the selected columns?', + thisActionWillDestroyAnyExistingMergedCellsAreYouSure: 'This action will destroy any existing merged cells. Are you sure?', + thisActionWillClearYourSearchResultsAreYouSure: 'This action will clear your search results. Are you sure?', + thereIsAConflictWithAnotherMergedCell: 'There is a conflict with another merged cell', + invalidMergeProperties: 'Invalid merged properties', + cellAlreadyMerged: 'Cell already merged', + noCellsSelected: 'No cells selected', + }, + // About message + about:"jExcel CE Spreadsheet\nVersion 3.6.1\nAuthor: Paul Hodel <paul.hodel@gmail.com>\nWebsite: https://bossanova.uk/jexcel/v3", + }; + + // Loading initial configuration from user + for (var property in defaults) { + if (options && options.hasOwnProperty(property)) { + obj.options[property] = (property == 'text') ? Object.assign(defaults[property], options[property]) : options[property]; + } else { + obj.options[property] = defaults[property]; + } + } + + // Global elements + obj.el = el; + obj.corner = null; + obj.contextMenu = null; + obj.textarea = null; + obj.ads = null; + obj.content = null; + obj.table = null; + obj.thead = null; + obj.tbody = null; + obj.rows = []; + obj.results = null; + obj.searchInput = null; + obj.toolbar = null; + obj.pagination = null; + obj.pageNumber = null; + obj.headerContainer = null; + obj.colgroupContainer = null; + + // Containers + obj.headers = []; + obj.records = []; + obj.history = []; + obj.formula = []; + obj.colgroup = []; + obj.selection = []; + obj.highlighted = []; + obj.selectedCell = null; + obj.selectedContainer = null; + obj.style = []; + obj.data = null; + + // Internal controllers + obj.cursor = null; + obj.historyIndex = -1; + obj.ignoreEvents = false; + obj.ignoreHistory = false; + obj.edition = null; + obj.hashString = null; + obj.resizing = null; + obj.dragging = null; + + // Lazy loading + if (obj.options.lazyLoading == true && (obj.options.tableOverflow == false && obj.options.fullscreen == false)) { + console.error('JEXCEL: The lazyloading only works when tableOverflow = yes or fullscreen = yes'); + obj.options.lazyLoading = false; + } + + /** + * Activate/Disable fullscreen + * use programmatically : table.fullscreen(); or table.fullscreen(true); or table.fullscreen(false); + * @Param {boolean} activate + */ + obj.fullscreen = function(activate) { + // If activate not defined, get reverse options.fullscreen + if (activate == null) { + activate = ! obj.options.fullscreen; + } + + // If change + if (obj.options.fullscreen != activate) { + obj.options.fullscreen = activate; + + // Test LazyLoading conflict + if (activate == true) { + el.classList.add('fullscreen'); + } else { + el.classList.remove('fullscreen'); + } + } + } + + /** + * Prepare the jexcel table + * + * @Param config + */ + obj.prepareTable = function() { + // Loading initial data from remote sources + var results = []; + + // Number of columns + var size = obj.options.columns.length; + + if (obj.options.data && typeof(obj.options.data[0]) !== 'undefined') { + // Data keys + var keys = Object.keys(obj.options.data[0]); + + if (keys.length > size) { + size = keys.length; + } + } + + // Minimal dimensions + if (obj.options.minDimensions[0] > size) { + size = obj.options.minDimensions[0]; + } + + // Requests + var multiple = []; + + // Preparations + for (var i = 0; i < size; i++) { + // Deprected options. You should use only columns + if (! obj.options.colHeaders[i]) { + obj.options.colHeaders[i] = ''; + } + if (! obj.options.colWidths[i]) { + obj.options.colWidths[i] = obj.options.defaultColWidth; + } + if (! obj.options.colAlignments[i]) { + obj.options.colAlignments[i] = obj.options.defaultColAlign; + } + + // Default column description + if (! obj.options.columns[i]) { + obj.options.columns[i] = { type:'text' }; + } else if (! obj.options.columns[i].type) { + obj.options.columns[i].type = 'text'; + } + if (! obj.options.columns[i].name) { + obj.options.columns[i].name = keys && keys[i] ? keys[i] : i; + } + if (! obj.options.columns[i].source) { + obj.options.columns[i].source = []; + } + if (! obj.options.columns[i].options) { + obj.options.columns[i].options = []; + } + if (! obj.options.columns[i].editor) { + obj.options.columns[i].editor = null; + } + if (! obj.options.columns[i].allowEmpty) { + obj.options.columns[i].allowEmpty = false; + } + if (! obj.options.columns[i].title) { + obj.options.columns[i].title = obj.options.colHeaders[i] ? obj.options.colHeaders[i] : ''; + } + if (! obj.options.columns[i].width) { + obj.options.columns[i].width = obj.options.colWidths[i] ? obj.options.colWidths[i] : '50'; + } + if (! obj.options.columns[i].align) { + obj.options.columns[i].align = obj.options.colAlignments[i] ? obj.options.colAlignments[i] : 'center'; + } + + // Pre-load initial source for json autocomplete + if (obj.options.columns[i].type == 'autocomplete' || obj.options.columns[i].type == 'dropdown') { + // if remote content + if (obj.options.columns[i].url) { + multiple.push(jSuites.ajax({ + url: obj.options.columns[i].url, + index: i, + method: 'GET', + dataType: 'json', + multiple: multiple, + success: function(data) { + var source = []; + for (var i = 0; i < data.length; i++) { + obj.options.columns[this.index].source.push(data[i]); + } + }, + complete: function() { + obj.createTable(); + } + })); + } + } else if (obj.options.columns[i].type == 'calendar') { + // Default format for date columns + if (! obj.options.columns[i].options.format) { + obj.options.columns[i].options.format = 'DD/MM/YYYY'; + } + } + } + + // On complete + if (! multiple.length) { + obj.createTable(); + } + } + + obj.createTable = function() { + // Elements + obj.table = document.createElement('table'); + obj.thead = document.createElement('thead'); + obj.tbody = document.createElement('tbody'); + + // Create headers controllers + obj.headers = []; + obj.colgroup = []; + + // Create table container + obj.content = document.createElement('div'); + obj.content.classList.add('jexcel_content'); + + // Create toolbar object + obj.toolbar = document.createElement('div'); + obj.toolbar.classList.add('jexcel_toolbar'); + + // Search + var searchContainer = document.createElement('div'); + var searchText = document.createTextNode((obj.options.text.search) + ': '); + obj.searchInput = document.createElement('input'); + obj.searchInput.classList.add('jexcel_search'); + searchContainer.appendChild(searchText); + searchContainer.appendChild(obj.searchInput); + obj.searchInput.onfocus = function() { + obj.resetSelection(); + } + + // Pagination select option + var paginationUpdateContainer = document.createElement('div'); + + if (obj.options.pagination > 0 && obj.options.paginationOptions && obj.options.paginationOptions.length > 0) { + obj.paginationDropdown = document.createElement('select'); + obj.paginationDropdown.classList.add('jexcel_pagination_dropdown'); + obj.paginationDropdown.onchange = function() { + obj.options.pagination = parseInt(this.value); + obj.page(0); + } + + for (var i = 0; i < obj.options.paginationOptions.length; i++) { + var temp = document.createElement('option'); + temp.value = obj.options.paginationOptions[i]; + temp.innerHTML = obj.options.paginationOptions[i]; + obj.paginationDropdown.appendChild(temp); + } + + paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.show)); + paginationUpdateContainer.appendChild(obj.paginationDropdown); + paginationUpdateContainer.appendChild(document.createTextNode(obj.options.text.entries)); + } + + // Filter and pagination container + obj.filter = document.createElement('div'); + obj.filter.classList.add('jexcel_filter'); + obj.filter.appendChild(paginationUpdateContainer); + obj.filter.appendChild(searchContainer); + + // Colsgroup + obj.colgroupContainer = document.createElement('colgroup'); + var tempCol = document.createElement('col'); + tempCol.setAttribute('width', 50); + obj.colgroupContainer.appendChild(tempCol); + + // Nested + if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { + // Flexible way to handle nestedheaders + if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { + for (var j = 0; j < obj.options.nestedHeaders.length; j++) { + obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders[j])); + } + } else { + obj.thead.appendChild(obj.createNestedHeader(obj.options.nestedHeaders)); + } + } + + // Row + obj.headerContainer = document.createElement('tr'); + var tempCol = document.createElement('td'); + tempCol.classList.add('jexcel_selectall'); + obj.headerContainer.appendChild(tempCol); + + for (var i = 0; i < obj.options.columns.length; i++) { + // Create header + obj.createCellHeader(i); + // Append cell to the container + obj.headerContainer.appendChild(obj.headers[i]); + obj.colgroupContainer.appendChild(obj.colgroup[i]); + } + + obj.thead.appendChild(obj.headerContainer); + + // Content table + obj.table = document.createElement('table'); + obj.table.classList.add('jexcel'); + obj.table.setAttribute('cellpadding', '0'); + obj.table.setAttribute('cellspacing', '0'); + obj.table.setAttribute('unselectable', 'yes'); + obj.table.setAttribute('onselectstart', 'return false'); + obj.table.appendChild(obj.colgroupContainer); + obj.table.appendChild(obj.thead); + obj.table.appendChild(obj.tbody); + + // Spreadsheet corner + obj.corner = document.createElement('div'); + obj.corner.className = 'jexcel_corner'; + obj.corner.setAttribute('unselectable', 'on'); + obj.corner.setAttribute('onselectstart', 'return false'); + + if (obj.options.selectionCopy == false) { + obj.corner.style.display = 'none'; + } + + // Textarea helper + obj.textarea = document.createElement('textarea'); + obj.textarea.className = 'jexcel_textarea'; + obj.textarea.id = 'jexcel_textarea'; + + // Contextmenu container + obj.contextMenu = document.createElement('div'); + obj.contextMenu.className = 'jexcel_contextmenu'; + + // Create element + jSuites.contextmenu(obj.contextMenu, { + onclick:function() { + obj.contextMenu.contextmenu.close(false); + } + }); + + // Powered by jExcel + var ads = '<a href="https://bossanova.uk/jexcel/"><img src="//bossanova.uk/jexcel/logo.png">jExcel Spreadsheet</a>'; + obj.ads = document.createElement('div'); + obj.ads.className = 'jexcel_about'; + if (typeof(sessionStorage) !== "undefined") { + if (! sessionStorage.getItem('jexcel')) { + sessionStorage.setItem('jexcel', true); + obj.ads.innerHTML = ads; + } + } else { + obj.ads.innerHTML = ads; + } + + // Create table container TODO: frozen columns + var container = document.createElement('div'); + container.classList.add('jexcel_table'); + + // Pagination + obj.pagination = document.createElement('div'); + obj.pagination.classList.add('jexcel_pagination'); + var paginationInfo = document.createElement('div'); + var paginationPages = document.createElement('div'); + obj.pagination.appendChild(paginationInfo); + obj.pagination.appendChild(paginationPages); + + // Append containers to the table + if (obj.options.search == true) { + el.appendChild(obj.filter); + } + + // Elements + obj.content.appendChild(obj.table); + obj.content.appendChild(obj.corner); + obj.content.appendChild(obj.textarea); + + el.appendChild(obj.toolbar); + el.appendChild(obj.content); + el.appendChild(obj.pagination); + el.appendChild(obj.contextMenu); + el.appendChild(obj.ads); + el.classList.add('jexcel_container'); + + // Create toolbar + if (obj.options.toolbar && obj.options.toolbar.length) { + obj.createToolbar(); + } + + // Fullscreen + if (obj.options.fullscreen == true) { + el.classList.add('fullscreen'); + } else { + // Overflow + if (obj.options.tableOverflow == true) { + if (obj.options.tableHeight) { + obj.content.style['overflow-y'] = 'auto'; + obj.content.style.height = obj.options.tableHeight; + } + if (obj.options.tableWidth) { + obj.content.style['overflow-x'] = 'auto'; + obj.content.style.width = obj.options.tableWidth; + } + } + } + + // With toolbars + if (obj.options.tableOverflow != true && obj.options.toolbar) { + el.classList.add('with-toolbar'); + } + + // Actions + if (obj.options.columnDrag == true) { + obj.thead.classList.add('draggable'); + } + if (obj.options.columnResize == true) { + obj.thead.classList.add('resizable'); + } + if (obj.options.rowDrag == true) { + obj.tbody.classList.add('draggable'); + } + if (obj.options.rowResize == true) { + obj.tbody.classList.add('resizable'); + } + + // Load data + obj.setData(); + + // Style + if (obj.options.style) { + obj.setStyle(obj.options.style, null, null, 1, 1); + } + } + + /** + * Set data + * + * @param array data In case no data is sent, default is reloaded + * @return void + */ + obj.setData = function(data) { + // Update data + if (data) { + if (typeof(data) == 'string') { + data = JSON.parse(data); + } + + obj.options.data = data; + } + + // Data + if (! obj.options.data) { + obj.options.data = []; + } + + // Prepare data + if (obj.options.data) { + var data = []; + for (var j = 0; j < obj.options.data.length; j++) { + var row = []; + for (var i = 0; i < obj.options.columns.length; i++) { + row[i] = obj.options.data[j][obj.options.columns[i].name]; + } + data.push(row); + } + + obj.options.data = data; + } + + // Adjust minimal dimensions + var j = 0; + var i = 0; + var size_i = obj.options.columns.length; + var size_j = obj.options.data.length; + var min_i = obj.options.minDimensions[0]; + var min_j = obj.options.minDimensions[1]; + var max_i = min_i > size_i ? min_i : size_i; + var max_j = min_j > size_j ? min_j : size_j; + + for (j = 0; j < max_j; j++) { + for (i = 0; i < max_i; i++) { + if (obj.options.data[j] == undefined) { + obj.options.data[j] = []; + } + + if (obj.options.data[j][i] == undefined) { + obj.options.data[j][i] = ''; + } + } + } + + // Reset containers + obj.rows = []; + obj.results = null; + obj.records = []; + obj.history = []; + + // Reset internal controllers + obj.historyIndex = -1; + + // Reset data + obj.tbody.innerHTML = ''; + + // Lazy loading + if (obj.options.lazyLoading == true) { + // Load only 100 records + var startNumber = 0 + var finalNumber = obj.options.data.length < 100 ? obj.options.data.length : 100; + + if (obj.options.pagination) { + obj.options.pagination = false; + console.error('JEXCEL: Pagination will be disable due the lazyLoading'); + } + } else if (obj.options.pagination) { + // Pagination + if (! obj.pageNumber) { + obj.pageNumber = 0; + } + var quantityPerPage = obj.options.pagination; + startNumber = (obj.options.pagination * obj.pageNumber); + finalNumber = (obj.options.pagination * obj.pageNumber) + obj.options.pagination; + + if (obj.options.data.length < finalNumber) { + finalNumber = obj.options.data.length; + } + } else { + var startNumber = 0; + var finalNumber = obj.options.data.length; + } + + // Append nodes to the HTML + for (j = 0; j < obj.options.data.length; j++) { + // Create row + var tr = obj.createRow(j, obj.options.data[j]); + // Append line to the table + if (j >= startNumber && j < finalNumber) { + obj.tbody.appendChild(tr); + } + } + + if (obj.options.lazyLoading == true) { + // Do not create pagination with lazyloading activated + } else if (obj.options.pagination) { + obj.updatePagination(); + } + + // Merge cells + if (obj.options.mergeCells) { + var keys = Object.keys(obj.options.mergeCells); + for (var i = 0; i < keys.length; i++) { + var num = obj.options.mergeCells[keys[i]]; + obj.setMerge(keys[i], num[0], num[1], 1); + } + } + + // Updata table with custom configurations if applicable + obj.updateTable(); + + // Onload + if (! obj.ignoreEvents) { + if (typeof(obj.options.onload) == 'function') { + obj.options.onload(el, obj); + } + } + } + + /** + * Get the whole table data + * + * @param integer row number + * @return string value + */ + obj.getData = function(highlighted) { + // Control vars + var dataset = []; + var px = 0; + var py = 0; + + // Column and row length + var x = obj.options.columns.length + var y = obj.options.data.length + + // Go through the columns to get the data + for (var j = 0; j < y; j++) { + px = 0; + for (var i = 0; i < x; i++) { + // Cell selected or fullset + if (! highlighted || obj.records[j][i].classList.contains('highlight')) { + // Get value + if (! dataset[py]) { + dataset[py] = []; + } + if (obj.options.copyCompatibility == true) { + dataset[py][px] = obj.records[j][i].innerHTML; + } else { + dataset[py][px] = obj.options.data[j][i]; + } + px++; + } + } + if (px > 0) { + py++; + } + } + + return dataset; + } + + /** + * Get the whole table data + * + * @param integer row number + * @return string value + */ + obj.getJson = function(highlighted) { + // Control vars + var data = []; + + // Column and row length + var x = obj.options.columns.length + var y = obj.options.data.length + + // Go through the columns to get the data + for (var j = 0; j < y; j++) { + var row = null; + for (var i = 0; i < x; i++) { + if (! highlighted || obj.records[j][i].classList.contains('highlight')) { + if (row == null) { + row = {}; + } + row[obj.options.columns[i].name] = obj.options.data[j][i]; + } + } + + if (row != null) { + data.push(row); + } + } + + return data; + } + + /** + * Get a row data by rowNumber + */ + obj.getRowData = function(rowNumber) { + return obj.options.data[rowNumber]; + } + + /** + * Set a row data by rowNumber + */ + obj.setRowData = function(rowNumber, data) { + for (var i = 0; i < obj.headers.length; i++) { + // Update cell + var columnName = jexcel.getColumnNameFromId([ i, rowNumber ]); + // Set value + if (data[i] != null) { + obj.setValue(columnName, data[i]); + } + } + } + + /** + * Get a column data by columnNumber + */ + obj.getColumnData = function(columnNumber) { + var dataset = []; + // Go through the rows to get the data + for (var j = 0; j < obj.options.data.length; j++) { + dataset.push(obj.options.data[j][columnNumber]); + } + return dataset; + } + + /** + * Set a column data by colNumber + */ + obj.setColumnData = function(colNumber, data) { + for (var j = 0; j < obj.rows.length; j++) { + // Update cell + var columnName = jexcel.getColumnNameFromId([ colNumber, j ]); + // Set value + if (data[j] != null) { + obj.setValue(columnName, data[j]); + } + } + } + + /** + * Create row + */ + obj.createRow = function(j, data) { + // Create container + if (! obj.records[j]) { + obj.records[j] = []; + } + // Default data + if (! data) { + var data = obj.options.data[j]; + } + // New line of data to be append in the table + obj.rows[j] = document.createElement('tr'); + obj.rows[j].setAttribute('data-y', j); + // Definitions + if (obj.options.rows[j]) { + if (obj.options.rows[j].height) { + obj.rows[j].style.height = obj.options.rows[j].height; + } + } + // Row number label + var td = document.createElement('td'); + td.innerHTML = parseInt(j + 1); + td.setAttribute('data-y', j); + td.className = 'jexcel_row'; + obj.rows[j].appendChild(td); + + // Data columns + for (i = 0; i < obj.options.columns.length; i++) { + // New column of data to be append in the line + obj.records[j][i] = obj.createCell(i, j, data[i]); + // Add column to the row + obj.rows[j].appendChild(obj.records[j][i]); + } + + // Add row to the table body + return obj.rows[j]; + } + + /** + * Create cell + */ + obj.createCell = function(i, j, value) { + // Create cell and properties + var td = document.createElement('td'); + td.setAttribute('data-x', i); + td.setAttribute('data-y', j); + // Hidden column + if (obj.options.columns[i].type == 'hidden') { + td.style.display = 'none'; + td.innerHTML = value; + } else if (obj.options.columns[i].type == 'checkbox' || obj.options.columns[i].type == 'radio') { + // Create input + var element = document.createElement('input'); + element.type = obj.options.columns[i].type; + element.name = 'c' + i; + element.checked = (value == 1 || value == true || value == 'true') ? true : false; + element.onclick = function() { + obj.setValue(td, this.checked); + } + + if (obj.options.columns[i].readOnly == true) { + element.setAttribute('disabled', 'disabled'); + } + + // Append to the table + td.appendChild(element); + // Make sure the values are correct + obj.options.data[j][i] = element.checked; + } else if (obj.options.columns[i].type == 'calendar') { + // Try formatted date + var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[i].options.format); + // Create calendar cell + td.innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[i].options.format); + } else if (obj.options.columns[i].type == 'dropdown' || obj.options.columns[i].type == 'autocomplete') { + // Create dropdown cell + td.classList.add('dropdown'); + td.innerHTML = obj.getDropDownValue(i, value); + } else if (obj.options.columns[i].type == 'color') { + if (obj.options.columns[i].render == 'square') { + var color = document.createElement('div'); + color.className = 'color'; + color.style.backgroundColor = value; + td.appendChild(color); + } else { + td.style.color = value; + td.innerHTML = value; + } + } else if (obj.options.columns[i].type == 'image') { + if (value && value.substr(0, 10) == 'data:image') { + var img = document.createElement('img'); + img.src = value; + td.appendChild(img); + } + } else { + if ((''+value).substr(0,1) == '=' && obj.options.parseFormulas == true) { + value = obj.executeFormula(value, i, j) + } + if (obj.options.columns[i].mask) { + var decimal = obj.options.columns[i].decimal || '.'; + value = '' + jSuites.mask.run(value, obj.options.columns[i].mask, decimal); + } + + td.innerHTML = value; + } + + // Readonly + if (obj.options.columns[i].readOnly == true) { + td.className = 'readonly'; + } + + // Text align + var colAlign = obj.options.columns[i].align ? obj.options.columns[i].align : 'center'; + td.style.textAlign = colAlign; + + // Wrap option + if (obj.options.columns[i].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[i].wordWrap == true || td.innerHTML.length > 200)) { + td.style.whiteSpace = 'pre-wrap'; + } + + // Overflow + if (i > 0) { + if (value || td.innerHTML) { + obj.records[j][i-1].style.overflow = 'hidden'; + } else { + if (i == obj.options.columns.length - 1) { + td.style.overflow = 'hidden'; + } + } + } + + return td; + } + + obj.createCellHeader = function(colNumber) { + // Create col global control + var colWidth = obj.options.columns[colNumber].width ? obj.options.columns[colNumber].width : obj.options.defaultColWidth; + var colAlign = obj.options.columns[colNumber].align ? obj.options.columns[colNumber].align : obj.options.defaultColAlign; + + // Create header cell + obj.headers[colNumber] = document.createElement('td'); + obj.headers[colNumber].innerHTML = obj.options.columns[colNumber].title ? obj.options.columns[colNumber].title : jexcel.getColumnName(colNumber); + obj.headers[colNumber].setAttribute('data-x', colNumber); + obj.headers[colNumber].style.textAlign = colAlign; + if (obj.options.columns[colNumber].title) { + obj.headers[colNumber].setAttribute('title', obj.options.columns[colNumber].title); + } + + // Width control + obj.colgroup[colNumber] = document.createElement('col'); + obj.colgroup[colNumber].setAttribute('width', colWidth); + + // Hidden column + if (obj.options.columns[colNumber].type == 'hidden') { + obj.headers[colNumber].style.display = 'none'; + obj.colgroup[colNumber].style.display = 'none'; + } + } + + obj.createNestedHeader = function(nestedInformation) { + var tr = document.createElement('tr'); + tr.classList.add('jexcel_nested'); + var td = document.createElement('td'); + tr.appendChild(td); + + var headerIndex = 0; + for (var i = 0; i < nestedInformation.length; i++) { + // Default values + if (! nestedInformation[i].colspan) { + nestedInformation[i].colspan = 1; + } + if (! nestedInformation[i].align) { + nestedInformation[i].align = 'center'; + } + if (! nestedInformation[i].title) { + nestedInformation[i].title = ''; + } + + // Number of columns + var numberOfColumns = nestedInformation[i].colspan; + + // Classes container + var column = []; + // Header classes for this cell + for (var x = 0; x < numberOfColumns; x++) { + if (obj.options.columns[headerIndex] && obj.options.columns[headerIndex].type == 'hidden') { + numberOfColumns++; + } + column.push(headerIndex); + headerIndex++; + } + + // Created the nested cell + var td = document.createElement('td'); + td.setAttribute('data-column', column.join(',')); + td.setAttribute('colspan', nestedInformation[i].colspan); + td.setAttribute('align', nestedInformation[i].align); + td.innerHTML = nestedInformation[i].title; + tr.appendChild(td); + } + + return tr; + } + + /** + * Create toolbar + */ + obj.createToolbar = function(toolbar) { + if (toolbar) { + obj.options.toolbar = toolbar; + } else { + var toolbar = obj.options.toolbar; + } + + for (var i = 0; i < toolbar.length; i++) { + if (toolbar[i].type == 'i') { + var toolbarItem = document.createElement('i'); + toolbarItem.classList.add('jexcel_toolbar_item'); + toolbarItem.classList.add('material-icons'); + toolbarItem.setAttribute('data-k', toolbar[i].k); + toolbarItem.setAttribute('data-v', toolbar[i].v); + // Tooltip + if (toolbar[i].tooltip) { + toolbarItem.setAttribute('title', toolbar[i].tooltip); + } + // Handle click + if (toolbar[i].onclick && typeof(toolbar[i].onclick)) { + toolbarItem.onclick = toolbar[i].onclick; + } else { + toolbarItem.onclick = function() { + var k = this.getAttribute('data-k'); + var v = this.getAttribute('data-v'); + obj.setStyle(obj.highlighted, k, v); + } + } + // Append element + toolbarItem.innerHTML = toolbar[i].content; + obj.toolbar.appendChild(toolbarItem); + } else if (toolbar[i].type == 'select') { + var toolbarItem = document.createElement('select'); + toolbarItem.classList.add('jexcel_toolbar_item'); + toolbarItem.setAttribute('data-k', toolbar[i].k); + // Tooltip + if (toolbar[i].tooltip) { + toolbarItem.setAttribute('title', toolbar[i].tooltip); + } + // Handle onchange + if (toolbar[i].onchange && typeof(toolbar[i].onchange)) { + toolbarItem.onchange = toolbar[i].onchange; + } else { + toolbarItem.onchange = function() { + var k = this.getAttribute('data-k'); + obj.setStyle(obj.highlighted, k, this.value); + } + } + // Add options to the dropdown + for(var j = 0; j < toolbar[i].v.length; j++) { + var toolbarDropdownOption = document.createElement('option'); + toolbarDropdownOption.value = toolbar[i].v[j]; + toolbarDropdownOption.innerHTML = toolbar[i].v[j]; + toolbarItem.appendChild(toolbarDropdownOption); + } + obj.toolbar.appendChild(toolbarItem); + } else if (toolbar[i].type == 'color') { + var toolbarItem = document.createElement('i'); + toolbarItem.classList.add('jexcel_toolbar_item'); + toolbarItem.classList.add('material-icons'); + toolbarItem.setAttribute('data-k', toolbar[i].k); + toolbarItem.setAttribute('data-v', ''); + // Tooltip + if (toolbar[i].tooltip) { + toolbarItem.setAttribute('title', toolbar[i].tooltip); + } + obj.toolbar.appendChild(toolbarItem); + toolbarItem.onclick = function() { + this.color.open(); + } + toolbarItem.innerHTML = toolbar[i].content; + jSuites.color(toolbarItem, { + onchange:function(o, v) { + var k = o.getAttribute('data-k'); + obj.setStyle(obj.highlighted, k, v); + } + }); + } + } + } + + /** + * Merge cells + * @param cellName + * @param colspan + * @param rowspan + * @param ignoreHistoryAndEvents + */ + obj.setMerge = function(cellName, colspan, rowspan, ignoreHistoryAndEvents) { + var test = false; + + if (! cellName) { + if (! obj.highlighted.length) { + alert(obj.options.text.noCellsSelected); + return null; + } else { + var x1 = parseInt(obj.highlighted[0].getAttribute('data-x')); + var y1 = parseInt(obj.highlighted[0].getAttribute('data-y')); + var x2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-x')); + var y2 = parseInt(obj.highlighted[obj.highlighted.length-1].getAttribute('data-y')); + var cellName = jexcel.getColumnNameFromId([ x1, y1 ]); + var colspan = (x2 - x1) + 1; + var rowspan = (y2 - y1) + 1; + } + } + + var cell = jexcel.getIdFromColumnName(cellName, true); + + if (obj.options.mergeCells[cellName]) { + if (obj.records[cell[1]][cell[0]].getAttribute('data-merged')) { + test = obj.options.text.cellAlreadyMerged; + } + } else if ((! colspan || colspan < 2) && (! rowspan || rowspan < 2)) { + test = obj.options.text.invalidMergeProperties; + } else { + var cells = []; + for (var j = cell[1]; j < cell[1] + rowspan; j++) { + for (var i = cell[0]; i < cell[0] + colspan; i++) { + var columnName = jexcel.getColumnNameFromId([i, j]); + if (obj.records[j][i].getAttribute('data-merged')) { + test = obj.options.text.thereIsAConflictWithAnotherMergedCell; + } + } + } + } + + if (test) { + alert(test); + } else { + // Add property + if (colspan > 1) { + obj.records[cell[1]][cell[0]].setAttribute('colspan', colspan); + } else { + colspan = 1; + } + if (rowspan > 1) { + obj.records[cell[1]][cell[0]].setAttribute('rowspan', rowspan); + } else { + rowspan = 1; + } + // Keep links to the existing nodes + obj.options.mergeCells[cellName] = [ colspan, rowspan, [] ]; + // Mark cell as merged + obj.records[cell[1]][cell[0]].setAttribute('data-merged', 'true'); + // Overflow + obj.records[cell[1]][cell[0]].style.overflow = 'hidden'; + // History data + var data = []; + // Adjust the nodes + for (var y = cell[1]; y < cell[1] + rowspan; y++) { + for (var x = cell[0]; x < cell[0] + colspan; x++) { + if (! (cell[0] == x && cell[1] == y)) { + data.push(obj.options.data[y][x]); + obj.updateCell(x, y, '', true); + obj.options.mergeCells[cellName][2].push(obj.records[y][x]); + obj.records[y][x].style.display = 'none'; + obj.records[y][x] = obj.records[cell[1]][cell[0]]; + } + } + } + // In the initialization is not necessary keep the history + obj.updateSelection(obj.records[cell[1]][cell[0]]); + + if (! ignoreHistoryAndEvents) { + obj.setHistory({ + action:'setMerge', + column:cellName, + colspan:colspan, + rowspan:rowspan, + data:data, + }); + + if (typeof(obj.options.onmerge) == 'function') { + obj.options.onmerge(el, cellName, colspan, rowspan); + } + } + } + } + + /** + * Merge cells + * @param cellName + * @param colspan + * @param rowspan + * @param ignoreHistoryAndEvents + */ + obj.getMerge = function(cellName) { + var data = {}; + if (cellName) { + if (obj.options.mergeCells[cellName]) { + data = [ obj.options.mergeCells[cellName][0], obj.options.mergeCells[cellName][1] ]; + } else { + data = null; + } + } else { + if (obj.options.mergeCells) { + var mergedCells = obj.options.mergeCells; + var keys = Object.keys(obj.options.mergeCells); + for (var i = 0; i < keys.length; i++) { + data[keys[i]] = [ obj.options.mergeCells[keys[i]][0], obj.options.mergeCells[keys[i]][1] ]; + } + } + } + + return data; + } + + /** + * Remove merge by cellname + * @param cellName + */ + obj.removeMerge = function(cellName, data, keepOptions) { + if (obj.options.mergeCells[cellName]) { + var cell = jexcel.getIdFromColumnName(cellName, true); + obj.records[cell[1]][cell[0]].removeAttribute('colspan'); + obj.records[cell[1]][cell[0]].removeAttribute('rowspan'); + obj.records[cell[1]][cell[0]].removeAttribute('data-merged'); + var info = obj.options.mergeCells[cellName]; + + var index = 0; + for (var j = 0; j < info[1]; j++) { + for (var i = 0; i < info[0]; i++) { + if (j > 0 || i > 0) { + obj.records[cell[1]+j][cell[0]+i] = info[2][index]; + obj.records[cell[1]+j][cell[0]+i].style.display = ''; + // Recover data + if (data && data[index]) { + obj.updateCell(cell[0]+i, cell[1]+j, data[index]); + } + index++; + } + } + } + + // Update selection + obj.updateSelection(obj.records[cell[1]][cell[0]], obj.records[cell[1]+j-1][cell[0]+i-1]); + + if (! keepOptions) { + delete(obj.options.mergeCells[cellName]); + } + } + } + + /** + * Remove all merged cells + */ + obj.destroyMerged = function(keepOptions) { + // Remove any merged cells + if (obj.options.mergeCells) { + var mergedCells = obj.options.mergeCells; + var keys = Object.keys(obj.options.mergeCells); + for (var i = 0; i < keys.length; i++) { + obj.removeMerge(keys[i], null, keepOptions); + } + } + } + + /** + * Is column merged + */ + obj.isColMerged = function(x, insertBefore) { + var cols = []; + // Remove any merged cells + if (obj.options.mergeCells) { + var keys = Object.keys(obj.options.mergeCells); + for (var i = 0; i < keys.length; i++) { + var info = jexcel.getIdFromColumnName(keys[i], true); + var colspan = obj.options.mergeCells[keys[i]][0]; + var x1 = info[0]; + var x2 = info[0] + (colspan > 1 ? colspan - 1 : 0); + + if (insertBefore == null) { + if ((x1 <= x && x2 >= x)) { + cols.push(keys[i]); + } + } else { + if (insertBefore) { + if ((x1 < x && x2 >= x)) { + cols.push(keys[i]); + } + } else { + if ((x1 <= x && x2 > x)) { + cols.push(keys[i]); + } + } + } + } + } + + return cols; + } + + /** + * Is rows merged + */ + obj.isRowMerged = function(y, insertBefore) { + var rows = []; + // Remove any merged cells + if (obj.options.mergeCells) { + var keys = Object.keys(obj.options.mergeCells); + for (var i = 0; i < keys.length; i++) { + var info = jexcel.getIdFromColumnName(keys[i], true); + var rowspan = obj.options.mergeCells[keys[i]][1]; + var y1 = info[1]; + var y2 = info[1] + (rowspan > 1 ? rowspan - 1 : 0); + + if (insertBefore == null) { + if ((y1 <= y && y2 >= y)) { + rows.push(keys[i]); + } + } else { + if (insertBefore) { + if ((y1 < y && y2 >= y)) { + rows.push(keys[i]); + } + } else { + if ((y1 <= y && y2 > y)) { + rows.push(keys[i]); + } + } + } + } + } + + return rows; + } + + /** + * Open the editor + * + * @param object cell + * @return void + */ + obj.openEditor = function(cell, empty, e) { + // Get cell position + var y = cell.getAttribute('data-y'); + var x = cell.getAttribute('data-x'); + + // On edition start + if (! obj.ignoreEvents) { + if (typeof(obj.options.oneditionstart) == 'function') { + obj.options.oneditionstart(el, cell, x, y); + } + } + + // Overflow + if (x > 0) { + obj.records[y][x-1].style.overflow = 'hidden'; + } + + // Create editor + var createEditor = function(type) { + // Cell information + var info = cell.getBoundingClientRect(); + + // Create dropdown + var editor = document.createElement(type); + editor.style.width = (info.width) + 'px'; + editor.style.height = (info.height - 2) + 'px'; + editor.style.minHeight = (info.height - 2) + 'px'; + + // Edit cell + cell.classList.add('editor'); + cell.innerHTML = ''; + cell.appendChild(editor); + + return editor; + } + + // Readonly + if (cell.classList.contains('readonly') == true) { + // Do nothing + } else { + // Holder + obj.edition = [ obj.records[y][x], obj.records[y][x].innerHTML, x, y ]; + + // If there is a custom editor for it + if (obj.options.columns[x].editor) { + // Custom editors + obj.options.columns[x].editor.openEditor(cell, el); + } else { + // Native functions + if (obj.options.columns[x].type == 'hidden') { + // Do nothing + } else if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') { + // Get value + var value = cell.children[0].checked ? false : true; + // Toogle value + obj.setValue(cell, value); + // Do not keep edition open + obj.edition = null; + } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') { + // Get current value + var value = obj.options.data[y][x]; + + // Create dropdown + if (typeof(obj.options.columns[x].filter) == 'function') { + var source = obj.options.columns[x].filter(el, cell, x, y, obj.options.columns[x].source); + } else { + var source = obj.options.columns[x].source; + } + + // Create editor + var editor = createEditor('div'); + var options = { + data: source, + multiple: obj.options.columns[x].multiple ? true : false, + autocomplete: obj.options.columns[x].autocomplete || obj.options.columns[x].type == 'autocomplete' ? true : false, + opened:true, + value: obj.options.columns[x].multiple ? value.split(';') : value, + width:'100%', + height:editor.style.minHeight, + position: (obj.options.tableOverflow == true || obj.options.fullscreen == true) ? true : false, + onclose:function() { + obj.closeEditor(cell, true); + } + }; + if (obj.options.columns[x].options && obj.options.columns[x].options.type) { + options.type = obj.options.columns[x].options.type; + } + jSuites.dropdown(editor, options); + } else if (obj.options.columns[x].type == 'calendar' || obj.options.columns[x].type == 'color') { + // Value + var value = obj.options.data[y][x]; + // Create editor + var editor = createEditor('input'); + editor.value = value; + + if (obj.options.tableOverflow == true || obj.options.fullscreen == true) { + obj.options.columns[x].options.position = true; + } + obj.options.columns[x].options.value = obj.options.data[y][x]; + obj.options.columns[x].options.opened = true; + obj.options.columns[x].options.onclose = function(el, value) { + obj.closeEditor(cell, true); + } + // Current value + if (obj.options.columns[x].type == 'color') { + jSuites.color(editor, obj.options.columns[x].options); + } else { + var calendar = jSuites.calendar(editor, obj.options.columns[x].options); + calendar.setValue(value); + } + // Focus on editor + editor.focus(); + } else if (obj.options.columns[x].type == 'image') { + // Value + var img = cell.children[0]; + // Create editor + var editor = createEditor('div'); + editor.style.position = 'relative'; + var div = document.createElement('div'); + div.classList.add('jclose'); + if (img && img.src) { + div.appendChild(img); + } + editor.appendChild(div); + jSuites.image(div, obj.options.imageOptions); + const rect = cell.getBoundingClientRect(); + const rectContent = div.getBoundingClientRect(); + if (window.innerHeight < rect.bottom + rectContent.height) { + div.style.top = (rect.top - (rectContent.height + 2)) + 'px'; + } else { + div.style.top = (rect.top) + 'px'; + } + } else { + // Value + var value = empty == true ? '' : obj.options.data[y][x]; + + // Basic editor + if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true)) { + var editor = createEditor('textarea'); + } else { + var editor = createEditor('input'); + // Mask + if (obj.options.columns[x].mask) { + editor.setAttribute('data-mask', obj.options.columns[x].mask); + } + } + + editor.value = value; + editor.onblur = function() { + obj.closeEditor(cell, true); + }; + editor.focus(); + } + } + } + } + + /** + * Close the editor and save the information + * + * @param object cell + * @param boolean save + * @return void + */ + obj.closeEditor = function(cell, save) { + var x = parseInt(cell.getAttribute('data-x')); + var y = parseInt(cell.getAttribute('data-y')); + + // Get cell properties + if (save == true) { + // If custom editor + if (obj.options.columns[x].editor) { + // Custom editor + var value = obj.options.columns[x].editor.closeEditor(cell, save); + } else { + // Native functions + if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio' || obj.options.columns[x].type == 'hidden') { + // Do nothing + } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') { + var value = cell.children[0].dropdown.close(true); + } else if (obj.options.columns[x].type == 'calendar') { + var value = cell.children[0].calendar.close(true); + } else if (obj.options.columns[x].type == 'color') { + var value = cell.children[1].color.close(true); + } else if (obj.options.columns[x].type == 'image') { + var img = cell.children[0].children[0].children[0]; + var value = img && img.tagName == 'IMG' ? img.src : ''; + } else if (obj.options.columns[x].type == 'numeric') { + var value = cell.children[0].value; + if (value.substr(0,1) != '=') { + if (value == '') { + value = obj.options.columns[x].allowEmpty ? '' : 0; + } + } + cell.children[0].onblur = null; + } else { + var value = cell.children[0].value; + cell.children[0].onblur = null; + } + } + + // Ignore changes if the value is the same + if (obj.options.data[y][x] == value) { + cell.innerHTML = obj.edition[1]; + } else { + obj.setValue(cell, value); + } + } else { + if (obj.options.columns[x].editor) { + // Custom editor + obj.options.columns[x].editor.closeEditor(cell, save); + } else { + if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') { + cell.children[0].dropdown.close(true); + } else if (obj.options.columns[x].type == 'calendar') { + cell.children[0].calendar.close(true); + } else if (obj.options.columns[x].type == 'color') { + cell.children[1].color.close(true); + } else { + cell.children[0].onblur = null; + } + } + + // Restore value + cell.innerHTML = obj.edition && obj.edition[1] ? obj.edition[1] : ''; + } + + // On edition end + if (! obj.ignoreEvents) { + if (typeof(obj.options.oneditionend) == 'function') { + obj.options.oneditionend(el, cell, x, y, value, save); + } + } + + // Remove editor class + cell.classList.remove('editor'); + + // Finish edition + obj.edition = null; + } + + /** + * Get the cell object + * + * @param object cell + * @return string value + */ + obj.getCell = function(cell) { + // Convert in case name is excel liked ex. A10, BB92 + cell = jexcel.getIdFromColumnName(cell, true); + var x = cell[0]; + var y = cell[1]; + + return obj.records[y][x]; + } + + /** + * Get the cell object from coords + * + * @param object cell + * @return string value + */ + obj.getCellFromCoords = function(x, y) { + return obj.records[y][x].element; + } + + /** + * Get label + * + * @param object cell + * @return string value + */ + obj.getLabel = function(cell) { + // Convert in case name is excel liked ex. A10, BB92 + cell = jexcel.getIdFromColumnName(cell, true); + var x = cell[0]; + var y = cell[1]; + + return obj.records[y][x].innerHTML; + } + + /** + * Get labelfrom coords + * + * @param object cell + * @return string value + */ + obj.getLabelFromCoords = function(x, y) { + return obj.records[y][x].element.innerHTML; + } + + /** + * Get the value from a cell + * + * @param object cell + * @return string value + */ + obj.getValue = function(cell, processedValue) { + if (typeof(cell) == 'object') { + var x = cell.getAttribute('data-x'); + var y = cell.getAttribute('data-y'); + } else { + cell = jexcel.getIdFromColumnName(cell, true); + var x = cell[0]; + var y = cell[1]; + } + + var value = null; + + if (x != null && y != null) { + if (obj.records[y] && obj.records[y][x] && (processedValue || obj.options.copyCompatibility == true)) { + value = obj.records[y][x].innerHTML; + } else { + if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') { + value = obj.options.data[y][x]; + } + } + } + + return value; + } + + /** + * Get the value from a coords + * + * @param int x + * @param int y + * @return string value + */ + obj.getValueFromCoords = function(x, y, processedValue) { + var value = null; + + if (x != null && y != null) { + if ((obj.records[y] && obj.records[y][x]) && processedValue || obj.options.copyCompatibility == true) { + value = obj.records[y][x].innerHTML; + } else { + if (obj.options.data[y] && obj.options.data[y][x] != 'undefined') { + value = obj.options.data[y][x]; + } + } + } + + return value; + } + + /** + * Set a cell value + * + * @param mixed cell destination cell + * @param string value value + * @return void + */ + obj.setValue = function(cell, value, force) { + var records = []; + + if (typeof(cell) == 'string') { + var columnId = jexcel.getIdFromColumnName(cell, true); + var x = columnId[0]; + var y = columnId[1]; + + // Update cell + records.push(obj.updateCell(x, y, value, force)); + + // Update all formulas in the chain + obj.updateFormulaChain(x, y, records); + } else { + var x = null; + var y = null; + if (cell && cell.getAttribute) { + var x = cell.getAttribute('data-x'); + var y = cell.getAttribute('data-y'); + } + + // Update cell + if (x != null && y != null) { + records.push(obj.updateCell(x, y, value, force)); + + // Update all formulas in the chain + obj.updateFormulaChain(x, y, records); + } else { + var keys = Object.keys(cell); + if (keys.length > 0) { + for (var i = 0; i < keys.length; i++) { + if (typeof(cell[i]) == 'string') { + var columnId = jexcel.getIdFromColumnName(cell[i], true); + var x = columnId[0]; + var y = columnId[1]; + } else { + var x = cell[i].getAttribute('data-x'); + var y = cell[i].getAttribute('data-y'); + } + + // Update cell + if (x != null && y != null) { + records.push(obj.updateCell(x, y, value, force)); + + // Update all formulas in the chain + obj.updateFormulaChain(x, y, records); + } + } + } + } + } + + // Update history + obj.setHistory({ + action:'setValue', + records:records, + selection:obj.selectedCell, + }); + + // Update table with custom configurations if applicable + obj.updateTable(); + + // On after changes + obj.onafterchanges(el, records); + } + + /** + * Set a cell value based on coordinates + * + * @param int x destination cell + * @param int y destination cell + * @param string value + * @return void + */ + obj.setValueFromCoords = function(x, y, value, force) { + var records = []; + records.push(obj.updateCell(x, y, value, force)); + + // Update all formulas in the chain + obj.updateFormulaChain(x, y, records); + + // Update history + obj.setHistory({ + action:'setValue', + records:records, + selection:obj.selectedCell, + }); + + // Update table with custom configurations if applicable + obj.updateTable(); + + // On after changes + obj.onafterchanges(el, records); + } + + /** + * Toogle + */ + obj.setCheckRadioValue = function() { + var records = []; + var keys = Object.keys(obj.highlighted); + for (var i = 0; i < keys.length; i++) { + var x = obj.highlighted[i].getAttribute('data-x'); + var y = obj.highlighted[i].getAttribute('data-y'); + + if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') { + // Update cell + records.push(obj.updateCell(x, y, ! obj.options.data[y][x])); + } + } + + if (records.length) { + // Update history + obj.setHistory({ + action:'setValue', + records:records, + selection:obj.selectedCell, + }); + + // On after changes + obj.onafterchanges(el, records); + } + } + + /** + * Update cell content + * + * @param object cell + * @return void + */ + obj.updateCell = function(x, y, value, force) { + // Changing value depending on the column type + if (obj.records[y][x].classList.contains('readonly') == true && ! force) { + // Do nothing + } else { + // On change + if (! obj.ignoreEvents) { + if (typeof(obj.options.onbeforechange) == 'function') { + // Overwrite a value + var val = obj.options.onbeforechange(el, obj.records[y][x], x, y, value); + + // If you return something this will overwrite the value + if (val != undefined) { + value = val; + } + } + } + + // History format + var record = { + col: x, + row: y, + newValue: value, + oldValue: obj.options.data[y][x], + } + + if (obj.options.columns[x].editor) { + // Update data and cell + obj.options.data[y][x] = value; + obj.options.columns[x].editor.setValue(obj.records[y][x], value, force); + } else { + // Native functions + if (obj.options.columns[x].type == 'checkbox' || obj.options.columns[x].type == 'radio') { + // Unchecked all options + if (obj.options.columns[x].type == 'radio') { + for (var j = 0; j < obj.options.data.length; j++) { + obj.options.data[j][x] = false; + } + } + + // Update data and cell + obj.records[y][x].children[0].checked = (value == 1 || value == true || value == 'true' || value == 'TRUE') ? true : false; + obj.options.data[y][x] = obj.records[y][x].children[0].checked; + } else if (obj.options.columns[x].type == 'dropdown' || obj.options.columns[x].type == 'autocomplete') { + // Update data and cell + obj.options.data[y][x] = value; + obj.records[y][x].innerHTML = obj.getDropDownValue(x, value); + } else if (obj.options.columns[x].type == 'calendar') { + // Update calendar + var formatted = jSuites.calendar.extractDateFromString(value, obj.options.columns[x].options.format); + // Update data and cell + obj.options.data[y][x] = value; + obj.records[y][x].innerHTML = jSuites.calendar.getDateString(formatted ? formatted : value, obj.options.columns[x].options.format); + } else if (obj.options.columns[x].type == 'color') { + // Update color + obj.options.data[y][x] = value; + // Render + if (obj.options.columns[x].render == 'square') { + var color = document.createElement('div'); + color.className = 'color'; + color.style.backgroundColor = value; + obj.records[y][x].innerHTML = ''; + obj.records[y][x].appendChild(color); + } else { + obj.records[y][x].style.color = value; + obj.records[y][x].innerHTML = value; + } + } else if (obj.options.columns[x].type == 'image') { + value = ''+value; + obj.options.data[y][x] = value; + obj.records[y][x].innerHTML = ''; + if (value && value.substr(0, 10) == 'data:image') { + var img = document.createElement('img'); + img.src = value; + obj.records[y][x].appendChild(img); + } + } else { + // Update data and cell + obj.options.data[y][x] = value; + // Label + if (('' + value).substr(0,1) == '=' && obj.options.parseFormulas == true) { + value = obj.executeFormula(value, x, y); + } + if (obj.options.columns[x].mask) { + var decimal = obj.options.columns[x].decimal || '.'; + value = '' + jSuites.mask.run(value, obj.options.columns[x].mask, decimal); + } + obj.records[y][x].innerHTML = value; + + // Handle big text inside a cell + if (obj.options.columns[x].wordWrap != false && (obj.options.wordWrap == true || obj.options.columns[x].wordWrap == true || obj.records[y][x].innerHTML.length > 200)) { + obj.records[y][x].style.whiteSpace = 'pre-wrap'; + } else { + obj.records[y][x].style.whiteSpace = ''; + } + } + } + + // Overflow + if (x > 0) { + if (obj.options.data[y][x] || (obj.options.columns[x].type != 'text' && obj.options.columns[x].type != 'number')) { + obj.records[y][x-1].style.overflow = 'hidden'; + } else { + obj.records[y][x-1].style.overflow = ''; + } + } + + // On change + if (! obj.ignoreEvents) { + if (typeof(obj.options.onchange) == 'function') { + obj.options.onchange(el, (obj.records[y] && obj.records[y][x] ? obj.records[y][x] : null), x, y, value, record.oldValue); + } + } + } + + return record; + } + + /** + * Helper function to copy data using the corner icon + */ + obj.copyData = function(o, d) { + // Get data from all selected cells + var data = obj.getData(true); + + // Selected cells + var t0 = obj.selectedContainer[1]; + var t1 = obj.selectedContainer[3]; + + // Cells + var x1 = parseInt(o.getAttribute('data-x')); + var y1 = parseInt(o.getAttribute('data-y')); + var x2 = parseInt(d.getAttribute('data-x')); + var y2 = parseInt(d.getAttribute('data-y')); + + // Records + var records = []; + var lineNumber = 1; + var breakControl = false; + + // Copy data procedure + var posx = 0; + var posy = 0; + + for (var j = y1; j <= y2; j++) { + // Skip hidden rows + if (obj.rows[j] && obj.rows[j].style.display == 'none') { + continue; + } + + // Controls + if (data[posy] == undefined) { + posy = 0; + } + posx = 0; + + // Data columns + for (var i = x1; i <= x2; i++) { + // Update non-readonly + if (obj.records[j][i] && ! obj.records[j][i].classList.contains('readonly') && obj.records[j][i].style.display != 'none' && breakControl == false) { + // Stop if contains value + if (! obj.selection.length) { + if (obj.options.data[j][i] != '') { + breakControl = true; + continue; + } + } + + // Column + if (data[posy] == undefined) { + posx = 0; + } else if (data[posy][posx] == undefined) { + posx = 0; + } else { + var value = data[posy][posx]; + } + + if (value && t0 == t1 && obj.options.autoIncrement == true) { + if (obj.options.columns[i].type == 'text' || obj.options.columns[i].type == 'number') { + if ((''+value).substr(0,1) == '=') { + var tokens = value.match(/([A-Z]+[0-9]+)/g); + + if (tokens) { + var affectedTokens = []; + for (var index = 0; index < tokens.length; index++) { + var position = jexcel.getIdFromColumnName(tokens[index], 1); + position[1] += lineNumber; + var token = jexcel.getColumnNameFromId([position[0], position[1]]); + + if (token != tokens[index]) { + affectedTokens[tokens[index]] = token; + } + } + // Update formula + if (affectedTokens) { + value = obj.updateFormula(value, affectedTokens) + } + } + } else { + if (value == Number(value)) { + value = Number(value) + lineNumber; + } + } + } else if (obj.options.columns[i].type == 'calendar') { + var date = new Date(value); + date.setDate(date.getDate() + lineNumber); + value = date.getFullYear() + '-' + parseInt(date.getMonth() + 1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':00'; + } + } + + records.push(obj.updateCell(i, j, value)); + + // Update all formulas in the chain + obj.updateFormulaChain(i, j, records); + } + posx++; + } + posy++; + lineNumber++; + } + + // Update history + obj.setHistory({ + action:'setValue', + records:records, + selection:obj.selectedCell, + }); + + // Update table with custom configuration if applicable + obj.updateTable(); + + // On after changes + obj.onafterchanges(el, records); + } + + /** + * Refresh current selection + */ + obj.refreshSelection = function() { + if (obj.selectedCell) { + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + } + } + + /** + * Move coords to A1 in case ovelaps with an excluded cell + */ + obj.conditionalSelectionUpdate = function(type, o, d) { + if (type == 1) { + if (obj.selectedCell && ((o >= obj.selectedCell[1] && o <= obj.selectedCell[3]) || (d >= obj.selectedCell[1] && d <= obj.selectedCell[3]))) { + obj.resetSelection(); + return; + } + } else { + if (obj.selectedCell && ((o >= obj.selectedCell[0] && o <= obj.selectedCell[2]) || (d >= obj.selectedCell[0] && d <= obj.selectedCell[2]))) { + obj.resetSelection(); + return; + } + } + } + + /** + * Clear table selection + */ + obj.resetSelection = function(blur) { + // Remove style + if (! obj.highlighted.length) { + var previousStatus = 0; + } else { + var previousStatus = 1; + + for (var i = 0; i < obj.highlighted.length; i++) { + obj.highlighted[i].classList.remove('highlight'); + obj.highlighted[i].classList.remove('highlight-left'); + obj.highlighted[i].classList.remove('highlight-right'); + obj.highlighted[i].classList.remove('highlight-top'); + obj.highlighted[i].classList.remove('highlight-bottom'); + obj.highlighted[i].classList.remove('highlight-selected'); + + var px = parseInt(obj.highlighted[i].getAttribute('data-x')); + var py = parseInt(obj.highlighted[i].getAttribute('data-y')); + + // Check for merged cells + if (obj.highlighted[i].getAttribute('data-merged')) { + var colspan = parseInt(obj.highlighted[i].getAttribute('colspan')); + var rowspan = parseInt(obj.highlighted[i].getAttribute('rowspan')); + var ux = colspan > 0 ? px + (colspan - 1) : px; + var uy = rowspan > 0 ? py + (rowspan - 1): py; + } else { + var ux = px; + var uy = py; + } + + // Remove selected from headers + for (var j = px; j <= ux; j++) { + if (obj.headers[j]) { + obj.headers[j].classList.remove('selected'); + } + } + + // Remove selected from rows + for (var j = py; j <= uy; j++) { + if (obj.rows[j]) { + obj.rows[j].classList.remove('selected'); + } + } + } + } + + // Reset highlighed cells + obj.highlighted = []; + + // Reset + obj.selectedCell = null; + + // Hide corner + obj.corner.style.top = '-2000px'; + obj.corner.style.left = '-2000px'; + + if (obj.ignoreEvents != true && blur == true) { + if (obj.options.onblur) { + if (typeof(obj.options.onblur) == 'function') { + if (previousStatus == 1) { + obj.options.onblur(el); + } + } + } + } + + return previousStatus; + } + + /** + * Update selection based on two cells + */ + obj.updateSelection = function(el1, el2, origin) { + var x1 = el1.getAttribute('data-x'); + var y1 = el1.getAttribute('data-y'); + if (el2) { + var x2 = el2.getAttribute('data-x'); + var y2 = el2.getAttribute('data-y'); + } else { + var x2 = x1; + var y2 = y1; + } + + obj.updateSelectionFromCoords(x1, y1, x2, y2, origin); + } + + /** + * Update selection from coords + */ + obj.updateSelectionFromCoords = function(x1, y1, x2, y2, origin) { + // Reset Selection + var updated = null; + var previousState = obj.resetSelection(); + + // Same element + if (x2 == null) { + x2 = x1; + } + if (y2 == null) { + y2 = y1; + } + + // Selection must be within the existing data + if (x1 >= obj.headers.length) { + x1 = obj.headers.length - 1; + } + if (y1 >= obj.rows.length) { + y1 = obj.rows.length - 1; + } + if (x2 >= obj.headers.length) { + x2 = obj.headers.length - 1; + } + if (y2 >= obj.rows.length) { + y2 = obj.rows.length - 1; + } + + // Keep selected cell + obj.selectedCell = [x1, y1, x2, y2]; + + // Select cells + if (x1 != null) { + // Add selected cell + if (obj.records[y1][x1]) { + obj.records[y1][x1].classList.add('highlight-selected'); + } + + // Origin & Destination + if (parseInt(x1) < parseInt(x2)) { + var px = parseInt(x1); + var ux = parseInt(x2); + } else { + var px = parseInt(x2); + var ux = parseInt(x1); + } + + if (parseInt(y1) < parseInt(y2)) { + var py = parseInt(y1); + var uy = parseInt(y2); + } else { + var py = parseInt(y2); + var uy = parseInt(y1); + } + + // Verify merged columns + for (var i = px; i <= ux; i++) { + for (var j = py; j <= uy; j++) { + if (obj.records[j][i] && obj.records[j][i].getAttribute('data-merged')) { + var x = parseInt(obj.records[j][i].getAttribute('data-x')); + var y = parseInt(obj.records[j][i].getAttribute('data-y')); + var colspan = parseInt(obj.records[j][i].getAttribute('colspan')); + var rowspan = parseInt(obj.records[j][i].getAttribute('rowspan')); + + if (colspan > 1) { + if (x < px) { + px = x; + } + if (x + colspan > ux) { + ux = x + colspan - 1; + } + } + + if (rowspan) { + if (y < py) { + py = y; + + } + if (y + rowspan > uy) { + uy = y + rowspan - 1; + } + } + } + } + } + + // Limits + var borderLeft = null; + var borderRight = null; + var borderTop = null; + var borderBottom = null; + + // Vertical limits + for (var j = py; j <= uy; j++) { + if (obj.rows[j].style.display != 'none') { + if (borderTop == null) { + borderTop = j; + } + borderBottom = j; + } + } + + // Redefining styles + for (var i = px; i <= ux; i++) { + for (var j = py; j <= uy; j++) { + if (obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') { + obj.records[j][i].classList.add('highlight'); + obj.highlighted.push(obj.records[j][i]); + } + } + + // Horizontal limits + if (obj.options.columns[i].type != 'hidden') { + if (borderLeft == null) { + borderLeft = i; + } + borderRight = i; + } + } + + // Create borders + if (! borderLeft) { + borderLeft = 0; + } + if (! borderRight) { + borderRight = 0; + } + for (var i = borderLeft; i <= borderRight; i++) { + if (obj.options.columns[i].type != 'hidden') { + // Top border + if (obj.records[borderTop][i]) { + obj.records[borderTop][i].classList.add('highlight-top'); + } + // Bottom border + if (obj.records[borderBottom][i]) { + obj.records[borderBottom][i].classList.add('highlight-bottom'); + } + // Add selected from headers + obj.headers[i].classList.add('selected'); + } + } + + for (var j = borderTop; j <= borderBottom; j++) { + if (obj.rows[j].style.display != 'none') { + // Left border + obj.records[j][borderLeft].classList.add('highlight-left'); + // Right border + obj.records[j][borderRight].classList.add('highlight-right'); + // Add selected from rows + obj.rows[j].classList.add('selected'); + } + } + + obj.selectedContainer = [ borderLeft, borderTop, borderRight, borderBottom ]; + } + + // Handle events + if (obj.ignoreEvents != true) { + if (obj.options.onfocus) { + if (typeof(obj.options.onfocus) == 'function') { + if (previousState == 0) { + obj.options.onfocus(el); + } + } + } + + if (typeof(obj.options.onselection) == 'function') { + obj.options.onselection(el, borderLeft, borderTop, borderRight, borderBottom, origin); + } + } + + // Find corner cell + obj.updateCornerPosition(); + } + + /** + * Remove copy selection + * + * @return void + */ + obj.removeCopySelection = function() { + // Remove current selection + for (var i = 0; i < obj.selection.length; i++) { + obj.selection[i].classList.remove('selection'); + obj.selection[i].classList.remove('selection-left'); + obj.selection[i].classList.remove('selection-right'); + obj.selection[i].classList.remove('selection-top'); + obj.selection[i].classList.remove('selection-bottom'); + } + + obj.selection = []; + } + + /** + * Update copy selection + * + * @param int x, y + * @return void + */ + obj.updateCopySelection = function(x3, y3) { + // Remove selection + obj.removeCopySelection(); + + // Get elements first and last + var x1 = obj.selectedContainer[0]; + var y1 = obj.selectedContainer[1]; + var x2 = obj.selectedContainer[2]; + var y2 = obj.selectedContainer[3]; + + if (x3 && y3) { + if (x3 - x2 > 0) { + var px = parseInt(x2) + 1; + var ux = parseInt(x3); + } else { + var px = parseInt(x3); + var ux = parseInt(x1) - 1; + } + + if (y3 - y2 > 0) { + var py = parseInt(y2) + 1; + var uy = parseInt(y3); + } else { + var py = parseInt(y3); + var uy = parseInt(y1) - 1; + } + + if (ux - px < uy - py) { + var px = parseInt(x1); + var ux = parseInt(x2); + } else { + var py = parseInt(y1); + var uy = parseInt(y2); + } + + for (var j = py; j <= uy; j++) { + for (var i = px; i <= ux; i++) { + if (obj.records[j][i] && obj.rows[j].style.display != 'none' && obj.records[j][i].style.display != 'none') { + obj.records[j][i].classList.add('selection'); + obj.records[py][i].classList.add('selection-top'); + obj.records[uy][i].classList.add('selection-bottom'); + obj.records[j][px].classList.add('selection-left'); + obj.records[j][ux].classList.add('selection-right'); + + // Persist selected elements + obj.selection.push(obj.records[j][i]); + } + } + } + } + } + + /** + * Update corner position + * + * @return void + */ + obj.updateCornerPosition = function() { + // If any selected cells + if (! obj.highlighted.length) { + obj.corner.style.top = '-2000px'; + obj.corner.style.left = '-2000px'; + } else { + // Get last cell + var last = obj.highlighted[obj.highlighted.length-1]; + var x1 = obj.content.getBoundingClientRect().left; + var y1 = obj.content.getBoundingClientRect().top; + + var x2 = last.getBoundingClientRect().left; + var y2 = last.getBoundingClientRect().top; + var w2 = last.getBoundingClientRect().width; + var h2 = last.getBoundingClientRect().height; + + var x = (x2 - x1) + obj.content.scrollLeft + w2 - 4; + var y = (y2 - y1) + obj.content.scrollTop + h2 - 4; + + // Place the corner in the correct place + obj.corner.style.top = y + 'px'; + obj.corner.style.left = x + 'px'; + } + } + + /** + * Update scroll position based on the selection + */ + obj.updateScroll = function(direction) { + // jExcel Container information + var x1 = obj.content.getBoundingClientRect().left; + var y1 = obj.content.getBoundingClientRect().top; + var w1 = obj.content.getBoundingClientRect().width; + var h1 = obj.content.getBoundingClientRect().height; + + // Direction Left or Up + var reference = obj.records[obj.selectedCell[3]][obj.selectedCell[2]]; + + var x2 = reference.getBoundingClientRect().left; + var y2 = reference.getBoundingClientRect().top; + var w2 = reference.getBoundingClientRect().width; + var h2 = reference.getBoundingClientRect().height; + + // Direction + if (direction == 0 || direction == 1) { + var x = (x2 - x1) + obj.content.scrollLeft; + var y = (y2 - y1) + obj.content.scrollTop - 2; + } else { + var x = (x2 - x1) + obj.content.scrollLeft + w2; + var y = (y2 - y1) + obj.content.scrollTop + h2; + } + + // Top position check + if (y > (obj.content.scrollTop + 30) && y < (obj.content.scrollTop + h1)) { + // In the viewport + } else { + // Out of viewport + if (y < obj.content.scrollTop + 30) { + obj.content.scrollTop = y - h2; + } else { + obj.content.scrollTop = y - (h1 - 2); + } + } + + // Left position check - TODO: change that to the bottom border of the element + if (x > (obj.content.scrollLeft) && x < (obj.content.scrollLeft + w1)) { + // In the viewport + } else { + // Out of viewport + if (x < obj.content.scrollLeft + 30) { + obj.content.scrollLeft = x; + if (obj.content.scrollLeft < 50) { + obj.content.scrollLeft = 0; + } + } else { + obj.content.scrollLeft = x - (w1 - 20); + } + } + } + + /** + * Get the column width + * + * @param int column column number (first column is: 0) + * @return int current width + */ + obj.getWidth = function(column) { + if (! column) { + // Get all headers + var data = []; + for (var i = 0; i < obj.headers.length; i++) { + data.push(obj.options.columns[i].width); + } + } else { + // In case the column is an object + if (typeof(column) == 'object') { + column = $(column).getAttribute('data-x'); + } + + data = obj.colgroup[column].getAttribute('width') + } + + return data; + } + + /** + * Set the column width + * + * @param int column number (first column is: 0) + * @param int new column width + * @param int old column width + */ + obj.setWidth = function (column, width, oldWidth) { + if (width > 0) { + // In case the column is an object + if (typeof(column) == 'object') { + column = $(column).getAttribute('data-x'); + } + + // Oldwidth + if (! oldWidth) { + obj.colgroup[column].getAttribute('width'); + } + + // Set width + obj.colgroup[column].setAttribute('width', width); + obj.options.columns[column].width = width; + + // Keeping history of changes + obj.setHistory({ + action:'setWidth', + column:column, + oldValue:oldWidth, + newValue:width, + }); + + // On resize column + if (obj.ignoreEvents != true) { + if (typeof(obj.options.onresizecolumn) == 'function') { + obj.options.onresizecolumn(el, column, width, oldWidth); + } + } + + // Update corner position + obj.updateCornerPosition(); + } + } + + /** + * Set the row height + * + * @param row - row number (first row is: 0) + * @param height - new row height + * @param oldHeight - old row height + */ + obj.setHeight = function (row, height, oldHeight) { + if (height > 0) { + // In case the column is an object + if (typeof(row) == 'object') { + row = $(row).getAttribute('data-y'); + } + + // Oldwidth + if (! oldHeight) { + obj.rows[row].getAttribute('height'); + } + + // Set width + obj.rows[row].setAttribute('height', height); + + // Keep options updated + if (! obj.options.rows[row]) { + obj.options.rows[row] = {}; + } + obj.options.rows[row].height = height; + + // Keeping history of changes + obj.setHistory({ + action:'setHeight', + row:row, + oldValue:oldHeight, + newValue:height, + }); + + // On resize column + if (obj.ignoreEvents != true) { + if (typeof(obj.options.onresizerow) == 'function') { + obj.options.onresizerow(el, row, height, oldHeight); + } + } + + // Update corner position + obj.updateCornerPosition(); + } + } + + /** + * Get the row height + * + * @param row - row number (first row is: 0) + * @return height - current row height + */ + obj.getHeight = function(row) { + if (! row) { + // Get height of all rows + var data = []; + for (var j = 0; j < obj.rows.length; j++) { + var h = obj.rows[j].style.height; + if (h) { + data[j] = h; + } + } + } else { + // In case the row is an object + if (typeof(row) == 'object') { + row = $(row).getAttribute('data-y'); + } + + var data = obj.rows[row].style.height; + } + + return data; + } + + /** + * Get the column title + * + * @param column - column number (first column is: 0) + * @param title - new column title + */ + obj.getHeader = function(column) { + return obj.headers[column].innerText; + } + + /** + * Set the column title + * + * @param column - column number (first column is: 0) + * @param title - new column title + */ + obj.setHeader = function(column, newValue) { + if (obj.headers[column]) { + var oldValue = obj.headers[column].innerText; + + if (! newValue) { + newValue = prompt(obj.options.text.columnName, oldValue) + } + + if (newValue) { + obj.headers[column].innerHTML = newValue; + } + + obj.setHistory({ + action: 'setHeader', + column: column, + oldValue: oldValue, + newValue: newValue + }); + + // On change + if (! obj.ignoreEvents) { + if (typeof(obj.options.onchangeheader) == 'function') { + obj.options.onchangeheader(el, column, oldValue, newValue); + } + } + } + } + + /** + * Get the headers + * + * @param asArray + * @return mixed + */ + obj.getHeaders = function (asArray) { + var title = []; + + for (var i = 0; i < obj.headers.length; i++) { + title.push(obj.getHeader(i)); + } + + return asArray ? title : title.join(obj.options.csvDelimiter); + } + + /** + * Get meta information from cell(s) + * + * @return integer + */ + obj.getMeta = function(cell, key) { + if (! cell) { + return obj.options.meta; + } else { + if (key) { + return obj.options.meta[cell] && obj.options.meta[cell][key] ? obj.options.meta[cell][key] : null; + } else { + return obj.options.meta[cell] ? obj.options.meta[cell] : null; + } + } + } + + /** + * Set meta information to cell(s) + * + * @return integer + */ + obj.setMeta = function(o, k, v) { + if (! obj.options.meta) { + obj.options.meta = {} + } + + if (k && v) { + // Set data value + if (! obj.options.meta[o]) { + obj.options.meta[o] = {}; + } + obj.options.meta[o][k] = v; + } else { + // Apply that for all cells + var keys = Object.keys(o); + for (var i = 0; i < keys.length; i++) { + if (! obj.options.meta[keys[i]]) { + obj.options.meta[keys[i]] = {}; + } + + var prop = Object.keys(o[keys[i]]); + for (var j = 0; j < prop.length; j++) { + obj.options.meta[keys[i]][prop[j]] = o[keys[i]][prop[j]]; + } + } + } + + if (obj.ignoreEvents != true) { + if (typeof(obj.options.onchangemeta) == 'function') { + obj.options.onchangemeta(el, o, k, v); + } + } + } + + /** + * Update meta information + * + * @return integer + */ + obj.updateMeta = function(affectedCells) { + if (obj.options.meta) { + var newMeta = {}; + var keys = Object.keys(obj.options.meta); + for (var i = 0; i < keys.length; i++) { + if (affectedCells[keys[i]]) { + newMeta[affectedCells[keys[i]]] = obj.options.meta[keys[i]]; + } else { + newMeta[keys[i]] = obj.options.meta[keys[i]]; + } + } + // Update meta information + obj.options.meta = newMeta; + } + } + + /** + * Get style information from cell(s) + * + * @return integer + */ + obj.getStyle = function(cell, key) { + // Cell + if (! cell) { + // Control vars + var data = {}; + + // Column and row length + var x = obj.options.data[0].length; + var y = obj.options.data.length; + + // Go through the columns to get the data + for (var j = 0; j < y; j++) { + for (var i = 0; i < x; i++) { + // Value + var v = key ? obj.records[j][i].style[key] : obj.records[j][i].getAttribute('style'); + + // Any meta data for this column? + if (v) { + // Column name + var k = jexcel.getColumnNameFromId([i, j]); + // Value + data[k] = v; + } + } + } + + return data; + } else { + cell = jexcel.getIdFromColumnName(cell, true); + + return key ? obj.records[cell[1]][cell[0]].style[key] : obj.records[cell[1]][cell[0]].getAttribute('style'); + } + }, + + obj.resetStyle = function(o, ignoreHistoryAndEvents) { + var keys = Object.keys(o); + for (var i = 0; i < keys.length; i++) { + // Position + var cell = jexcel.getIdFromColumnName(keys[i], true); + if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) { + obj.records[cell[1]][cell[0]].setAttribute('style', ''); + } + } + obj.setStyle(o, null, null, null, ignoreHistoryAndEvents); + } + + /** + * Set meta information to cell(s) + * + * @return integer + */ + obj.setStyle = function(o, k, v, force, ignoreHistoryAndEvents) { + var newValue = {}; + var oldValue = {}; + + // Apply style + var applyStyle = function(cellId, key, value) { + // Position + var cell = jexcel.getIdFromColumnName(cellId, true); + + if (obj.records[cell[1]] && obj.records[cell[1]][cell[0]]) { + // Current value + var currentValue = obj.records[cell[1]][cell[0]].style[key]; + + // Change layout + if (currentValue == value && ! force) { + value = ''; + obj.records[cell[1]][cell[0]].style[key] = ''; + } else { + obj.records[cell[1]][cell[0]].style[key] = value; + } + + // History + if (! oldValue[cellId]) { + oldValue[cellId] = []; + } + if (! newValue[cellId]) { + newValue[cellId] = []; + } + + oldValue[cellId].push([key + ':' + currentValue]); + newValue[cellId].push([key + ':' + value]); + } + } + + if (k && v) { + // Get object from string + if (typeof(o) == 'string') { + applyStyle(o, k, v); + } else { + // Avoid duplications + var oneApplication = []; + // Apply that for all cells + for (var i = 0; i < o.length; i++) { + var x = o[i].getAttribute('data-x'); + var y = o[i].getAttribute('data-y'); + var cellName = jexcel.getColumnNameFromId([x, y]); + // This happens when is a merged cell + if (! oneApplication[cellName]) { + applyStyle(cellName, k, v); + oneApplication[cellName] = true; + } + } + } + } else { + var keys = Object.keys(o); + for (var i = 0; i < keys.length; i++) { + var style = o[keys[i]]; + if (typeof(style) == 'string') { + style = style.split(';'); + } + for (var j = 0; j < style.length; j++) { + if (typeof(style[j]) == 'string') { + style[j] = style[j].split(':'); + } + // Apply value + if (style[j][0].trim()) { + applyStyle(keys[i], style[j][0].trim(), style[j][1]); + } + } + } + } + + var keys = Object.keys(oldValue); + for (var i = 0; i < keys.length; i++) { + oldValue[keys[i]] = oldValue[keys[i]].join(';'); + } + var keys = Object.keys(newValue); + for (var i = 0; i < keys.length; i++) { + newValue[keys[i]] = newValue[keys[i]].join(';'); + } + + if (! ignoreHistoryAndEvents) { + // Keeping history of changes + obj.setHistory({ + action: 'setStyle', + oldValue: oldValue, + newValue: newValue, + }); + } + + if (obj.ignoreEvents != true) { + if (typeof(obj.options.onchangestyle) == 'function') { + obj.options.onchangestyle(el, o, k, v); + } + } + } + + /** + * Get cell comments + */ + obj.getComments = function(cell, withAuthor) { + if (typeof(cell) == 'string') { + var cell = jexcel.getIdFromColumnName(cell, true); + } + + if (withAuthor) { + return [obj.records[cell[1]][cell[0]].getAttribute('title'), obj.records[cell[1]][cell[0]].getAttribute('author')]; + } else { + return obj.records[cell[1]][cell[0]].getAttribute('title') || ''; + } + } + + /** + * Set cell comments + */ + obj.setComments = function(cellId, comments, author) { + if (typeof(cellId) == 'string') { + var cell = jexcel.getIdFromColumnName(cellId, true); + } else { + var cell = cellId; + } + + // Keep old value + var title = obj.records[cell[1]][cell[0]].getAttribute('title'); + var author = obj.records[cell[1]][cell[0]].getAttribute('data-author'); + var oldValue = [ title, author ]; + + // Set new values + obj.records[cell[1]][cell[0]].setAttribute('title', comments ? comments : ''); + obj.records[cell[1]][cell[0]].setAttribute('data-author', author ? author : ''); + + // Remove class if there is no comment + if (comments) { + obj.records[cell[1]][cell[0]].classList.add('jexcel_comments'); + } else { + obj.records[cell[1]][cell[0]].classList.remove('jexcel_comments'); + } + + // Save history + obj.setHistory({ + action:'setComments', + column: cellId, + newValue: [ comments, author ], + oldValue: oldValue, + }); + } + + /** + * Get table config information + */ + obj.getConfig = function() { + var options = obj.options; + options.style = obj.getStyle(); + options.mergeCells = obj.getMerge(); + + return options; + } + + /** + * Sort data and reload table + */ + obj.orderBy = function(column, order) { + if (column >= 0) { + // Merged cells + if (Object.keys(obj.options.mergeCells).length > 0) { + if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { + return false; + } else { + // Remove merged cells + obj.destroyMerged(); + } + } + + // Direction + if (order == null) { + order = obj.headers[column].classList.contains('arrow-down') ? 1 : 0; + } else { + order = order ? 1 : 0; + } + + // Filter + Array.prototype.orderBy = function(p, o) { + return this.slice(0).sort(function(a, b) { + var valueA = a[p] == '' ? '' : Number(a[p]) == a[p] ? Number(a[p]) : a[p].toLowerCase(); + var valueB = b[p] == '' ? '' : Number(b[p]) == b[p] ? Number(b[p]) : b[p].toLowerCase(); + + if (! o) { + return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? 1 : (valueA < valueB) ? -1 : 0; + } else { + return (valueA == '' && valueB != '') ? 1 : (valueA != '' && valueB == '') ? -1 : (valueA > valueB) ? -1 : (valueA < valueB) ? 1 : 0; + } + }); + } + + // Test order + var temp = []; + if (obj.options.columns[column].type == 'calendar' || + obj.options.columns[column].type == 'checkbox' || + obj.options.columns[column].type == 'radio') { + for (var j = 0; j < obj.options.data.length; j++) { + temp[j] = [ j, obj.options.data[j][column] ]; + } + } else { + for (var j = 0; j < obj.options.data.length; j++) { + temp[j] = [ j, obj.records[j][column].innerHTML ]; + } + } + temp = temp.orderBy(1, order); + + // Save history + var newValue = []; + for (var j = 0; j < temp.length; j++) { + newValue[j] = temp[j][0]; + } + + // Save history + obj.setHistory({ + action: 'orderBy', + rows: newValue, + column: column, + order: order, + }); + + // Update order + obj.updateOrderArrow(column, order); + obj.updateOrder(newValue); + + // On sort event + if (obj.ignoreEvents != true) { + if (typeof(obj.options.onsort) == 'function') { + obj.options.onsort(el, column, order); + } + } + + return true; + } + } + + /** + * Update order arrow + */ + obj.updateOrderArrow = function(column, order) { + // Remove order + for (var i = 0; i < obj.headers.length; i++) { + obj.headers[i].classList.remove('arrow-up'); + obj.headers[i].classList.remove('arrow-down'); + } + + // No order specified then toggle order + if (order) { + obj.headers[column].classList.add('arrow-up'); + } else { + obj.headers[column].classList.add('arrow-down'); + } + } + + /** + * Update rows position + */ + obj.updateOrder = function(rows) { + // History + var data = [] + for (var j = 0; j < rows.length; j++) { + data[j] = obj.options.data[rows[j]]; + } + obj.options.data = data; + + var data = [] + for (var j = 0; j < rows.length; j++) { + data[j] = obj.records[rows[j]]; + } + obj.records = data; + + var data = [] + for (var j = 0; j < rows.length; j++) { + data[j] = obj.rows[rows[j]]; + } + obj.rows = data; + + // Update references + obj.updateTableReferences(); + + // Redo search + if (obj.searchInput.value) { + obj.search(obj.searchInput.value); + } else { + // Create page + obj.results = null; + obj.pageNumber = 0; + + if (obj.options.pagination > 0) { + obj.page(0); + } else if (obj.options.lazyLoading == true) { + obj.loadPage(0); + } else { + for (var j = 0; j < obj.rows.length; j++) { + obj.tbody.appendChild(obj.rows[j]); + } + } + } + } + + /** + * Move row + * + * @return void + */ + obj.moveRow = function(o, d, ignoreDom) { + if (Object.keys(obj.options.mergeCells).length > 0) { + if (obj.isRowMerged(d).length) { + if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { + return false; + } else { + obj.destroyMerged(); + } + } + } + + if (obj.options.search == true) { + if (obj.results && obj.results.length != obj.rows.length) { + if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) { + obj.resetSearch(); + } else { + return false; + } + } + + obj.results = null; + } + + if (! ignoreDom) { + if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[d]) >= 0) { + if (o > d) { + obj.tbody.insertBefore(obj.rows[o], obj.rows[d]); + } else { + obj.tbody.insertBefore(obj.rows[o], obj.rows[d].nextSibling); + } + } else { + obj.tbody.removeChild(obj.rows[o]); + } + } + + // Place references in the correct position + obj.rows.splice(d, 0, obj.rows.splice(o, 1)[0]); + obj.records.splice(d, 0, obj.records.splice(o, 1)[0]); + obj.options.data.splice(d, 0, obj.options.data.splice(o, 1)[0]); + + // Respect pagination + if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) { + obj.page(obj.pageNumber); + } + + // Keeping history of changes + obj.setHistory({ + action:'moveRow', + oldValue: o, + newValue: d, + }); + + // Update table references + obj.updateTableReferences(); + + // Events + if (obj.ignoreEvents != true) { + if (typeof(obj.options.onmoverow) == 'function') { + obj.options.onmoverow(el, o, d); + } + } + } + + /** + * Insert a new row + * + * @param mixed - number of blank lines to be insert or a single array with the data of the new row + * @param rowNumber + * @param insertBefore + * @return void + */ + obj.insertRow = function(mixed, rowNumber, insertBefore) { + // Configuration + if (obj.options.allowInsertRow == true) { + // Records + var records = []; + + // Data to be insert + var data = []; + + // The insert could be lead by number of rows or the array of data + if (mixed > 0) { + var numOfRows = mixed; + } else { + var numOfRows = 1; + + if (mixed) { + data = mixed; + } + } + + // Direction + var insertBefore = insertBefore ? true : false; + + // Current column number + var lastRow = obj.options.data.length - 1; + + if (rowNumber == undefined || rowNumber >= parseInt(lastRow) || rowNumber < 0) { + rowNumber = lastRow; + } + + // Onbeforeinsertrow + if (typeof(obj.options.onbeforeinsertrow) == 'function') { + if (! obj.options.onbeforeinsertrow(el, rowNumber, numOfRows, insertBefore)) { + console.log('onbeforeinsertrow returned false'); + + return false; + } + } + + // Merged cells + if (Object.keys(obj.options.mergeCells).length > 0) { + if (obj.isRowMerged(rowNumber, insertBefore).length) { + if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { + return false; + } else { + obj.destroyMerged(); + } + } + } + + // Clear any search + if (obj.options.search == true) { + if (obj.results && obj.results.length != obj.rows.length) { + if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) { + obj.resetSearch(); + } else { + return false; + } + } + + obj.results = null; + } + + // Insertbefore + var rowIndex = (! insertBefore) ? rowNumber + 1 : rowNumber; + + // Keep the current data + var currentRecords = obj.records.splice(rowIndex); + var currentData = obj.options.data.splice(rowIndex); + var currentRows = obj.rows.splice(rowIndex); + + // Adding lines + var rowRecords = []; + var rowData = []; + var rowNode = []; + + for (var row = rowIndex; row < (numOfRows + rowIndex); row++) { + // Push data to the data container + obj.options.data[row] = []; + for (var col = 0; col < obj.options.columns.length; col++) { + obj.options.data[row][col] = data[col] ? data[col] : ''; + } + // Create row + var tr = obj.createRow(row, obj.options.data[row]); + // Append node + if (! currentRows[0] || Array.prototype.indexOf.call(obj.tbody.children, currentRows[0]) >= 0) { + obj.tbody.insertBefore(tr, currentRows[0]); + } + // Record History + rowRecords.push(obj.records[row]); + rowData.push(obj.options.data[row]); + rowNode.push(tr); + } + + // Copy the data back to the main data + Array.prototype.push.apply(obj.records, currentRecords); + Array.prototype.push.apply(obj.options.data, currentData); + Array.prototype.push.apply(obj.rows, currentRows); + + // Respect pagination + if (obj.options.pagination > 0) { + obj.page(obj.pageNumber); + } + + // Keep history + obj.setHistory({ + action: 'insertRow', + rowNumber: rowNumber, + numOfRows: numOfRows, + insertBefore: insertBefore, + rowRecords: rowRecords, + rowData: rowData, + rowNode: rowNode, + }); + + // Remove table references + obj.updateTableReferences(); + + // Events + if (obj.ignoreEvents != true) { + if (typeof(obj.options.oninsertrow) == 'function') { + obj.options.oninsertrow(el, rowNumber, numOfRows, rowRecords, insertBefore); + } + } + } + } + + /** + * Delete a row by number + * + * @param integer rowNumber - row number to be excluded + * @param integer numOfRows - number of lines + * @return void + */ + obj.deleteRow = function(rowNumber, numOfRows) { + // Global Configuration + if (obj.options.allowDeleteRow == true) { + if (obj.options.allowDeletingAllRows == true || obj.options.data.length > 1) { + // Delete row definitions + if (rowNumber == undefined) { + var number = obj.getSelectedRows(); + + if (! number[0]) { + rowNumber = obj.options.data.length - 1; + numOfRows = 1; + } else { + rowNumber = parseInt(number[0].getAttribute('data-y')); + numOfRows = number.length; + } + } + + // Last column + var lastRow = obj.options.data.length - 1; + + if (rowNumber == undefined || rowNumber > lastRow || rowNumber < 0) { + rowNumber = lastRow; + } + + if (! numOfRows) { + numOfRows = 1; + } + + // Do not delete more than the number of recoreds + if (rowNumber + numOfRows >= obj.options.data.length) { + numOfRows = obj.options.data.length - rowNumber; + } + + // Onbeforedeleterow + if (typeof(obj.options.onbeforedeleterow) == 'function') { + if (! obj.options.onbeforedeleterow(el, rowNumber, numOfRows)) { + console.log('onbeforedeleterow returned false'); + return false; + } + } + + if (parseInt(rowNumber) > -1) { + // Merged cells + var mergeExists = false; + if (Object.keys(obj.options.mergeCells).length > 0) { + for (var row = rowNumber; row < rowNumber + numOfRows; row++) { + if (obj.isRowMerged(row, false).length) { + mergeExists = true; + } + } + } + if (mergeExists) { + if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { + return false; + } else { + obj.destroyMerged(); + } + } + + // Clear any search + if (obj.options.search == true) { + if (obj.results && obj.results.length != obj.rows.length) { + if (confirm(obj.options.text.thisActionWillClearYourSearchResultsAreYouSure)) { + obj.resetSearch(); + } else { + return false; + } + } + + obj.results = null; + } + + // Remove node + for (var row = rowNumber; row < rowNumber + numOfRows; row++) { + if (Array.prototype.indexOf.call(obj.tbody.children, obj.rows[row]) >= 0) { + obj.rows[row].className = ''; + obj.rows[row].parentNode.removeChild(obj.rows[row]); + } + } + + // Remove data + var rowRecords = obj.records.splice(rowNumber, numOfRows); + var rowData = obj.options.data.splice(rowNumber, numOfRows); + var rowNode = obj.rows.splice(rowNumber, numOfRows); + + // Respect pagination + if (obj.options.pagination > 0 && obj.tbody.children.length != obj.options.pagination) { + obj.page(obj.pageNumber); + } + + // Remove selection + obj.conditionalSelectionUpdate(1, rowNumber, (rowNumber + numOfRows) - 1); + + // Keep history + obj.setHistory({ + action: 'deleteRow', + rowNumber: rowNumber, + numOfRows: numOfRows, + insertBefore: 1, + rowRecords: rowRecords, + rowData: rowData, + rowNode: rowNode + }); + + // Remove table references + obj.updateTableReferences(); + + // Events + if (obj.ignoreEvents != true) { + if (typeof(obj.options.ondeleterow) == 'function') { + obj.options.ondeleterow(el, rowNumber, numOfRows, rowRecords); + } + } + } + } else { + console.error('JEXCEL. It is not possible to delete the last row'); + } + } + } + + + /** + * Move column + * + * @return void + */ + obj.moveColumn = function(o, d) { + if (Object.keys(obj.options.mergeCells).length > 0) { + if (obj.isColMerged(d).length) { + if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { + return false; + } else { + obj.destroyMerged(); + } + } + } + + var o = parseInt(o); + var d = parseInt(d); + + if (o > d) { + obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d]); + obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d]); + + for (var j = 0; j < obj.rows.length; j++) { + obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d]); + } + } else { + obj.headerContainer.insertBefore(obj.headers[o], obj.headers[d].nextSibling); + obj.colgroupContainer.insertBefore(obj.colgroup[o], obj.colgroup[d].nextSibling); + + for (var j = 0; j < obj.rows.length; j++) { + obj.rows[j].insertBefore(obj.records[j][o], obj.records[j][d].nextSibling); + } + } + + obj.options.columns.splice(d, 0, obj.options.columns.splice(o, 1)[0]); + obj.headers.splice(d, 0, obj.headers.splice(o, 1)[0]); + obj.colgroup.splice(d, 0, obj.colgroup.splice(o, 1)[0]); + + for (var j = 0; j < obj.rows.length; j++) { + obj.options.data[j].splice(d, 0, obj.options.data[j].splice(o, 1)[0]); + obj.records[j].splice(d, 0, obj.records[j].splice(o, 1)[0]); + } + + // Keeping history of changes + obj.setHistory({ + action:'moveColumn', + oldValue: o, + newValue: d, + }); + + // Update table references + obj.updateTableReferences(); + + // Events + if (obj.ignoreEvents != true) { + if (typeof(obj.options.onmovecolumn) == 'function') { + obj.options.onmovecolumn(el, o, d); + } + } + } + + + /** + * Insert a new column + * + * @param mixed - num of columns to be added or data to be added in one single column + * @param int columnNumber - number of columns to be created + * @param bool insertBefore + * @param object properties - column properties + * @return void + */ + obj.insertColumn = function(mixed, columnNumber, insertBefore, properties) { + // Configuration + if (obj.options.allowInsertColumn == true) { + // Records + var records = []; + + // Data to be insert + var data = []; + + // The insert could be lead by number of rows or the array of data + if (mixed > 0) { + var numOfColumns = mixed; + } else { + var numOfColumns = 1; + + if (mixed) { + data = mixed; + } + } + + // Direction + var insertBefore = insertBefore ? true : false; + + // Current column number + var lastColumn = obj.options.columns.length - 1; + + // Confirm position + if (columnNumber == undefined || columnNumber >= parseInt(lastColumn) || columnNumber < 0) { + columnNumber = lastColumn; + } + + // Onbeforeinsertcolumn + if (typeof(obj.options.onbeforeinsertcolumn) == 'function') { + if (! obj.options.onbeforeinsertcolumn(el, columnNumber, numOfColumns, insertBefore)) { + console.log('onbeforeinsertcolumn returned false'); + + return false; + } + } + + // Merged cells + if (Object.keys(obj.options.mergeCells).length > 0) { + if (obj.isColMerged(columnNumber, insertBefore).length) { + if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { + return false; + } else { + obj.destroyMerged(); + } + } + } + + // Create default properties + if (! properties) { + properties = []; + } + + for (var i = 0; i < numOfColumns; i++) { + if (! properties[i]) { + properties[i] = { type:'text', source:[], options:[], width:obj.options.defaultColWidth, align:obj.options.defaultColAlign }; + } + } + + // Insert before + var columnIndex = (! insertBefore) ? columnNumber + 1 : columnNumber; + obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, properties); + + // Open space in the containers + var currentHeaders = obj.headers.splice(columnIndex); + var currentColgroup = obj.colgroup.splice(columnIndex); + + // History + var historyHeaders = []; + var historyColgroup = []; + var historyRecords = []; + var historyData = []; + + // Add new headers + for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) { + obj.createCellHeader(col); + obj.headerContainer.insertBefore(obj.headers[col], obj.headerContainer.children[col+1]); + obj.colgroupContainer.insertBefore(obj.colgroup[col], obj.colgroupContainer.children[col+1]); + + historyHeaders.push(obj.headers[col]); + historyColgroup.push(obj.colgroup[col]); + } + + // Adding visual columns + for (var row = 0; row < obj.options.data.length; row++) { + // Keep the current data + var currentData = obj.options.data[row].splice(columnIndex); + var currentRecord = obj.records[row].splice(columnIndex); + + // History + historyData[row] = []; + historyRecords[row] = []; + + for (var col = columnIndex; col < (numOfColumns + columnIndex); col++) { + // New value + var value = data[row] ? data[row] : ''; + obj.options.data[row][col] = value; + // New cell + var td = obj.createCell(col, row, obj.options.data[row][col]); + obj.records[row][col] = td; + // Add cell to the row + if (obj.rows[row]) { + obj.rows[row].insertBefore(td, obj.rows[row].children[col+1]); + } + + // Record History + historyData[row].push(value); + historyRecords[row].push(td); + } + + // Copy the data back to the main data + Array.prototype.push.apply(obj.options.data[row], currentData); + Array.prototype.push.apply(obj.records[row], currentRecord); + } + + Array.prototype.push.apply(obj.headers, currentHeaders); + Array.prototype.push.apply(obj.colgroup, currentColgroup); + + // Adjust nested headers + if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { + // Flexible way to handle nestedheaders + if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { + for (var j = 0; j < obj.options.nestedHeaders.length; j++) { + var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + numOfColumns; + obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan; + obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan); + } + } else { + var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + numOfColumns; + obj.options.nestedHeaders[0].colspan = colspan; + obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan); + } + } + + // Keep history + obj.setHistory({ + action: 'insertColumn', + columnNumber:columnNumber, + numOfColumns:numOfColumns, + insertBefore:insertBefore, + columns:properties, + headers:historyHeaders, + colgroup:historyColgroup, + records:historyRecords, + data:historyData, + }); + + // Remove table references + obj.updateTableReferences(); + + // Events + if (obj.ignoreEvents != true) { + if (typeof(obj.options.oninsertcolumn) == 'function') { + obj.options.oninsertcolumn(el, columnNumber, numOfColumns); + } + } + } + } + + /** + * Delete a column by number + * + * @param integer columnNumber - reference column to be excluded + * @param integer numOfColumns - number of columns to be excluded from the reference column + * @return void + */ + obj.deleteColumn = function(columnNumber, numOfColumns) { + // Global Configuration + if (obj.options.allowDeleteColumn == true) { + if (obj.headers.length > 1) { + // Delete column definitions + if (columnNumber == undefined) { + var number = obj.getSelectedColumns(true); + + if (! number.length) { + // Remove last column + columnNumber = obj.headers.length - 1; + numOfColumns = 1; + } else { + // Remove selected + columnNumber = parseInt(number[0]); + numOfColumns = parseInt(number.length); + } + } + + // Lasat column + var lastColumn = obj.options.data[0].length - 1; + + if (columnNumber == undefined || columnNumber > lastColumn || columnNumber < 0) { + columnNumber = lastColumn; + } + + // Minimum of columns to be delete is 1 + if (! numOfColumns) { + numOfColumns = 1; + } + + + + // Can't delete more than the limit of the table + if (numOfColumns > obj.options.data[0].length - columnNumber) { + numOfColumns = obj.options.data[0].length - columnNumber; + } + + // onbeforedeletecolumn + if (typeof(obj.options.onbeforedeletecolumn) == 'function') { + if (! obj.options.onbeforedeletecolumn(el, columnNumber, numOfColumns)) { + console.log('onbeforedeletecolumn returned false'); + return false; + } + } + + // Can't remove the last column + if (parseInt(columnNumber) > -1) { + // Merged cells + var mergeExists = false; + if (Object.keys(obj.options.mergeCells).length > 0) { + for (var col = columnNumber; col < columnNumber + numOfColumns; col++) { + if (obj.isColMerged(col, false).length) { + mergeExists = true; + } + } + } + if (mergeExists) { + if (! confirm(obj.options.text.thisActionWillDestroyAnyExistingMergedCellsAreYouSure)) { + return false; + } else { + obj.destroyMerged(); + } + } + + // Delete the column properties + var columns = obj.options.columns.splice(columnNumber, numOfColumns); + + for (var col = columnNumber; col < columnNumber + numOfColumns; col++) { + obj.colgroup[col].className = ''; + obj.headers[col].className = ''; + obj.colgroup[col].parentNode.removeChild(obj.colgroup[col]); + obj.headers[col].parentNode.removeChild(obj.headers[col]); + } + + var historyHeaders = obj.headers.splice(columnNumber, numOfColumns); + var historyColgroup = obj.colgroup.splice(columnNumber, numOfColumns); + var historyRecords = []; + var historyData = []; + + for (var row = 0; row < obj.options.data.length; row++) { + for (var col = columnNumber; col < columnNumber + numOfColumns; col++) { + obj.records[row][col].className = ''; + obj.records[row][col].parentNode.removeChild(obj.records[row][col]); + } + } + + // Delete headers + for (var row = 0; row < obj.options.data.length; row++) { + // History + historyData[row] = obj.options.data[row].splice(columnNumber, numOfColumns); + historyRecords[row] = obj.records[row].splice(columnNumber, numOfColumns); + } + + // Remove selection + obj.conditionalSelectionUpdate(0, columnNumber, (columnNumber + numOfColumns) - 1); + + // Adjust nested headers + if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { + // Flexible way to handle nestedheaders + if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { + for (var j = 0; j < obj.options.nestedHeaders.length; j++) { + var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - numOfColumns; + obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan; + obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan); + } + } else { + var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - numOfColumns; + obj.options.nestedHeaders[0].colspan = colspan; + obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan); + } + } + + // Keeping history of changes + obj.setHistory({ + action:'deleteColumn', + columnNumber:columnNumber, + numOfColumns:numOfColumns, + insertBefore: 1, + columns:columns, + headers:historyHeaders, + colgroup:historyColgroup, + records:historyRecords, + data:historyData, + }); + + // Update table references + obj.updateTableReferences(); + + // Delete + if (obj.ignoreEvents != true) { + if (typeof(obj.options.ondeletecolumn) == 'function') { + obj.options.ondeletecolumn(el, columnNumber, numOfColumns, historyRecords); + } + } + } + } else { + console.error('JEXCEL. It is not possible to delete the last column'); + } + } + } + + /** + * Get seleted rows numbers + * + * @return array + */ + obj.getSelectedRows = function(asIds) { + var rows = []; + // Get all selected rows + for (var j = 0; j < obj.rows.length; j++) { + if (obj.rows[j].classList.contains('selected')) { + if (asIds) { + rows.push(j); + } else { + rows.push(obj.rows[j]); + } + } + } + + return rows; + }, + + /** + * Get seleted column numbers + * + * @return array + */ + obj.getSelectedColumns = function() { + var cols = []; + // Get all selected cols + for (var i = 0; i < obj.headers.length; i++) { + if (obj.headers[i].classList.contains('selected')) { + cols.push(i); + } + } + + return cols; + } + + /** + * Get highlighted + * + * @return array + */ + obj.getHighlighted = function() { + return obj.highlighted; + } + + /** + * Update cell references + * + * @return void + */ + obj.updateTableReferences = function() { + // Update headers + for (var i = 0; i < obj.headers.length; i++) { + var x = obj.headers[i].getAttribute('data-x'); + + if (x != i) { + // Update coords + obj.headers[i].setAttribute('data-x', i); + // Title + if (! obj.headers[i].getAttribute('title')) { + obj.headers[i].innerHTML = jexcel.getColumnName(i); + } + } + } + + // Update all rows + for (var j = 0; j < obj.rows.length; j++) { + if (obj.rows[j]) { + var y = obj.rows[j].getAttribute('data-y'); + + if (y != j) { + // Update coords + obj.rows[j].setAttribute('data-y', j); + obj.rows[j].children[0].setAttribute('data-y', j); + // Row number + obj.rows[j].children[0].innerHTML = j + 1; + } + } + } + + // Regular cells affected by this change + var affectedTokens = []; + var mergeCellUpdates = []; + + // Update cell + var updatePosition = function(x,y,i,j) { + if (x != i) { + obj.records[j][i].setAttribute('data-x', i); + } + if (y != j) { + obj.records[j][i].setAttribute('data-y', j); + } + + // Other updates + if (x != i || y != j) { + var columnIdFrom = jexcel.getColumnNameFromId([x, y]); + var columnIdTo = jexcel.getColumnNameFromId([i, j]); + affectedTokens[columnIdFrom] = columnIdTo; + } + } + + for (var j = 0; j < obj.records.length; j++) { + for (var i = 0; i < obj.records[0].length; i++) { + if (obj.records[j][i]) { + // Current values + var x = obj.records[j][i].getAttribute('data-x'); + var y = obj.records[j][i].getAttribute('data-y'); + + // Update column + if (obj.records[j][i].getAttribute('data-merged')) { + var columnIdFrom = jexcel.getColumnNameFromId([x, y]); + var columnIdTo = jexcel.getColumnNameFromId([i, j]); + if (mergeCellUpdates[columnIdFrom] == null) { + if (columnIdFrom == columnIdTo) { + mergeCellUpdates[columnIdFrom] = false; + } else { + var totalX = parseInt(i - x); + var totalY = parseInt(j - y); + mergeCellUpdates[columnIdFrom] = [ columnIdTo, totalX, totalY ]; + } + } + } else { + updatePosition(x,y,i,j); + } + } + } + } + + // Update merged if applicable + var keys = Object.keys(mergeCellUpdates); + if (keys.length) { + for (var i = 0; i < keys.length; i++) { + if (mergeCellUpdates[keys[i]]) { + var info = jexcel.getIdFromColumnName(keys[i], true) + var x = info[0]; + var y = info[1]; + updatePosition(x,y,x + mergeCellUpdates[keys[i]][1],y + mergeCellUpdates[keys[i]][2]); + + var columnIdFrom = keys[i]; + var columnIdTo = mergeCellUpdates[keys[i]][0]; + for (var j = 0; j < obj.options.mergeCells[columnIdFrom][2].length; j++) { + var x = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-x')); + var y = parseInt(obj.options.mergeCells[columnIdFrom][2][j].getAttribute('data-y')); + obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-x', x + mergeCellUpdates[keys[i]][1]); + obj.options.mergeCells[columnIdFrom][2][j].setAttribute('data-y', y + mergeCellUpdates[keys[i]][2]); + } + + obj.options.mergeCells[columnIdTo] = obj.options.mergeCells[columnIdFrom]; + delete(obj.options.mergeCells[columnIdFrom]); + } + } + } + + // Update formulas + obj.updateFormulas(affectedTokens); + + // Update meta data + obj.updateMeta(affectedTokens); + + // Refresh selection + obj.refreshSelection(); + + // Update table with custom configuration if applicable + obj.updateTable(); + } + + /** + * Custom settings for the cells + */ + obj.updateTable = function() { + // Check for spare + if (obj.options.minSpareRows > 0) { + var numBlankRows = 0; + for (var j = obj.rows.length - 1; j >= 0; j--) { + var test = false; + for (var i = 0; i < obj.headers.length; i++) { + if (obj.options.data[j][i]) { + test = true; + } + } + if (test) { + break; + } else { + numBlankRows++; + } + } + + if (obj.options.minSpareRows - numBlankRows > 0) { + obj.insertRow(obj.options.minSpareRows - numBlankRows) + } + } + + if (obj.options.minSpareCols > 0) { + var numBlankCols = 0; + for (var i = obj.headers.length - 1; i >= 0 ; i--) { + var test = false; + for (var j = 0; j < obj.rows.length; j++) { + if (obj.options.data[j][i]) { + test = true; + } + } + if (test) { + break; + } else { + numBlankCols++; + } + } + + if (obj.options.minSpareCols - numBlankCols > 0) { + obj.insertColumn(obj.options.minSpareCols - numBlankCols) + } + } + + // Customizations by the developer + if (typeof(obj.options.updateTable) == 'function') { + for (var j = 0; j < obj.rows.length; j++) { + for (var i = 0; i < obj.headers.length; i++) { + obj.options.updateTable(el, obj.records[j][i], i, j, obj.options.data[j][i], obj.records[j][i].innerText, jexcel.getColumnNameFromId([i, j])); + } + } + } + + // Update corner position + setTimeout(function() { + obj.updateCornerPosition(); + },0); + } + + /** + * Show index column + */ + obj.showIndex = function() { + obj.table.classList.remove('jexcel_hidden_index'); + } + + /** + * Hide index column + */ + obj.hideIndex = function() { + obj.table.classList.add('jexcel_hidden_index'); + } + + /** + * Update all related cells in the chain + */ + var chainLoopProtection = []; + + obj.updateFormulaChain = function(x, y, records) { + var cellId = jexcel.getColumnNameFromId([x, y]); + if (obj.formula[cellId] && obj.formula[cellId].length > 0) { + if (chainLoopProtection[cellId]) { + obj.records[y][x].innerHTML = '#ERROR'; + obj.formula[cellId] = ''; + } else { + // Protection + chainLoopProtection[cellId] = true; + + for (var i = 0; i < obj.formula[cellId].length; i++) { + var cell = jexcel.getIdFromColumnName(obj.formula[cellId][i], true); + // Update cell + var value = ''+obj.options.data[cell[1]][cell[0]]; + if (value.substr(0,1) == '=') { + records.push(obj.updateCell(cell[0], cell[1], value, true)); + } else { + // No longer a formula, remove from the chain + Object.keys(obj.formula)[i] = null; + } + obj.updateFormulaChain(cell[0], cell[1], records); + } + } + } + + chainLoopProtection = []; + } + + /** + * Update formulas + */ + obj.updateFormulas = function(referencesToUpdate) { + // Update formulas + for (var j = 0; j < obj.options.data.length; j++) { + for (var i = 0; i < obj.options.data[0].length; i++) { + var value = '' + obj.options.data[j][i]; + // Is formula + if (value.substr(0,1) == '=') { + // Replace tokens + var newFormula = obj.updateFormula(value, referencesToUpdate); + if (newFormula != value) { + obj.options.data[j][i] = newFormula; + } + } + } + } + + // Update formula chain + var formula = []; + var keys = Object.keys(obj.formula); + for (var j = 0; j < keys.length; j++) { + // Current key and values + var key = keys[j]; + var value = obj.formula[key]; + // Update key + if (referencesToUpdate[key]) { + key = referencesToUpdate[key]; + } + // Update values + formula[key] = []; + for (var i = 0; i < value.length; i++) { + var letter = value[i]; + if (referencesToUpdate[letter]) { + letter = referencesToUpdate[letter]; + } + formula[key].push(letter); + } + } + obj.formula = formula; + } + + /** + * Update formula + */ + obj.updateFormula = function(formula, referencesToUpdate) { + var testLetter = /[A-Z]/; + var testNumber = /[0-9]/; + + var newFormula = ''; + var letter = null; + var number = null; + var token = ''; + + for (var index = 0; index < formula.length; index++) { + if (testLetter.exec(formula[index])) { + letter = 1; + number = 0; + token += formula[index]; + } else if (testNumber.exec(formula[index])) { + number = letter ? 1 : 0; + token += formula[index]; + } else { + if (letter && number) { + token = referencesToUpdate[token] ? referencesToUpdate[token] : token; + } + newFormula += token; + newFormula += formula[index]; + letter = 0; + number = 0; + token = ''; + } + } + + if (token) { + if (letter && number) { + token = referencesToUpdate[token] ? referencesToUpdate[token] : token; + } + newFormula += token; + } + + return newFormula; + } + + /** + * Parse formulas + */ + obj.executeFormula = function(expression, x, y) { + + var formulaResults = []; + var formulaLoopProtection = []; + + // Execute formula with loop protection + var execute = function(expression, x, y) { + // Parent column identification + var parentId = jexcel.getColumnNameFromId([x, y]); + + // Code protection + if (formulaLoopProtection[parentId]) { + console.error('Reference loop detected'); + return '#ERROR'; + } + + formulaLoopProtection[parentId] = true; + + // Convert range tokens + var tokensUpdate = function(tokens) { + for (var index = 0; index < tokens.length; index++) { + var f = []; + var token = tokens[index].split(':'); + var e1 = jexcel.getIdFromColumnName(token[0], true); + var e2 = jexcel.getIdFromColumnName(token[1], true); + + if (e1[0] <= e2[0]) { + var x1 = e1[0]; + var x2 = e2[0]; + } else { + var x1 = e2[0]; + var x2 = e1[0]; + } + + if (e1[1] <= e2[1]) { + var y1 = e1[1]; + var y2 = e2[1]; + } else { + var y1 = e2[1]; + var y2 = e1[1]; + } + + for (var j = y1; j <= y2; j++) { + for (var i = x1; i <= x2; i++) { + f.push(jexcel.getColumnNameFromId([i, j])); + } + } + + expression = expression.replace(tokens[index], f.join(',')); + } + } + + var tokens = expression.match(/([A-Z]+[0-9]+)\:([A-Z]+[0-9]+)/g); + if (tokens && tokens.length) { + tokensUpdate(tokens); + } + + // String + var evalstring = ''; + + // Get tokens + var tokens = expression.match(/([A-Z]+[0-9]+)/g); + + // Direct self-reference protection + if (tokens && tokens.indexOf(parentId) > -1) { + console.error('Self Reference detected'); + return '#ERROR'; + } else { + if (tokens) { + for (var i = 0; i < tokens.length; i++) { + // Keep chain + if (! obj.formula[tokens[i]]) { + obj.formula[tokens[i]] = []; + } + // Is already in the register + if (obj.formula[tokens[i]].indexOf(parentId) < 0) { + obj.formula[tokens[i]].push(parentId); + } + + // Do not calculate again + if (eval('typeof(' + tokens[i] + ') == "undefined"')) { + // Coords + var position = jexcel.getIdFromColumnName(tokens[i], 1); + // Get value + if (typeof(obj.options.data[position[1]]) != 'undefined' && typeof(obj.options.data[position[1]][position[0]]) != 'undefined') { + var value = obj.options.data[position[1]][position[0]]; + } else { + var value = ''; + } + // Get column data + if ((''+value).substr(0,1) == '=') { + if (formulaResults[tokens[i]]) { + value = formulaResults[tokens[i]]; + } else { + value = execute(value, position[0], position[1]); + formulaResults[tokens[i]] = value; + } + } + // Type! + if ((''+value).trim() == '') { + // Null + evalstring += "var " + tokens[i] + " = null;"; + } else { + if (value == Number(value)) { + // Number + evalstring += "var " + tokens[i] + " = " + value + ";"; + } else { + // Trying any formatted number + var number = null; + if (number = obj.parseNumber(value, position[0])) { + // Render as number + evalstring += "var " + tokens[i] + " = " + number + ";"; + } else { + // Render as string + evalstring += "var " + tokens[i] + " = '" + value + "';"; + } + } + } + } + } + } + + // Convert formula to javascript + try { + evalstring += "function COLUMN() { return parseInt(x) + 1; }; function ROW() { return parseInt(y) + 1; }; function CELL() { return parentId; };"; + + var res = eval(evalstring + expression.substr(1)); + } catch (e) { + var res = '#ERROR'; + } + + return res; + } + } + + return execute(expression, x, y); + } + + /** + * Trying to extract a number from a string + */ + obj.parseNumber = function(value, columnNumber) { + // Decimal point + var decimal = columnNumber && obj.options.columns[columnNumber].decimal ? obj.options.columns[columnNumber].decimal : '.'; + + // Parse both parts of the number + var number = ('' + value); + number = number.split(decimal); + number[0] = number[0].match(/[+-]?[0-9]/g); + if (number[0]) { + number[0] = number[0].join(''); + } + if (number[1]) { + number[1] = number[1].match(/[0-9]*/g).join(''); + } + + // Is a valid number + if (number[0] && Number(number[0]) >= 0) { + if (! number[1]) { + var value = Number(number[0] + '.00'); + } else { + var value = Number(number[0] + '.' + number[1]); + } + } else { + var value = null; + } + + return value; + } + + /** + * Get row number + */ + obj.row = function(cell) { + } + + /** + * Get col number + */ + obj.col = function(cell) { + } + + obj.up = function(shiftKey, ctrlKey) { + if (shiftKey) { + if (obj.selectedCell[3] > 0) { + obj.up.visible(1, ctrlKey ? 0 : 1) + } + } else { + if (obj.selectedCell[1] > 0) { + obj.up.visible(0, ctrlKey ? 0 : 1) + } + obj.selectedCell[2] = obj.selectedCell[0]; + obj.selectedCell[3] = obj.selectedCell[1]; + } + + // Update selection + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + + // Change page + if (obj.options.lazyLoading == true) { + if (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0) { + obj.loadPage(0); + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + } else { + if (obj.loadValidation()) { + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + } else { + var item = parseInt(obj.tbody.firstChild.getAttribute('data-y')); + if (obj.selectedCell[1] - item < 30) { + obj.loadUp(); + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + } + } + } + } else if (obj.options.pagination > 0) { + var pageNumber = obj.whichPage(obj.selectedCell[3]); + if (pageNumber != obj.pageNumber) { + obj.page(pageNumber); + } + } + + obj.updateScroll(1); + } + + obj.up.visible = function(group, direction) { + if (group == 0) { + var x = parseInt(obj.selectedCell[0]); + var y = parseInt(obj.selectedCell[1]); + } else { + var x = parseInt(obj.selectedCell[2]); + var y = parseInt(obj.selectedCell[3]); + } + + if (direction == 0) { + for (var j = 0; j < y; j++) { + if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') { + y = j; + break; + } + } + } else { + y = obj.up.get(x, y); + } + + if (group == 0) { + obj.selectedCell[0] = x; + obj.selectedCell[1] = y; + } else { + obj.selectedCell[2] = x; + obj.selectedCell[3] = y; + } + } + + obj.up.get = function(x, y) { + var x = parseInt(x); + var y = parseInt(y); + for (var j = (y - 1); j >= 0; j--) { + if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') { + if (obj.records[j][x].getAttribute('data-merged')) { + if (obj.records[j][x] == obj.records[y][x]) { + continue; + } + } + y = j; + break; + } + } + + return y; + } + + obj.down = function(shiftKey, ctrlKey) { + if (shiftKey) { + if (obj.selectedCell[3] < obj.records.length - 1) { + obj.down.visible(1, ctrlKey ? 0 : 1) + } + } else { + if (obj.selectedCell[1] < obj.records.length - 1) { + obj.down.visible(0, ctrlKey ? 0 : 1) + } + obj.selectedCell[2] = obj.selectedCell[0]; + obj.selectedCell[3] = obj.selectedCell[1]; + } + + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + + // Change page + if (obj.options.lazyLoading == true) { + if ((obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) { + obj.loadPage(-1); + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + } else { + if (obj.loadValidation()) { + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + } else { + var item = parseInt(obj.tbody.lastChild.getAttribute('data-y')); + if (item - obj.selectedCell[3] < 30) { + obj.loadDown(); + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + } + } + } + } else if (obj.options.pagination > 0) { + var pageNumber = obj.whichPage(obj.selectedCell[3]); + if (pageNumber != obj.pageNumber) { + obj.page(pageNumber); + } + } + + obj.updateScroll(3); + } + + obj.down.visible = function(group, direction) { + if (group == 0) { + var x = parseInt(obj.selectedCell[0]); + var y = parseInt(obj.selectedCell[1]); + } else { + var x = parseInt(obj.selectedCell[2]); + var y = parseInt(obj.selectedCell[3]); + } + + if (direction == 0) { + for (var j = obj.rows.length - 1; j > y; j--) { + if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') { + y = j; + break; + } + } + } else { + y = obj.down.get(x, y); + } + + if (group == 0) { + obj.selectedCell[0] = x; + obj.selectedCell[1] = y; + } else { + obj.selectedCell[2] = x; + obj.selectedCell[3] = y; + } + } + + obj.down.get = function(x, y) { + var x = parseInt(x); + var y = parseInt(y); + for (var j = (y + 1); j < obj.rows.length; j++) { + if (obj.records[j][x].style.display != 'none' && obj.rows[j].style.display != 'none') { + if (obj.records[j][x].getAttribute('data-merged')) { + if (obj.records[j][x] == obj.records[y][x]) { + continue; + } + } + y = j; + break; + } + } + + return y; + } + + obj.right = function(shiftKey, ctrlKey) { + if (shiftKey) { + if (obj.selectedCell[2] < obj.headers.length - 1) { + obj.right.visible(1, ctrlKey ? 0 : 1) + } + } else { + if (obj.selectedCell[0] < obj.headers.length - 1) { + obj.right.visible(0, ctrlKey ? 0 : 1) + } + obj.selectedCell[2] = obj.selectedCell[0]; + obj.selectedCell[3] = obj.selectedCell[1]; + } + + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + obj.updateScroll(2); + } + + obj.right.visible = function(group, direction) { + if (group == 0) { + var x = parseInt(obj.selectedCell[0]); + var y = parseInt(obj.selectedCell[1]); + } else { + var x = parseInt(obj.selectedCell[2]); + var y = parseInt(obj.selectedCell[3]); + } + + if (direction == 0) { + for (var i = obj.headers.length - 1; i > x; i--) { + if (obj.records[y][i].style.display != 'none') { + x = i; + break; + } + } + } else { + x = obj.right.get(x, y); + } + + if (group == 0) { + obj.selectedCell[0] = x; + obj.selectedCell[1] = y; + } else { + obj.selectedCell[2] = x; + obj.selectedCell[3] = y; + } + } + + obj.right.get = function(x, y) { + var x = parseInt(x); + var y = parseInt(y); + + for (var i = (x + 1); i < obj.headers.length; i++) { + if (obj.records[y][i].style.display != 'none') { + if (obj.records[y][i].getAttribute('data-merged')) { + if (obj.records[y][i] == obj.records[y][x]) { + continue; + } + } + x = i; + break; + } + } + + return x; + } + + obj.left = function(shiftKey, ctrlKey) { + if (shiftKey) { + if (obj.selectedCell[2] > 0) { + obj.left.visible(1, ctrlKey ? 0 : 1) + } + } else { + if (obj.selectedCell[0] > 0) { + obj.left.visible(0, ctrlKey ? 0 : 1) + } + obj.selectedCell[2] = obj.selectedCell[0]; + obj.selectedCell[3] = obj.selectedCell[1]; + } + + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + obj.updateScroll(0); + } + + obj.left.visible = function(group, direction) { + if (group == 0) { + var x = parseInt(obj.selectedCell[0]); + var y = parseInt(obj.selectedCell[1]); + } else { + var x = parseInt(obj.selectedCell[2]); + var y = parseInt(obj.selectedCell[3]); + } + + if (direction == 0) { + for (var i = 0; i < x; i++) { + if (obj.records[y][i].style.display != 'none') { + x = i; + break; + } + } + } else { + x = obj.left.get(x, y); + } + + if (group == 0) { + obj.selectedCell[0] = x; + obj.selectedCell[1] = y; + } else { + obj.selectedCell[2] = x; + obj.selectedCell[3] = y; + } + } + + obj.left.get = function(x, y) { + var x = parseInt(x); + var y = parseInt(y); + for (var i = (x - 1); i >= 0; i--) { + if (obj.records[y][i].style.display != 'none') { + if (obj.records[y][i].getAttribute('data-merged')) { + if (obj.records[y][i] == obj.records[y][x]) { + continue; + } + } + x = i; + break; + } + } + + return x; + } + + obj.first = function(shiftKey, ctrlKey) { + if (shiftKey) { + if (ctrlKey) { + obj.selectedCell[3] = 0; + } else { + obj.left.visible(1, 0); + } + } else { + if (ctrlKey) { + obj.selectedCell[1] = 0; + } else { + obj.left.visible(0, 0); + } + obj.selectedCell[2] = obj.selectedCell[0]; + obj.selectedCell[3] = obj.selectedCell[1]; + } + + // Change page + if (obj.options.lazyLoading == true && (obj.selectedCell[1] == 0 || obj.selectedCell[3] == 0)) { + obj.loadPage(0); + } else if (obj.options.pagination > 0) { + var pageNumber = obj.whichPage(obj.selectedCell[3]); + if (pageNumber != obj.pageNumber) { + obj.page(pageNumber); + } + } + + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + obj.updateScroll(1); + } + + obj.last = function(shiftKey, ctrlKey) { + if (shiftKey) { + if (ctrlKey) { + obj.selectedCell[3] = obj.records.length - 1; + } else { + obj.right.visible(1, 0); + } + } else { + if (ctrlKey) { + obj.selectedCell[1] = obj.records.length - 1; + } else { + obj.right.visible(0, 0); + } + obj.selectedCell[2] = obj.selectedCell[0]; + obj.selectedCell[3] = obj.selectedCell[1]; + } + + // Change page + if (obj.options.lazyLoading == true && (obj.selectedCell[1] == obj.records.length - 1 || obj.selectedCell[3] == obj.records.length - 1)) { + obj.loadPage(-1); + } else if (obj.options.pagination > 0) { + var pageNumber = obj.whichPage(obj.selectedCell[3]); + if (pageNumber != obj.pageNumber) { + obj.page(pageNumber); + } + } + + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + obj.updateScroll(3); + } + + obj.selectAll = function() { + if (! obj.selectedCell) { + obj.selectedCell = []; + } + + obj.selectedCell[0] = 0; + obj.selectedCell[1] = 0; + obj.selectedCell[2] = obj.headers.length - 1; + obj.selectedCell[3] = obj.records.length - 1; + + obj.updateSelectionFromCoords(obj.selectedCell[0], obj.selectedCell[1], obj.selectedCell[2], obj.selectedCell[3]); + } + + /** + * Go to a page in a lazyLoading + */ + obj.loadPage = function(pageNumber) { + // Search + if (obj.options.search == true && obj.results) { + var results = obj.results; + } else { + var results = obj.rows; + } + + // Per page + var quantityPerPage = 100; + + // pageNumber + if (pageNumber == null || pageNumber == -1) { + // Last page + pageNumber = Math.ceil(results.length / quantityPerPage); + } + + var startRow = (pageNumber * quantityPerPage); + var finalRow = (pageNumber * quantityPerPage) + quantityPerPage; + if (finalRow > results.length) { + finalRow = results.length; + } + startRow = finalRow - 100; + if (startRow < 0) { + startRow = 0; + } + + // Appeding items + for (var j = startRow; j < finalRow; j++) { + if (obj.options.search == true && obj.results) { + obj.tbody.appendChild(obj.rows[results[j]]); + } else { + obj.tbody.appendChild(obj.rows[j]); + } + + if (obj.tbody.children.length > quantityPerPage) { + obj.tbody.removeChild(obj.tbody.firstChild); + } + } + } + + obj.loadUp = function() { + // Search + if (obj.options.search == true && obj.results) { + var results = obj.results; + } else { + var results = obj.rows; + } + var test = 0; + if (results.length > 100) { + // Get the first element in the page + var item = parseInt(obj.tbody.firstChild.getAttribute('data-y')); + if (obj.options.search == true && obj.results) { + item = results.indexOf(item); + } + if (item > 0) { + for (var j = 0; j < 30; j++) { + item = item - 1; + if (item > -1) { + if (obj.options.search == true && obj.results) { + obj.tbody.insertBefore(obj.rows[results[item]], obj.tbody.firstChild); + } else { + obj.tbody.insertBefore(obj.rows[item], obj.tbody.firstChild); + } + if (obj.tbody.children.length > 100) { + obj.tbody.removeChild(obj.tbody.lastChild); + test = 1; + } + } + } + } + } + return test; + } + + obj.loadDown = function() { + // Search + if (obj.options.search == true && obj.results) { + var results = obj.results; + } else { + var results = obj.rows; + } + var test = 0; + if (results.length > 100) { + // Get the last element in the page + var item = parseInt(obj.tbody.lastChild.getAttribute('data-y')); + if (obj.options.search == true && obj.results) { + item = results.indexOf(item); + } + if (item < obj.rows.length - 1) { + for (var j = 0; j <= 30; j++) { + if (item < results.length) { + if (obj.options.search == true && obj.results) { + obj.tbody.appendChild(obj.rows[results[item]]); + } else { + obj.tbody.appendChild(obj.rows[item]); + } + if (obj.tbody.children.length > 100) { + obj.tbody.removeChild(obj.tbody.firstChild); + test = 1; + } + } + item = item + 1; + } + } + } + + return test; + } + + obj.loadValidation = function() { + if (obj.selectedCell) { + var currentPage = parseInt(obj.tbody.firstChild.getAttribute('data-y')) / 100; + var selectedPage = parseInt(obj.selectedCell[3] / 100); + var totalPages = parseInt(obj.rows.length / 100); + + if (currentPage != selectedPage && selectedPage <= totalPages) { + if (! Array.prototype.indexOf.call(obj.tbody.children, obj.rows[obj.selectedCell[3]])) { + obj.loadPage(selectedPage); + return true; + } + } + } + + return false; + } + + /** + * Reset search + */ + obj.resetSearch = function() { + obj.searchInput.value = ''; + obj.search(''); + obj.results = null; + } + + /** + * Search + */ + obj.search = function(query) { + // Query + if (query) { + var query = query.toLowerCase(); + } + + // Reset selection + obj.resetSelection(); + + // Total of results + obj.pageNumber = 0; + obj.results = []; + + if (query) { + // Search filter + var search = function(item, query, index) { + for (var i = 0; i < item.length; i++) { + if ((''+item[i]).toLowerCase().search(query) >= 0 || + (''+obj.records[index][i].innerHTML).toLowerCase().search(query) >= 0) { + return true; + } + } + return false; + } + + // Result + var addToResult = function(k) { + if (obj.results.indexOf(k) == -1) { + obj.results.push(k); + } + } + + // Filter + var data = obj.options.data.filter(function(v, k) { + if (search(v, query, k)) { + // Merged rows found + var rows = obj.isRowMerged(k); + if (rows.length) { + for (var i = 0; i < rows.length; i++) { + var row = jexcel.getIdFromColumnName(rows[i], true); + for (var j = 0; j < obj.options.mergeCells[rows[i]][1]; j++) { + addToResult(row[1]+j); + } + } + } else { + // Normal row found + addToResult(k); + } + return true; + } else { + return false; + } + }); + } else { + obj.results = null; + } + + var total = 0; + var index = 0; + + // Page 1 + if (obj.options.lazyLoading == true) { + total = 100; + } else if (obj.options.pagination > 0) { + total = obj.options.pagination; + } else { + if (obj.results) { + total = obj.results.length; + } else { + total = obj.rows.length; + } + } + + // Reset current nodes + while (obj.tbody.firstChild) { + obj.tbody.removeChild(obj.tbody.firstChild); + } + + // Hide all records from the table + for (var j = 0; j < obj.rows.length; j++) { + if (! obj.results || obj.results.indexOf(j) > -1) { + if (index < total) { + obj.tbody.appendChild(obj.rows[j]); + index++; + } + obj.rows[j].style.display = ''; + } else { + obj.rows[j].style.display = 'none'; + } + } + + // Update pagination + if (obj.options.pagination > 0) { + obj.updatePagination(); + } + + return total; + } + + /** + * Which page the cell is + */ + obj.whichPage = function(cell) { + // Search + if (obj.options.search == true && obj.results) { + cell = obj.results.indexOf(cell); + } + + return (Math.ceil((parseInt(cell) + 1) / parseInt(obj.options.pagination))) - 1; + } + + /** + * Go to page + */ + obj.page = function(pageNumber) { + // Search + if (obj.options.search == true && obj.results) { + var results = obj.results; + } else { + var results = obj.rows; + } + + // Per page + var quantityPerPage = parseInt(obj.options.pagination); + + // pageNumber + if (pageNumber == null || pageNumber == -1) { + // Last page + pageNumber = Math.ceil(results.length / quantityPerPage); + } + + // Page number + obj.pageNumber = pageNumber; + + var startRow = (pageNumber * quantityPerPage); + var finalRow = (pageNumber * quantityPerPage) + quantityPerPage; + if (finalRow > results.length) { + finalRow = results.length; + } + if (startRow < 0) { + startRow = 0; + } + + // Reset container + while (obj.tbody.firstChild) { + obj.tbody.removeChild(obj.tbody.firstChild); + } + + // Appeding items + for (var j = startRow; j < finalRow; j++) { + if (obj.options.search == true && obj.results) { + obj.tbody.appendChild(obj.rows[results[j]]); + } else { + obj.tbody.appendChild(obj.rows[j]); + } + } + + if (obj.options.pagination > 0) { + obj.updatePagination(); + } + + // Update corner position + obj.updateCornerPosition(); + } + + /** + * Update the pagination + */ + obj.updatePagination = function() { + // Reset container + obj.pagination.children[0].innerHTML = ''; + obj.pagination.children[1].innerHTML = ''; + + // Start pagination + if (obj.options.pagination) { + // Searchable + if (obj.options.search == true && obj.results) { + var results = obj.results.length; + } else { + var results = obj.rows.length; + } + + if (! results) { + // No records found + obj.pagination.children[0].innerHTML = obj.options.text.noRecordsFound; + } else { + // Pagination container + var quantyOfPages = Math.ceil(results / obj.options.pagination); + + if (obj.pageNumber < 6) { + var startNumber = 1; + var finalNumber = quantyOfPages < 10 ? quantyOfPages : 10; + } else if (quantyOfPages - obj.pageNumber < 5) { + var startNumber = quantyOfPages - 9; + var finalNumber = quantyOfPages; + if (startNumber < 1) { + startNumber = 1; + } + } else { + var startNumber = obj.pageNumber - 4; + var finalNumber = obj.pageNumber + 5; + } + + // First + if (startNumber > 1) { + var paginationItem = document.createElement('div'); + paginationItem.className = 'jexcel_page'; + paginationItem.innerHTML = '<'; + paginationItem.title = 1; + obj.pagination.children[1].appendChild(paginationItem); + } + + // Get page links + for (var i = startNumber; i <= finalNumber; i++) { + var paginationItem = document.createElement('div'); + paginationItem.className = 'jexcel_page'; + paginationItem.innerHTML = i; + obj.pagination.children[1].appendChild(paginationItem); + + if (obj.pageNumber == (i-1)) { + paginationItem.classList.add('jexcel_page_selected'); + } + } + + // Last + if (finalNumber < quantyOfPages) { + var paginationItem = document.createElement('div'); + paginationItem.className = 'jexcel_page'; + paginationItem.innerHTML = '>'; + paginationItem.title = quantyOfPages; + obj.pagination.children[1].appendChild(paginationItem); + } + + // Text + var format = function(format) { + var args = Array.prototype.slice.call(arguments, 1); + return format.replace(/{(\d+)}/g, function(match, number) { + return typeof args[number] != 'undefined' + ? args[number] + : match + ; + }); + }; + + obj.pagination.children[0].innerHTML = format(obj.options.text.showingPage, obj.pageNumber + 1, quantyOfPages) + } + } + } + + /** + * Download CSV table + * + * @return null + */ + obj.download = function(includeHeaders) { + if (obj.options.allowExport == false) { + console.error('Export not allowed'); + } else { + // Data + var data = ''; + if (includeHeaders == true) { + data += obj.getHeaders(); + data += "\r\n"; + } + // Get data + data += obj.copy(false, obj.options.csvDelimiter, true); + // Download element + var pom = document.createElement('a'); + var blob = new Blob([data], {type: 'text/csv;charset=utf-8;'}); + var url = URL.createObjectURL(blob); + pom.href = url; + pom.setAttribute('download', obj.options.csvFileName + '.csv'); + document.body.appendChild(pom); + pom.click(); + pom.parentNode.removeChild(pom); + } + } + + /** + * Initializes a new history record for undo/redo + * + * @return null + */ + obj.setHistory = function(changes) { + if (obj.ignoreHistory != true) { + // Increment and get the current history index + var index = ++obj.historyIndex; + + // Slice the array to discard undone changes + obj.history = (obj.history = obj.history.slice(0, index + 1)); + + // Keep history + obj.history[index] = changes; + } + } + + /** + * Copy method + * + * @param bool highlighted - Get only highlighted cells + * @param delimiter - \t default to keep compatibility with excel + * @return string value + */ + obj.copy = function(highlighted, delimiter, returnData) { + if (! delimiter) { + delimiter = "\t"; + } + + // Controls + var col = []; + var colLabel = []; + var row = []; + var rowLabel = []; + var x = obj.options.data[0].length + var y = obj.options.data.length + var tmp = ''; + + // Reset container + obj.style = []; + + // Go through the columns to get the data + for (var j = 0; j < y; j++) { + col = []; + colLabel = []; + + for (var i = 0; i < x; i++) { + // If cell is highlighted + if (! highlighted || obj.records[j][i].classList.contains('highlight')) { + // Values + var value = obj.options.data[j][i]; + if (value.match && (value.match(/,/g) || value.match(/\n/) || value.match(/\"/))) { + value = value.replace(new RegExp('"', 'g'), '""'); + value = '"' + value + '"'; + } + col.push(value); + + // Labels + var label = obj.records[j][i].innerHTML; + if (label.match && (label.match(/,/g) || label.match(/\n/) || label.match(/\"/))) { + // Scape double quotes + label = label.replace(new RegExp('"', 'g'), '""'); + label = '"' + label + '"'; + } + colLabel.push(label); + + // Get style + tmp = obj.records[j][i].getAttribute('style'); + obj.style.push(tmp ? tmp : ''); + } + } + + if (col.length) { + row.push(col.join(delimiter)); + } + if (colLabel.length) { + rowLabel.push(colLabel.join(delimiter)); + } + } + + // Final string + var str = row.join("\n"); + var strLabel = rowLabel.join("\n"); + + // Create a hidden textarea to copy the values + if (! returnData) { + if (obj.options.copyCompatibility == true) { + obj.textarea.value = strLabel; + } else { + obj.textarea.value = str; + } + obj.textarea.select(); + document.execCommand("copy"); + } + + // Keep data + if (obj.options.copyCompatibility == true) { + obj.data = strLabel; + } else { + obj.data = str; + } + // Keep non visible information + obj.hashString = obj.hash(obj.data); + + return obj.data; + } + + /** + * jExcel paste method + * + * @param integer row number + * @return string value + */ + obj.paste = function(x, y, data) { + // Paste filter + if (typeof(obj.options.onbeforepaste) == 'function') { + var data = obj.options.onbeforepaste(el, data); + } + + // Controls + var hash = obj.hash(data); + var style = (hash == obj.hashString) ? obj.style : null; + + // Depending on the behavior + if (obj.options.copyCompatibility == true && hash == obj.hashString) { + var data = obj.data; + } + + // Split new line + var data = obj.parseCSV(data, "\t"); + + if (x != null && y != null && data) { + // Records + var i = 0; + var j = 0; + var records = []; + var newStyle = {}; + var oldStyle = {}; + var styleIndex = 0; + + // Index + var colIndex = parseInt(x); + var rowIndex = parseInt(y); + var row = null; + + // Go through the columns to get the data + while (row = data[j]) { + i = 0; + colIndex = parseInt(x); + + while (row[i] != null) { + // Update and keep history + var record = obj.updateCell(colIndex, rowIndex, row[i]); + // Keep history + records.push(record); + // Update all formulas in the chain + obj.updateFormulaChain(colIndex, rowIndex, records); + // Style + if (style) { + var columnName = jexcel.getColumnNameFromId([colIndex, rowIndex]); + newStyle[columnName] = style[styleIndex]; + oldStyle[columnName] = obj.getStyle(columnName); + obj.records[rowIndex][colIndex].setAttribute('style', style[styleIndex]); + styleIndex++ + } + i++; + if (row[i] != null) { + if (colIndex >= obj.headers.length - 1) { + obj.insertColumn(); + } + colIndex = obj.right.get(colIndex, rowIndex); + } + } + + j++; + if (data[j]) { + if (rowIndex >= obj.rows.length-1) { + obj.insertRow(); + } + rowIndex = obj.down.get(x, rowIndex); + } + } + + // Select the new cells + obj.updateSelectionFromCoords(x, y, colIndex, rowIndex); + + // Update history + obj.setHistory({ + action:'setValue', + records:records, + selection:obj.selectedCell, + newStyle:newStyle, + oldStyle:oldStyle, + }); + + // Update table + obj.updateTable(); + + // Paste event + if (typeof(obj.options.onpaste) == 'function') { + obj.options.onpaste(el, records); + } + + // On after changes + obj.onafterchanges(el, records); + } + } + + /** + * Process row + */ + obj.historyProcessRow = function(type, historyRecord) { + var rowIndex = (! historyRecord.insertBefore) ? historyRecord.rowNumber + 1 : historyRecord.rowNumber; + + if (obj.options.search == true) { + if (obj.results && obj.results.length != obj.rows.length) { + obj.resetSearch(); + } + } + + // Remove row + if (type == 1) { + var numOfRows = historyRecord.numOfRows; + // Remove nodes + for (var j = rowIndex; j < (numOfRows + rowIndex); j++) { + obj.rows[j].parentNode.removeChild(obj.rows[j]); + } + // Remove references + obj.records.splice(rowIndex, numOfRows); + obj.options.data.splice(rowIndex, numOfRows); + obj.rows.splice(rowIndex, numOfRows); + + obj.conditionalSelectionUpdate(1, rowIndex, (numOfRows + rowIndex) - 1); + } else { + // Insert data + obj.records = jexcel.injectArray(obj.records, rowIndex, historyRecord.rowRecords); + obj.options.data = jexcel.injectArray(obj.options.data, rowIndex, historyRecord.rowData); + obj.rows = jexcel.injectArray(obj.rows, rowIndex, historyRecord.rowNode); + // Insert nodes + var index = 0 + for (var j = rowIndex; j < (historyRecord.numOfRows + rowIndex); j++) { + obj.tbody.insertBefore(historyRecord.rowNode[index], obj.tbody.children[j]); + index++; + } + } + + // Respect pagination + if (obj.options.pagination > 0) { + obj.page(obj.pageNumber); + } + + obj.updateTableReferences(); + } + + /** + * Process column + */ + obj.historyProcessColumn = function(type, historyRecord) { + var columnIndex = (! historyRecord.insertBefore) ? historyRecord.columnNumber + 1 : historyRecord.columnNumber; + + // Remove column + if (type == 1) { + var numOfColumns = historyRecord.numOfColumns; + + obj.options.columns.splice(columnIndex, numOfColumns); + for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) { + obj.headers[i].parentNode.removeChild(obj.headers[i]); + obj.colgroup[i].parentNode.removeChild(obj.colgroup[i]); + } + obj.headers.splice(columnIndex, numOfColumns); + obj.colgroup.splice(columnIndex, numOfColumns); + for (var j = 0; j < historyRecord.data.length; j++) { + for (var i = columnIndex; i < (numOfColumns + columnIndex); i++) { + obj.records[j][i].parentNode.removeChild(obj.records[j][i]); + } + obj.records[j].splice(columnIndex, numOfColumns); + obj.options.data[j].splice(columnIndex, numOfColumns); + } + + obj.conditionalSelectionUpdate(0, columnIndex, (numOfColumns + columnIndex) - 1); + } else { + // Insert data + obj.options.columns = jexcel.injectArray(obj.options.columns, columnIndex, historyRecord.columns); + obj.headers = jexcel.injectArray(obj.headers, columnIndex, historyRecord.headers); + obj.colgroup = jexcel.injectArray(obj.colgroup, columnIndex, historyRecord.colgroup); + + var index = 0 + for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) { + obj.headerContainer.insertBefore(historyRecord.headers[index], obj.headerContainer.children[i+1]); + obj.colgroupContainer.insertBefore(historyRecord.colgroup[index], obj.colgroupContainer.children[i+1]); + index++; + } + + for (var j = 0; j < historyRecord.data.length; j++) { + obj.options.data[j] = jexcel.injectArray(obj.options.data[j], columnIndex, historyRecord.data[j]); + obj.records[j] = jexcel.injectArray(obj.records[j], columnIndex, historyRecord.records[j]); + var index = 0 + for (var i = columnIndex; i < (historyRecord.numOfColumns + columnIndex); i++) { + obj.rows[j].insertBefore(historyRecord.records[j][index], obj.rows[j].children[i+1]); + index++; + } + } + } + + // Adjust nested headers + if (obj.options.nestedHeaders && obj.options.nestedHeaders.length > 0) { + // Flexible way to handle nestedheaders + if (obj.options.nestedHeaders[0] && obj.options.nestedHeaders[0][0]) { + for (var j = 0; j < obj.options.nestedHeaders.length; j++) { + if (type == 1) { + var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) - historyRecord.numOfColumns; + } else { + var colspan = parseInt(obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan) + historyRecord.numOfColumns; + } + obj.options.nestedHeaders[j][obj.options.nestedHeaders[j].length-1].colspan = colspan; + obj.thead.children[j].children[obj.thead.children[j].children.length-1].setAttribute('colspan', colspan); + } + } else { + if (type == 1) { + var colspan = parseInt(obj.options.nestedHeaders[0].colspan) - historyRecord.numOfColumns; + } else { + var colspan = parseInt(obj.options.nestedHeaders[0].colspan) + historyRecord.numOfColumns; + } + obj.options.nestedHeaders[0].colspan = colspan; + obj.thead.children[0].children[obj.thead.children[0].children.length-1].setAttribute('colspan', colspan); + } + } + + obj.updateTableReferences(); + } + + /** + * Undo last action + */ + obj.undo = function() { + // Ignore events and history + var ignoreEvents = obj.ignoreEvents ? true : false; + var ignoreHistory = obj.ignoreHistory ? true : false; + + obj.ignoreEvents = true; + obj.ignoreHistory = true; + + // Records + var records = []; + + // Update cells + if (obj.historyIndex >= 0) { + // History + var historyRecord = obj.history[obj.historyIndex--]; + + if (historyRecord.action == 'insertRow') { + obj.historyProcessRow(1, historyRecord); + } else if (historyRecord.action == 'deleteRow') { + obj.historyProcessRow(0, historyRecord); + } else if (historyRecord.action == 'insertColumn') { + obj.historyProcessColumn(1, historyRecord); + } else if (historyRecord.action == 'deleteColumn') { + obj.historyProcessColumn(0, historyRecord); + } else if (historyRecord.action == 'moveRow') { + obj.moveRow(historyRecord.newValue, historyRecord.oldValue); + } else if (historyRecord.action == 'moveColumn') { + obj.moveColumn(historyRecord.newValue, historyRecord.oldValue); + } else if (historyRecord.action == 'setMerge') { + obj.removeMerge(historyRecord.column, historyRecord.data); + } else if (historyRecord.action == 'setStyle') { + obj.setStyle(historyRecord.oldValue, null, null, 1); + } else if (historyRecord.action == 'setWidth') { + obj.setWidth(historyRecord.column, historyRecord.oldValue); + } else if (historyRecord.action == 'setHeight') { + obj.setHeight(historyRecord.row, historyRecord.oldValue); + } else if (historyRecord.action == 'setHeader') { + obj.setHeader(historyRecord.column, historyRecord.oldValue); + } else if (historyRecord.action == 'setComments') { + obj.setComments(historyRecord.column, historyRecord.oldValue[0], historyRecord.oldValue[1]); + } else if (historyRecord.action == 'orderBy') { + var rows = []; + for (var j = 0; j < historyRecord.rows.length; j++) { + rows[historyRecord.rows[j]] = j; + } + obj.updateOrderArrow(historyRecord.column, historyRecord.order ? 0 : 1); + obj.updateOrder(rows); + } else if (historyRecord.action == 'setValue') { + // Redo for changes in cells + for (var i = 0; i < historyRecord.records.length; i++) { + obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].oldValue); + obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records); + if (historyRecord.oldStyle) { + obj.resetStyle(historyRecord.oldStyle, true); + } + } + // Update selection + if (! historyRecord.selection) { + historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row]; + } + obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]); + // Update table + obj.updateTable(); + } + } + obj.ignoreEvents = ignoreEvents; + obj.ignoreHistory = ignoreHistory; + + if (typeof(obj.options.onundo) == 'function') { + obj.options.onundo(el, historyRecord); + } + } + + /** + * Redo previously undone action + */ + obj.redo = function() { + // Ignore events and history + var ignoreEvents = obj.ignoreEvents ? true : false; + var ignoreHistory = obj.ignoreHistory ? true : false; + + obj.ignoreEvents = true; + obj.ignoreHistory = true; + + // Records + var records = []; + + // Update cells + if (obj.historyIndex < obj.history.length - 1) { + // History + var historyRecord = obj.history[++obj.historyIndex]; + + if (historyRecord.action == 'insertRow') { + obj.historyProcessRow(0, historyRecord); + } else if (historyRecord.action == 'deleteRow') { + obj.historyProcessRow(1, historyRecord); + } else if (historyRecord.action == 'insertColumn') { + obj.historyProcessColumn(0, historyRecord); + } else if (historyRecord.action == 'deleteColumn') { + obj.historyProcessColumn(1, historyRecord); + } else if (historyRecord.action == 'moveRow') { + obj.moveRow(historyRecord.oldValue, historyRecord.newValue); + } else if (historyRecord.action == 'moveColumn') { + obj.moveColumn(historyRecord.oldValue, historyRecord.newValue); + } else if (historyRecord.action == 'setMerge') { + obj.setMerge(historyRecord.column, historyRecord.colspan, historyRecord.rowspan, 1); + } else if (historyRecord.action == 'setStyle') { + obj.setStyle(historyRecord.newValue, null, null, 1); + } else if (historyRecord.action == 'setWidth') { + obj.setWidth(historyRecord.column, historyRecord.newValue); + } else if (historyRecord.action == 'setHeight') { + obj.setHeight(historyRecord.row, historyRecord.newValue); + } else if (historyRecord.action == 'setHeader') { + obj.setHeader(historyRecord.column, historyRecord.newValue); + } else if (historyRecord.action == 'setComments') { + obj.setComments(historyRecord.column, historyRecord.newValue[0], historyRecord.newValue[1]); + } else if (historyRecord.action == 'orderBy') { + obj.updateOrderArrow(historyRecord.column, historyRecord.order); + obj.updateOrder(historyRecord.rows); + } else if (historyRecord.action == 'setValue') { + // Redo for changes in cells + for (var i = 0; i < historyRecord.records.length; i++) { + obj.updateCell(historyRecord.records[i].col, historyRecord.records[i].row, historyRecord.records[i].newValue); + obj.updateFormulaChain(historyRecord.records[i].col, historyRecord.records[i].row, records); + if (historyRecord.newStyle) { + obj.resetStyle(historyRecord.newStyle, true); + } + } + + // Update selection + if (! historyRecord.selection) { + historyRecord.selection = [historyRecord.records[0].col, historyRecord.records[0].row]; + } + obj.updateSelectionFromCoords(historyRecord.selection[0], historyRecord.selection[1], historyRecord.selection[2], historyRecord.selection[3]); + // Update table + obj.updateTable(); + } + } + obj.ignoreEvents = ignoreEvents; + obj.ignoreHistory = ignoreHistory; + + if (typeof(obj.options.onredo) == 'function') { + obj.options.onredo(el, historyRecord); + } + } + + /** + * Get dropdown value from key + */ + obj.getDropDownValue = function(column, key) { + var value = []; + + if (obj.options.columns[column] && obj.options.columns[column].source) { + // Create array from source + var combo = []; + var source = obj.options.columns[column].source; + + for (var i = 0; i < source.length; i++) { + if (typeof(source[i]) == 'object') { + combo[source[i].id] = source[i].name; + } else { + combo[source[i]] = source[i]; + } + } + + // Garante single multiple compatibily + var keys = ('' + key).split(';') + + for (var i = 0; i < keys.length; i++) { + if (combo[keys[i]]) { + value.push(combo[keys[i]]); + } + } + } else { + console.error('Invalid column'); + } + + return (value.length > 0) ? value.join('; ') : ''; + } + + /** + * From starckoverflow contributions + */ + obj.parseCSV = function(str, delimiter) { + // Remove last line break + str = str.replace(/\r?\n$|\r$|\n$/g, ""); + // Last caracter is the delimiter + if (str.charCodeAt(str.length-1) == 9) { + str += "\0"; + } + // user-supplied delimeter or default comma + delimiter = (delimiter || ","); + + var arr = []; + var quote = false; // true means we're inside a quoted field + // iterate over each character, keep track of current row and column (of the returned array) + for (var row = 0, col = 0, c = 0; c < str.length; c++) { + var cc = str[c], nc = str[c+1]; + arr[row] = arr[row] || []; + arr[row][col] = arr[row][col] || ''; + + // If the current character is a quotation mark, and we're inside a quoted field, and the next character is also a quotation mark, add a quotation mark to the current column and skip the next character + if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; } + + // If it's just one quotation mark, begin/end quoted field + if (cc == '"') { quote = !quote; continue; } + + // If it's a comma and we're not in a quoted field, move on to the next column + if (cc == delimiter && !quote) { ++col; continue; } + + // If it's a newline (CRLF) and we're not in a quoted field, skip the next character and move on to the next row and move to column 0 of that new row + if (cc == '\r' && nc == '\n' && !quote) { ++row; col = 0; ++c; continue; } + + // If it's a newline (LF or CR) and we're not in a quoted field, move on to the next row and move to column 0 of that new row + if (cc == '\n' && !quote) { ++row; col = 0; continue; } + if (cc == '\r' && !quote) { ++row; col = 0; continue; } + + // Otherwise, append the current character to the current column + arr[row][col] += cc; + } + return arr; + } + + obj.hash = function(str) { + var hash = 0, i, chr; + + if (str.length === 0) { + return hash; + } else { + for (i = 0; i < str.length; i++) { + chr = str.charCodeAt(i); + hash = ((hash << 5) - hash) + chr; + hash |= 0; + } + } + return hash; + } + + obj.onafterchanges = function(el, records) { + if (! obj.ignoreEvents) { + // On after changes + if (typeof(obj.options.onafterchanges) == 'function') { + obj.options.onafterchanges(el, records); + } + } + } + + /** + * Initialization method + */ + obj.init = function() { + jexcel.current = obj; + + // Build handlers + if (typeof(jexcel.build) == 'function') { + jexcel.build(); + jexcel.build = null; + } + + // Load the table data based on an CSV file + if (obj.options.csv) { + // Loading + if (obj.options.loadingSpin == true) { + jSuites.loading.show(); + } + + // Load CSV file + jSuites.ajax({ + url: obj.options.csv, + method: 'GET', + dataType: 'text', + success: function(result) { + // Convert data + var newData = obj.parseCSV(result, obj.options.csvDelimiter) + + // Headers + if (obj.options.csvHeaders == true && newData.length > 0) { + var headers = newData.shift(); + for(var i = 0; i < headers.length; i++) { + if (! obj.options.columns[i]) { + obj.options.columns[i] = { type:'text', align:obj.options.defaultColAlign, width:obj.options.defaultColWidth }; + } + // Precedence over pre-configurated titles + if (typeof obj.options.columns[i].title === 'undefined') { + obj.options.columns[i].title = headers[i]; + } + } + } + // Data + obj.options.data = newData; + // Prepare table + obj.prepareTable(); + // Hide spin + if (obj.options.loadingSpin == true) { + jSuites.loading.hide(); + } + } + }); + } else if (obj.options.url) { + // Loading + if (obj.options.loadingSpin == true) { + jSuites.loading.show(); + } + + jSuites.ajax({ + url: obj.options.url, + method: 'GET', + dataType: 'json', + success: function(result) { + // Data + obj.options.data = (result.data) ? result.data : result; + // Prepare table + obj.prepareTable(); + // Hide spin + if (obj.options.loadingSpin == true) { + jSuites.loading.hide(); + } + } + }); + } else { + // Prepare table + obj.prepareTable(); + } + } + + // Context menu + if (options && options.contextMenu != null) { + obj.options.contextMenu = options.contextMenu; + } else { + obj.options.contextMenu = function(el, x, y, e) { + var items = []; + + if (y == null) { + // Insert a new column + if (obj.options.allowInsertColumn == true) { + items.push({ + title:obj.options.text.insertANewColumnBefore, + onclick:function() { + obj.insertColumn(1, parseInt(x), 1); + } + }); + } + + if (obj.options.allowInsertColumn == true) { + items.push({ + title:obj.options.text.insertANewColumnAfter, + onclick:function() { + obj.insertColumn(1, parseInt(x), 0); + } + }); + } + + // Delete a column + if (obj.options.allowDeleteColumn == true) { + items.push({ + title:obj.options.text.deleteSelectedColumns, + onclick:function() { + obj.deleteColumn(obj.getSelectedColumns().length ? undefined : parseInt(x)); + } + }); + } + + // Rename column + if (obj.options.allowRenameColumn == true) { + items.push({ + title:obj.options.text.renameThisColumn, + onclick:function() { + obj.setHeader(x); + } + }); + } + + // Sorting + if (obj.options.columnSorting == true) { + // Line + items.push({ type:'line' }); + + items.push({ + title:obj.options.text.orderAscending, + onclick:function() { + obj.orderBy(x, 0); + } + }); + items.push({ + title:obj.options.text.orderDescending, + onclick:function() { + obj.orderBy(x, 1); + } + }); + } + } else { + // Insert new row + if (obj.options.allowInsertRow == true) { + items.push({ + title:obj.options.text.insertANewRowBefore, + onclick:function() { + obj.insertRow(1, parseInt(y), 1); + } + }); + + items.push({ + title:obj.options.text.insertANewRowAfter, + onclick:function() { + obj.insertRow(1, parseInt(y)); + } + }); + } + + if (obj.options.allowDeleteRow == true) { + items.push({ + title:obj.options.text.deleteSelectedRows, + onclick:function() { + obj.deleteRow(obj.getSelectedRows().length ? undefined : parseInt(y)); + } + }); + } + + if (x) { + if (obj.options.allowComments == true) { + items.push({ type:'line' }); + + var title = obj.records[y][x].getAttribute('title') || ''; + + items.push({ + title: title ? obj.options.text.editComments : obj.options.text.addComments, + onclick:function() { + obj.setComments([ x, y ], prompt(obj.options.text.comments, title)); + } + }); + + if (title) { + items.push({ + title:obj.options.text.clearComments, + onclick:function() { + obj.setComments([ x, y ], ''); + } + }); + } + } + } + } + + // Line + items.push({ type:'line' }); + + // Copy + items.push({ + title:obj.options.text.copy, + shortcut:'Ctrl + C', + onclick:function() { + obj.copy(true); + } + }); + + // Paste + if (navigator && navigator.clipboard) { + items.push({ + title:obj.options.text.paste, + shortcut:'Ctrl + V', + onclick:function() { + if (obj.selectedCell) { + navigator.clipboard.readText().then(function(text) { + if (text) { + jexcel.current.paste(obj.selectedCell[0], obj.selectedCell[1], text); + } + }); + } + } + }); + } + + // Save + if (obj.options.allowExport) { + items.push({ + title: obj.options.text.saveAs, + shortcut: 'Ctrl + S', + onclick: function () { + obj.download(); + } + }); + } + + // About + if (obj.options.about) { + items.push({ + title:obj.options.text.about, + onclick:function() { + alert(obj.options.about); + } + }); + } + + return items; + } + } + + obj.scrollControls = function(e) { + if (obj.options.lazyLoading == true) { + if (jexcel.timeControlLoading == null) { + jexcel.timeControlLoading = setTimeout(function() { + if (obj.content.scrollTop + obj.content.clientHeight >= obj.content.scrollHeight) { + if (obj.loadDown()) { + if (obj.content.scrollTop + obj.content.clientHeight > obj.content.scrollHeight - 10) { + obj.content.scrollTop = obj.content.scrollTop - obj.content.clientHeight; + } + obj.updateCornerPosition(); + } + } else if (obj.content.scrollTop <= obj.content.clientHeight) { + if (obj.loadUp()) { + if (obj.content.scrollTop < 10) { + obj.content.scrollTop = obj.content.scrollTop + obj.content.clientHeight; + } + obj.updateCornerPosition(); + } + } + + jexcel.timeControlLoading = null; + }, 100); + } + } + + // Close editor + if (obj.options.lazyLoading == true || obj.options.tableOverflow == true) { + if (obj.edition && e.target.className.substr(0,9) != 'jdropdown') { + obj.closeEditor(obj.edition[0], true); + } + } + } + + el.addEventListener("DOMMouseScroll", obj.scrollControls); + el.addEventListener("mousewheel", obj.scrollControls); + + el.jexcel = obj; + + obj.init(); + + return obj; +}); + +jexcel.current = null; +jexcel.timeControl = null; +jexcel.timeControlLoading= null; + +jexcel.destroy = function(element, destroyEventHandlers) { + if (element.jexcel) { + element.jexcel = null; + element.innerHTML = ''; + + if (destroyEventHandlers) { + document.removeEventListener("keydown", jexcel.keyDownControls); + document.removeEventListener("mouseup", jexcel.mouseUpControls); + document.removeEventListener("mousedown", jexcel.mouseDownControls); + document.removeEventListener("mousemove", jexcel.mouseMoveControls); + document.removeEventListener("mouseover", jexcel.mouseOverControls); + document.removeEventListener("dblclick", jexcel.doubleClickControls); + document.removeEventListener("paste", jexcel.pasteControls); + document.removeEventListener("contextmenu", jexcel.contextMenuControls); + document.removeEventListener("touchstart", jexcel.touchStartControls); + document.removeEventListener("touchend", jexcel.touchEndControls); + document.removeEventListener("touchcancel", jexcel.touchEndControls); + jexcel = null; + } + } +} + +jexcel.build = function() { + document.addEventListener("keydown", jexcel.keyDownControls); + document.addEventListener("mouseup", jexcel.mouseUpControls); + document.addEventListener("mousedown", jexcel.mouseDownControls); + document.addEventListener("mousemove", jexcel.mouseMoveControls); + document.addEventListener("mouseover", jexcel.mouseOverControls); + document.addEventListener("dblclick", jexcel.doubleClickControls); + document.addEventListener("paste", jexcel.pasteControls); + document.addEventListener("contextmenu", jexcel.contextMenuControls); + document.addEventListener("touchstart", jexcel.touchStartControls); + document.addEventListener("touchend", jexcel.touchEndControls); + document.addEventListener("touchcancel", jexcel.touchEndControls); + document.addEventListener("touchmove", jexcel.touchEndControls); +} + +/** + * Valid international letter + */ + +jexcel.validLetter = function (text) { + var regex = /([\u0041-\u005A\u0061-\u007A\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]+)/g; + return text.match(regex) ? 1 : 0; +} + +/** + * Helper injectArray + */ +jexcel.injectArray = function(o, idx, arr) { + return o.slice(0, idx).concat(arr).concat(o.slice(idx)); +} + +/** + * Get letter based on a number + * + * @param integer i + * @return string letter + */ +jexcel.getColumnName = function(i) { + var letter = ''; + if (i > 701) { + letter += String.fromCharCode(64 + parseInt(i / 676)); + letter += String.fromCharCode(64 + parseInt((i % 676) / 26)); + } else if (i > 25) { + letter += String.fromCharCode(64 + parseInt(i / 26)); + } + letter += String.fromCharCode(65 + (i % 26)); + + return letter; +} + +/** + * Convert excel like column to jexcel id + * + * @param string id + * @return string id + */ +jexcel.getIdFromColumnName = function (id, arr) { + // Get the letters + var t = /^[a-zA-Z]+/.exec(id); + + if (t) { + // Base 26 calculation + var code = 0; + for (var i = 0; i < t[0].length; i++) { + code += parseInt(t[0].charCodeAt(i) - 64) * Math.pow(26, (t[0].length - 1 - i)); + } + code--; + // Make sure jexcel starts on zero + if (code < 0) { + code = 0; + } + + // Number + var number = parseInt(/[0-9]+$/.exec(id)); + if (number > 0) { + number--; + } + + if (arr == true) { + id = [ code, number ]; + } else { + id = code + '-' + number; + } + } + + return id; +} + +/** + * Convert jexcel id to excel like column name + * + * @param string id + * @return string id + */ +jexcel.getColumnNameFromId = function (cellId) { + if (! Array.isArray(cellId)) { + cellId = cellId.split('-'); + } + + return jexcel.getColumnName(parseInt(cellId[0])) + (parseInt(cellId[1]) + 1); +} + +/** + * Inside jexcel table + * + * @param string id + * @return string id + */ +jexcel.getElement = function(element) { + var jexcelSection = 0; + var jexcelElement = 0; + + function path (element) { + if (element.className) { + if (element.classList.contains('jexcel_container')) { + jexcelElement = element; + } + } + + if (element.tagName == 'THEAD') { + jexcelSection = 1; + } else if (element.tagName == 'TBODY') { + jexcelSection = 2; + } + + if (element.parentNode) { + path(element.parentNode); + } + } + + path(element); + + return [ jexcelElement, jexcelSection ]; +} + +/** + * Events + */ +jexcel.keyDownControls = function(e) { + if (jexcel.current) { + if (jexcel.current.edition) { + if (e.which == 27) { + // Escape + if (jexcel.current.edition) { + // Exit without saving + jexcel.current.closeEditor(jexcel.current.edition[0], false); + } + e.preventDefault(); + } else if (e.which == 13) { + // Enter + if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') { + jexcel.current.editor[0].children[0].calendar.close(1); + } else if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'dropdown' || + jexcel.current.options.columns[jexcel.current.edition[2]].type == 'autocomplete') { + // Do nothing + } else { + // Alt enter -> do not close editor + if ((jexcel.current.options.wordWrap == true || + jexcel.current.options.columns[jexcel.current.edition[2]].wordWrap == true || + jexcel.current.options.data[jexcel.current.edition[3]][jexcel.current.edition[2]].length > 200) && e.altKey) { + // Add new line to the editor + var editorTextarea = jexcel.current.edition[0].children[0]; + var editorValue = jexcel.current.edition[0].children[0].value; + var editorIndexOf = editorTextarea.selectionStart; + editorValue = editorValue.slice(0, editorIndexOf) + "\n" + editorValue.slice(editorIndexOf); + editorTextarea.value = editorValue; + editorTextarea.focus(); + editorTextarea.selectionStart = editorIndexOf + 1; + editorTextarea.selectionEnd = editorIndexOf + 1; + } else { + jexcel.current.edition[0].children[0].blur(); + } + } + } else if (e.which == 9) { + // Tab + if (jexcel.current.options.columns[jexcel.current.edition[2]].type == 'calendar') { + jexcel.current.edition[0].children[0].calendar.close(1); + } else { + jexcel.current.edition[0].children[0].blur(); + } + } + } + + if (! jexcel.current.edition && jexcel.current.selectedCell) { + // Which key + if (e.which == 37) { + jexcel.current.left(e.shiftKey, e.ctrlKey); + e.preventDefault(); + } else if (e.which == 39) { + jexcel.current.right(e.shiftKey, e.ctrlKey); + e.preventDefault(); + } else if (e.which == 38) { + jexcel.current.up(e.shiftKey, e.ctrlKey); + e.preventDefault(); + } else if (e.which == 40) { + jexcel.current.down(e.shiftKey, e.ctrlKey); + e.preventDefault(); + } else if (e.which == 36) { + jexcel.current.first(e.shiftKey, e.ctrlKey); + e.preventDefault(); + } else if (e.which == 35) { + jexcel.current.last(e.shiftKey, e.ctrlKey); + e.preventDefault(); + } else if (e.which == 32) { + if (jexcel.current.options.editable == true) { + jexcel.current.setCheckRadioValue(); + } + e.preventDefault(); + } else if (e.which == 46) { + // Delete + if (jexcel.current.options.editable == true) { + if (jexcel.current.selectedRow) { + if (jexcel.current.options.allowDeleteRow == true) { + if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedRows)) { + jexcel.current.deleteRow(); + } + } + } else if (jexcel.current.selectedHeader) { + if (jexcel.current.options.allowDeleteColumn == true) { + if (confirm(jexcel.current.options.text.areYouSureToDeleteTheSelectedColumns)) { + jexcel.current.deleteColumn(); + } + } + } else { + // Change value + jexcel.current.setValue(jexcel.current.highlighted, ''); + } + } + } else if (e.which == 13) { + // Move cursor + if (e.shiftKey) { + jexcel.current.up(); + } else { + if (jexcel.current.options.allowInsertRow == true) { + if (jexcel.current.options.allowManualInsertRow == true) { + if (jexcel.current.selectedCell[1] == jexcel.current.options.data.length - 1) { + // New record in case selectedCell in the last row + jexcel.current.insertRow(); + } + } + } + + jexcel.current.down(); + } + e.preventDefault(); + } else if (e.which == 9) { + // Tab + if (e.shiftKey) { + jexcel.current.left(); + } else { + if (jexcel.current.options.allowInsertColumn == true) { + if (jexcel.current.options.allowManualInsertColumn == true) { + if (jexcel.current.selectedCell[0] == jexcel.current.options.data[0].length - 1) { + // New record in case selectedCell in the last column + jexcel.current.insertColumn(); + } + } + } + + jexcel.current.right(); + } + e.preventDefault(); + } else { + if ((e.ctrlKey || e.metaKey) && ! e.shiftKey) { + if (e.which == 65) { + // Ctrl + A + jexcel.current.selectAll(); + e.preventDefault(); + } else if (e.which == 83) { + // Ctrl + S + jexcel.current.download(); + e.preventDefault(); + } else if (e.which == 89) { + // Ctrl + Y + jexcel.current.redo(); + e.preventDefault(); + } else if (e.which == 90) { + // Ctrl + Z + jexcel.current.undo(); + e.preventDefault(); + } else if (e.which == 67) { + // Ctrl + C + jexcel.current.copy(true); + e.preventDefault(); + } else if (e.which == 67) { + // Ctrl + C + jexcel.current.copy(true); + e.preventDefault(); + } else if (e.which == 88) { + // Ctrl + X + if (jexcel.current.options.editable == true) { + jexcel.cutControls(); + } else { + jexcel.copyControls(); + } + e.preventDefault(); + } else if (e.which == 86) { + // Ctrl + V + jexcel.pasteControls(); + } + } else { + if (jexcel.current.selectedCell) { + if (jexcel.current.options.editable == true) { + var rowId = jexcel.current.selectedCell[1]; + var columnId = jexcel.current.selectedCell[0]; + + // If is not readonly + if (jexcel.current.options.columns[columnId].type != 'readonly') { + // Characters able to start a edition + if (e.keyCode == 32) { + // Space + if (jexcel.current.options.columns[columnId].type == 'checkbox' || + jexcel.current.options.columns[columnId].type == 'radio') { + e.preventDefault(); + } else { + // Start edition + jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true); + } + } else if (e.keyCode == 113) { + // Start edition with current content F2 + jexcel.current.openEditor(jexcel.current.records[rowId][columnId], false); + } else if ((e.keyCode == 8) || + (e.keyCode >= 48 && e.keyCode <= 57) || + (e.keyCode >= 97 && e.keyCode <= 111) || + (e.keyCode == 187) || + ((String.fromCharCode(e.keyCode) == e.key || String.fromCharCode(e.keyCode).toLowerCase() == e.key.toLowerCase()) && jexcel.validLetter(String.fromCharCode(e.keyCode)))) { + // Start edition + jexcel.current.openEditor(jexcel.current.records[rowId][columnId], true); + // Prevent entries in the calendar + if (jexcel.current.options.columns[columnId].type == 'calendar') { + e.preventDefault(); + } + } + } + } + } + } + } + } else { + if (e.target.classList.contains('jexcel_search')) { + if (jexcel.timeControl) { + clearTimeout(jexcel.timeControl); + } + + jexcel.timeControl = setTimeout(function() { + jexcel.current.search(e.target.value); + }, 200); + } + } + } +} + +jexcel.isMouseAction = false; + +jexcel.mouseDownControls = function(e) { + e = e || window.event; + if (e.buttons) { + var mouseButton = e.buttons; + } else if (e.button) { + var mouseButton = e.button; + } else { + var mouseButton = e.which; + } + + // Get elements + var jexcelTable = jexcel.getElement(e.target); + + if (jexcelTable[0]) { + if (jexcel.current != jexcelTable[0].jexcel) { + if (jexcel.current) { + jexcel.current.resetSelection(); + } + jexcel.current = jexcelTable[0].jexcel; + } + } else { + if (jexcel.current) { + jexcel.current.resetSelection(true); + jexcel.current = null; + } + } + + if (jexcel.current && mouseButton == 1) { + if (e.target.classList.contains('jexcel_selectall')) { + if (jexcel.current) { + jexcel.current.selectAll(); + } + } else if (e.target.classList.contains('jexcel_corner')) { + if (jexcel.current.options.editable == true) { + jexcel.current.selectedCorner = true; + } + } else { + // Header found + if (jexcelTable[1] == 1) { + var columnId = e.target.getAttribute('data-x'); + if (columnId) { + // Update cursor + var info = e.target.getBoundingClientRect(); + if (jexcel.current.options.columnResize == true && info.width - e.offsetX < 6) { + // Resize helper + jexcel.current.resizing = { + mousePosition: e.pageX, + column: columnId, + width: info.width, + }; + + // Border indication + jexcel.current.headers[columnId].classList.add('resizing'); + for (var j = 0; j < jexcel.current.records.length; j++) { + if (jexcel.current.records[j][columnId]) { + jexcel.current.records[j][columnId].classList.add('resizing'); + } + } + } else if (jexcel.current.options.columnDrag == true && info.height - e.offsetY < 6) { + if (jexcel.current.isColMerged(columnId).length) { + console.error('JEXCEL: This column is part of a merged cell.'); + } else { + // Reset selection + jexcel.current.resetSelection(); + // Drag helper + jexcel.current.dragging = { + element: e.target, + column:columnId, + destination:columnId, + }; + // Border indication + jexcel.current.headers[columnId].classList.add('dragging'); + for (var j = 0; j < jexcel.current.records.length; j++) { + if (jexcel.current.records[j][columnId]) { + jexcel.current.records[j][columnId].classList.add('dragging'); + } + } + } + } else { + if (jexcel.current.selectedHeader && (e.shiftKey || e.ctrlKey)) { + var o = jexcel.current.selectedHeader; + var d = columnId; + } else { + // Press to rename + if (jexcel.current.selectedHeader == columnId && jexcel.current.options.allowRenameColumn == true) { + jexcel.timeControl = setTimeout(function() { + jexcel.current.setHeader(columnId); + }, 800); + } + + // Keep track of which header was selected first + jexcel.current.selectedHeader = columnId; + + // Update selection single column + var o = columnId; + var d = columnId; + } + + // Update selection + jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1); + } + } else { + if (e.target.parentNode.classList.contains('jexcel_nested')) { + var column = e.target.getAttribute('data-column').split(','); + var c1 = parseInt(column[0]); + var c2 = parseInt(column[column.length-1]); + jexcel.current.updateSelectionFromCoords(c1, 0, c2, jexcel.current.options.data.length - 1); + } + } + } else { + jexcel.current.selectedHeader = false; + } + + // Body found + if (jexcelTable[1] == 2) { + var rowId = e.target.getAttribute('data-y'); + + if (e.target.classList.contains('jexcel_row')) { + var info = e.target.getBoundingClientRect(); + if (jexcel.current.options.rowResize == true && info.height - e.offsetY < 6) { + // Resize helper + jexcel.current.resizing = { + element: e.target.parentNode, + mousePosition: e.pageY, + row: rowId, + height: info.height, + }; + // Border indication + e.target.parentNode.classList.add('resizing'); + } else if (jexcel.current.options.rowDrag == true && info.width - e.offsetX < 6) { + if (jexcel.current.isRowMerged(rowId).length) { + console.error('JEXCEL: This row is part of a merged cell'); + } else if (jexcel.current.options.search == true && jexcel.current.results) { + console.error('JEXCEL: Please clear your search before perform this action'); + } else { + // Reset selection + jexcel.current.resetSelection(); + // Drag helper + jexcel.current.dragging = { + element: e.target.parentNode, + row:rowId, + destination:rowId, + }; + // Border indication + e.target.parentNode.classList.add('dragging'); + } + } else { + if (jexcel.current.selectedRow && (e.shiftKey || e.ctrlKey)) { + var o = jexcel.current.selectedRow; + var d = rowId; + } else { + // Keep track of which header was selected first + jexcel.current.selectedRow = rowId; + + // Update selection single column + var o = rowId; + var d = rowId; + } + + // Update selection + jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d); + } + } else { + // Jclose + if (e.target.classList.contains('jclose') && e.target.clientWidth - e.offsetX < 50 && e.offsetY < 50) { + jexcel.current.closeEditor(jexcel.current.edition[0], true); + } else { + var getCellCoords = function(element) { + var x = element.getAttribute('data-x'); + var y = element.getAttribute('data-y'); + if (x && y) { + return [x, y]; + } else { + if (element.parentNode) { + return getCellCoords(element.parentNode); + } + } + }; + + var position = getCellCoords(e.target); + if (position) { + var columnId = position[0]; + var rowId = position[1]; + // Close edition + if (jexcel.current.edition) { + if (jexcel.current.edition[2] != columnId || jexcel.current.edition[3] != rowId) { + jexcel.current.closeEditor(jexcel.current.edition[0], true); + } + } + + if (! jexcel.current.edition) { + // Update cell selection + if (e.shiftKey) { + jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId); + } else { + jexcel.current.updateSelectionFromCoords(columnId, rowId); + } + } + + // No full row selected + jexcel.current.selectedHeader = null; + jexcel.current.selectedRow = null; + } + } + } + } else { + jexcel.current.selectedRow = false; + } + + // Pagination + if (e.target.classList.contains('jexcel_page')) { + if (e.target.innerText == '<') { + jexcel.current.page(0); + } else if (e.target.innerText == '>') { + jexcel.current.page(e.target.getAttribute('title') - 1); + } else { + jexcel.current.page(e.target.innerText - 1); + } + } + } + + if (jexcel.current.edition) { + jexcel.isMouseAction = false; + } else { + jexcel.isMouseAction = true; + } + } else { + jexcel.isMouseAction = false; + } +} + +jexcel.mouseUpControls = function(e) { + if (jexcel.current) { + // Update cell size + if (jexcel.current.resizing) { + // Columns to be updated + if (jexcel.current.resizing.column) { + // Remove Class + jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing'); + var newWidth = jexcel.current.colgroup[jexcel.current.resizing.column].getAttribute('width'); + jexcel.current.setWidth(jexcel.current.resizing.column, newWidth, jexcel.current.resizing.width); + // Remove border + jexcel.current.headers[jexcel.current.resizing.column].classList.remove('resizing'); + for (var j = 0; j < jexcel.current.records.length; j++) { + if (jexcel.current.records[j][jexcel.current.resizing.column]){ + jexcel.current.records[j][jexcel.current.resizing.column].classList.remove('resizing'); + } + } + } else { + // Remove Class + jexcel.current.rows[jexcel.current.resizing.row].children[0].classList.remove('resizing'); + var newHeight = jexcel.current.rows[jexcel.current.resizing.row].getAttribute('height'); + jexcel.current.setHeight(jexcel.current.resizing.row, newHeight, jexcel.current.resizing.height); + // Remove border + jexcel.current.resizing.element.classList.remove('resizing'); + } + // Reset resizing helper + jexcel.current.resizing = null; + } else if (jexcel.current.dragging) { + // Reset dragging helper + if (jexcel.current.dragging) { + if (jexcel.current.dragging.column) { + // Target + var columnId = e.target.getAttribute('data-x'); + // Remove move style + jexcel.current.headers[jexcel.current.dragging.column].classList.remove('dragging'); + for (var j = 0; j < jexcel.current.rows.length; j++) { + if (jexcel.current.records[j][jexcel.current.dragging.column]) { + jexcel.current.records[j][jexcel.current.dragging.column].classList.remove('dragging'); + } + } + for (var i = 0; i < jexcel.current.headers.length; i++) { + jexcel.current.headers[i].classList.remove('dragging-left'); + jexcel.current.headers[i].classList.remove('dragging-right'); + } + // Update position + if (columnId) { + if (jexcel.current.dragging.column != jexcel.current.dragging.destination) { + jexcel.current.moveColumn(jexcel.current.dragging.column, jexcel.current.dragging.destination); + } + } + } else { + var position = Array.prototype.indexOf.call(jexcel.current.dragging.element.parentNode.children, jexcel.current.dragging.element); + if (jexcel.current.dragging.row != position) { + jexcel.current.moveRow(jexcel.current.dragging.row, position, true); + } + jexcel.current.dragging.element.classList.remove('dragging'); + } + jexcel.current.dragging = null; + } + } else { + // Close any corner selection + if (jexcel.current.selectedCorner) { + jexcel.current.selectedCorner = false; + + // Data to be copied + if (jexcel.current.selection.length > 0) { + // Copy data + jexcel.current.copyData(jexcel.current.selection[0], jexcel.current.selection[jexcel.current.selection.length - 1]); + + // Remove selection + jexcel.current.removeCopySelection(); + } + } + } + } + + // Clear any time control + if (jexcel.timeControl) { + clearTimeout(jexcel.timeControl); + jexcel.timeControl = null; + } + + // Mouse up + jexcel.isMouseAction = false; +} + +// Mouse move controls +jexcel.mouseMoveControls = function(e) { + e = e || window.event; + if (e.buttons) { + var mouseButton = e.buttons; + } else if (e.button) { + var mouseButton = e.button; + } else { + var mouseButton = e.which; + } + + if (! mouseButton) { + jexcel.isMouseAction = false; + } + + if (jexcel.current) { + if (jexcel.isMouseAction == true) { + // Resizing is ongoing + if (jexcel.current.resizing) { + if (jexcel.current.resizing.column) { + var width = e.pageX - jexcel.current.resizing.mousePosition; + + if (jexcel.current.resizing.width + width > 0) { + var tempWidth = jexcel.current.resizing.width + width; + jexcel.current.colgroup[jexcel.current.resizing.column].setAttribute('width', tempWidth); + + jexcel.current.updateCornerPosition(); + } + } else { + var height = e.pageY - jexcel.current.resizing.mousePosition; + + if (jexcel.current.resizing.height + height > 0) { + var tempHeight = jexcel.current.resizing.height + height; + jexcel.current.rows[jexcel.current.resizing.row].setAttribute('height', tempHeight); + + jexcel.current.updateCornerPosition(); + } + } + } + } else { + var x = e.target.getAttribute('data-x'); + var y = e.target.getAttribute('data-y'); + var rect = e.target.getBoundingClientRect(); + + if (jexcel.current.cursor) { + jexcel.current.cursor.style.cursor = ''; + jexcel.current.cursor = null; + } + + if (e.target.parentNode.parentNode && e.target.parentNode.parentNode.className) { + if (e.target.parentNode.parentNode.classList.contains('resizable')) { + if (e.target && x && ! y && (rect.width - (e.clientX - rect.left) < 6)) { + jexcel.current.cursor = e.target; + jexcel.current.cursor.style.cursor = 'col-resize'; + } else if (e.target && ! x && y && (rect.height - (e.clientY - rect.top) < 6)) { + jexcel.current.cursor = e.target; + jexcel.current.cursor.style.cursor = 'row-resize'; + } + } + + if (e.target.parentNode.parentNode.classList.contains('draggable')) { + if (e.target && ! x && y && (rect.width - (e.clientX - rect.left) < 6)) { + jexcel.current.cursor = e.target; + jexcel.current.cursor.style.cursor = 'move'; + } else if (e.target && x && ! y && (rect.height - (e.clientY - rect.top) < 6)) { + jexcel.current.cursor = e.target; + jexcel.current.cursor.style.cursor = 'move'; + } + } + } + } + } +} + +jexcel.mouseOverControls = function(e) { + e = e || window.event; + if (e.buttons) { + var mouseButton = e.buttons; + } else if (e.button) { + var mouseButton = e.button; + } else { + var mouseButton = e.which; + } + + if (! mouseButton) { + jexcel.isMouseAction = false; + } + + if (jexcel.current && jexcel.isMouseAction == true) { + // Get elements + var jexcelTable = jexcel.getElement(e.target); + + if (jexcelTable[0]) { + // Avoid cross reference + if (jexcel.current != jexcelTable[0].jexcel) { + if (jexcel.current) { + return false; + } + } + + var columnId = e.target.getAttribute('data-x'); + var rowId = e.target.getAttribute('data-y'); + + if (jexcel.current.dragging) { + if (jexcel.current.dragging.column) { + if (columnId) { + if (jexcel.current.isColMerged(columnId).length) { + console.error('JEXCEL: This column is part of a merged cell.'); + } else { + for (var i = 0; i < jexcel.current.headers.length; i++) { + jexcel.current.headers[i].classList.remove('dragging-left'); + jexcel.current.headers[i].classList.remove('dragging-right'); + } + + if (jexcel.current.dragging.column == columnId) { + jexcel.current.dragging.destination = parseInt(columnId); + } else { + if (e.target.clientWidth / 2 > e.offsetX) { + if (jexcel.current.dragging.column < columnId) { + jexcel.current.dragging.destination = parseInt(columnId) - 1; + } else { + jexcel.current.dragging.destination = parseInt(columnId); + } + jexcel.current.headers[columnId].classList.add('dragging-left'); + } else { + if (jexcel.current.dragging.column < columnId) { + jexcel.current.dragging.destination = parseInt(columnId); + } else { + jexcel.current.dragging.destination = parseInt(columnId) + 1; + } + jexcel.current.headers[columnId].classList.add('dragging-right'); + } + } + } + } + } else { + if (rowId) { + if (jexcel.current.isRowMerged(rowId).length) { + console.error('JEXCEL: This row is part of a merged cell.'); + } else { + var target = (e.target.clientHeight / 2 > e.offsetY) ? e.target.parentNode.nextSibling : e.target.parentNode; + e.target.parentNode.parentNode.insertBefore(jexcel.current.dragging.element, target); + } + } + } + } else if (jexcel.current.resizing) { + } else { + // Header found + if (jexcelTable[1] == 1) { + if (jexcel.current.selectedHeader) { + var columnId = e.target.getAttribute('data-x'); + var o = jexcel.current.selectedHeader; + var d = columnId; + // Update selection + jexcel.current.updateSelectionFromCoords(o, 0, d, jexcel.current.options.data.length - 1); + } + } + + // Body found + if (jexcelTable[1] == 2) { + if (e.target.classList.contains('jexcel_row')) { + if (jexcel.current.selectedRow) { + var o = jexcel.current.selectedRow; + var d = rowId; + // Update selection + jexcel.current.updateSelectionFromCoords(0, o, jexcel.current.options.data[0].length - 1, d); + } + } else { + // Do not select edtion is in progress + if (! jexcel.current.edition) { + if (columnId && rowId) { + if (jexcel.current.selectedCorner) { + jexcel.current.updateCopySelection(columnId, rowId); + } else { + if (jexcel.current.selectedCell) { + jexcel.current.updateSelectionFromCoords(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], columnId, rowId); + } + } + } + } + } + } + } + } + } + + // Clear any time control + if (jexcel.timeControl) { + clearTimeout(jexcel.timeControl); + jexcel.timeControl = null; + } +} + +/** + * Double click event handler: controls the double click in the corner, cell edition or column re-ordering. + */ +jexcel.doubleClickControls = function(e) { + // Jexcel is selected + if (jexcel.current) { + // Corner action + if (e.target.classList.contains('jexcel_corner')) { + // Any selected cells + if (jexcel.current.highlighted.length > 0) { + // Copy from this + var x1 = jexcel.current.highlighted[0].getAttribute('data-x'); + var y1 = parseInt(jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-y')) + 1; + // Until this + var x2 = jexcel.current.highlighted[jexcel.current.highlighted.length - 1].getAttribute('data-x'); + var y2 = jexcel.current.records.length - 1 + // Execute copy + jexcel.current.copyData(jexcel.current.records[y1][x1], jexcel.current.records[y2][x2]); + } + } else { + // Get table + var jexcelTable = jexcel.getElement(e.target); + + // Double click over header + if (jexcelTable[1] == 1 && jexcel.current.options.columnSorting == true) { + // Check valid column header coords + var columnId = e.target.getAttribute('data-x'); + if (columnId) { + jexcel.current.orderBy(columnId); + } + } + + // Double click over body + if (jexcelTable[1] == 2 && jexcel.current.options.editable == true) { + if (! jexcel.current.edition) { + var getCellCoords = function(element) { + if (element.parentNode) { + var x = element.getAttribute('data-x'); + var y = element.getAttribute('data-y'); + if (x && y) { + return element; + } else { + return getCellCoords(element.parentNode); + } + } + } + var cell = getCellCoords(e.target); + if (cell && cell.classList.contains('highlight')) { + jexcel.current.openEditor(cell); + } + } + } + } + } +} + +jexcel.copyControls = function(e) { + if (jexcel.current && jexcel.copyControls.enabled) { + if (! jexcel.current.edition) { + jexcel.current.copy(true); + } + } +} + +jexcel.cutControls = function(e) { + if (jexcel.current) { + if (! jexcel.current.edition) { + jexcel.current.copy(true); + if (jexcel.current.options.editable == true) { + jexcel.current.setValue(jexcel.current.highlighted, ''); + } + } + } +} + +jexcel.pasteControls = function(e) { + if (jexcel.current && jexcel.current.selectedCell) { + if (! jexcel.current.edition) { + if (jexcel.current.options.editable == true) { + if (e && e.clipboardData) { + jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], e.clipboardData.getData('text')); + e.preventDefault(); + } else if (window.clipboardData) { + jexcel.current.paste(jexcel.current.selectedCell[0], jexcel.current.selectedCell[1], window.clipboardData.getData('text')); + } + } + } + } +} + +jexcel.contextMenuControls = function(e) { + e = e || window.event; + if ("buttons" in e) { + var mouseButton = e.buttons; + } else { + var mouseButton = e.which || e.button; + } + + if (jexcel.current) { + if (jexcel.current.edition) { + e.preventDefault(); + } else if (jexcel.current.options.contextMenu) { + jexcel.current.contextMenu.contextmenu.close(); + + if (jexcel.current) { + var x = e.target.getAttribute('data-x'); + var y = e.target.getAttribute('data-y'); + + if (x || y) { + // Table found + var items = jexcel.current.options.contextMenu(jexcel.current, x, y, e); + // The id is depending on header and body + jexcel.current.contextMenu.contextmenu.open(e, items); + // Avoid the real one + e.preventDefault(); + } + } + } + } +} + +jexcel.touchStartControls = function(e) { + var jexcelTable = jexcel.getElement(e.target); + + if (jexcelTable[0]) { + if (jexcel.current != jexcelTable[0].jexcel) { + if (jexcel.current) { + jexcel.current.resetSelection(); + } + jexcel.current = jexcelTable[0].jexcel; + } + } else { + if (jexcel.current) { + jexcel.current.resetSelection(); + jexcel.current = null; + } + } + + if (jexcel.current) { + if (! jexcel.current.edition) { + var columnId = e.target.getAttribute('data-x'); + var rowId = e.target.getAttribute('data-y'); + + if (columnId && rowId) { + jexcel.current.updateSelectionFromCoords(columnId, rowId); + + jexcel.timeControl = setTimeout(function() { + jexcel.current.openEditor(e.target, false, e); + }, 500); + } + } + } +} + +jexcel.touchEndControls = function(e) { + // Clear any time control + if (jexcel.timeControl) { + clearTimeout(jexcel.timeControl); + jexcel.timeControl = null; + } +} + +/** + * Jquery Support + */ + +if (typeof(jQuery) != 'undefined') { + (function($){ + $.fn.jexcel = function(method) { + var spreadsheetContainer = $(this).get(0); + if (! spreadsheetContainer.jexcel) { + return jexcel($(this).get(0), arguments[0]); + } else { + return spreadsheetContainer.jexcel[method].apply(this, Array.prototype.slice.call( arguments, 1 )); + } + }; + + })(jQuery); +} + +/** + * Jexcel extensions + */ + +jexcel.createTabs = function(tabs, result) { + // Create tab container + tabs.innerHTML = ''; + tabs.classList.add('jexcel_tabs'); + var spreadsheet = [] + var link = []; + for (var i = 0; i < result.length; i++) { + // Spreadsheet container + spreadsheet[i] = document.createElement('div'); + spreadsheet[i].classList.add('jexcel_tab'); + // Tab link + link[i] = document.createElement('div'); + link[i].classList.add('jexcel_tab_link'); + link[i].setAttribute('data-spreadsheet', i); + link[i].innerHTML = result[i].sheetName; + link[i].onclick = function() { + for (var j = 0; j < spreadsheet.length; j++) { + spreadsheet[j].style.display = 'none'; + link[j].classList.remove('selected'); + } + var i = this.getAttribute('data-spreadsheet'); + spreadsheet[i].style.display = 'block'; + link[i].classList.add('selected') + } + tabs.appendChild(link[i]); + } + + // Append spreadsheet + for (var i = 0; i < spreadsheet.length - 1; i++) { + tabs.appendChild(spreadsheet[i]); + jexcel(spreadsheet[i], result[i]); + } + + // First tab + spreadsheet[0].style.display = 'block'; + link[0].classList.add('selected') +} + +jexcel.fromSpreadsheet = function(file, __callback) { + var convert = function(workbook) { + var spreadsheets = []; + workbook.SheetNames.forEach(function(sheetName) { + var spreadsheet = {}; + spreadsheet.rows = []; + spreadsheet.columns = []; + spreadsheet.data = []; + spreadsheet.style = {}; + spreadsheet.sheetName = sheetName; + + // Column widths + var temp = workbook.Sheets[sheetName]['!cols']; + if (temp && temp.length) { + for (var i = 0; i < temp.length; i++) { + spreadsheet.columns[i] = {}; + if (temp[i] && temp[i].wpx) { + spreadsheet.columns[i].width = temp[i].wpx + 'px'; + } + } + } + // Rows heights + var temp = workbook.Sheets[sheetName]['!rows']; + if (temp && temp.length) { + for (var i = 0; i < temp.length; i++) { + if (temp[i] && temp[i].hpx) { + spreadsheet.rows[i] = {}; + spreadsheet.rows[i].height = temp[i].hpx + 'px'; + } + } + } + // Merge cells + var temp = workbook.Sheets[sheetName]['!merges']; + if (temp && temp.length > 0) { + spreadsheet.mergeCells = []; + for (var i = 0; i < temp.length; i++) { + var x1 = temp[i].s.c; + var y1 = temp[i].s.r; + var x2 = temp[i].e.c; + var y2 = temp[i].e.r; + var key = jexcel.getColumnNameFromId([x1,y1]); + spreadsheet.mergeCells[key] = [ x2-x1+1, y2-y1+1 ]; + } + } + // Data container + var max_x = 0; + var max_y = 0; + var temp = Object.keys(workbook.Sheets[sheetName]); + for (var i = 0; i < temp.length; i++) { + if (temp[i].substr(0,1) != '!') { + var cell = workbook.Sheets[sheetName][temp[i]]; + var info = jexcel.getIdFromColumnName(temp[i], true); + if (! spreadsheet.data[info[1]]) { + spreadsheet.data[info[1]] = []; + } + spreadsheet.data[info[1]][info[0]] = cell.f ? '=' + cell.f : cell.w; + if (max_x < info[0]) { + max_x = info[0]; + } + if (max_y < info[1]) { + max_y = info[1]; + } + // Style + if (cell.style && Object.keys(cell.style).length > 0) { + spreadsheet.style[temp[i]] = cell.style; + } + if (cell.s && cell.s.fgColor) { + if (spreadsheet.style[temp[i]]) { + spreadsheet.style[temp[i]] += ';'; + } + spreadsheet.style[temp[i]] += 'background-color:#' + cell.s.fgColor.rgb; + } + } + } + var numColumns = spreadsheet.columns; + for (var j = 0; j <= max_y; j++) { + for (var i = 0; i <= max_x; i++) { + if (! spreadsheet.data[j]) { + spreadsheet.data[j] = []; + } + if (! spreadsheet.data[j][i]) { + if (numColumns < i) { + spreadsheet.data[j][i] = ''; + } + } + } + } + spreadsheets.push(spreadsheet); + }); + + return spreadsheets; + } + + var oReq; + oReq = new XMLHttpRequest(); + oReq.open("GET", file, true); + + if(typeof Uint8Array !== 'undefined') { + oReq.responseType = "arraybuffer"; + oReq.onload = function(e) { + var arraybuffer = oReq.response; + var data = new Uint8Array(arraybuffer); + var wb = XLSX.read(data, {type:"array", cellFormula:true, cellStyles:true }); + __callback(convert(wb)) + }; + } else { + oReq.setRequestHeader("Accept-Charset", "x-user-defined"); + oReq.onreadystatechange = function() { if(oReq.readyState == 4 && oReq.status == 200) { + var ff = convertResponseBodyToText(oReq.responseBody); + var wb = XLSX.read(ff, {type:"binary", cellFormula:true, cellStyles:true }); + __callback(convert(wb)) + }}; + } + + oReq.send(); +} + +// Based on sutoiku work (https://github.com/sutoiku) + +var error = (function() { + var exports = {}; + + exports.nil = new Error('#NULL!'); + exports.div0 = new Error('#DIV/0!'); + exports.value = new Error('#VALUE!'); + exports.ref = new Error('#REF!'); + exports.name = new Error('#NAME?'); + exports.num = new Error('#NUM!'); + exports.na = new Error('#N/A'); + exports.error = new Error('#ERROR!'); + exports.data = new Error('#GETTING_DATA'); + + return exports; +})(); + +var utils = (function() { + var exports = {}; + + exports.flattenShallow = function(array) { + if (!array || !array.reduce) { + return array; + } + + return array.reduce(function(a, b) { + var aIsArray = Array.isArray(a); + var bIsArray = Array.isArray(b); + + if (aIsArray && bIsArray) { + return a.concat(b); + } + if (aIsArray) { + a.push(b); + + return a; + } + if (bIsArray) { + return [ a ].concat(b); + } + + return [ a, b ]; + }); + }; + + exports.isFlat = function(array) { + if (!array) { + return false; + } + + for (var i = 0; i < array.length; ++i) { + if (Array.isArray(array[i])) { + return false; + } + } + + return true; + }; + + exports.flatten = function() { + var result = exports.argsToArray.apply(null, arguments); + + while (!exports.isFlat(result)) { + result = exports.flattenShallow(result); + } + + return result; + }; + + exports.argsToArray = function(args) { + var result = []; + + exports.arrayEach(args, function(value) { + result.push(value); + }); + + return result; + }; + + exports.numbers = function() { + var possibleNumbers = this.flatten.apply(null, arguments); + return possibleNumbers.filter(function(el) { + return typeof el === 'number'; + }); + }; + + exports.cleanFloat = function(number) { + var power = 1e14; + return Math.round(number * power) / power; + }; + + exports.parseBool = function(bool) { + if (typeof bool === 'boolean') { + return bool; + } + + if (bool instanceof Error) { + return bool; + } + + if (typeof bool === 'number') { + return bool !== 0; + } + + if (typeof bool === 'string') { + var up = bool.toUpperCase(); + if (up === 'TRUE') { + return true; + } + + if (up === 'FALSE') { + return false; + } + } + + if (bool instanceof Date && !isNaN(bool)) { + return true; + } + + return error.value; + }; + + exports.parseNumber = function(string) { + if (string === undefined || string === '') { + return error.value; + } + if (!isNaN(string)) { + return parseFloat(string); + } + + return error.value; + }; + + exports.parseNumberArray = function(arr) { + var len; + + if (!arr || (len = arr.length) === 0) { + return error.value; + } + + var parsed; + + while (len--) { + parsed = exports.parseNumber(arr[len]); + if (parsed === error.value) { + return parsed; + } + arr[len] = parsed; + } + + return arr; + }; + + exports.parseMatrix = function(matrix) { + var n; + + if (!matrix || (n = matrix.length) === 0) { + return error.value; + } + var pnarr; + + for (var i = 0; i < matrix.length; i++) { + pnarr = exports.parseNumberArray(matrix[i]); + matrix[i] = pnarr; + + if (pnarr instanceof Error) { + return pnarr; + } + } + + return matrix; + }; + + var d1900 = new Date(Date.UTC(1900, 0, 1)); + exports.parseDate = function(date) { + if (!isNaN(date)) { + if (date instanceof Date) { + return new Date(date); + } + var d = parseInt(date, 10); + if (d < 0) { + return error.num; + } + if (d <= 60) { + return new Date(d1900.getTime() + (d - 1) * 86400000); + } + return new Date(d1900.getTime() + (d - 2) * 86400000); + } + if (typeof date === 'string') { + date = new Date(date); + if (!isNaN(date)) { + return date; + } + } + return error.value; + }; + + exports.parseDateArray = function(arr) { + var len = arr.length; + var parsed; + while (len--) { + parsed = this.parseDate(arr[len]); + if (parsed === error.value) { + return parsed; + } + arr[len] = parsed; + } + return arr; + }; + + exports.anyIsError = function() { + var n = arguments.length; + while (n--) { + if (arguments[n] instanceof Error) { + return true; + } + } + return false; + }; + + exports.arrayValuesToNumbers = function(arr) { + var n = arr.length; + var el; + while (n--) { + el = arr[n]; + if (typeof el === 'number') { + continue; + } + if (el === true) { + arr[n] = 1; + continue; + } + if (el === false) { + arr[n] = 0; + continue; + } + if (typeof el === 'string') { + var number = this.parseNumber(el); + if (number instanceof Error) { + arr[n] = 0; + } else { + arr[n] = number; + } + } + } + return arr; + }; + + exports.rest = function(array, idx) { + idx = idx || 1; + if (!array || typeof array.slice !== 'function') { + return array; + } + return array.slice(idx); + }; + + exports.initial = function(array, idx) { + idx = idx || 1; + if (!array || typeof array.slice !== 'function') { + return array; + } + return array.slice(0, array.length - idx); + }; + + exports.arrayEach = function(array, iteratee) { + var index = -1, length = array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + + return array; + }; + + exports.transpose = function(matrix) { + if (!matrix) { + return error.value; + } + + return matrix[0].map(function(col, i) { + return matrix.map(function(row) { + return row[i]; + }); + }); + }; + + return exports; +})(); + +jexcel.methods = {}; + +jexcel.methods.datetime = (function() { + var exports = {}; + + var d1900 = new Date(1900, 0, 1); + var WEEK_STARTS = [ + undefined, + 0, + 1, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + undefined, + 1, + 2, + 3, + 4, + 5, + 6, + 0 + ]; + var WEEK_TYPES = [ + [], + [1, 2, 3, 4, 5, 6, 7], + [7, 1, 2, 3, 4, 5, 6], + [6, 0, 1, 2, 3, 4, 5], + [], + [], + [], + [], + [], + [], + [], + [7, 1, 2, 3, 4, 5, 6], + [6, 7, 1, 2, 3, 4, 5], + [5, 6, 7, 1, 2, 3, 4], + [4, 5, 6, 7, 1, 2, 3], + [3, 4, 5, 6, 7, 1, 2], + [2, 3, 4, 5, 6, 7, 1], + [1, 2, 3, 4, 5, 6, 7] + ]; + var WEEKEND_TYPES = [ + [], + [6, 0], + [0, 1], + [1, 2], + [2, 3], + [3, 4], + [4, 5], + [5, 6], + undefined, + undefined, + undefined, [0, 0], + [1, 1], + [2, 2], + [3, 3], + [4, 4], + [5, 5], + [6, 6] + ]; + + exports.DATE = function(year, month, day) { + year = utils.parseNumber(year); + month = utils.parseNumber(month); + day = utils.parseNumber(day); + if (utils.anyIsError(year, month, day)) { + return error.value; + } + if (year < 0 || month < 0 || day < 0) { + return error.num; + } + var date = new Date(year, month - 1, day); + return date; + }; + + exports.DATEVALUE = function(date_text) { + if (typeof date_text !== 'string') { + return error.value; + } + var date = Date.parse(date_text); + if (isNaN(date)) { + return error.value; + } + if (date <= -2203891200000) { + return (date - d1900) / 86400000 + 1; + } + return (date - d1900) / 86400000 + 2; + }; + + exports.DAY = function(serial_number) { + var date = utils.parseDate(serial_number); + if (date instanceof Error) { + return date; + } + return date.getDate(); + }; + + exports.DAYS = function(end_date, start_date) { + end_date = utils.parseDate(end_date); + start_date = utils.parseDate(start_date); + if (end_date instanceof Error) { + return end_date; + } + if (start_date instanceof Error) { + return start_date; + } + return serial(end_date) - serial(start_date); + }; + + exports.DAYS360 = function(start_date, end_date, method) { + }; + + exports.EDATE = function(start_date, months) { + start_date = utils.parseDate(start_date); + if (start_date instanceof Error) { + return start_date; + } + if (isNaN(months)) { + return error.value; + } + months = parseInt(months, 10); + start_date.setMonth(start_date.getMonth() + months); + return serial(start_date); + }; + + exports.EOMONTH = function(start_date, months) { + start_date = utils.parseDate(start_date); + if (start_date instanceof Error) { + return start_date; + } + if (isNaN(months)) { + return error.value; + } + months = parseInt(months, 10); + return serial(new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0)); + }; + + exports.HOUR = function(serial_number) { + serial_number = utils.parseDate(serial_number); + if (serial_number instanceof Error) { + return serial_number; + } + return serial_number.getHours(); + }; + + exports.INTERVAL = function(second) { + if (typeof second !== 'number' && typeof second !== 'string') { + return error.value; + } else { + second = parseInt(second, 10); + } + + var year = Math.floor(second/946080000); + second = second%946080000; + var month = Math.floor(second/2592000); + second = second%2592000; + var day = Math.floor(second/86400); + second = second%86400; + + var hour = Math.floor(second/3600); + second = second%3600; + var min = Math.floor(second/60); + second = second%60; + var sec = second; + + year = (year > 0) ? year + 'Y' : ''; + month = (month > 0) ? month + 'M' : ''; + day = (day > 0) ? day + 'D' : ''; + hour = (hour > 0) ? hour + 'H' : ''; + min = (min > 0) ? min + 'M' : ''; + sec = (sec > 0) ? sec + 'S' : ''; + + return 'P' + year + month + day + 'T' + hour + min + sec; + }; + + exports.ISOWEEKNUM = function(date) { + date = utils.parseDate(date); + if (date instanceof Error) { + return date; + } + + date.setHours(0, 0, 0); + date.setDate(date.getDate() + 4 - (date.getDay() || 7)); + var yearStart = new Date(date.getFullYear(), 0, 1); + return Math.ceil((((date - yearStart) / 86400000) + 1) / 7); + }; + + exports.MINUTE = function(serial_number) { + serial_number = utils.parseDate(serial_number); + if (serial_number instanceof Error) { + return serial_number; + } + return serial_number.getMinutes(); + }; + + exports.MONTH = function(serial_number) { + serial_number = utils.parseDate(serial_number); + if (serial_number instanceof Error) { + return serial_number; + } + return serial_number.getMonth() + 1; + }; + + exports.NETWORKDAYS = function(start_date, end_date, holidays) { + }; + + exports.NETWORKDAYS.INTL = function(start_date, end_date, weekend, holidays) { + }; + + exports.NOW = function() { + return new Date(); + }; + + exports.SECOND = function(serial_number) { + serial_number = utils.parseDate(serial_number); + if (serial_number instanceof Error) { + return serial_number; + } + return serial_number.getSeconds(); + }; + + exports.TIME = function(hour, minute, second) { + hour = utils.parseNumber(hour); + minute = utils.parseNumber(minute); + second = utils.parseNumber(second); + if (utils.anyIsError(hour, minute, second)) { + return error.value; + } + if (hour < 0 || minute < 0 || second < 0) { + return error.num; + } + return (3600 * hour + 60 * minute + second) / 86400; + }; + + exports.TIMEVALUE = function(time_text) { + time_text = utils.parseDate(time_text); + if (time_text instanceof Error) { + return time_text; + } + return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400; + }; + + exports.TODAY = function() { + return new Date(); + }; + + exports.WEEKDAY = function(serial_number, return_type) { + serial_number = utils.parseDate(serial_number); + if (serial_number instanceof Error) { + return serial_number; + } + if (return_type === undefined) { + return_type = 1; + } + var day = serial_number.getDay(); + return WEEK_TYPES[return_type][day]; + }; + + exports.WEEKNUM = function(serial_number, return_type) { + }; + + exports.WORKDAY = function(start_date, days, holidays) { + }; + + exports.WORKDAY.INTL = function(start_date, days, weekend, holidays) { + }; + + exports.YEAR = function(serial_number) { + serial_number = utils.parseDate(serial_number); + if (serial_number instanceof Error) { + return serial_number; + } + return serial_number.getFullYear(); + }; + + function isLeapYear(year) { + return new Date(year, 1, 29).getMonth() === 1; + } + + exports.YEARFRAC = function(start_date, end_date, basis) { + }; + + function serial(date) { + var addOn = (date > -2203891200000)?2:1; + return (date - d1900) / 86400000 + addOn; + } + + return exports; +})(); + +jexcel.methods.database = (function() { + var exports = {}; + + function compact(array) { + if (!array) { + return array; + } + var result = []; + for (var i = 0; i < array.length; ++i) { + if (!array[i]) { + continue; + } + result.push(array[i]); + } + return result; + } + + exports.FINDFIELD = function(database, title) { + var index = null; + for (var i = 0; i < database.length; i++) { + if (database[i][0] === title) { + index = i; + break; + } + } + + // Return error if the input field title is incorrect + if (index == null) { + return error.value; + } + return index; + }; + + function findResultIndex(database, criterias) { + var matches = {}; + for (var i = 1; i < database[0].length; ++i) { + matches[i] = true; + } + var maxCriteriaLength = criterias[0].length; + for (i = 1; i < criterias.length; ++i) { + if (criterias[i].length > maxCriteriaLength) { + maxCriteriaLength = criterias[i].length; + } + } + + for (var k = 1; k < database.length; ++k) { + for (var l = 1; l < database[k].length; ++l) { + var currentCriteriaResult = false; + var hasMatchingCriteria = false; + for (var j = 0; j < criterias.length; ++j) { + var criteria = criterias[j]; + if (criteria.length < maxCriteriaLength) { + continue; + } + + var criteriaField = criteria[0]; + if (database[k][0] !== criteriaField) { + continue; + } + hasMatchingCriteria = true; + for (var p = 1; p < criteria.length; ++p) { + currentCriteriaResult = currentCriteriaResult + || eval(database[k][l] + criteria[p]); // jshint + // ignore:line + } + } + if (hasMatchingCriteria) { + matches[l] = matches[l] && currentCriteriaResult; + } + } + } + + var result = []; + for (var n = 0; n < database[0].length; ++n) { + if (matches[n]) { + result.push(n - 1); + } + } + return result; + } + + // Database functions + exports.DAVERAGE = function(database, field, criteria) { + // Return error if field is not a number and not a string + if (isNaN(field) && (typeof field !== "string")) { + return error.value; + } + var resultIndexes = findResultIndex(database, criteria); + var targetFields = []; + if (typeof field === "string") { + var index = exports.FINDFIELD(database, field); + targetFields = utils.rest(database[index]); + } else { + targetFields = utils.rest(database[field]); + } + var sum = 0; + for (var i = 0; i < resultIndexes.length; i++) { + sum += targetFields[resultIndexes[i]]; + } + return resultIndexes.length === 0 ? error.div0 : sum / resultIndexes.length; + }; + + exports.DCOUNT = function(database, field, criteria) { + }; + + exports.DCOUNTA = function(database, field, criteria) { + }; + + exports.DGET = function(database, field, criteria) { + // Return error if field is not a number and not a string + if (isNaN(field) && (typeof field !== "string")) { + return error.value; + } + var resultIndexes = findResultIndex(database, criteria); + var targetFields = []; + if (typeof field === "string") { + var index = exports.FINDFIELD(database, field); + targetFields = utils.rest(database[index]); + } else { + targetFields = utils.rest(database[field]); + } + // Return error if no record meets the criteria + if (resultIndexes.length === 0) { + return error.value; + } + // Returns the #NUM! error value because more than one record meets the + // criteria + if (resultIndexes.length > 1) { + return error.num; + } + + return targetFields[resultIndexes[0]]; + }; + + exports.DMAX = function(database, field, criteria) { + // Return error if field is not a number and not a string + if (isNaN(field) && (typeof field !== "string")) { + return error.value; + } + var resultIndexes = findResultIndex(database, criteria); + var targetFields = []; + if (typeof field === "string") { + var index = exports.FINDFIELD(database, field); + targetFields = utils.rest(database[index]); + } else { + targetFields = utils.rest(database[field]); + } + var maxValue = targetFields[resultIndexes[0]]; + for (var i = 1; i < resultIndexes.length; i++) { + if (maxValue < targetFields[resultIndexes[i]]) { + maxValue = targetFields[resultIndexes[i]]; + } + } + return maxValue; + }; + + exports.DMIN = function(database, field, criteria) { + // Return error if field is not a number and not a string + if (isNaN(field) && (typeof field !== "string")) { + return error.value; + } + var resultIndexes = findResultIndex(database, criteria); + var targetFields = []; + if (typeof field === "string") { + var index = exports.FINDFIELD(database, field); + targetFields = utils.rest(database[index]); + } else { + targetFields = utils.rest(database[field]); + } + var minValue = targetFields[resultIndexes[0]]; + for (var i = 1; i < resultIndexes.length; i++) { + if (minValue > targetFields[resultIndexes[i]]) { + minValue = targetFields[resultIndexes[i]]; + } + } + return minValue; + }; + + exports.DPRODUCT = function(database, field, criteria) { + // Return error if field is not a number and not a string + if (isNaN(field) && (typeof field !== "string")) { + return error.value; + } + var resultIndexes = findResultIndex(database, criteria); + var targetFields = []; + if (typeof field === "string") { + var index = exports.FINDFIELD(database, field); + targetFields = utils.rest(database[index]); + } else { + targetFields = utils.rest(database[field]); + } + var targetValues = []; + for (var i = 0; i < resultIndexes.length; i++) { + targetValues[i] = targetFields[resultIndexes[i]]; + } + targetValues = compact(targetValues); + var result = 1; + for (i = 0; i < targetValues.length; i++) { + result *= targetValues[i]; + } + return result; + }; + + exports.DSTDEV = function(database, field, criteria) { + }; + + exports.DSTDEVP = function(database, field, criteria) { + }; + + exports.DSUM = function(database, field, criteria) { + }; + + exports.DVAR = function(database, field, criteria) { + }; + + exports.DVARP = function(database, field, criteria) { + }; + + exports.MATCH = function(lookupValue, lookupArray, matchType) { + if (!lookupValue && !lookupArray) { + return error.na; + } + if (arguments.length === 2) { + matchType = 1; + } + if (!(lookupArray instanceof Array)) { + return error.na; + } + if (matchType !== -1 && matchType !== 0 && matchType !== 1) { + return error.na; + } + + var index; + var indexValue; + + for (var idx = 0; idx < lookupArray.length; idx++) { + if (matchType === 1) { + if (lookupArray[idx] === lookupValue) { + return idx + 1; + } else if (lookupArray[idx] < lookupValue) { + if (!indexValue) { + index = idx + 1; + indexValue = lookupArray[idx]; + } else if (lookupArray[idx] > indexValue) { + index = idx + 1; + indexValue = lookupArray[idx]; + } + } + } else if (matchType === 0) { + if (typeof lookupValue === 'string') { + lookupValue = lookupValue.replace(/\?/g, '.'); + if (lookupArray[idx].toLowerCase().match(lookupValue.toLowerCase())) { + return idx + 1; + } + } else { + if (lookupArray[idx] === lookupValue) { + return idx + 1; + } + } + } else if (matchType === -1) { + if (lookupArray[idx] === lookupValue) { + return idx + 1; + } else if (lookupArray[idx] > lookupValue) { + if (!indexValue) { + index = idx + 1; + indexValue = lookupArray[idx]; + } else if (lookupArray[idx] < indexValue) { + index = idx + 1; + indexValue = lookupArray[idx]; + } + } + } + } + + return index ? index : error.na; + }; + + return exports; +})(); + +jexcel.methods.engineering = (function() { + var exports = {}; + + function isValidBinaryNumber(number) { + return (/^[01]{1,10}$/).test(number); + } + + exports.BESSELI = function(x, n) { + }; + + exports.BESSELJ = function(x, n) { + }; + + exports.BESSELK = function(x, n) { + }; + + exports.BESSELY = function(x, n) { + }; + + exports.BIN2DEC = function(number) { + // Return error if number is not binary or contains more than 10 + // characters (10 digits) + if (!isValidBinaryNumber(number)) { + return error.num; + } + + // Convert binary number to decimal + var result = parseInt(number, 2); + + // Handle negative numbers + var stringified = number.toString(); + if (stringified.length === 10 && stringified.substring(0, 1) === '1') { + return parseInt(stringified.substring(1), 2) - 512; + } else { + return result; + } + }; + + exports.BIN2HEX = function(number, places) { + // Return error if number is not binary or contains more than 10 + // characters (10 digits) + if (!isValidBinaryNumber(number)) { + return error.num; + } + + // Ignore places and return a 10-character hexadecimal number if number + // is negative + var stringified = number.toString(); + if (stringified.length === 10 && stringified.substring(0, 1) === '1') { + return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16); + } + + // Convert binary number to hexadecimal + var result = parseInt(number, 2).toString(16); + + // Return hexadecimal number using the minimum number of characters + // necessary if places is undefined + if (places === undefined) { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + exports.BIN2OCT = function(number, places) { + // Return error if number is not binary or contains more than 10 + // characters (10 digits) + if (!isValidBinaryNumber(number)) { + return error.num; + } + + // Ignore places and return a 10-character octal number if number is + // negative + var stringified = number.toString(); + if (stringified.length === 10 && stringified.substring(0, 1) === '1') { + return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8); + } + + // Convert binary number to octal + var result = parseInt(number, 2).toString(8); + + // Return octal number using the minimum number of characters necessary + // if places is undefined + if (places === undefined) { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + exports.BITAND = function(number1, number2) { + // Return error if either number is a non-numeric value + number1 = utils.parseNumber(number1); + number2 = utils.parseNumber(number2); + if (utils.anyIsError(number1, number2)) { + return error.value; + } + + // Return error if either number is less than 0 + if (number1 < 0 || number2 < 0) { + return error.num; + } + + // Return error if either number is a non-integer + if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { + return error.num; + } + + // Return error if either number is greater than (2^48)-1 + if (number1 > 281474976710655 || number2 > 281474976710655) { + return error.num; + } + + // Return bitwise AND of two numbers + return number1 & number2; + }; + + exports.BITLSHIFT = function(number, shift) { + number = utils.parseNumber(number); + shift = utils.parseNumber(shift); + if (utils.anyIsError(number, shift)) { + return error.value; + } + + // Return error if number is less than 0 + if (number < 0) { + return error.num; + } + + // Return error if number is a non-integer + if (Math.floor(number) !== number) { + return error.num; + } + + // Return error if number is greater than (2^48)-1 + if (number > 281474976710655) { + return error.num; + } + + // Return error if the absolute value of shift is greater than 53 + if (Math.abs(shift) > 53) { + return error.num; + } + + // Return number shifted by shift bits to the left or to the right if + // shift is negative + return (shift >= 0) ? number << shift : number >> -shift; + }; + + exports.BITOR = function(number1, number2) { + number1 = utils.parseNumber(number1); + number2 = utils.parseNumber(number2); + if (utils.anyIsError(number1, number2)) { + return error.value; + } + + // Return error if either number is less than 0 + if (number1 < 0 || number2 < 0) { + return error.num; + } + + // Return error if either number is a non-integer + if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { + return error.num; + } + + // Return error if either number is greater than (2^48)-1 + if (number1 > 281474976710655 || number2 > 281474976710655) { + return error.num; + } + + // Return bitwise OR of two numbers + return number1 | number2; + }; + + exports.BITRSHIFT = function(number, shift) { + number = utils.parseNumber(number); + shift = utils.parseNumber(shift); + if (utils.anyIsError(number, shift)) { + return error.value; + } + + // Return error if number is less than 0 + if (number < 0) { + return error.num; + } + + // Return error if number is a non-integer + if (Math.floor(number) !== number) { + return error.num; + } + + // Return error if number is greater than (2^48)-1 + if (number > 281474976710655) { + return error.num; + } + + // Return error if the absolute value of shift is greater than 53 + if (Math.abs(shift) > 53) { + return error.num; + } + + // Return number shifted by shift bits to the right or to the left if + // shift is negative + return (shift >= 0) ? number >> shift : number << -shift; + }; + + exports.BITXOR = function(number1, number2) { + number1 = utils.parseNumber(number1); + number2 = utils.parseNumber(number2); + if (utils.anyIsError(number1, number2)) { + return error.value; + } + + // Return error if either number is less than 0 + if (number1 < 0 || number2 < 0) { + return error.num; + } + + // Return error if either number is a non-integer + if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) { + return error.num; + } + + // Return error if either number is greater than (2^48)-1 + if (number1 > 281474976710655 || number2 > 281474976710655) { + return error.num; + } + + // Return bitwise XOR of two numbers + return number1 ^ number2; + }; + + exports.COMPLEX = function(real, imaginary, suffix) { + real = utils.parseNumber(real); + imaginary = utils.parseNumber(imaginary); + if (utils.anyIsError(real, imaginary)) { + return real; + } + + // Set suffix + suffix = (suffix === undefined) ? 'i' : suffix; + + // Return error if suffix is neither "i" nor "j" + if (suffix !== 'i' && suffix !== 'j') { + return error.value; + } + + // Return complex number + if (real === 0 && imaginary === 0) { + return 0; + } else if (real === 0) { + return (imaginary === 1) ? suffix : imaginary.toString() + suffix; + } else if (imaginary === 0) { + return real.toString(); + } else { + var sign = (imaginary > 0) ? '+' : ''; + return real.toString() + sign + ((imaginary === 1) ? suffix : imaginary.toString() + suffix); + } + }; + + exports.CONVERT = function(number, from_unit, to_unit) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + + // List of units supported by CONVERT and units defined by the + // International System of Units + // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion + // ratio] + var units = [ + ["a.u. of action", "?", null, "action", false, false, 1.05457168181818e-34], + ["a.u. of charge", "e", null, "electric_charge", false, false, 1.60217653141414e-19], + ["a.u. of energy", "Eh", null, "energy", false, false, 4.35974417757576e-18], + ["a.u. of length", "a?", null, "length", false, false, 5.29177210818182e-11], + ["a.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31], + ["a.u. of time", "?/Eh", null, "time", false, false, 2.41888432650516e-17], + ["admiralty knot", "admkn", null, "speed", false, true, 0.514773333], + ["ampere", "A", null, "electric_current", true, false, 1], + ["ampere per meter", "A/m", null, "magnetic_field_intensity", true, false, 1], + ["ångström", "Å", ["ang"], "length", false, true, 1e-10], + ["are", "ar", null, "area", false, true, 100], + ["astronomical unit", "ua", null, "length", false, false, 1.49597870691667e-11], + ["bar", "bar", null, "pressure", false, false, 100000], + ["barn", "b", null, "area", false, false, 1e-28], + ["becquerel", "Bq", null, "radioactivity", true, false, 1], + ["bit", "bit", ["b"], "information", false, true, 1], + ["btu", "BTU", ["btu"], "energy", false, true, 1055.05585262], + ["byte", "byte", null, "information", false, true, 8], + ["candela", "cd", null, "luminous_intensity", true, false, 1], + ["candela per square metre", "cd/m?", null, "luminance", true, false, 1], + ["coulomb", "C", null, "electric_charge", true, false, 1], + ["cubic ångström", "ang3", ["ang^3"], "volume", false, true, 1e-30], + ["cubic foot", "ft3", ["ft^3"], "volume", false, true, 0.028316846592], + ["cubic inch", "in3", ["in^3"], "volume", false, true, 0.000016387064], + ["cubic light-year", "ly3", ["ly^3"], "volume", false, true, 8.46786664623715e-47], + ["cubic metre", "m?", null, "volume", true, true, 1], + ["cubic mile", "mi3", ["mi^3"], "volume", false, true, 4168181825.44058], + ["cubic nautical mile", "Nmi3", ["Nmi^3"], "volume", false, true, 6352182208], + ["cubic Pica", "Pica3", ["Picapt3", "Pica^3", "Picapt^3"], "volume", false, true, 7.58660370370369e-8], + ["cubic yard", "yd3", ["yd^3"], "volume", false, true, 0.764554857984], + ["cup", "cup", null, "volume", false, true, 0.0002365882365], + ["dalton", "Da", ["u"], "mass", false, false, 1.66053886282828e-27], + ["day", "d", ["day"], "time", false, true, 86400], + ["degree", "°", null, "angle", false, false, 0.0174532925199433], + ["degrees Rankine", "Rank", null, "temperature", false, true, 0.555555555555556], + ["dyne", "dyn", ["dy"], "force", false, true, 0.00001], + ["electronvolt", "eV", ["ev"], "energy", false, true, 1.60217656514141], + ["ell", "ell", null, "length", false, true, 1.143], + ["erg", "erg", ["e"], "energy", false, true, 1e-7], + ["farad", "F", null, "electric_capacitance", true, false, 1], + ["fluid ounce", "oz", null, "volume", false, true, 0.0000295735295625], + ["foot", "ft", null, "length", false, true, 0.3048], + ["foot-pound", "flb", null, "energy", false, true, 1.3558179483314], + ["gal", "Gal", null, "acceleration", false, false, 0.01], + ["gallon", "gal", null, "volume", false, true, 0.003785411784], + ["gauss", "G", ["ga"], "magnetic_flux_density", false, true, 1], + ["grain", "grain", null, "mass", false, true, 0.0000647989], + ["gram", "g", null, "mass", false, true, 0.001], + ["gray", "Gy", null, "absorbed_dose", true, false, 1], + ["gross registered ton", "GRT", ["regton"], "volume", false, true, 2.8316846592], + ["hectare", "ha", null, "area", false, true, 10000], + ["henry", "H", null, "inductance", true, false, 1], + ["hertz", "Hz", null, "frequency", true, false, 1], + ["horsepower", "HP", ["h"], "power", false, true, 745.69987158227], + ["horsepower-hour", "HPh", ["hh", "hph"], "energy", false, true, 2684519.538], + ["hour", "h", ["hr"], "time", false, true, 3600], + ["imperial gallon (U.K.)", "uk_gal", null, "volume", false, true, 0.00454609], + ["imperial hundredweight", "lcwt", ["uk_cwt", "hweight"], "mass", false, true, 50.802345], + ["imperial quart (U.K)", "uk_qt", null, "volume", false, true, 0.0011365225], + ["imperial ton", "brton", ["uk_ton", "LTON"], "mass", false, true, 1016.046909], + ["inch", "in", null, "length", false, true, 0.0254], + ["international acre", "uk_acre", null, "area", false, true, 4046.8564224], + ["IT calorie", "cal", null, "energy", false, true, 4.1868], + ["joule", "J", null, "energy", true, true, 1], + ["katal", "kat", null, "catalytic_activity", true, false, 1], + ["kelvin", "K", ["kel"], "temperature", true, true, 1], + ["kilogram", "kg", null, "mass", true, true, 1], + ["knot", "kn", null, "speed", false, true, 0.514444444444444], + ["light-year", "ly", null, "length", false, true, 9460730472580800], + ["litre", "L", ["l", "lt"], "volume", false, true, 0.001], + ["lumen", "lm", null, "luminous_flux", true, false, 1], + ["lux", "lx", null, "illuminance", true, false, 1], + ["maxwell", "Mx", null, "magnetic_flux", false, false, 1e-18], + ["measurement ton", "MTON", null, "volume", false, true, 1.13267386368], + ["meter per hour", "m/h", ["m/hr"], "speed", false, true, 0.00027777777777778], + ["meter per second", "m/s", ["m/sec"], "speed", true, true, 1], + ["meter per second squared", "m?s??", null, "acceleration", true, false, 1], + ["parsec", "pc", ["parsec"], "length", false, true, 30856775814671900], + ["meter squared per second", "m?/s", null, "kinematic_viscosity", true, false, 1], + ["metre", "m", null, "length", true, true, 1], + ["miles per hour", "mph", null, "speed", false, true, 0.44704], + ["millimetre of mercury", "mmHg", null, "pressure", false, false, 133.322], + ["minute", "?", null, "angle", false, false, 0.000290888208665722], + ["minute", "min", ["mn"], "time", false, true, 60], + ["modern teaspoon", "tspm", null, "volume", false, true, 0.000005], + ["mole", "mol", null, "amount_of_substance", true, false, 1], + ["morgen", "Morgen", null, "area", false, true, 2500], + ["n.u. of action", "?", null, "action", false, false, 1.05457168181818e-34], + ["n.u. of mass", "m?", null, "mass", false, false, 9.10938261616162e-31], + ["n.u. of speed", "c?", null, "speed", false, false, 299792458], + ["n.u. of time", "?/(me?c??)", null, "time", false, false, 1.28808866778687e-21], + ["nautical mile", "M", ["Nmi"], "length", false, true, 1852], + ["newton", "N", null, "force", true, true, 1], + ["œrsted", "Oe ", null, "magnetic_field_intensity", false, false, 79.5774715459477], + ["ohm", "Ω", null, "electric_resistance", true, false, 1], + ["ounce mass", "ozm", null, "mass", false, true, 0.028349523125], + ["pascal", "Pa", null, "pressure", true, false, 1], + ["pascal second", "Pa?s", null, "dynamic_viscosity", true, false, 1], + ["pferdestärke", "PS", null, "power", false, true, 735.49875], + ["phot", "ph", null, "illuminance", false, false, 0.0001], + ["pica (1/6 inch)", "pica", null, "length", false, true, 0.00035277777777778], + ["pica (1/72 inch)", "Pica", ["Picapt"], "length", false, true, 0.00423333333333333], + ["poise", "P", null, "dynamic_viscosity", false, false, 0.1], + ["pond", "pond", null, "force", false, true, 0.00980665], + ["pound force", "lbf", null, "force", false, true, 4.4482216152605], + ["pound mass", "lbm", null, "mass", false, true, 0.45359237], + ["quart", "qt", null, "volume", false, true, 0.000946352946], + ["radian", "rad", null, "angle", true, false, 1], + ["second", "?", null, "angle", false, false, 0.00000484813681109536], + ["second", "s", ["sec"], "time", true, true, 1], + ["short hundredweight", "cwt", ["shweight"], "mass", false, true, 45.359237], + ["siemens", "S", null, "electrical_conductance", true, false, 1], + ["sievert", "Sv", null, "equivalent_dose", true, false, 1], + ["slug", "sg", null, "mass", false, true, 14.59390294], + ["square ångström", "ang2", ["ang^2"], "area", false, true, 1e-20], + ["square foot", "ft2", ["ft^2"], "area", false, true, 0.09290304], + ["square inch", "in2", ["in^2"], "area", false, true, 0.00064516], + ["square light-year", "ly2", ["ly^2"], "area", false, true, 8.95054210748189e+31], + ["square meter", "m?", null, "area", true, true, 1], + ["square mile", "mi2", ["mi^2"], "area", false, true, 2589988.110336], + ["square nautical mile", "Nmi2", ["Nmi^2"], "area", false, true, 3429904], + ["square Pica", "Pica2", ["Picapt2", "Pica^2", "Picapt^2"], "area", false, true, 0.00001792111111111], + ["square yard", "yd2", ["yd^2"], "area", false, true, 0.83612736], + ["statute mile", "mi", null, "length", false, true, 1609.344], + ["steradian", "sr", null, "solid_angle", true, false, 1], + ["stilb", "sb", null, "luminance", false, false, 0.0001], + ["stokes", "St", null, "kinematic_viscosity", false, false, 0.0001], + ["stone", "stone", null, "mass", false, true, 6.35029318], + ["tablespoon", "tbs", null, "volume", false, true, 0.0000147868], + ["teaspoon", "tsp", null, "volume", false, true, 0.00000492892], + ["tesla", "T", null, "magnetic_flux_density", true, true, 1], + ["thermodynamic calorie", "c", null, "energy", false, true, 4.184], + ["ton", "ton", null, "mass", false, true, 907.18474], + ["tonne", "t", null, "mass", false, false, 1000], + ["U.K. pint", "uk_pt", null, "volume", false, true, 0.00056826125], + ["U.S. bushel", "bushel", null, "volume", false, true, 0.03523907], + ["U.S. oil barrel", "barrel", null, "volume", false, true, 0.158987295], + ["U.S. pint", "pt", ["us_pt"], "volume", false, true, 0.000473176473], + ["U.S. survey mile", "survey_mi", null, "length", false, true, 1609.347219], + ["U.S. survey/statute acre", "us_acre", null, "area", false, true, 4046.87261], + ["volt", "V", null, "voltage", true, false, 1], + ["watt", "W", null, "power", true, true, 1], + ["watt-hour", "Wh", ["wh"], "energy", false, true, 3600], + ["weber", "Wb", null, "magnetic_flux", true, false, 1], + ["yard", "yd", null, "length", false, true, 0.9144], + ["year", "yr", null, "time", false, true, 31557600] + ]; + + // Binary prefixes + // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived + // from] + var binary_prefixes = { + Yi: ["yobi", 80, 1208925819614629174706176, "Yi", "yotta"], + Zi: ["zebi", 70, 1180591620717411303424, "Zi", "zetta"], + Ei: ["exbi", 60, 1152921504606846976, "Ei", "exa"], + Pi: ["pebi", 50, 1125899906842624, "Pi", "peta"], + Ti: ["tebi", 40, 1099511627776, "Ti", "tera"], + Gi: ["gibi", 30, 1073741824, "Gi", "giga"], + Mi: ["mebi", 20, 1048576, "Mi", "mega"], + ki: ["kibi", 10, 1024, "ki", "kilo"] + }; + + // Unit prefixes + // [Name, Multiplier, Abbreviation] + var unit_prefixes = { + Y: ["yotta", 1e+24, "Y"], + Z: ["zetta", 1e+21, "Z"], + E: ["exa", 1e+18, "E"], + P: ["peta", 1e+15, "P"], + T: ["tera", 1e+12, "T"], + G: ["giga", 1e+09, "G"], + M: ["mega", 1e+06, "M"], + k: ["kilo", 1e+03, "k"], + h: ["hecto", 1e+02, "h"], + e: ["dekao", 1e+01, "e"], + d: ["deci", 1e-01, "d"], + c: ["centi", 1e-02, "c"], + m: ["milli", 1e-03, "m"], + u: ["micro", 1e-06, "u"], + n: ["nano", 1e-09, "n"], + p: ["pico", 1e-12, "p"], + f: ["femto", 1e-15, "f"], + a: ["atto", 1e-18, "a"], + z: ["zepto", 1e-21, "z"], + y: ["yocto", 1e-24, "y"] + }; + + // Initialize units and multipliers + var from = null; + var to = null; + var base_from_unit = from_unit; + var base_to_unit = to_unit; + var from_multiplier = 1; + var to_multiplier = 1; + var alt; + + // Lookup from and to units + for (var i = 0; i < units.length; i++) { + alt = (units[i][2] === null) ? [] : units[i][2]; + if (units[i][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) { + from = units[i]; + } + if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) { + to = units[i]; + } + } + + // Lookup from prefix + if (from === null) { + var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)]; + var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)]; + + // Handle dekao unit prefix (only unit prefix with two characters) + if (from_unit.substring(0, 2) === 'da') { + from_unit_prefix = ["dekao", 1e+01, "da"]; + } + + // Handle binary prefixes first (so that 'Yi' is processed before + // 'Y') + if (from_binary_prefix) { + from_multiplier = from_binary_prefix[2]; + base_from_unit = from_unit.substring(2); + } else if (from_unit_prefix) { + from_multiplier = from_unit_prefix[1]; + base_from_unit = from_unit.substring(from_unit_prefix[2].length); + } + + // Lookup from unit + for (var j = 0; j < units.length; j++) { + alt = (units[j][2] === null) ? [] : units[j][2]; + if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) { + from = units[j]; + } + } + } + + // Lookup to prefix + if (to === null) { + var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)]; + var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)]; + + // Handle dekao unit prefix (only unit prefix with two characters) + if (to_unit.substring(0, 2) === 'da') { + to_unit_prefix = ["dekao", 1e+01, "da"]; + } + + // Handle binary prefixes first (so that 'Yi' is processed before + // 'Y') + if (to_binary_prefix) { + to_multiplier = to_binary_prefix[2]; + base_to_unit = to_unit.substring(2); + } else if (to_unit_prefix) { + to_multiplier = to_unit_prefix[1]; + base_to_unit = to_unit.substring(to_unit_prefix[2].length); + } + + // Lookup to unit + for (var k = 0; k < units.length; k++) { + alt = (units[k][2] === null) ? [] : units[k][2]; + if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) { + to = units[k]; + } + } + } + + // Return error if a unit does not exist + if (from === null || to === null) { + return error.na; + } + + // Return error if units represent different quantities + if (from[3] !== to[3]) { + return error.na; + } + + // Return converted number + return number * from[6] * from_multiplier / (to[6] * to_multiplier); + }; + + exports.DEC2BIN = function(number, places) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + + // Return error if number is not decimal, is lower than -512, or is + // greater than 511 + if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) { + return error.num; + } + + // Ignore places and return a 10-character binary number if number is + // negative + if (number < 0) { + return '1' + REPT('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2); + } + + // Convert decimal number to binary + var result = parseInt(number, 10).toString(2); + + // Return binary number using the minimum number of characters necessary + // if places is undefined + if (typeof places === 'undefined') { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + exports.DEC2HEX = function(number, places) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + + // Return error if number is not decimal, is lower than -549755813888, + // or is greater than 549755813887 + if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) { + return error.num; + } + + // Ignore places and return a 10-character hexadecimal number if number + // is negative + if (number < 0) { + return (1099511627776 + number).toString(16); + } + + // Convert decimal number to hexadecimal + var result = parseInt(number, 10).toString(16); + + // Return hexadecimal number using the minimum number of characters + // necessary if places is undefined + if (typeof places === 'undefined') { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + exports.DEC2OCT = function(number, places) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + + // Return error if number is not decimal, is lower than -549755813888, + // or is greater than 549755813887 + if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) { + return error.num; + } + + // Ignore places and return a 10-character octal number if number is + // negative + if (number < 0) { + return (1073741824 + number).toString(8); + } + + // Convert decimal number to octal + var result = parseInt(number, 10).toString(8); + + // Return octal number using the minimum number of characters necessary + // if places is undefined + if (typeof places === 'undefined') { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + exports.DELTA = function(number1, number2) { + // Set number2 to zero if undefined + number2 = (number2 === undefined) ? 0 : number2; + number1 = utils.parseNumber(number1); + number2 = utils.parseNumber(number2); + if (utils.anyIsError(number1, number2)) { + return error.value; + } + + // Return delta + return (number1 === number2) ? 1 : 0; + }; + + exports.ERF = function(lower_bound, upper_bound) { + }; + + exports.ERF.PRECISE = function() { + }; + + exports.ERFC = function(x) { + }; + + exports.ERFC.PRECISE = function() { + }; + + exports.GESTEP = function(number, step) { + step = step || 0; + number = utils.parseNumber(number); + if (utils.anyIsError(step, number)) { + return number; + } + + // Return delta + return (number >= step) ? 1 : 0; + }; + + exports.HEX2BIN = function(number, places) { + // Return error if number is not hexadecimal or contains more than ten + // characters (10 digits) + if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { + return error.num; + } + + // Check if number is negative + var negative = (number.length === 10 && number.substring(0, 1).toLowerCase() === 'f') ? true : false; + + // Convert hexadecimal number to decimal + var decimal = (negative) ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16); + + // Return error if number is lower than -512 or greater than 511 + if (decimal < -512 || decimal > 511) { + return error.num; + } + + // Ignore places and return a 10-character binary number if number is + // negative + if (negative) { + return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2); + } + + // Convert decimal number to binary + var result = decimal.toString(2); + + // Return binary number using the minimum number of characters necessary + // if places is undefined + if (places === undefined) { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + exports.HEX2DEC = function(number) { + // Return error if number is not hexadecimal or contains more than ten + // characters (10 digits) + if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { + return error.num; + } + + // Convert hexadecimal number to decimal + var decimal = parseInt(number, 16); + + // Return decimal number + return (decimal >= 549755813888) ? decimal - 1099511627776 : decimal; + }; + + exports.HEX2OCT = function(number, places) { + // Return error if number is not hexadecimal or contains more than ten + // characters (10 digits) + if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) { + return error.num; + } + + // Convert hexadecimal number to decimal + var decimal = parseInt(number, 16); + + // Return error if number is positive and greater than 0x1fffffff + // (536870911) + if (decimal > 536870911 && decimal < 1098974756864) { + return error.num; + } + + // Ignore places and return a 10-character octal number if number is + // negative + if (decimal >= 1098974756864) { + return (decimal - 1098437885952).toString(8); + } + + // Convert decimal number to octal + var result = decimal.toString(8); + + // Return octal number using the minimum number of characters necessary + // if places is undefined + if (places === undefined) { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + exports.IMABS = function(inumber) { + // Lookup real and imaginary coefficients using exports.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + // Return error if either coefficient is not a number + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Return absolute value of complex number + return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); + }; + + exports.IMAGINARY = function(inumber) { + if (inumber === undefined || inumber === true || inumber === false) { + return error.value; + } + + // Return 0 if inumber is equal to 0 + if (inumber === 0 || inumber === '0') { + return 0; + } + + // Handle special cases + if (['i', 'j'].indexOf(inumber) >= 0) { + return 1; + } + + // Normalize imaginary coefficient + inumber = inumber.replace('+i', '+1i').replace('-i', '-1i').replace('+j', '+1j').replace('-j', '-1j'); + + // Lookup sign + var plus = inumber.indexOf('+'); + var minus = inumber.indexOf('-'); + if (plus === 0) { + plus = inumber.indexOf('+', 1); + } + + if (minus === 0) { + minus = inumber.indexOf('-', 1); + } + + // Lookup imaginary unit + var last = inumber.substring(inumber.length - 1, inumber.length); + var unit = (last === 'i' || last === 'j'); + + if (plus >= 0 || minus >= 0) { + // Return error if imaginary unit is neither i nor j + if (!unit) { + return error.num; + } + + // Return imaginary coefficient of complex number + if (plus >= 0) { + return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ? + error.num : + Number(inumber.substring(plus + 1, inumber.length - 1)); + } else { + return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ? + error.num : + -Number(inumber.substring(minus + 1, inumber.length - 1)); + } + } else { + if (unit) { + return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : inumber.substring(0, inumber.length - 1); + } else { + return (isNaN(inumber)) ? error.num : 0; + } + } + }; + + exports.IMARGUMENT = function(inumber) { + // Lookup real and imaginary coefficients using exports.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + // Return error if either coefficient is not a number + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Return error if inumber is equal to zero + if (x === 0 && y === 0) { + return error.div0; + } + + // Return PI/2 if x is equal to zero and y is positive + if (x === 0 && y > 0) { + return Math.PI / 2; + } + + // Return -PI/2 if x is equal to zero and y is negative + if (x === 0 && y < 0) { + return -Math.PI / 2; + } + + // Return zero if x is negative and y is equal to zero + if (y === 0 && x > 0) { + return 0; + } + + // Return zero if x is negative and y is equal to zero + if (y === 0 && x < 0) { + return -Math.PI; + } + + // Return argument of complex number + if (x > 0) { + return Math.atan(y / x); + } else if (x < 0 && y >= 0) { + return Math.atan(y / x) + Math.PI; + } else { + return Math.atan(y / x) - Math.PI; + } + }; + + exports.IMCONJUGATE = function(inumber) { + // Lookup real and imaginary coefficients using exports.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return conjugate of complex number + return (y !== 0) ? exports.COMPLEX(x, -y, unit) : inumber; + }; + + exports.IMCOS = function(inumber) { + // Lookup real and imaginary coefficients using exports.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return cosine of complex number + return exports.COMPLEX(Math.cos(x) * (Math.exp(y) + Math.exp(-y)) / 2, -Math.sin(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit); + }; + + exports.IMCOSH = function(inumber) { + // Lookup real and imaginary coefficients using exports.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return hyperbolic cosine of complex number + return exports.COMPLEX(Math.cos(y) * (Math.exp(x) + Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) - Math.exp(-x)) / 2, unit); + }; + + exports.IMCOT = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Return cotangent of complex number + return exports.IMDIV(exports.IMCOS(inumber), exports.IMSIN(inumber)); + }; + + exports.IMDIV = function(inumber1, inumber2) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var a = exports.IMREAL(inumber1); + var b = exports.IMAGINARY(inumber1); + var c = exports.IMREAL(inumber2); + var d = exports.IMAGINARY(inumber2); + + if (utils.anyIsError(a, b, c, d)) { + return error.value; + } + + // Lookup imaginary unit + var unit1 = inumber1.substring(inumber1.length - 1); + var unit2 = inumber2.substring(inumber2.length - 1); + var unit = 'i'; + if (unit1 === 'j') { + unit = 'j'; + } else if (unit2 === 'j') { + unit = 'j'; + } + + // Return error if inumber2 is null + if (c === 0 && d === 0) { + return error.num; + } + + // Return exponential of complex number + var den = c * c + d * d; + return exports.COMPLEX((a * c + b * d) / den, (b * c - a * d) / den, unit); + }; + + exports.IMEXP = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return exponential of complex number + var e = Math.exp(x); + return exports.COMPLEX(e * Math.cos(y), e * Math.sin(y), unit); + }; + + exports.IMLN = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return exponential of complex number + return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)), Math.atan(y / x), unit); + }; + + exports.IMLOG10 = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return exponential of complex number + return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), Math.atan(y / x) / Math.log(10), unit); + }; + + exports.IMLOG2 = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return exponential of complex number + return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), Math.atan(y / x) / Math.log(2), unit); + }; + + exports.IMPOWER = function(inumber, number) { + number = utils.parseNumber(number); + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + if (utils.anyIsError(number, x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Calculate power of modulus + var p = Math.pow(exports.IMABS(inumber), number); + + // Calculate argument + var t = exports.IMARGUMENT(inumber); + + // Return exponential of complex number + return exports.COMPLEX(p * Math.cos(number * t), p * Math.sin(number * t), unit); + }; + + exports.IMPRODUCT = function() { + // Initialize result + var result = arguments[0]; + + // Loop on all numbers + for (var i = 1; i < arguments.length; i++) { + // Lookup coefficients of two complex numbers + var a = exports.IMREAL(result); + var b = exports.IMAGINARY(result); + var c = exports.IMREAL(arguments[i]); + var d = exports.IMAGINARY(arguments[i]); + + if (utils.anyIsError(a, b, c, d)) { + return error.value; + } + + // Complute product of two complex numbers + result = exports.COMPLEX(a * c - b * d, a * d + b * c); + } + + // Return product of complex numbers + return result; + }; + + exports.IMREAL = function(inumber) { + if (inumber === undefined || inumber === true || inumber === false) { + return error.value; + } + + // Return 0 if inumber is equal to 0 + if (inumber === 0 || inumber === '0') { + return 0; + } + + // Handle special cases + if (['i', '+i', '1i', '+1i', '-i', '-1i', 'j', '+j', '1j', '+1j', '-j', '-1j'].indexOf(inumber) >= 0) { + return 0; + } + + // Lookup sign + var plus = inumber.indexOf('+'); + var minus = inumber.indexOf('-'); + if (plus === 0) { + plus = inumber.indexOf('+', 1); + } + if (minus === 0) { + minus = inumber.indexOf('-', 1); + } + + // Lookup imaginary unit + var last = inumber.substring(inumber.length - 1, inumber.length); + var unit = (last === 'i' || last === 'j'); + + if (plus >= 0 || minus >= 0) { + // Return error if imaginary unit is neither i nor j + if (!unit) { + return error.num; + } + + // Return real coefficient of complex number + if (plus >= 0) { + return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ? + error.num : + Number(inumber.substring(0, plus)); + } else { + return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ? + error.num : + Number(inumber.substring(0, minus)); + } + } else { + if (unit) { + return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : 0; + } else { + return (isNaN(inumber)) ? error.num : inumber; + } + } + }; + + exports.IMSEC = function(inumber) { + // Return error if inumber is a logical value + if (inumber === true || inumber === false) { + return error.value; + } + + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Return secant of complex number + return exports.IMDIV('1', exports.IMCOS(inumber)); + }; + + exports.IMSECH = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Return hyperbolic secant of complex number + return exports.IMDIV('1', exports.IMCOSH(inumber)); + }; + + exports.IMSIN = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return sine of complex number + return exports.COMPLEX(Math.sin(x) * (Math.exp(y) + Math.exp(-y)) / 2, Math.cos(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit); + }; + + exports.IMSINH = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Return hyperbolic sine of complex number + return exports.COMPLEX(Math.cos(y) * (Math.exp(x) - Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) + Math.exp(-x)) / 2, unit); + }; + + exports.IMSQRT = function(inumber) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Lookup imaginary unit + var unit = inumber.substring(inumber.length - 1); + unit = (unit === 'i' || unit === 'j') ? unit : 'i'; + + // Calculate power of modulus + var s = Math.sqrt(exports.IMABS(inumber)); + + // Calculate argument + var t = exports.IMARGUMENT(inumber); + + // Return exponential of complex number + return exports.COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit); + }; + + exports.IMCSC = function (inumber) { + // Return error if inumber is a logical value + if (inumber === true || inumber === false) { + return error.value; + } + + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + // Return error if either coefficient is not a number + if (utils.anyIsError(x, y)) { + return error.num; + } + + // Return cosecant of complex number + return exports.IMDIV('1', exports.IMSIN(inumber)); + }; + + exports.IMCSCH = function (inumber) { + // Return error if inumber is a logical value + if (inumber === true || inumber === false) { + return error.value; + } + + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + // Return error if either coefficient is not a number + if (utils.anyIsError(x, y)) { + return error.num; + } + + // Return hyperbolic cosecant of complex number + return exports.IMDIV('1', exports.IMSINH(inumber)); + }; + + exports.IMSUB = function(inumber1, inumber2) { + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var a = this.IMREAL(inumber1); + var b = this.IMAGINARY(inumber1); + var c = this.IMREAL(inumber2); + var d = this.IMAGINARY(inumber2); + + if (utils.anyIsError(a, b, c, d)) { + return error.value; + } + + // Lookup imaginary unit + var unit1 = inumber1.substring(inumber1.length - 1); + var unit2 = inumber2.substring(inumber2.length - 1); + var unit = 'i'; + if (unit1 === 'j') { + unit = 'j'; + } else if (unit2 === 'j') { + unit = 'j'; + } + + // Return _ of two complex numbers + return this.COMPLEX(a - c, b - d, unit); + }; + + exports.IMSUM = function() { + var args = utils.flatten(arguments); + + // Initialize result + var result = args[0]; + + // Loop on all numbers + for (var i = 1; i < args.length; i++) { + // Lookup coefficients of two complex numbers + var a = this.IMREAL(result); + var b = this.IMAGINARY(result); + var c = this.IMREAL(args[i]); + var d = this.IMAGINARY(args[i]); + + if (utils.anyIsError(a, b, c, d)) { + return error.value; + } + + // Complute product of two complex numbers + result = this.COMPLEX(a + c, b + d); + } + + // Return sum of complex numbers + return result; + }; + + exports.IMTAN = function(inumber) { + // Return error if inumber is a logical value + if (inumber === true || inumber === false) { + return error.value; + } + + // Lookup real and imaginary coefficients using Formula.js + // [http://formulajs.org] + var x = exports.IMREAL(inumber); + var y = exports.IMAGINARY(inumber); + + if (utils.anyIsError(x, y)) { + return error.value; + } + + // Return tangent of complex number + return this.IMDIV(this.IMSIN(inumber), this.IMCOS(inumber)); + }; + + exports.OCT2BIN = function(number, places) { + // Return error if number is not hexadecimal or contains more than ten + // characters (10 digits) + if (!/^[0-7]{1,10}$/.test(number)) { + return error.num; + } + + // Check if number is negative + var negative = (number.length === 10 && number.substring(0, 1) === '7') ? true : false; + + // Convert octal number to decimal + var decimal = (negative) ? parseInt(number, 8) - 1073741824 : parseInt(number, 8); + + // Return error if number is lower than -512 or greater than 511 + if (decimal < -512 || decimal > 511) { + return error.num; + } + + // Ignore places and return a 10-character binary number if number is + // negative + if (negative) { + return '1' + REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2); + } + + // Convert decimal number to binary + var result = decimal.toString(2); + + // Return binary number using the minimum number of characters necessary + // if places is undefined + if (typeof places === 'undefined') { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + exports.OCT2DEC = function(number) { + // Return error if number is not octal or contains more than ten + // characters (10 digits) + if (!/^[0-7]{1,10}$/.test(number)) { + return error.num; + } + + // Convert octal number to decimal + var decimal = parseInt(number, 8); + + // Return decimal number + return (decimal >= 536870912) ? decimal - 1073741824 : decimal; + }; + + exports.OCT2HEX = function(number, places) { + // Return error if number is not octal or contains more than ten + // characters (10 digits) + if (!/^[0-7]{1,10}$/.test(number)) { + return error.num; + } + + // Convert octal number to decimal + var decimal = parseInt(number, 8); + + // Ignore places and return a 10-character octal number if number is + // negative + if (decimal >= 536870912) { + return 'ff' + (decimal + 3221225472).toString(16); + } + + // Convert decimal number to hexadecimal + var result = decimal.toString(16); + + // Return hexadecimal number using the minimum number of characters + // necessary if places is undefined + if (places === undefined) { + return result; + } else { + // Return error if places is nonnumeric + if (isNaN(places)) { + return error.value; + } + + // Return error if places is negative + if (places < 0) { + return error.num; + } + + // Truncate places in case it is not an integer + places = Math.floor(places); + + // Pad return value with leading 0s (zeros) if necessary (using + // Underscore.string) + return (places >= result.length) ? REPT('0', places - result.length) + result : error.num; + } + }; + + return exports; +})(); + +jexcel.methods.financial = (function() { + var exports = {}; + + function validDate(d) { + return d && d.getTime && !isNaN(d.getTime()); + } + + function ensureDate(d) { + return (d instanceof Date)?d:new Date(d); + } + + exports.ACCRINT = function(issue, first, settlement, rate, par, frequency, basis) { + // Return error if either date is invalid + issue = ensureDate(issue); + first = ensureDate(first); + settlement = ensureDate(settlement); + if (!validDate(issue) || !validDate(first) || !validDate(settlement)) { + return '#VALUE!'; + } + + // Return error if either rate or par are lower than or equal to zero + if (rate <= 0 || par <= 0) { + return '#NUM!'; + } + + // Return error if frequency is neither 1, 2, or 4 + if ([1, 2, 4].indexOf(frequency) === -1) { + return '#NUM!'; + } + + // Return error if basis is neither 0, 1, 2, 3, or 4 + if ([0, 1, 2, 3, 4].indexOf(basis) === -1) { + return '#NUM!'; + } + + // Return error if settlement is before or equal to issue + if (settlement <= issue) { + return '#NUM!'; + } + + // Set default values + par = par || 0; + basis = basis || 0; + + // Compute accrued interest + return par * rate * YEARFRAC(issue, settlement, basis); + }; + + exports.ACCRINTM = null; + + exports.AMORDEGRC = null; + + exports.AMORLINC = null; + + exports.COUPDAYBS = null; + + exports.COUPDAYS = null; + + exports.COUPDAYSNC = null; + + exports.COUPNCD = null; + + exports.COUPNUM = null; + + exports.COUPPCD = null; + + exports.CUMIPMT = function(rate, periods, value, start, end, type) { + // Credits: algorithm inspired by Apache OpenOffice + // Credits: Hannes Stiebitzhofer for the translations of function and + // variable names + // Requires exports.FV() and exports.PMT() from exports.js + // [http://stoic.com/exports/] + + rate = utils.parseNumber(rate); + periods = utils.parseNumber(periods); + value = utils.parseNumber(value); + if (utils.anyIsError(rate, periods, value)) { + return error.value; + } + + // Return error if either rate, periods, or value are lower than or + // equal to zero + if (rate <= 0 || periods <= 0 || value <= 0) { + return error.num; + } + + // Return error if start < 1, end < 1, or start > end + if (start < 1 || end < 1 || start > end) { + return error.num; + } + + // Return error if type is neither 0 nor 1 + if (type !== 0 && type !== 1) { + return error.num; + } + + // Compute cumulative interest + var payment = exports.PMT(rate, periods, value, 0, type); + var interest = 0; + + if (start === 1) { + if (type === 0) { + interest = -value; + start++; + } + } + + for (var i = start; i <= end; i++) { + if (type === 1) { + interest += exports.FV(rate, i - 2, payment, value, 1) - payment; + } else { + interest += exports.FV(rate, i - 1, payment, value, 0); + } + } + interest *= rate; + + // Return cumulative interest + return interest; + }; + + exports.CUMPRINC = function(rate, periods, value, start, end, type) { + // Credits: algorithm inspired by Apache OpenOffice + // Credits: Hannes Stiebitzhofer for the translations of function and + // variable names + + rate = utils.parseNumber(rate); + periods = utils.parseNumber(periods); + value = utils.parseNumber(value); + if (utils.anyIsError(rate, periods, value)) { + return error.value; + } + + // Return error if either rate, periods, or value are lower than or + // equal to zero + if (rate <= 0 || periods <= 0 || value <= 0) { + return error.num; + } + + // Return error if start < 1, end < 1, or start > end + if (start < 1 || end < 1 || start > end) { + return error.num; + } + + // Return error if type is neither 0 nor 1 + if (type !== 0 && type !== 1) { + return error.num; + } + + // Compute cumulative principal + var payment = exports.PMT(rate, periods, value, 0, type); + var principal = 0; + if (start === 1) { + if (type === 0) { + principal = payment + value * rate; + } else { + principal = payment; + } + start++; + } + for (var i = start; i <= end; i++) { + if (type > 0) { + principal += payment - (exports.FV(rate, i - 2, payment, value, 1) - payment) * rate; + } else { + principal += payment - exports.FV(rate, i - 1, payment, value, 0) * rate; + } + } + + // Return cumulative principal + return principal; + }; + + exports.DB = function(cost, salvage, life, period, month) { + // Initialize month + month = (month === undefined) ? 12 : month; + + cost = utils.parseNumber(cost); + salvage = utils.parseNumber(salvage); + life = utils.parseNumber(life); + period = utils.parseNumber(period); + month = utils.parseNumber(month); + if (utils.anyIsError(cost, salvage, life, period, month)) { + return error.value; + } + + // Return error if any of the parameters is negative + if (cost < 0 || salvage < 0 || life < 0 || period < 0) { + return error.num; + } + + // Return error if month is not an integer between 1 and 12 + if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) { + return error.num; + } + + // Return error if period is greater than life + if (period > life) { + return error.num; + } + + // Return 0 (zero) if salvage is greater than or equal to cost + if (salvage >= cost) { + return 0; + } + + // Rate is rounded to three decimals places + var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3); + + // Compute initial depreciation + var initial = cost * rate * month / 12; + + // Compute total depreciation + var total = initial; + var current = 0; + var ceiling = (period === life) ? life - 1 : period; + for (var i = 2; i <= ceiling; i++) { + current = (cost - total) * rate; + total += current; + } + + // Depreciation for the first and last periods are special cases + if (period === 1) { + // First period + return initial; + } else if (period === life) { + // Last period + return (cost - total) * rate; + } else { + return current; + } + }; + + exports.DDB = function(cost, salvage, life, period, factor) { + // Initialize factor + factor = (factor === undefined) ? 2 : factor; + + cost = utils.parseNumber(cost); + salvage = utils.parseNumber(salvage); + life = utils.parseNumber(life); + period = utils.parseNumber(period); + factor = utils.parseNumber(factor); + if (utils.anyIsError(cost, salvage, life, period, factor)) { + return error.value; + } + + // Return error if any of the parameters is negative or if factor is + // null + if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) { + return error.num; + } + + // Return error if period is greater than life + if (period > life) { + return error.num; + } + + // Return 0 (zero) if salvage is greater than or equal to cost + if (salvage >= cost) { + return 0; + } + + // Compute depreciation + var total = 0; + var current = 0; + for (var i = 1; i <= period; i++) { + current = Math.min((cost - total) * (factor / life), (cost - salvage - total)); + total += current; + } + + // Return depreciation + return current; + }; + + exports.DISC = null; + + exports.DOLLARDE = function(dollar, fraction) { + // Credits: algorithm inspired by Apache OpenOffice + + dollar = utils.parseNumber(dollar); + fraction = utils.parseNumber(fraction); + if (utils.anyIsError(dollar, fraction)) { + return error.value; + } + + // Return error if fraction is negative + if (fraction < 0) { + return error.num; + } + + // Return error if fraction is greater than or equal to 0 and less than + // 1 + if (fraction >= 0 && fraction < 1) { + return error.div0; + } + + // Truncate fraction if it is not an integer + fraction = parseInt(fraction, 10); + + // Compute integer part + var result = parseInt(dollar, 10); + + // Add decimal part + result += (dollar % 1) * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10)) / fraction; + + // Round result + var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1); + result = Math.round(result * power) / power; + + // Return converted dollar price + return result; + }; + + exports.DOLLARFR = function(dollar, fraction) { + // Credits: algorithm inspired by Apache OpenOffice + + dollar = utils.parseNumber(dollar); + fraction = utils.parseNumber(fraction); + if (utils.anyIsError(dollar, fraction)) { + return error.value; + } + + // Return error if fraction is negative + if (fraction < 0) { + return error.num; + } + + // Return error if fraction is greater than or equal to 0 and less than + // 1 + if (fraction >= 0 && fraction < 1) { + return error.div0; + } + + // Truncate fraction if it is not an integer + fraction = parseInt(fraction, 10); + + // Compute integer part + var result = parseInt(dollar, 10); + + // Add decimal part + result += (dollar % 1) * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction; + + // Return converted dollar price + return result; + }; + + exports.DURATION = null; + + exports.EFFECT = function(rate, periods) { + rate = utils.parseNumber(rate); + periods = utils.parseNumber(periods); + if (utils.anyIsError(rate, periods)) { + return error.value; + } + + // Return error if rate <=0 or periods < 1 + if (rate <= 0 || periods < 1) { + return error.num; + } + + // Truncate periods if it is not an integer + periods = parseInt(periods, 10); + + // Return effective annual interest rate + return Math.pow(1 + rate / periods, periods) - 1; + }; + + exports.FV = function(rate, periods, payment, value, type) { + // Credits: algorithm inspired by Apache OpenOffice + + value = value || 0; + type = type || 0; + + rate = utils.parseNumber(rate); + periods = utils.parseNumber(periods); + payment = utils.parseNumber(payment); + value = utils.parseNumber(value); + type = utils.parseNumber(type); + if (utils.anyIsError(rate, periods, payment, value, type)) { + return error.value; + } + + // Return future value + var result; + if (rate === 0) { + result = value + payment * periods; + } else { + var term = Math.pow(1 + rate, periods); + if (type === 1) { + result = value * term + payment * (1 + rate) * (term - 1) / rate; + } else { + result = value * term + payment * (term - 1) / rate; + } + } + return -result; + }; + + exports.FVSCHEDULE = function(principal, schedule) { + principal = utils.parseNumber(principal); + schedule = utils.parseNumberArray(utils.flatten(schedule)); + if (utils.anyIsError(principal, schedule)) { + return error.value; + } + + var n = schedule.length; + var future = principal; + + // Apply all interests in schedule + for (var i = 0; i < n; i++) { + // Apply scheduled interest + future *= 1 + schedule[i]; + } + + // Return future value + return future; + }; + + exports.INTRATE = null; + + exports.IPMT = function(rate, period, periods, present, future, type) { + // Credits: algorithm inspired by Apache OpenOffice + + future = future || 0; + type = type || 0; + + rate = utils.parseNumber(rate); + period = utils.parseNumber(period); + periods = utils.parseNumber(periods); + present = utils.parseNumber(present); + future = utils.parseNumber(future); + type = utils.parseNumber(type); + if (utils.anyIsError(rate, period, periods, present, future, type)) { + return error.value; + } + + // Compute payment + var payment = exports.PMT(rate, periods, present, future, type); + + // Compute interest + var interest; + if (period === 1) { + if (type === 1) { + interest = 0; + } else { + interest = -present; + } + } else { + if (type === 1) { + interest = exports.FV(rate, period - 2, payment, present, 1) - payment; + } else { + interest = exports.FV(rate, period - 1, payment, present, 0); + } + } + + // Return interest + return interest * rate; + }; + + exports.IRR = function(values, guess) { + // Credits: algorithm inspired by Apache OpenOffice + + guess = guess || 0; + + values = utils.parseNumberArray(utils.flatten(values)); + guess = utils.parseNumber(guess); + if (utils.anyIsError(values, guess)) { + return error.value; + } + + // Calculates the resulting amount + var irrResult = function(values, dates, rate) { + var r = rate + 1; + var result = values[0]; + for (var i = 1; i < values.length; i++) { + result += values[i] / Math.pow(r, (dates[i] - dates[0]) / 365); + } + return result; + }; + + // Calculates the first derivation + var irrResultDeriv = function(values, dates, rate) { + var r = rate + 1; + var result = 0; + for (var i = 1; i < values.length; i++) { + var frac = (dates[i] - dates[0]) / 365; + result -= frac * values[i] / Math.pow(r, frac + 1); + } + return result; + }; + + // Initialize dates and check that values contains at least one positive + // value and one negative value + var dates = []; + var positive = false; + var negative = false; + for (var i = 0; i < values.length; i++) { + dates[i] = (i === 0) ? 0 : dates[i - 1] + 365; + if (values[i] > 0) { + positive = true; + } + if (values[i] < 0) { + negative = true; + } + } + + // Return error if values does not contain at least one positive value + // and one negative value + if (!positive || !negative) { + return error.num; + } + + // Initialize guess and resultRate + guess = (guess === undefined) ? 0.1 : guess; + var resultRate = guess; + + // Set maximum epsilon for end of iteration + var epsMax = 1e-10; + + // Implement Newton's method + var newRate, epsRate, resultValue; + var contLoop = true; + do { + resultValue = irrResult(values, dates, resultRate); + newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate); + epsRate = Math.abs(newRate - resultRate); + resultRate = newRate; + contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax); + } while (contLoop); + + // Return internal rate of return + return resultRate; + }; + + exports.ISPMT = function(rate, period, periods, value) { + rate = utils.parseNumber(rate); + period = utils.parseNumber(period); + periods = utils.parseNumber(periods); + value = utils.parseNumber(value); + if (utils.anyIsError(rate, period, periods, value)) { + return error.value; + } + + // Return interest + return value * rate * (period / periods - 1); + }; + + exports.MDURATION = null; + + exports.MIRR = function(values, finance_rate, reinvest_rate) { + values = utils.parseNumberArray(utils.flatten(values)); + finance_rate = utils.parseNumber(finance_rate); + reinvest_rate = utils.parseNumber(reinvest_rate); + if (utils.anyIsError(values, finance_rate, reinvest_rate)) { + return error.value; + } + + // Initialize number of values + var n = values.length; + + // Lookup payments (negative values) and incomes (positive values) + var payments = []; + var incomes = []; + for (var i = 0; i < n; i++) { + if (values[i] < 0) { + payments.push(values[i]); + } else { + incomes.push(values[i]); + } + } + + // Return modified internal rate of return + var num = -exports.NPV(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1); + var den = exports.NPV(finance_rate, payments) * (1 + finance_rate); + return Math.pow(num / den, 1 / (n - 1)) - 1; + }; + + exports.NOMINAL = function(rate, periods) { + rate = utils.parseNumber(rate); + periods = utils.parseNumber(periods); + if (utils.anyIsError(rate, periods)) { + return error.value; + } + + // Return error if rate <=0 or periods < 1 + if (rate <= 0 || periods < 1) { + return error.num; + } + + // Truncate periods if it is not an integer + periods = parseInt(periods, 10); + + // Return nominal annual interest rate + return (Math.pow(rate + 1, 1 / periods) - 1) * periods; + }; + + exports.NPER = function(rate, payment, present, future, type) { + type = (type === undefined) ? 0 : type; + future = (future === undefined) ? 0 : future; + + rate = utils.parseNumber(rate); + payment = utils.parseNumber(payment); + present = utils.parseNumber(present); + future = utils.parseNumber(future); + type = utils.parseNumber(type); + if (utils.anyIsError(rate, payment, present, future, type)) { + return error.value; + } + + // Return number of periods + var num = payment * (1 + rate * type) - future * rate; + var den = (present * rate + payment * (1 + rate * type)); + return Math.log(num / den) / Math.log(1 + rate); + }; + + exports.NPV = function() { + var args = utils.parseNumberArray(utils.flatten(arguments)); + if (args instanceof Error) { + return args; + } + + // Lookup rate + var rate = args[0]; + + // Initialize net present value + var value = 0; + + // Loop on all values + for (var j = 1; j < args.length; j++) { + value += args[j] / Math.pow(1 + rate, j); + } + + // Return net present value + return value; + }; + + exports.ODDFPRICE = null; + + exports.ODDFYIELD = null; + + exports.ODDLPRICE = null; + + exports.ODDLYIELD = null; + + exports.PDURATION = function(rate, present, future) { + rate = utils.parseNumber(rate); + present = utils.parseNumber(present); + future = utils.parseNumber(future); + if (utils.anyIsError(rate, present, future)) { + return error.value; + } + + // Return error if rate <=0 + if (rate <= 0) { + return error.num; + } + + // Return number of periods + return (Math.log(future) - Math.log(present)) / Math.log(1 + rate); + }; + + exports.PMT = function(rate, periods, present, future, type) { + // Credits: algorithm inspired by Apache OpenOffice + + future = future || 0; + type = type || 0; + + rate = utils.parseNumber(rate); + periods = utils.parseNumber(periods); + present = utils.parseNumber(present); + future = utils.parseNumber(future); + type = utils.parseNumber(type); + if (utils.anyIsError(rate, periods, present, future, type)) { + return error.value; + } + + // Return payment + var result; + if (rate === 0) { + result = (present + future) / periods; + } else { + var term = Math.pow(1 + rate, periods); + if (type === 1) { + result = (future * rate / (term - 1) + present * rate / (1 - 1 / term)) / (1 + rate); + } else { + result = future * rate / (term - 1) + present * rate / (1 - 1 / term); + } + } + return -result; + }; + + exports.PPMT = function(rate, period, periods, present, future, type) { + future = future || 0; + type = type || 0; + + rate = utils.parseNumber(rate); + periods = utils.parseNumber(periods); + present = utils.parseNumber(present); + future = utils.parseNumber(future); + type = utils.parseNumber(type); + if (utils.anyIsError(rate, periods, present, future, type)) { + return error.value; + } + + return exports.PMT(rate, periods, present, future, type) - exports.IPMT(rate, period, periods, present, future, type); + }; + + exports.PRICE = null; + + exports.PRICEDISC = null; + + exports.PRICEMAT = null; + + exports.PV = function(rate, periods, payment, future, type) { + future = future || 0; + type = type || 0; + + rate = utils.parseNumber(rate); + periods = utils.parseNumber(periods); + payment = utils.parseNumber(payment); + future = utils.parseNumber(future); + type = utils.parseNumber(type); + if (utils.anyIsError(rate, periods, payment, future, type)) { + return error.value; + } + + // Return present value + if (rate === 0) { + return -payment * periods - future; + } else { + return (((1 - Math.pow(1 + rate, periods)) / rate) * payment * (1 + rate * type) - future) / Math.pow(1 + rate, periods); + } + }; + + exports.RATE = function(periods, payment, present, future, type, guess) { + // Credits: rabugento + + guess = (guess === undefined) ? 0.01 : guess; + future = (future === undefined) ? 0 : future; + type = (type === undefined) ? 0 : type; + + periods = utils.parseNumber(periods); + payment = utils.parseNumber(payment); + present = utils.parseNumber(present); + future = utils.parseNumber(future); + type = utils.parseNumber(type); + guess = utils.parseNumber(guess); + if (utils.anyIsError(periods, payment, present, future, type, guess)) { + return error.value; + } + + // Set maximum epsilon for end of iteration + var epsMax = 1e-6; + + // Set maximum number of iterations + var iterMax = 100; + var iter = 0; + var close = false; + var rate = guess; + + while (iter < iterMax && !close) { + var t1 = Math.pow(rate + 1, periods); + var t2 = Math.pow(rate + 1, periods - 1); + + var f1 = future + t1 * present + payment * (t1 - 1) * (rate * type + 1) / rate; + var f2 = periods * t2 * present - payment * (t1 - 1) *(rate * type + 1) / Math.pow(rate,2); + var f3 = periods * payment * t2 * (rate * type + 1) / rate + payment * (t1 - 1) * type / rate; + + var newRate = rate - f1 / (f2 + f3); + + if (Math.abs(newRate - rate) < epsMax) close = true; + iter++ + rate = newRate; + } + + if (!close) return Number.NaN + rate; + return rate; + }; + + // TODO + exports.RECEIVED = null; + + exports.RRI = function(periods, present, future) { + periods = utils.parseNumber(periods); + present = utils.parseNumber(present); + future = utils.parseNumber(future); + if (utils.anyIsError(periods, present, future)) { + return error.value; + } + + // Return error if periods or present is equal to 0 (zero) + if (periods === 0 || present === 0) { + return error.num; + } + + // Return equivalent interest rate + return Math.pow(future / present, 1 / periods) - 1; + }; + + exports.SLN = function(cost, salvage, life) { + cost = utils.parseNumber(cost); + salvage = utils.parseNumber(salvage); + life = utils.parseNumber(life); + if (utils.anyIsError(cost, salvage, life)) { + return error.value; + } + + // Return error if life equal to 0 (zero) + if (life === 0) { + return error.num; + } + + // Return straight-line depreciation + return (cost - salvage) / life; + }; + + exports.SYD = function(cost, salvage, life, period) { + // Return error if any of the parameters is not a number + cost = utils.parseNumber(cost); + salvage = utils.parseNumber(salvage); + life = utils.parseNumber(life); + period = utils.parseNumber(period); + if (utils.anyIsError(cost, salvage, life, period)) { + return error.value; + } + + // Return error if life equal to 0 (zero) + if (life === 0) { + return error.num; + } + + // Return error if period is lower than 1 or greater than life + if (period < 1 || period > life) { + return error.num; + } + + // Truncate period if it is not an integer + period = parseInt(period, 10); + + // Return straight-line depreciation + return ((cost - salvage) * (life - period + 1) * 2) / (life * (life + 1)); + }; + + exports.TBILLEQ = function(settlement, maturity, discount) { + settlement = utils.parseDate(settlement); + maturity = utils.parseDate(maturity); + discount = utils.parseNumber(discount); + if (utils.anyIsError(settlement, maturity, discount)) { + return error.value; + } + + // Return error if discount is lower than or equal to zero + if (discount <= 0) { + return error.num; + } + + // Return error if settlement is greater than maturity + if (settlement > maturity) { + return error.num; + } + + // Return error if maturity is more than one year after settlement + if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { + return error.num; + } + + // Return bond-equivalent yield + return (365 * discount) / (360 - discount * DAYS360(settlement, maturity, false)); + }; + + exports.TBILLPRICE = function(settlement, maturity, discount) { + settlement = utils.parseDate(settlement); + maturity = utils.parseDate(maturity); + discount = utils.parseNumber(discount); + if (utils.anyIsError(settlement, maturity, discount)) { + return error.value; + } + + // Return error if discount is lower than or equal to zero + if (discount <= 0) { + return error.num; + } + + // Return error if settlement is greater than maturity + if (settlement > maturity) { + return error.num; + } + + // Return error if maturity is more than one year after settlement + if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { + return error.num; + } + + // Return bond-equivalent yield + return 100 * (1 - discount * DAYS360(settlement, maturity, false) / 360); + }; + + exports.TBILLYIELD = function(settlement, maturity, price) { + settlement = utils.parseDate(settlement); + maturity = utils.parseDate(maturity); + price = utils.parseNumber(price); + if (utils.anyIsError(settlement, maturity, price)) { + return error.value; + } + + // Return error if price is lower than or equal to zero + if (price <= 0) { + return error.num; + } + + // Return error if settlement is greater than maturity + if (settlement > maturity) { + return error.num; + } + + // Return error if maturity is more than one year after settlement + if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) { + return error.num; + } + + // Return bond-equivalent yield + return (100 - price) * 360 / (price * DAYS360(settlement, maturity, false)); + }; + + exports.VDB = null; + + exports.XIRR = function(values, dates, guess) { + // Credits: algorithm inspired by Apache OpenOffice + + values = utils.parseNumberArray(utils.flatten(values)); + dates = utils.parseDateArray(utils.flatten(dates)); + guess = utils.parseNumber(guess); + if (utils.anyIsError(values, dates, guess)) { + return error.value; + } + + // Calculates the resulting amount + var irrResult = function(values, dates, rate) { + var r = rate + 1; + var result = values[0]; + for (var i = 1; i < values.length; i++) { + result += values[i] / Math.pow(r, DAYS(dates[i], dates[0]) / 365); + } + return result; + }; + + // Calculates the first derivation + var irrResultDeriv = function(values, dates, rate) { + var r = rate + 1; + var result = 0; + for (var i = 1; i < values.length; i++) { + var frac = DAYS(dates[i], dates[0]) / 365; + result -= frac * values[i] / Math.pow(r, frac + 1); + } + return result; + }; + + // Check that values contains at least one positive value and one + // negative value + var positive = false; + var negative = false; + for (var i = 0; i < values.length; i++) { + if (values[i] > 0) { + positive = true; + } + if (values[i] < 0) { + negative = true; + } + } + + // Return error if values does not contain at least one positive value + // and one negative value + if (!positive || !negative) { + return error.num; + } + + // Initialize guess and resultRate + guess = guess || 0.1; + var resultRate = guess; + + // Set maximum epsilon for end of iteration + var epsMax = 1e-10; + + // Implement Newton's method + var newRate, epsRate, resultValue; + var contLoop = true; + do { + resultValue = irrResult(values, dates, resultRate); + newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate); + epsRate = Math.abs(newRate - resultRate); + resultRate = newRate; + contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax); + } while (contLoop); + + // Return internal rate of return + return resultRate; + }; + + exports.XNPV = function(rate, values, dates) { + rate = utils.parseNumber(rate); + values = utils.parseNumberArray(utils.flatten(values)); + dates = utils.parseDateArray(utils.flatten(dates)); + if (utils.anyIsError(rate, values, dates)) { + return error.value; + } + + var result = 0; + for (var i = 0; i < values.length; i++) { + result += values[i] / Math.pow(1 + rate, DAYS(dates[i], dates[0]) / 365); + } + return result; + }; + + exports.YIELD = null; + + exports.YIELDDISC = null; + + exports.YIELDMAT = null; + + return exports; +})(); + +jexcel.methods.information = (function() { + var exports = {}; + exports.CELL = null; + + exports.ERROR = {}; + exports.ERROR.TYPE = function(error_val) { + switch (error_val) { + case error.nil: return 1; + case error.div0: return 2; + case error.value: return 3; + case error.ref: return 4; + case error.name: return 5; + case error.num: return 6; + case error.na: return 7; + case error.data: return 8; + } + return error.na; + }; + + exports.INFO = null; + + exports.ISBLANK = function(value) { + return value === null; + }; + + exports.ISBINARY = function (number) { + return (/^[01]{1,10}$/).test(number); + }; + + exports.ISERR = function(value) { + return ([error.value, error.ref, error.div0, error.num, error.name, error.nil]).indexOf(value) >= 0 || + (typeof value === 'number' && (isNaN(value) || !isFinite(value))); + }; + + exports.ISERROR = function(value) { + return exports.ISERR(value) || value === error.na; + }; + + exports.ISEVEN = function(number) { + return (Math.floor(Math.abs(number)) & 1) ? false : true; + }; + + // TODO + exports.ISFORMULA = null; + + exports.ISLOGICAL = function(value) { + return value === true || value === false; + }; + + exports.ISNA = function(value) { + return value === error.na; + }; + + exports.ISNONTEXT = function(value) { + return typeof(value) !== 'string'; + }; + + exports.ISNUMBER = function(value) { + return typeof(value) === 'number' && !isNaN(value) && isFinite(value); + }; + + exports.ISODD = function(number) { + return (Math.floor(Math.abs(number)) & 1) ? true : false; + }; + + exports.ISREF = null; + + exports.ISTEXT = function(value) { + return typeof(value) === 'string'; + }; + + exports.N = function(value) { + if (this.ISNUMBER(value)) { + return value; + } + if (value instanceof Date) { + return value.getTime(); + } + if (value === true) { + return 1; + } + if (value === false) { + return 0; + } + if (this.ISERROR(value)) { + return value; + } + return 0; + }; + + exports.NA = function() { + return error.na; + }; + + exports.SHEET = null; + + exports.SHEETS = null; + + exports.TYPE = function(value) { + if (this.ISNUMBER(value)) { + return 1; + } + if (this.ISTEXT(value)) { + return 2; + } + if (this.ISLOGICAL(value)) { + return 4; + } + if (this.ISERROR(value)) { + return 16; + } + if (Array.isArray(value)) { + return 64; + } + }; + + return exports; +})(); + +jexcel.methods.logical = (function() { + var exports = {}; + + exports.AND = function() { + var args = utils.flatten(arguments); + var result = true; + for (var i = 0; i < args.length; i++) { + if (!args[i]) { + result = false; + } + } + return result; + }; + + exports.CHOOSE = function() { + if (arguments.length < 2) { + return error.na; + } + + var index = arguments[0]; + if (index < 1 || index > 254) { + return error.value; + } + + if (arguments.length < index + 1) { + return error.value; + } + + return arguments[index]; + }; + + exports.FALSE = function() { + return false; + }; + + exports.IF = function(test, then_value, otherwise_value) { + return test ? then_value : otherwise_value; + }; + + exports.IFERROR = function(value, valueIfError) { + if (ISERROR(value)) { + return valueIfError; + } + return value; + }; + + exports.IFNA = function(value, value_if_na) { + return value === error.na ? value_if_na : value; + }; + + exports.NOT = function(logical) { + return !logical; + }; + + exports.OR = function() { + var args = utils.flatten(arguments); + var result = false; + for (var i = 0; i < args.length; i++) { + if (args[i]) { + result = true; + } + } + return result; + }; + + exports.TRUE = function() { + return true; + }; + + exports.XOR = function() { + var args = utils.flatten(arguments); + var result = 0; + for (var i = 0; i < args.length; i++) { + if (args[i]) { + result++; + } + } + return (Math.floor(Math.abs(result)) & 1) ? true : false; + }; + + exports.SWITCH = function() { + var result; + if (arguments.length > 0) { + var targetValue = arguments[0]; + var argc = arguments.length - 1; + var switchCount = Math.floor(argc / 2); + var switchSatisfied = false; + var defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1]; + + if (switchCount) { + for (var index = 0; index < switchCount; index++) { + if (targetValue === arguments[index * 2 + 1]) { + result = arguments[index * 2 + 2]; + switchSatisfied = true; + break; + } + } + } + + if (!switchSatisfied && defaultClause) { + result = defaultClause; + } + } + + return result; + }; + + return exports; +})(); + +jexcel.methods.math = (function() { + var exports = {}; + + exports.ABS = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.abs(utils.parseNumber(number)); + }; + + exports.ACOS = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.acos(number); + }; + + exports.ACOSH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.log(number + Math.sqrt(number * number - 1)); + }; + + exports.ACOT = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.atan(1 / number); + }; + + exports.ACOTH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return 0.5 * Math.log((number + 1) / (number - 1)); + }; + + exports.AGGREGATE = null + + exports.ARABIC = function(text) { + // Credits: Rafa? Kukawski + if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) { + return error.value; + } + var r = 0; + text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) { + r += { + M: 1000, + CM: 900, + D: 500, + CD: 400, + C: 100, + XC: 90, + L: 50, + XL: 40, + X: 10, + IX: 9, + V: 5, + IV: 4, + I: 1 + }[i]; + }); + return r; + }; + + exports.ASIN = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.asin(number); + }; + + exports.ASINH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.log(number + Math.sqrt(number * number + 1)); + }; + + exports.ATAN = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.atan(number); + }; + + exports.ATAN2 = function(number_x, number_y) { + number_x = utils.parseNumber(number_x); + number_y = utils.parseNumber(number_y); + if (utils.anyIsError(number_x, number_y)) { + return error.value; + } + return Math.atan2(number_x, number_y); + }; + + exports.ATANH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.log((1 + number) / (1 - number)) / 2; + }; + + exports.BASE = function(number, radix, min_length) { + min_length = min_length || 0; + + number = utils.parseNumber(number); + radix = utils.parseNumber(radix); + min_length = utils.parseNumber(min_length); + if (utils.anyIsError(number, radix, min_length)) { + return error.value; + } + min_length = (min_length === undefined) ? 0 : min_length; + var result = number.toString(radix); + return new Array(Math.max(min_length + 1 - result.length, 0)).join('0') + result; + }; + + exports.CEILING = function(number, significance, mode) { + significance = (significance === undefined) ? 1 : significance; + mode = (mode === undefined) ? 0 : mode; + + number = utils.parseNumber(number); + significance = utils.parseNumber(significance); + mode = utils.parseNumber(mode); + if (utils.anyIsError(number, significance, mode)) { + return error.value; + } + if (significance === 0) { + return 0; + } + + significance = Math.abs(significance); + if (number >= 0) { + return Math.ceil(number / significance) * significance; + } else { + if (mode === 0) { + return -1 * Math.floor(Math.abs(number) / significance) * significance; + } else { + return -1 * Math.ceil(Math.abs(number) / significance) * significance; + } + } + }; + + exports.CEILING.MATH = exports.CEILING; + + exports.CEILING.PRECISE = exports.CEILING; + + exports.COMBIN = function(number, number_chosen) { + number = utils.parseNumber(number); + number_chosen = utils.parseNumber(number_chosen); + if (utils.anyIsError(number, number_chosen)) { + return error.value; + } + return exports.FACT(number) / (exports.FACT(number_chosen) * exports.FACT(number - number_chosen)); + }; + + exports.COMBINA = function(number, number_chosen) { + number = utils.parseNumber(number); + number_chosen = utils.parseNumber(number_chosen); + if (utils.anyIsError(number, number_chosen)) { + return error.value; + } + return (number === 0 && number_chosen === 0) ? 1 : exports.COMBIN(number + number_chosen - 1, number - 1); + }; + + exports.COS = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.cos(number); + }; + + exports.COSH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return (Math.exp(number) + Math.exp(-number)) / 2; + }; + + exports.COT = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return 1 / Math.tan(number); + }; + + exports.COTH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + var e2 = Math.exp(2 * number); + return (e2 + 1) / (e2 - 1); + }; + + exports.CSC = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return 1 / Math.sin(number); + }; + + exports.CSCH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return 2 / (Math.exp(number) - Math.exp(-number)); + }; + + exports.DECIMAL = function(number, radix) { + if (arguments.length < 1) { + return error.value; + } + + + return parseInt(number, radix); + }; + + exports.DEGREES = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return number * 180 / Math.PI; + }; + + exports.EVEN = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return exports.CEILING(number, -2, -1); + }; + + exports.EXP = Math.exp; + + var MEMOIZED_FACT = []; + exports.FACT = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + var n = Math.floor(number); + if (n === 0 || n === 1) { + return 1; + } else if (MEMOIZED_FACT[n] > 0) { + return MEMOIZED_FACT[n]; + } else { + MEMOIZED_FACT[n] = exports.FACT(n - 1) * n; + return MEMOIZED_FACT[n]; + } + }; + + exports.FACTDOUBLE = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + var n = Math.floor(number); + if (n <= 0) { + return 1; + } else { + return n * exports.FACTDOUBLE(n - 2); + } + }; + + exports.FLOOR = function(number, significance, mode) { + significance = (significance === undefined) ? 1 : significance; + mode = (mode === undefined) ? 0 : mode; + + number = utils.parseNumber(number); + significance = utils.parseNumber(significance); + mode = utils.parseNumber(mode); + if (utils.anyIsError(number, significance, mode)) { + return error.value; + } + if (significance === 0) { + return 0; + } + + significance = Math.abs(significance); + if (number >= 0) { + return Math.floor(number / significance) * significance; + } else { + if (mode === 0) { + return -1 * Math.ceil(Math.abs(number) / significance) * significance; + } else { + return -1 * Math.floor(Math.abs(number) / significance) * significance; + } + } + }; + + exports.FLOOR.MATH = exports.FLOOR; + + exports.GCD = null; + + exports.INT = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.floor(number); + }; + + exports.LCM = function() { + // Credits: Jonas Raoni Soares Silva + var o = utils.parseNumberArray(utils.flatten(arguments)); + if (o instanceof Error) { + return o; + } + for (var i, j, n, d, r = 1; + (n = o.pop()) !== undefined;) { + while (n > 1) { + if (n % 2) { + for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) { + // empty + } + d = (i <= j) ? i : n; + } else { + d = 2; + } + for (n /= d, r *= d, i = o.length; i; + (o[--i] % d) === 0 && (o[i] /= d) === 1 && o.splice(i, 1)) { + // empty + } + } + } + return r; + }; + + exports.LN = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.log(number); + }; + + exports.LOG = function(number, base) { + number = utils.parseNumber(number); + base = (base === undefined) ? 10 : utils.parseNumber(base); + + if (utils.anyIsError(number, base)) { + return error.value; + } + + return Math.log(number) / Math.log(base); + }; + + exports.LOG10 = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.log(number) / Math.log(10); + }; + + exports.MDETERM = null; + + exports.MINVERSE = null; + + exports.MMULT = null; + + exports.MOD = function(dividend, divisor) { + dividend = utils.parseNumber(dividend); + divisor = utils.parseNumber(divisor); + if (utils.anyIsError(dividend, divisor)) { + return error.value; + } + if (divisor === 0) { + return error.div0; + } + var modulus = Math.abs(dividend % divisor); + return (divisor > 0) ? modulus : -modulus; + }; + + exports.MROUND = function(number, multiple) { + number = utils.parseNumber(number); + multiple = utils.parseNumber(multiple); + if (utils.anyIsError(number, multiple)) { + return error.value; + } + if (number * multiple < 0) { + return error.num; + } + + return Math.round(number / multiple) * multiple; + }; + + exports.MULTINOMIAL = function() { + var args = utils.parseNumberArray(utils.flatten(arguments)); + if (args instanceof Error) { + return args; + } + var sum = 0; + var divisor = 1; + for (var i = 0; i < args.length; i++) { + sum += args[i]; + divisor *= exports.FACT(args[i]); + } + return exports.FACT(sum) / divisor; + }; + + exports.MUNIT = null; + + exports.ODD = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + var temp = Math.ceil(Math.abs(number)); + temp = (temp & 1) ? temp : temp + 1; + return (number > 0) ? temp : -temp; + }; + + exports.PI = function() { + return Math.PI; + }; + + exports.POWER = function(number, power) { + number = utils.parseNumber(number); + power = utils.parseNumber(power); + if (utils.anyIsError(number, power)) { + return error.value; + } + var result = Math.pow(number, power); + if (isNaN(result)) { + return error.num; + } + + return result; + }; + + exports.PRODUCT = function() { + var args = utils.parseNumberArray(utils.flatten(arguments)); + if (args instanceof Error) { + return args; + } + var result = 1; + for (var i = 0; i < args.length; i++) { + result *= args[i]; + } + return result; + }; + + exports.QUOTIENT = function(numerator, denominator) { + numerator = utils.parseNumber(numerator); + denominator = utils.parseNumber(denominator); + if (utils.anyIsError(numerator, denominator)) { + return error.value; + } + return parseInt(numerator / denominator, 10); + }; + + exports.RADIANS = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return number * Math.PI / 180; + }; + + exports.RAND = function() { + return Math.random(); + }; + + exports.RANDBETWEEN = function(bottom, top) { + bottom = utils.parseNumber(bottom); + top = utils.parseNumber(top); + if (utils.anyIsError(bottom, top)) { + return error.value; + } + // Creative Commons Attribution 3.0 License + // Copyright (c) 2012 eqcode + return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1; + }; + + exports.ROMAN = null; + + exports.ROUND = function(number, digits) { + number = utils.parseNumber(number); + digits = utils.parseNumber(digits); + if (utils.anyIsError(number, digits)) { + return error.value; + } + return Math.round(number * Math.pow(10, digits)) / Math.pow(10, digits); + }; + + exports.ROUNDDOWN = function(number, digits) { + number = utils.parseNumber(number); + digits = utils.parseNumber(digits); + if (utils.anyIsError(number, digits)) { + return error.value; + } + var sign = (number > 0) ? 1 : -1; + return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits); + }; + + exports.ROUNDUP = function(number, digits) { + number = utils.parseNumber(number); + digits = utils.parseNumber(digits); + if (utils.anyIsError(number, digits)) { + return error.value; + } + var sign = (number > 0) ? 1 : -1; + return sign * (Math.ceil(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits); + }; + + exports.SEC = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return 1 / Math.cos(number); + }; + + exports.SECH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return 2 / (Math.exp(number) + Math.exp(-number)); + }; + + exports.SERIESSUM = function(x, n, m, coefficients) { + x = utils.parseNumber(x); + n = utils.parseNumber(n); + m = utils.parseNumber(m); + coefficients = utils.parseNumberArray(coefficients); + if (utils.anyIsError(x, n, m, coefficients)) { + return error.value; + } + var result = coefficients[0] * Math.pow(x, n); + for (var i = 1; i < coefficients.length; i++) { + result += coefficients[i] * Math.pow(x, n + i * m); + } + return result; + }; + + exports.SIGN = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + if (number < 0) { + return -1; + } else if (number === 0) { + return 0; + } else { + return 1; + } + }; + + exports.SIN = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.sin(number); + }; + + exports.SINH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return (Math.exp(number) - Math.exp(-number)) / 2; + }; + + exports.SQRT = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + if (number < 0) { + return error.num; + } + return Math.sqrt(number); + }; + + exports.SQRTPI = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.sqrt(number * Math.PI); + }; + + exports.SUBTOTAL = null; + + exports.ADD = function (num1, num2) { + if (arguments.length !== 2) { + return error.na; + } + + num1 = utils.parseNumber(num1); + num2 = utils.parseNumber(num2); + if (utils.anyIsError(num1, num2)) { + return error.value; + } + + return num1 + num2; + }; + + exports.MINUS = function (num1, num2) { + if (arguments.length !== 2) { + return error.na; + } + + num1 = utils.parseNumber(num1); + num2 = utils.parseNumber(num2); + if (utils.anyIsError(num1, num2)) { + return error.value; + } + + return num1 - num2; + }; + + exports.DIVIDE = function (dividend, divisor) { + if (arguments.length !== 2) { + return error.na; + } + + dividend = utils.parseNumber(dividend); + divisor = utils.parseNumber(divisor); + if (utils.anyIsError(dividend, divisor)) { + return error.value; + } + + if (divisor === 0) { + return error.div0; + } + + return dividend / divisor; + }; + + exports.MULTIPLY = function (factor1, factor2) { + if (arguments.length !== 2) { + return error.na; + } + + factor1 = utils.parseNumber(factor1); + factor2 = utils.parseNumber(factor2); + if (utils.anyIsError(factor1, factor2)) { + return error.value; + } + + return factor1 * factor2; + }; + + exports.GTE = function (num1, num2) { + if (arguments.length !== 2) { + return error.na; + } + + num1 = utils.parseNumber(num1); + num2 = utils.parseNumber(num2); + if (utils.anyIsError(num1, num2)) { + return error.error; + } + + return num1 >= num2; + }; + + exports.LT = function (num1, num2) { + if (arguments.length !== 2) { + return error.na; + } + + num1 = utils.parseNumber(num1); + num2 = utils.parseNumber(num2); + if (utils.anyIsError(num1, num2)) { + return error.error; + } + + return num1 < num2; + }; + + exports.LTE = function (num1, num2) { + if (arguments.length !== 2) { + return error.na; + } + + num1 = utils.parseNumber(num1); + num2 = utils.parseNumber(num2); + if (utils.anyIsError(num1, num2)) { + return error.error; + } + + return num1 <= num2; + }; + + exports.EQ = function (value1, value2) { + if (arguments.length !== 2) { + return error.na; + } + + return value1 === value2; + }; + + exports.NE = function (value1, value2) { + if (arguments.length !== 2) { + return error.na; + } + + return value1 !== value2; + }; + + exports.POW = function (base, exponent) { + if (arguments.length !== 2) { + return error.na; + } + + base = utils.parseNumber(base); + exponent = utils.parseNumber(exponent); + if (utils.anyIsError(base, exponent)) { + return error.error; + } + + return exports.POWER(base, exponent); + }; + + exports.SUM = function() { + var result = 0; + var argsKeys = Object.keys(arguments); + for (var i = 0; i < argsKeys.length; ++i) { + var elt = arguments[argsKeys[i]]; + if (typeof elt === 'number') { + result += elt; + } else if (typeof elt === 'string') { + var parsed = parseFloat(elt); + !isNaN(parsed) && (result += parsed); + } else if (Array.isArray(elt)) { + result += exports.SUM.apply(null, elt); + } + } + return result; + }; + + exports.SUMIF = function(range, criteria) { + range = utils.parseNumberArray(utils.flatten(range)); + if (range instanceof Error) { + return range; + } + var result = 0; + for (var i = 0; i < range.length; i++) { + result += (eval(range[i] + criteria)) ? range[i] : 0; // jshint ignore:line + } + return result; + }; + + exports.SUMIFS = function() { + var args = utils.argsToArray(arguments); + var range = utils.parseNumberArray(utils.flatten(args.shift())); + if (range instanceof Error) { + return range; + } + var criteria = args; + + var n_range_elements = range.length; + var n_criterias = criteria.length; + + var result = 0; + for (var i = 0; i < n_range_elements; i++) { + var el = range[i]; + var condition = ''; + for (var c = 0; c < n_criterias; c++) { + condition += el + criteria[c]; + if (c !== n_criterias - 1) { + condition += '&&'; + } + } + if (eval(condition)) { // jshint ignore:line + result += el; + } + } + return result; + }; + + exports.SUMPRODUCT = null; + + exports.SUMSQ = function() { + var numbers = utils.parseNumberArray(utils.flatten(arguments)); + if (numbers instanceof Error) { + return numbers; + } + var result = 0; + var length = numbers.length; + for (var i = 0; i < length; i++) { + result += (ISNUMBER(numbers[i])) ? numbers[i] * numbers[i] : 0; + } + return result; + }; + + exports.SUMX2MY2 = function(array_x, array_y) { + array_x = utils.parseNumberArray(utils.flatten(array_x)); + array_y = utils.parseNumberArray(utils.flatten(array_y)); + if (utils.anyIsError(array_x, array_y)) { + return error.value; + } + var result = 0; + for (var i = 0; i < array_x.length; i++) { + result += array_x[i] * array_x[i] - array_y[i] * array_y[i]; + } + return result; + }; + + exports.SUMX2PY2 = function(array_x, array_y) { + array_x = utils.parseNumberArray(utils.flatten(array_x)); + array_y = utils.parseNumberArray(utils.flatten(array_y)); + if (utils.anyIsError(array_x, array_y)) { + return error.value; + } + var result = 0; + array_x = utils.parseNumberArray(utils.flatten(array_x)); + array_y = utils.parseNumberArray(utils.flatten(array_y)); + for (var i = 0; i < array_x.length; i++) { + result += array_x[i] * array_x[i] + array_y[i] * array_y[i]; + } + return result; + }; + + exports.SUMXMY2 = function(array_x, array_y) { + array_x = utils.parseNumberArray(utils.flatten(array_x)); + array_y = utils.parseNumberArray(utils.flatten(array_y)); + if (utils.anyIsError(array_x, array_y)) { + return error.value; + } + var result = 0; + array_x = utils.flatten(array_x); + array_y = utils.flatten(array_y); + for (var i = 0; i < array_x.length; i++) { + result += Math.pow(array_x[i] - array_y[i], 2); + } + return result; + }; + + exports.TAN = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return Math.tan(number); + }; + + exports.TANH = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + var e2 = Math.exp(2 * number); + return (e2 - 1) / (e2 + 1); + }; + + exports.TRUNC = function(number, digits) { + digits = (digits === undefined) ? 0 : digits; + number = utils.parseNumber(number); + digits = utils.parseNumber(digits); + if (utils.anyIsError(number, digits)) { + return error.value; + } + var sign = (number > 0) ? 1 : -1; + return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits); + }; + + return exports; +})(); + +jexcel.methods.misc = (function() { + var exports = {}; + + exports.UNIQUE = function () { + var result = []; + for (var i = 0; i < arguments.length; ++i) { + var hasElement = false; + var element = arguments[i]; + + // Check if we've already seen this element. + for (var j = 0; j < result.length; ++j) { + hasElement = result[j] === element; + if (hasElement) { break; } + } + + // If we did not find it, add it to the result. + if (!hasElement) { + result.push(element); + } + } + return result; + }; + + exports.FLATTEN = utils.flatten; + + exports.ARGS2ARRAY = function () { + return Array.prototype.slice.call(arguments, 0); + }; + + exports.REFERENCE = function (context, reference) { + try { + var path = reference.split('.'); + var result = context; + for (var i = 0; i < path.length; ++i) { + var step = path[i]; + if (step[step.length - 1] === ']') { + var opening = step.indexOf('['); + var index = step.substring(opening + 1, step.length - 1); + result = result[step.substring(0, opening)][index]; + } else { + result = result[step]; + } + } + return result; + } catch (error) {} + }; + + exports.JOIN = function (array, separator) { + return array.join(separator); + }; + + exports.NUMBERS = function () { + var possibleNumbers = utils.flatten(arguments); + return possibleNumbers.filter(function (el) { + return typeof el === 'number'; + }); + }; + + exports.NUMERAL = null; + + return exports; +})(); + +jexcel.methods.text = (function() { + var exports = {}; + + exports.ASC = null; + + exports.BAHTTEXT = null; + + exports.CHAR = function(number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return String.fromCharCode(number); + }; + + exports.CLEAN = function(text) { + text = text || ''; + var re = /[\0-\x1F]/g; + return text.replace(re, ""); + }; + + exports.CODE = function(text) { + text = text || ''; + return text.charCodeAt(0); + }; + + exports.CONCATENATE = function() { + var args = utils.flatten(arguments); + + var trueFound = 0; + while ((trueFound = args.indexOf(true)) > -1) { + args[trueFound] = 'TRUE'; + } + + var falseFound = 0; + while ((falseFound = args.indexOf(false)) > -1) { + args[falseFound] = 'FALSE'; + } + + return args.join(''); + }; + + exports.DBCS = null; + + exports.DOLLAR = null; + + exports.EXACT = function(text1, text2) { + return text1 === text2; + }; + + exports.FIND = function(find_text, within_text, position) { + position = (position === undefined) ? 0 : position; + return within_text ? within_text.indexOf(find_text, position - 1) + 1 : null; + }; + + exports.FIXED = null; + + exports.HTML2TEXT = function (value) { + var result = ''; + + if (value) { + if (value instanceof Array) { + value.forEach(function (line) { + if (result !== '') { + result += '\n'; + } + result += (line.replace(/<(?:.|\n)*?>/gm, '')); + }); + } else { + result = value.replace(/<(?:.|\n)*?>/gm, ''); + } + } + + return result; + }; + + exports.LEFT = function(text, number) { + number = (number === undefined) ? 1 : number; + number = utils.parseNumber(number); + if (number instanceof Error || typeof text !== 'string') { + return error.value; + } + return text ? text.substring(0, number) : null; + }; + + exports.LEN = function(text) { + if (arguments.length === 0) { + return error.error; + } + + if (typeof text === 'string') { + return text ? text.length : 0; + } + + if (text.length) { + return text.length; + } + + return error.value; + }; + + exports.LOWER = function(text) { + if (typeof text !== 'string') { + return error.value; + } + return text ? text.toLowerCase() : text; + }; + + exports.MID = function(text, start, number) { + start = utils.parseNumber(start); + number = utils.parseNumber(number); + if (utils.anyIsError(start, number) || typeof text !== 'string') { + return number; + } + + var begin = start - 1; + var end = begin + number; + + return text.substring(begin, end); + }; + + exports.NUMBERVALUE = null; + + exports.PRONETIC = null; + + exports.PROPER = function(text) { + if (text === undefined || text.length === 0) { + return error.value; + } + if (text === true) { + text = 'TRUE'; + } + if (text === false) { + text = 'FALSE'; + } + if (isNaN(text) && typeof text === 'number') { + return error.value; + } + if (typeof text === 'number') { + text = '' + text; + } + + return text.replace(/\w\S*/g, function(txt) { + return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); + }); + }; + + exports.REGEXEXTRACT = function (text, regular_expression) { + var match = text.match(new RegExp(regular_expression)); + return match ? (match[match.length > 1 ? match.length - 1 : 0]) : null; + }; + + exports.REGEXMATCH = function (text, regular_expression, full) { + var match = text.match(new RegExp(regular_expression)); + return full ? match : !!match; + }; + + exports.REGEXREPLACE = function (text, regular_expression, replacement) { + return text.replace(new RegExp(regular_expression), replacement); + }; + + exports.REPLACE = function(text, position, length, new_text) { + position = utils.parseNumber(position); + length = utils.parseNumber(length); + if (utils.anyIsError(position, length) || + typeof text !== 'string' || + typeof new_text !== 'string') { + return error.value; + } + return text.substr(0, position - 1) + new_text + text.substr(position - 1 + length); + }; + + exports.REPT = function(text, number) { + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return new Array(number + 1).join(text); + }; + + exports.RIGHT = function(text, number) { + number = (number === undefined) ? 1 : number; + number = utils.parseNumber(number); + if (number instanceof Error) { + return number; + } + return text ? text.substring(text.length - number) : null; + }; + + exports.SEARCH = function(find_text, within_text, position) { + var foundAt; + if (typeof find_text !== 'string' || typeof within_text !== 'string') { + return error.value; + } + position = (position === undefined) ? 0 : position; + foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), position - 1)+1; + return (foundAt === 0)?error.value:foundAt; + }; + + exports.SPLIT = function (text, separator) { + return text.split(separator); + }; + + exports.SUBSTITUTE = function(text, old_text, new_text, occurrence) { + if (!text || !old_text || !new_text) { + return text; + } else if (occurrence === undefined) { + return text.replace(new RegExp(old_text, 'g'), new_text); + } else { + var index = 0; + var i = 0; + while (text.indexOf(old_text, index) > 0) { + index = text.indexOf(old_text, index + 1); + i++; + if (i === occurrence) { + return text.substring(0, index) + new_text + text.substring(index + old_text.length); + } + } + } + }; + + exports.T = function(value) { + return (typeof value === "string") ? value : ''; + }; + + exports.TEXT = null; + + exports.TRIM = function(text) { + if (typeof text !== 'string') { + return error.value; + } + return text.replace(/ +/g, ' ').trim(); + }; + + exports.UNICHAR = exports.CHAR; + + exports.UNICODE = exports.CODE; + + exports.UPPER = function(text) { + if (typeof text !== 'string') { + return error.value; + } + return text.toUpperCase(); + }; + + exports.VALUE = null; + + return exports; +})(); + +jexcel.methods.stats = (function() { + var exports = {}; + + var SQRT2PI = 2.5066282746310002; + + exports.AVEDEV = null; + + exports.AVERAGE = function() { + var range = utils.numbers(utils.flatten(arguments)); + var n = range.length; + var sum = 0; + var count = 0; + for (var i = 0; i < n; i++) { + sum += range[i]; + count += 1; + } + return sum / count; + }; + + exports.AVERAGEA = function() { + var range = utils.flatten(arguments); + var n = range.length; + var sum = 0; + var count = 0; + for (var i = 0; i < n; i++) { + var el = range[i]; + if (typeof el === 'number') { + sum += el; + } + if (el === true) { + sum++; + } + if (el !== null) { + count++; + } + } + return sum / count; + }; + + exports.AVERAGEIF = function(range, criteria, average_range) { + average_range = average_range || range; + range = utils.flatten(range); + average_range = utils.parseNumberArray(utils.flatten(average_range)); + if (average_range instanceof Error) { + return average_range; + } + var average_count = 0; + var result = 0; + for (var i = 0; i < range.length; i++) { + if (eval(range[i] + criteria)) { // jshint ignore:line + result += average_range[i]; + average_count++; + } + } + return result / average_count; + }; + + exports.AVERAGEIFS = null; + + exports.COUNT = function() { + return utils.numbers(utils.flatten(arguments)).length; + }; + + exports.COUNTA = function() { + var range = utils.flatten(arguments); + return range.length - exports.COUNTBLANK(range); + }; + + exports.COUNTIN = function (range, value) { + var result = 0; + for (var i = 0; i < range.length; i++) { + if (range[i] === value) { + result++; + } + } + return result; + }; + + exports.COUNTBLANK = function() { + var range = utils.flatten(arguments); + var blanks = 0; + var element; + for (var i = 0; i < range.length; i++) { + element = range[i]; + if (element === null || element === '') { + blanks++; + } + } + return blanks; + }; + + exports.COUNTIF = function(range, criteria) { + range = utils.flatten(range); + if (!/[<>=!]/.test(criteria)) { + criteria = '=="' + criteria + '"'; + } + var matches = 0; + for (var i = 0; i < range.length; i++) { + if (typeof range[i] !== 'string') { + if (eval(range[i] + criteria)) { // jshint ignore:line + matches++; + } + } else { + if (eval('"' + range[i] + '"' + criteria)) { // jshint ignore:line + matches++; + } + } + } + return matches; + }; + + exports.COUNTIFS = function() { + var args = utils.argsToArray(arguments); + var results = new Array(utils.flatten(args[0]).length); + for (var i = 0; i < results.length; i++) { + results[i] = true; + } + for (i = 0; i < args.length; i += 2) { + var range = utils.flatten(args[i]); + var criteria = args[i + 1]; + if (!/[<>=!]/.test(criteria)) { + criteria = '=="' + criteria + '"'; + } + for (var j = 0; j < range.length; j++) { + if (typeof range[j] !== 'string') { + results[j] = results[j] && eval(range[j] + criteria); // jshint ignore:line + } else { + results[j] = results[j] && eval('"' + range[j] + '"' + criteria); // jshint ignore:line + } + } + } + var result = 0; + for (i = 0; i < results.length; i++) { + if (results[i]) { + result++; + } + } + return result; + }; + + exports.COUNTUNIQUE = function () { + return UNIQUE.apply(null, utils.flatten(arguments)).length; + }; + + exports.FISHER = function(x) { + x = utils.parseNumber(x); + if (x instanceof Error) { + return x; + } + return Math.log((1 + x) / (1 - x)) / 2; + }; + + exports.FISHERINV = function(y) { + y = utils.parseNumber(y); + if (y instanceof Error) { + return y; + } + var e2y = Math.exp(2 * y); + return (e2y - 1) / (e2y + 1); + }; + + exports.FREQUENCY = function(data, bins) { + data = utils.parseNumberArray(utils.flatten(data)); + bins = utils.parseNumberArray(utils.flatten(bins)); + if (utils.anyIsError(data, bins)) { + return error.value; + } + var n = data.length; + var b = bins.length; + var r = []; + for (var i = 0; i <= b; i++) { + r[i] = 0; + for (var j = 0; j < n; j++) { + if (i === 0) { + if (data[j] <= bins[0]) { + r[0] += 1; + } + } else if (i < b) { + if (data[j] > bins[i - 1] && data[j] <= bins[i]) { + r[i] += 1; + } + } else if (i === b) { + if (data[j] > bins[b - 1]) { + r[b] += 1; + } + } + } + } + return r; + }; + + exports.LARGE = function(range, k) { + range = utils.parseNumberArray(utils.flatten(range)); + k = utils.parseNumber(k); + if (utils.anyIsError(range, k)) { + return range; + } + return range.sort(function(a, b) { + return b - a; + })[k - 1]; + }; + + exports.MAX = function() { + var range = utils.numbers(utils.flatten(arguments)); + return (range.length === 0) ? 0 : Math.max.apply(Math, range); + }; + + exports.MAXA = function() { + var range = utils.arrayValuesToNumbers(utils.flatten(arguments)); + return (range.length === 0) ? 0 : Math.max.apply(Math, range); + }; + + exports.MIN = function() { + var range = utils.numbers(utils.flatten(arguments)); + return (range.length === 0) ? 0 : Math.min.apply(Math, range); + }; + + exports.MINA = function() { + var range = utils.arrayValuesToNumbers(utils.flatten(arguments)); + return (range.length === 0) ? 0 : Math.min.apply(Math, range); + }; + + exports.MODE = {}; + + exports.MODE.MULT = function() { + // Credits: Roönaän + var range = utils.parseNumberArray(utils.flatten(arguments)); + if (range instanceof Error) { + return range; + } + var n = range.length; + var count = {}; + var maxItems = []; + var max = 0; + var currentItem; + + for (var i = 0; i < n; i++) { + currentItem = range[i]; + count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1; + if (count[currentItem] > max) { + max = count[currentItem]; + maxItems = []; + } + if (count[currentItem] === max) { + maxItems[maxItems.length] = currentItem; + } + } + return maxItems; + }; + + exports.MODE.SNGL = function() { + var range = utils.parseNumberArray(utils.flatten(arguments)); + if (range instanceof Error) { + return range; + } + return exports.MODE.MULT(range).sort(function(a, b) { + return a - b; + })[0]; + }; + + exports.PERCENTILE = {}; + + exports.PERCENTILE.EXC = function(array, k) { + array = utils.parseNumberArray(utils.flatten(array)); + k = utils.parseNumber(k); + if (utils.anyIsError(array, k)) { + return error.value; + } + array = array.sort(function(a, b) { + { + return a - b; + } + }); + var n = array.length; + if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) { + return error.num; + } + var l = k * (n + 1) - 1; + var fl = Math.floor(l); + return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl])); + }; + + exports.PERCENTILE.INC = function(array, k) { + array = utils.parseNumberArray(utils.flatten(array)); + k = utils.parseNumber(k); + if (utils.anyIsError(array, k)) { + return error.value; + } + array = array.sort(function(a, b) { + return a - b; + }); + var n = array.length; + var l = k * (n - 1); + var fl = Math.floor(l); + return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl])); + }; + + exports.PERCENTRANK = {}; + + exports.PERCENTRANK.EXC = function(array, x, significance) { + significance = (significance === undefined) ? 3 : significance; + array = utils.parseNumberArray(utils.flatten(array)); + x = utils.parseNumber(x); + significance = utils.parseNumber(significance); + if (utils.anyIsError(array, x, significance)) { + return error.value; + } + array = array.sort(function(a, b) { + return a - b; + }); + var uniques = UNIQUE.apply(null, array); + var n = array.length; + var m = uniques.length; + var power = Math.pow(10, significance); + var result = 0; + var match = false; + var i = 0; + while (!match && i < m) { + if (x === uniques[i]) { + result = (array.indexOf(uniques[i]) + 1) / (n + 1); + match = true; + } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) { + result = (array.indexOf(uniques[i]) + 1 + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n + 1); + match = true; + } + i++; + } + return Math.floor(result * power) / power; + }; + + exports.PERCENTRANK.INC = function(array, x, significance) { + significance = (significance === undefined) ? 3 : significance; + array = utils.parseNumberArray(utils.flatten(array)); + x = utils.parseNumber(x); + significance = utils.parseNumber(significance); + if (utils.anyIsError(array, x, significance)) { + return error.value; + } + array = array.sort(function(a, b) { + return a - b; + }); + var uniques = UNIQUE.apply(null, array); + var n = array.length; + var m = uniques.length; + var power = Math.pow(10, significance); + var result = 0; + var match = false; + var i = 0; + while (!match && i < m) { + if (x === uniques[i]) { + result = array.indexOf(uniques[i]) / (n - 1); + match = true; + } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) { + result = (array.indexOf(uniques[i]) + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n - 1); + match = true; + } + i++; + } + return Math.floor(result * power) / power; + }; + + exports.PERMUT = function(number, number_chosen) { + number = utils.parseNumber(number); + number_chosen = utils.parseNumber(number_chosen); + if (utils.anyIsError(number, number_chosen)) { + return error.value; + } + return FACT(number) / FACT(number - number_chosen); + }; + + exports.PERMUTATIONA = function(number, number_chosen) { + number = utils.parseNumber(number); + number_chosen = utils.parseNumber(number_chosen); + if (utils.anyIsError(number, number_chosen)) { + return error.value; + } + return Math.pow(number, number_chosen); + }; + + exports.PHI = function(x) { + x = utils.parseNumber(x); + if (x instanceof Error) { + return error.value; + } + return Math.exp(-0.5 * x * x) / SQRT2PI; + }; + + exports.PROB = function(range, probability, lower, upper) { + if (lower === undefined) { + return 0; + } + upper = (upper === undefined) ? lower : upper; + + range = utils.parseNumberArray(utils.flatten(range)); + probability = utils.parseNumberArray(utils.flatten(probability)); + lower = utils.parseNumber(lower); + upper = utils.parseNumber(upper); + if (utils.anyIsError(range, probability, lower, upper)) { + return error.value; + } + + if (lower === upper) { + return (range.indexOf(lower) >= 0) ? probability[range.indexOf(lower)] : 0; + } + + var sorted = range.sort(function(a, b) { + return a - b; + }); + var n = sorted.length; + var result = 0; + for (var i = 0; i < n; i++) { + if (sorted[i] >= lower && sorted[i] <= upper) { + result += probability[range.indexOf(sorted[i])]; + } + } + return result; + }; + + exports.QUARTILE = {}; + + exports.QUARTILE.EXC = function(range, quart) { + range = utils.parseNumberArray(utils.flatten(range)); + quart = utils.parseNumber(quart); + if (utils.anyIsError(range, quart)) { + return error.value; + } + switch (quart) { + case 1: + return exports.PERCENTILE.EXC(range, 0.25); + case 2: + return exports.PERCENTILE.EXC(range, 0.5); + case 3: + return exports.PERCENTILE.EXC(range, 0.75); + default: + return error.num; + } + }; + + exports.QUARTILE.INC = function(range, quart) { + range = utils.parseNumberArray(utils.flatten(range)); + quart = utils.parseNumber(quart); + if (utils.anyIsError(range, quart)) { + return error.value; + } + switch (quart) { + case 1: + return exports.PERCENTILE.INC(range, 0.25); + case 2: + return exports.PERCENTILE.INC(range, 0.5); + case 3: + return exports.PERCENTILE.INC(range, 0.75); + default: + return error.num; + } + }; + + exports.RANK = {}; + + exports.RANK.AVG = function(number, range, order) { + number = utils.parseNumber(number); + range = utils.parseNumberArray(utils.flatten(range)); + if (utils.anyIsError(number, range)) { + return error.value; + } + range = utils.flatten(range); + order = order || false; + var sort = (order) ? function(a, b) { + return a - b; + } : function(a, b) { + return b - a; + }; + range = range.sort(sort); + + var length = range.length; + var count = 0; + for (var i = 0; i < length; i++) { + if (range[i] === number) { + count++; + } + } + + return (count > 1) ? (2 * range.indexOf(number) + count + 1) / 2 : range.indexOf(number) + 1; + }; + + exports.RANK.EQ = function(number, range, order) { + number = utils.parseNumber(number); + range = utils.parseNumberArray(utils.flatten(range)); + if (utils.anyIsError(number, range)) { + return error.value; + } + order = order || false; + var sort = (order) ? function(a, b) { + return a - b; + } : function(a, b) { + return b - a; + }; + range = range.sort(sort); + return range.indexOf(number) + 1; + }; + + exports.RSQ = function(data_x, data_y) { // no need to flatten here, PEARSON will take care of that + data_x = utils.parseNumberArray(utils.flatten(data_x)); + data_y = utils.parseNumberArray(utils.flatten(data_y)); + if (utils.anyIsError(data_x, data_y)) { + return error.value; + } + return Math.pow(exports.PEARSON(data_x, data_y), 2); + }; + + exports.SMALL = function(range, k) { + range = utils.parseNumberArray(utils.flatten(range)); + k = utils.parseNumber(k); + if (utils.anyIsError(range, k)) { + return range; + } + return range.sort(function(a, b) { + return a - b; + })[k - 1]; + }; + + exports.STANDARDIZE = function(x, mean, sd) { + x = utils.parseNumber(x); + mean = utils.parseNumber(mean); + sd = utils.parseNumber(sd); + if (utils.anyIsError(x, mean, sd)) { + return error.value; + } + return (x - mean) / sd; + }; + + exports.STDEV = {}; + + exports.STDEV.P = function() { + var v = exports.VAR.P.apply(this, arguments); + return Math.sqrt(v); + }; + + exports.STDEV.S = function() { + var v = exports.VAR.S.apply(this, arguments); + return Math.sqrt(v); + }; + + exports.STDEVA = function() { + var v = exports.VARA.apply(this, arguments); + return Math.sqrt(v); + }; + + exports.STDEVPA = function() { + var v = exports.VARPA.apply(this, arguments); + return Math.sqrt(v); + }; + + exports.VAR = {}; + + exports.VAR.P = function() { + var range = utils.numbers(utils.flatten(arguments)); + var n = range.length; + var sigma = 0; + var mean = exports.AVERAGE(range); + for (var i = 0; i < n; i++) { + sigma += Math.pow(range[i] - mean, 2); + } + return sigma / n; + }; + + exports.VAR.S = function() { + var range = utils.numbers(utils.flatten(arguments)); + var n = range.length; + var sigma = 0; + var mean = exports.AVERAGE(range); + for (var i = 0; i < n; i++) { + sigma += Math.pow(range[i] - mean, 2); + } + return sigma / (n - 1); + }; + + exports.VARA = function() { + var range = utils.flatten(arguments); + var n = range.length; + var sigma = 0; + var count = 0; + var mean = exports.AVERAGEA(range); + for (var i = 0; i < n; i++) { + var el = range[i]; + if (typeof el === 'number') { + sigma += Math.pow(el - mean, 2); + } else if (el === true) { + sigma += Math.pow(1 - mean, 2); + } else { + sigma += Math.pow(0 - mean, 2); + } + + if (el !== null) { + count++; + } + } + return sigma / (count - 1); + }; + + exports.VARPA = function() { + var range = utils.flatten(arguments); + var n = range.length; + var sigma = 0; + var count = 0; + var mean = exports.AVERAGEA(range); + for (var i = 0; i < n; i++) { + var el = range[i]; + if (typeof el === 'number') { + sigma += Math.pow(el - mean, 2); + } else if (el === true) { + sigma += Math.pow(1 - mean, 2); + } else { + sigma += Math.pow(0 - mean, 2); + } + + if (el !== null) { + count++; + } + } + return sigma / count; + }; + + exports.WEIBULL = {}; + + exports.WEIBULL.DIST = function(x, alpha, beta, cumulative) { + x = utils.parseNumber(x); + alpha = utils.parseNumber(alpha); + beta = utils.parseNumber(beta); + if (utils.anyIsError(x, alpha, beta)) { + return error.value; + } + return (cumulative) ? 1 - Math.exp(-Math.pow(x / beta, alpha)) : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha); + }; + + exports.Z = {}; + + exports.Z.TEST = function(range, x, sd) { + range = utils.parseNumberArray(utils.flatten(range)); + x = utils.parseNumber(x); + if (utils.anyIsError(range, x)) { + return error.value; + } + + sd = sd || exports.STDEV.S(range); + var n = range.length; + return 1 - exports.NORM.S.DIST((exports.AVERAGE(range) - x) / (sd / Math.sqrt(n)), true); + }; + + return exports; +})(); + +for (var i = 0; i < Object.keys(jexcel.methods).length; i++) { + var methods = jexcel.methods[Object.keys(jexcel.methods)[i]]; + for (var j = 0; j < Object.keys(methods).length; j++) { + if (typeof(methods[Object.keys(methods)[j]]) == 'function') { + window[Object.keys(methods)[j]] = methods[Object.keys(methods)[j]]; + } else { + window[Object.keys(methods)[j]] = function() { + return Object.keys(methods)[j] + 'Not implemented'; + } + } + } +} + +if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = jexcel; +} diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/js/jquery.blockUI.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/js/jquery.blockUI.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/js/jquery.blockUI.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-blockui/js/jquery.blockUI.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree-all.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/jquery.fancytree.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-awesome/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap-n/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-bootstrap/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-common.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-common.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-common.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-common.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-custom-1/README.md b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-custom-1/README.md similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-custom-1/README.md rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-custom-1/README.md diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/icons.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/icons.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/icons.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-lion/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/icons.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/icons.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/icons.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-themeroller/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/icons.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/icons.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/icons.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-vista/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/icons.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/icons.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/icons.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win7/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/icons.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/icons.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/icons.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-n/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/icons.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/icons.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/icons.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8-xxl/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/icons.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/icons.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/icons.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-win8/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons-rtl.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons-rtl.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons-rtl.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons-rtl.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/icons.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/loading.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/loading.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/loading.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/loading.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.less b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.less similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.less rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.less diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/ui.fancytree.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline-rtl.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline-rtl.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline-rtl.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline-rtl.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline.gif b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline.gif similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline.gif rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/skin-xp/vline.gif diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.childcounter.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.childcounter.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.childcounter.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.childcounter.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.clones.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.clones.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.clones.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.clones.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.columnview.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.columnview.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.columnview.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.columnview.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.debug.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.debug.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.debug.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.debug.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.dnd.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.dnd.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.dnd.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.dnd.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.edit.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.edit.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.edit.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.edit.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.filter.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.filter.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.filter.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.filter.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.glyph.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.glyph.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.glyph.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.glyph.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.gridnav.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.gridnav.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.gridnav.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.gridnav.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.menu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.menu.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.menu.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.menu.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.persist.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.persist.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.persist.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.persist.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.table.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.table.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.table.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.table.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.themeroller.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.themeroller.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.themeroller.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.themeroller.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.wide.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.wide.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.wide.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-fancytree/js/src/jquery.fancytree.wide.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/js/bundled/html5/jquery.history.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/js/bundled/html5/jquery.history.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/js/bundled/html5/jquery.history.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-history/js/bundled/html5/jquery.history.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/NOTES.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/NOTES.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/NOTES.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/NOTES.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css similarity index 95% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css index 82a0a28e3e686a09f7371514c92e9ec9b489b933..fefeb859790ae33de958b467417709ae8220cdb4 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.jquery.css @@ -1,65 +1,65 @@ -/*****************/ -/** jNotify CSS **/ -/*****************/ -#jNotify { - position:absolute; - background:#d8e6fc url('../info.png') no-repeat 15px center; - color:#35517c; - border:1px solid #a7c3f0; - padding:10px; - padding-left:50px; - margin:15px; - z-index:9999; - -moz-border-radius : 5px; - border-radius:5px; - -webkit-border-radius:5px; -} -#jNotify a {color:#35517c !important;text-decoration:none;} - -/******************/ -/** jSuccess CSS **/ -/******************/ -#jSuccess { - position:absolute; - background:#E6EFC2 url('../success.png') no-repeat 15px center; - color:#264409; - border:1px solid #C6D880; - padding:10px; - padding-left:50px; - margin:15px; - z-index:9999; - -moz-border-radius : 5px; - border-radius:5px; - -webkit-border-radius:5px; -} -#jSuccess a {color:#264409 !important;text-decoration:none;} - - - -/****************/ -/** jError CSS **/ -/****************/ -#jError { - position:absolute; - background:#FBE3E4 url('../error.png') no-repeat 15px center; - color:#8a1f11; - border:1px solid #FBC2C4; - padding:10px; - padding-left:50px; - margin:15px; - z-index:9999; - -moz-border-radius : 5px; - border-radius:5px; - -webkit-border-radius:5px; -} -#jError a {color:#8a1f11 !important;text-decoration:none;} - -/** OVERLAY **/ -#jOverlay { - width:100%; - height:100%; - position:fixed; - top:0; - left:0; - z-index:9998 +/*****************/ +/** jNotify CSS **/ +/*****************/ +#jNotify { + position:absolute; + background:#d8e6fc url('../info.png') no-repeat 15px center; + color:#35517c; + border:1px solid #a7c3f0; + padding:10px; + padding-left:50px; + margin:15px; + z-index:9999; + -moz-border-radius : 5px; + border-radius:5px; + -webkit-border-radius:5px; +} +#jNotify a {color:#35517c !important;text-decoration:none;} + +/******************/ +/** jSuccess CSS **/ +/******************/ +#jSuccess { + position:absolute; + background:#E6EFC2 url('../success.png') no-repeat 15px center; + color:#264409; + border:1px solid #C6D880; + padding:10px; + padding-left:50px; + margin:15px; + z-index:9999; + -moz-border-radius : 5px; + border-radius:5px; + -webkit-border-radius:5px; +} +#jSuccess a {color:#264409 !important;text-decoration:none;} + + + +/****************/ +/** jError CSS **/ +/****************/ +#jError { + position:absolute; + background:#FBE3E4 url('../error.png') no-repeat 15px center; + color:#8a1f11; + border:1px solid #FBC2C4; + padding:10px; + padding-left:50px; + margin:15px; + z-index:9999; + -moz-border-radius : 5px; + border-radius:5px; + -webkit-border-radius:5px; +} +#jError a {color:#8a1f11 !important;text-decoration:none;} + +/** OVERLAY **/ +#jOverlay { + width:100%; + height:100%; + position:fixed; + top:0; + left:0; + z-index:9998 } \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css similarity index 95% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css index 75bee502e45eb94912fe06f1039289e2208b8719..5ea21b4ee8ddfb9c58a616bcc384f56ce0e4e431 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/css/jNotify.sis.jquery.css @@ -1,82 +1,82 @@ -/**********************/ -/** jNotifyImage CSS **/ -/**********************/ -#jNotifyImage { - position:absolute; - background-color:#ffffff; - color:#35517c; - border:1px solid #a7c3f0; - padding:10px; - margin:15px; - z-index:9999; - -moz-border-radius : 5px; - border-radius:5px; - -webkit-border-radius:5px; -} -#jNotifyImage a {color:#35517c !important;text-decoration:none;} - -/*****************/ -/** jNotify CSS **/ -/*****************/ -#jNotify { - position:absolute; - background:#d8e6fc url('../img/info.png') no-repeat 15px center; - color:#35517c; - border:1px solid #a7c3f0; - padding:10px; - padding-left:50px; - margin:15px; - z-index:9999; - -moz-border-radius : 5px; - border-radius:5px; - -webkit-border-radius:5px; -} -#jNotify a {color:#35517c !important;text-decoration:none;} - -/******************/ -/** jSuccess CSS **/ -/******************/ -#jSuccess { - position:absolute; - background:#E6EFC2 url('../img/success.png') no-repeat 15px center; - color:#264409; - border:1px solid #C6D880; - padding:10px; - padding-left:50px; - margin:15px; - z-index:9999; - -moz-border-radius : 5px; - border-radius:5px; - -webkit-border-radius:5px; -} -#jSuccess a {color:#264409 !important;text-decoration:none;} - - - -/****************/ -/** jError CSS **/ -/****************/ -#jError { - position:absolute; - background:#FBE3E4 url('../img/error.png') no-repeat 15px center; - color:#8a1f11; - border:1px solid #FBC2C4; - padding:10px; - padding-left:50px; - margin:15px; - z-index:9999; - -moz-border-radius : 5px; - border-radius:5px; - -webkit-border-radius:5px; -} -#jError a {color:#8a1f11 !important;text-decoration:none;} - -/** OVERLAY **/ -#jOverlay { - width:100%; - height:100%; - position:fixed; - top:0; - left:0; - z-index:9998 +/**********************/ +/** jNotifyImage CSS **/ +/**********************/ +#jNotifyImage { + position:absolute; + background-color:#ffffff; + color:#35517c; + border:1px solid #a7c3f0; + padding:10px; + margin:15px; + z-index:9999; + -moz-border-radius : 5px; + border-radius:5px; + -webkit-border-radius:5px; +} +#jNotifyImage a {color:#35517c !important;text-decoration:none;} + +/*****************/ +/** jNotify CSS **/ +/*****************/ +#jNotify { + position:absolute; + background:#d8e6fc url('../img/info.png') no-repeat 15px center; + color:#35517c; + border:1px solid #a7c3f0; + padding:10px; + padding-left:50px; + margin:15px; + z-index:9999; + -moz-border-radius : 5px; + border-radius:5px; + -webkit-border-radius:5px; +} +#jNotify a {color:#35517c !important;text-decoration:none;} + +/******************/ +/** jSuccess CSS **/ +/******************/ +#jSuccess { + position:absolute; + background:#E6EFC2 url('../img/success.png') no-repeat 15px center; + color:#264409; + border:1px solid #C6D880; + padding:10px; + padding-left:50px; + margin:15px; + z-index:9999; + -moz-border-radius : 5px; + border-radius:5px; + -webkit-border-radius:5px; +} +#jSuccess a {color:#264409 !important;text-decoration:none;} + + + +/****************/ +/** jError CSS **/ +/****************/ +#jError { + position:absolute; + background:#FBE3E4 url('../img/error.png') no-repeat 15px center; + color:#8a1f11; + border:1px solid #FBC2C4; + padding:10px; + padding-left:50px; + margin:15px; + z-index:9999; + -moz-border-radius : 5px; + border-radius:5px; + -webkit-border-radius:5px; +} +#jError a {color:#8a1f11 !important;text-decoration:none;} + +/** OVERLAY **/ +#jOverlay { + width:100%; + height:100%; + position:fixed; + top:0; + left:0; + z-index:9998 } \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/error.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/error.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/error.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/error.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/info.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/info.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/info.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/info.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/success.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/success.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/success.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/img/success.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js similarity index 96% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js index e2c60f10bab23bd837a1f73d1011315addf8ef05..f12898cbdd4163e6f9da3b879b22ebe72fc0cb21 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.jquery.js @@ -1,248 +1,248 @@ -/************************************************************************ -************************************************************************* -@Name : jNotify - jQuery Plugin -@Revison : 2.1 -@Date : 01/2011 -@Author: ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr) -@Support: FF, IE7, IE8, MAC Firefox, MAC Safari -@License : Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php - -************************************************************************** -*************************************************************************/ -(function($){ - - $.jNotify = { - defaults: { - /** VARS - OPTIONS **/ - autoHide : true, // Notify box auto-close after 'TimeShown' ms ? - clickOverlay : false, // if 'clickOverlay' = false, close the notice box on the overlay click ? - MinWidth : 200, // min-width CSS property - TimeShown : 1500, // Box shown during 'TimeShown' ms - ShowTimeEffect : 200, // duration of the Show Effect - HideTimeEffect : 200, // duration of the Hide effect - LongTrip : 15, // in pixel, length of the move effect when show and hide - HorizontalPosition : 'right', // left, center, right - VerticalPosition : 'bottom', // top, center, bottom - ShowOverlay : true, // show overlay behind the notice ? - ColorOverlay : '#000', // color of the overlay - OpacityOverlay : 0.3, // opacity of the overlay - - /** METHODS - OPTIONS **/ - onClosed : null, - onCompleted : null - }, - - /*****************/ - /** Init Method **/ - /*****************/ - init:function(msg, options, id) { - opts = $.extend({}, $.jNotify.defaults, options); - - /** Box **/ - if($("#"+id).length == 0) - $Div = $.jNotify._construct(id, msg); - - // Width of the Brower - WidthDoc = parseInt($(window).width()); - HeightDoc = parseInt($(window).height()); - - // Scroll Position - ScrollTop = parseInt($(window).scrollTop()); - ScrollLeft = parseInt($(window).scrollLeft()); - - // Position of the jNotify Box - posTop = $.jNotify.vPos(opts.VerticalPosition); - posLeft = $.jNotify.hPos(opts.HorizontalPosition); - - // Show the jNotify Box - if(opts.ShowOverlay && $("#jOverlay").length == 0) - $.jNotify._showOverlay($Div); - - $.jNotify._show(msg); - }, - - /*******************/ - /** Construct DOM **/ - /*******************/ - _construct:function(id, msg) { - $Div = - $('<div id="'+id+'"/>') - .css({opacity : 0,minWidth : opts.MinWidth}) - .html(msg) - .appendTo('body'); - return $Div; - }, - - /**********************/ - /** Postions Methods **/ - /**********************/ - vPos:function(pos) { - switch(pos) { - case 'top': - var vPos = ScrollTop + parseInt($Div.outerHeight(true)/2); - break; - case 'center': - var vPos = ScrollTop + (HeightDoc/2) - (parseInt($Div.outerHeight(true))/2); - break; - case 'bottom': - var vPos = ScrollTop + HeightDoc - parseInt($Div.outerHeight(true)); - break; - } - return vPos; - }, - - hPos:function(pos) { - switch(pos) { - case 'left': - var hPos = ScrollLeft; - break; - case 'center': - var hPos = ScrollLeft + (WidthDoc/2) - (parseInt($Div.outerWidth(true))/2); - break; - case 'right': - var hPos = ScrollLeft + WidthDoc - parseInt($Div.outerWidth(true)); - break; - } - return hPos; - }, - - /*********************/ - /** Show Div Method **/ - /*********************/ - _show:function(msg) { - $Div - .css({ - top: posTop, - left : posLeft - }); - switch (opts.VerticalPosition) { - case 'top': - $Div.animate({ - top: posTop + opts.LongTrip, - opacity:1 - },opts.ShowTimeEffect,function(){ - if(opts.onCompleted) opts.onCompleted(); - }); - if(opts.autoHide) - $.jNotify._close(); - else - $Div.css('cursor','pointer').click(function(e){ - $.jNotify._close(); - }); - break; - case 'center': - $Div.animate({ - opacity:1 - },opts.ShowTimeEffect,function(){ - if(opts.onCompleted) opts.onCompleted(); - }); - if(opts.autoHide) - $.jNotify._close(); - else - $Div.css('cursor','pointer').click(function(e){ - $.jNotify._close(); - }); - break; - case 'bottom' : - $Div.animate({ - top: posTop - opts.LongTrip, - opacity:1 - },opts.ShowTimeEffect,function(){ - if(opts.onCompleted) opts.onCompleted(); - }); - if(opts.autoHide) - $.jNotify._close(); - else - $Div.css('cursor','pointer').click(function(e){ - $.jNotify._close(); - }); - break; - } - }, - - _showOverlay:function(el){ - var overlay = - $('<div id="jOverlay" />') - .css({ - backgroundColor : opts.ColorOverlay, - opacity: opts.OpacityOverlay - }) - .appendTo('body') - .show(); - - if(opts.clickOverlay) - overlay.click(function(e){ - e.preventDefault(); - opts.TimeShown = 0; - $.jNotify._close(); - }); - }, - - - _close:function(){ - switch (opts.VerticalPosition) { - case 'top': - if(!opts.autoHide) - opts.TimeShown = 0; - $Div.stop(true, true).delay(opts.TimeShown).animate({ - top: posTop-opts.LongTrip, - opacity:0 - },opts.HideTimeEffect,function(){ - $(this).remove(); - if(opts.ShowOverlay && $("#jOverlay").length > 0) - $("#jOverlay").remove(); - if(opts.onClosed) opts.onClosed(); - }); - break; - case 'center': - if(!opts.autoHide) - opts.TimeShown = 0; - $Div.stop(true, true).delay(opts.TimeShown).animate({ - opacity:0 - },opts.HideTimeEffect,function(){ - $(this).remove(); - if(opts.ShowOverlay && $("#jOverlay").length > 0) - $("#jOverlay").remove(); - if(opts.onClosed) opts.onClosed(); - }); - break; - case 'bottom' : - if(!opts.autoHide) - opts.TimeShown = 0; - $Div.stop(true, true).delay(opts.TimeShown).animate({ - top: posTop+opts.LongTrip, - opacity:0 - },opts.HideTimeEffect,function(){ - $(this).remove(); - if(opts.ShowOverlay && $("#jOverlay").length > 0) - $("#jOverlay").remove(); - if(opts.onClosed) opts.onClosed(); - }); - break; - } - }, - - _isReadable:function(id){ - if($('#'+id).length > 0) - return false; - else - return true; - } - }; - - /** Init method **/ - jNotify = function(msg,options) { - if($.jNotify._isReadable('jNotify')) - $.jNotify.init(msg,options,'jNotify'); - }; - - jSuccess = function(msg,options) { - if($.jNotify._isReadable('jSuccess')) - $.jNotify.init(msg,options,'jSuccess'); - }; - - jError = function(msg,options) { - if($.jNotify._isReadable('jError')) - $.jNotify.init(msg,options,'jError'); - }; +/************************************************************************ +************************************************************************* +@Name : jNotify - jQuery Plugin +@Revison : 2.1 +@Date : 01/2011 +@Author: ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr) +@Support: FF, IE7, IE8, MAC Firefox, MAC Safari +@License : Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php + +************************************************************************** +*************************************************************************/ +(function($){ + + $.jNotify = { + defaults: { + /** VARS - OPTIONS **/ + autoHide : true, // Notify box auto-close after 'TimeShown' ms ? + clickOverlay : false, // if 'clickOverlay' = false, close the notice box on the overlay click ? + MinWidth : 200, // min-width CSS property + TimeShown : 1500, // Box shown during 'TimeShown' ms + ShowTimeEffect : 200, // duration of the Show Effect + HideTimeEffect : 200, // duration of the Hide effect + LongTrip : 15, // in pixel, length of the move effect when show and hide + HorizontalPosition : 'right', // left, center, right + VerticalPosition : 'bottom', // top, center, bottom + ShowOverlay : true, // show overlay behind the notice ? + ColorOverlay : '#000', // color of the overlay + OpacityOverlay : 0.3, // opacity of the overlay + + /** METHODS - OPTIONS **/ + onClosed : null, + onCompleted : null + }, + + /*****************/ + /** Init Method **/ + /*****************/ + init:function(msg, options, id) { + opts = $.extend({}, $.jNotify.defaults, options); + + /** Box **/ + if($("#"+id).length == 0) + $Div = $.jNotify._construct(id, msg); + + // Width of the Brower + WidthDoc = parseInt($(window).width()); + HeightDoc = parseInt($(window).height()); + + // Scroll Position + ScrollTop = parseInt($(window).scrollTop()); + ScrollLeft = parseInt($(window).scrollLeft()); + + // Position of the jNotify Box + posTop = $.jNotify.vPos(opts.VerticalPosition); + posLeft = $.jNotify.hPos(opts.HorizontalPosition); + + // Show the jNotify Box + if(opts.ShowOverlay && $("#jOverlay").length == 0) + $.jNotify._showOverlay($Div); + + $.jNotify._show(msg); + }, + + /*******************/ + /** Construct DOM **/ + /*******************/ + _construct:function(id, msg) { + $Div = + $('<div id="'+id+'"/>') + .css({opacity : 0,minWidth : opts.MinWidth}) + .html(msg) + .appendTo('body'); + return $Div; + }, + + /**********************/ + /** Postions Methods **/ + /**********************/ + vPos:function(pos) { + switch(pos) { + case 'top': + var vPos = ScrollTop + parseInt($Div.outerHeight(true)/2); + break; + case 'center': + var vPos = ScrollTop + (HeightDoc/2) - (parseInt($Div.outerHeight(true))/2); + break; + case 'bottom': + var vPos = ScrollTop + HeightDoc - parseInt($Div.outerHeight(true)); + break; + } + return vPos; + }, + + hPos:function(pos) { + switch(pos) { + case 'left': + var hPos = ScrollLeft; + break; + case 'center': + var hPos = ScrollLeft + (WidthDoc/2) - (parseInt($Div.outerWidth(true))/2); + break; + case 'right': + var hPos = ScrollLeft + WidthDoc - parseInt($Div.outerWidth(true)); + break; + } + return hPos; + }, + + /*********************/ + /** Show Div Method **/ + /*********************/ + _show:function(msg) { + $Div + .css({ + top: posTop, + left : posLeft + }); + switch (opts.VerticalPosition) { + case 'top': + $Div.animate({ + top: posTop + opts.LongTrip, + opacity:1 + },opts.ShowTimeEffect,function(){ + if(opts.onCompleted) opts.onCompleted(); + }); + if(opts.autoHide) + $.jNotify._close(); + else + $Div.css('cursor','pointer').click(function(e){ + $.jNotify._close(); + }); + break; + case 'center': + $Div.animate({ + opacity:1 + },opts.ShowTimeEffect,function(){ + if(opts.onCompleted) opts.onCompleted(); + }); + if(opts.autoHide) + $.jNotify._close(); + else + $Div.css('cursor','pointer').click(function(e){ + $.jNotify._close(); + }); + break; + case 'bottom' : + $Div.animate({ + top: posTop - opts.LongTrip, + opacity:1 + },opts.ShowTimeEffect,function(){ + if(opts.onCompleted) opts.onCompleted(); + }); + if(opts.autoHide) + $.jNotify._close(); + else + $Div.css('cursor','pointer').click(function(e){ + $.jNotify._close(); + }); + break; + } + }, + + _showOverlay:function(el){ + var overlay = + $('<div id="jOverlay" />') + .css({ + backgroundColor : opts.ColorOverlay, + opacity: opts.OpacityOverlay + }) + .appendTo('body') + .show(); + + if(opts.clickOverlay) + overlay.click(function(e){ + e.preventDefault(); + opts.TimeShown = 0; + $.jNotify._close(); + }); + }, + + + _close:function(){ + switch (opts.VerticalPosition) { + case 'top': + if(!opts.autoHide) + opts.TimeShown = 0; + $Div.stop(true, true).delay(opts.TimeShown).animate({ + top: posTop-opts.LongTrip, + opacity:0 + },opts.HideTimeEffect,function(){ + $(this).remove(); + if(opts.ShowOverlay && $("#jOverlay").length > 0) + $("#jOverlay").remove(); + if(opts.onClosed) opts.onClosed(); + }); + break; + case 'center': + if(!opts.autoHide) + opts.TimeShown = 0; + $Div.stop(true, true).delay(opts.TimeShown).animate({ + opacity:0 + },opts.HideTimeEffect,function(){ + $(this).remove(); + if(opts.ShowOverlay && $("#jOverlay").length > 0) + $("#jOverlay").remove(); + if(opts.onClosed) opts.onClosed(); + }); + break; + case 'bottom' : + if(!opts.autoHide) + opts.TimeShown = 0; + $Div.stop(true, true).delay(opts.TimeShown).animate({ + top: posTop+opts.LongTrip, + opacity:0 + },opts.HideTimeEffect,function(){ + $(this).remove(); + if(opts.ShowOverlay && $("#jOverlay").length > 0) + $("#jOverlay").remove(); + if(opts.onClosed) opts.onClosed(); + }); + break; + } + }, + + _isReadable:function(id){ + if($('#'+id).length > 0) + return false; + else + return true; + } + }; + + /** Init method **/ + jNotify = function(msg,options) { + if($.jNotify._isReadable('jNotify')) + $.jNotify.init(msg,options,'jNotify'); + }; + + jSuccess = function(msg,options) { + if($.jNotify._isReadable('jSuccess')) + $.jNotify.init(msg,options,'jSuccess'); + }; + + jError = function(msg,options) { + if($.jNotify._isReadable('jError')) + $.jNotify.init(msg,options,'jError'); + }; })(jQuery); \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js similarity index 96% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js index cb4917296bf2fafe262ee86675feef5c7c46bd46..e851c59db9f0ae290b55d90bec658e41c0e4aefa 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-jnotify/js/jNotify.sis.jquery.js @@ -1,256 +1,256 @@ -/************************************************************************ -************************************************************************* -@Name : jNotify - jQuery Plugin -@Revison : 2.1 -@Date : 01/2011 -@Author: ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr) -@Support: FF, IE7, IE8, MAC Firefox, MAC Safari -@License : Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php - -************************************************************************** -*************************************************************************/ -(function($){ - - $.jNotify = { - sequence : 0, - - defaults: { - /** VARS - OPTIONS **/ - autoHide : true, // Notify box auto-close after 'TimeShown' ms ? - clickOverlay : false, // if 'clickOverlay' = false, close the notice box on the overlay click ? - MinWidth : 200, // min-width CSS property - TimeShown : 1500, // Box shown during 'TimeShown' ms - ShowTimeEffect : 200, // duration of the Show Effect - HideTimeEffect : 200, // duration of the Hide effect - LongTrip : 15, // in pixel, length of the move effect when show and hide - HorizontalPosition : 'right', // left, center, right - VerticalPosition : 'bottom', // top, center, bottom - ShowOverlay : true, // show overlay behind the notice ? - ColorOverlay : '#000', // color of the overlay - OpacityOverlay : 0.3, // opacity of the overlay - - /** METHODS - OPTIONS **/ - onClosed : null, - onCompleted : null - }, - - overlay : [], // Empty overlay - div : null, //Empty div - - /*****************/ - /** Init Method **/ - /*****************/ - init:function(msg, options, id) { - this.opts = $.extend({}, this.defaults, options); - - /** Box **/ - if($("#"+id).length == 0) - this.div = this._construct(id, msg); - - // Width of the Brower - WidthDoc = parseInt($(window).width()); - HeightDoc = parseInt($(window).height()); - - // Scroll Position - ScrollTop = parseInt($(window).scrollTop()); - ScrollLeft = parseInt($(window).scrollLeft()); - - // Position of the jNotify Box - posTop = this.vPos(this.opts.VerticalPosition); - posLeft = this.hPos(this.opts.HorizontalPosition); - - // Show the jNotify Box - if(this.opts.ShowOverlay && this.overlay.length == 0) - this._showOverlay(this.div); - - this._show(msg); - return this; - }, - - /*******************/ - /** Construct DOM **/ - /*******************/ - _construct:function(id, msg) { - this.div = - $('<div id="'+id+'"/>') - .css({opacity : 0,minWidth : this.opts.MinWidth}) - .html(msg) - .appendTo('body'); - return this.div; - }, - - /**********************/ - /** Postions Methods **/ - /**********************/ - vPos:function(pos) { - switch(pos) { - case 'top': - var vPos = ScrollTop + parseInt(this.div.outerHeight(true)/2); - break; - case 'center': - var vPos = ScrollTop + (HeightDoc/2) - (parseInt(this.div.outerHeight(true))/2); - break; - case 'bottom': - var vPos = ScrollTop + HeightDoc - parseInt(this.div.outerHeight(true)); - break; - } - return vPos; - }, - - hPos:function(pos) { - switch(pos) { - case 'left': - var hPos = ScrollLeft; - break; - case 'center': - var hPos = ScrollLeft + (WidthDoc/2) - (parseInt(this.div.outerWidth(true))/2); - break; - case 'right': - var hPos = ScrollLeft + WidthDoc - parseInt(this.div.outerWidth(true)); - break; - } - return hPos; - }, - - /*********************/ - /** Show Div Method **/ - /*********************/ - _show:function(msg) { - var opts = this.opts; - this.div - .css({ - top: posTop, - left : posLeft - }); - switch (opts.VerticalPosition) { - case 'top': - this.div.animate({ - top: posTop + opts.LongTrip, - opacity:1 - },opts.ShowTimeEffect,function(){ - if(opts.onCompleted) opts.onCompleted(); - }); - if(opts.autoHide) - this._close(); - else - this.div.css('cursor','pointer').click(function(e){ - // $.jNotify._close(); - }); - break; - case 'center': - this.div.animate({ - opacity:1 - },opts.ShowTimeEffect,function(){ - if(opts.onCompleted) opts.onCompleted(); - }); - if(opts.autoHide) - this._close(); - else - this.div.css('cursor','pointer').click(function(e){ - // $.jNotify._close(); - }); - break; - case 'bottom' : - this.div.animate({ - top: posTop - opts.LongTrip, - opacity:1 - },opts.ShowTimeEffect,function(){ - if(opts.onCompleted) opts.onCompleted(); - }); - if(opts.autoHide) - this._close(); - else - this.div.css('cursor','pointer').click(function(e){ - // $.jNotify._close(); - }); - break; - } - }, - - _showOverlay:function(el){ - var opts = this.opts; - this.overlay = - $('<div>') - .css({ - backgroundColor : opts.ColorOverlay, - opacity: opts.OpacityOverlay - }) - .appendTo('body') - .show(); - - if(opts.clickOverlay) - this.overlay.click(function(e){ - e.preventDefault(); - opts.TimeShown = 0; - // $.jNotify._close(); - }); - }, - - - _close:function(){ - var opts = this.opts; - var overlay = this.overlay; - switch (opts.VerticalPosition) { - case 'top': - if(!opts.autoHide) - opts.TimeShown = 0; - this.div.stop(true, true).delay(opts.TimeShown).animate({ - top: posTop-opts.LongTrip, - opacity:0 - },opts.HideTimeEffect,function(){ - $(this).remove(); - if(opts.ShowOverlay && overlay.length > 0) - overlay.remove(); - if(opts.onClosed) opts.onClosed(); - }); - break; - case 'center': - if(!opts.autoHide) - opts.TimeShown = 0; - this.div.stop(true, true).delay(opts.TimeShown).animate({ - opacity:0 - },opts.HideTimeEffect,function(){ - $(this).remove(); - if(opts.ShowOverlay && overlay.length > 0) - overlay.remove(); - if(opts.onClosed) opts.onClosed(); - }); - break; - case 'bottom' : - if(!opts.autoHide) - opts.TimeShown = 0; - this.div.stop(true, true).delay(opts.TimeShown).animate({ - top: posTop+opts.LongTrip, - opacity:0 - },opts.HideTimeEffect,function(){ - $(this).remove(); - if(opts.ShowOverlay && overlay.length > 0) - overlay.remove(); - if(opts.onClosed) opts.onClosed(); - }); - break; - } - } - }; - - /** Init method **/ - jNotify = function(msg,options) { - var jnotify = $.extend({}, $.jNotify); - return jnotify.init(msg,options,'jNotify'); - }; - - jNotifyImage = function(msg,options) { - var jnotify = $.extend({}, $.jNotify); - return jnotify.init(msg,options,'jNotifyImage'); - }; - - jSuccess = function(msg,options) { - var jnotify = $.extend({}, $.jNotify); - return jnotify.init(msg,options,'jSuccess'); - }; - - jError = function(msg,options) { - var jnotify = $.extend({}, $.jNotify); - return jnotify.init(msg,options,'jError'); - }; +/************************************************************************ +************************************************************************* +@Name : jNotify - jQuery Plugin +@Revison : 2.1 +@Date : 01/2011 +@Author: ALPIXEL - (www.myjqueryplugins.com - www.alpixel.fr) +@Support: FF, IE7, IE8, MAC Firefox, MAC Safari +@License : Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php + +************************************************************************** +*************************************************************************/ +(function($){ + + $.jNotify = { + sequence : 0, + + defaults: { + /** VARS - OPTIONS **/ + autoHide : true, // Notify box auto-close after 'TimeShown' ms ? + clickOverlay : false, // if 'clickOverlay' = false, close the notice box on the overlay click ? + MinWidth : 200, // min-width CSS property + TimeShown : 1500, // Box shown during 'TimeShown' ms + ShowTimeEffect : 200, // duration of the Show Effect + HideTimeEffect : 200, // duration of the Hide effect + LongTrip : 15, // in pixel, length of the move effect when show and hide + HorizontalPosition : 'right', // left, center, right + VerticalPosition : 'bottom', // top, center, bottom + ShowOverlay : true, // show overlay behind the notice ? + ColorOverlay : '#000', // color of the overlay + OpacityOverlay : 0.3, // opacity of the overlay + + /** METHODS - OPTIONS **/ + onClosed : null, + onCompleted : null + }, + + overlay : [], // Empty overlay + div : null, //Empty div + + /*****************/ + /** Init Method **/ + /*****************/ + init:function(msg, options, id) { + this.opts = $.extend({}, this.defaults, options); + + /** Box **/ + if($("#"+id).length == 0) + this.div = this._construct(id, msg); + + // Width of the Brower + WidthDoc = parseInt($(window).width()); + HeightDoc = parseInt($(window).height()); + + // Scroll Position + ScrollTop = parseInt($(window).scrollTop()); + ScrollLeft = parseInt($(window).scrollLeft()); + + // Position of the jNotify Box + posTop = this.vPos(this.opts.VerticalPosition); + posLeft = this.hPos(this.opts.HorizontalPosition); + + // Show the jNotify Box + if(this.opts.ShowOverlay && this.overlay.length == 0) + this._showOverlay(this.div); + + this._show(msg); + return this; + }, + + /*******************/ + /** Construct DOM **/ + /*******************/ + _construct:function(id, msg) { + this.div = + $('<div id="'+id+'"/>') + .css({opacity : 0,minWidth : this.opts.MinWidth}) + .html(msg) + .appendTo('body'); + return this.div; + }, + + /**********************/ + /** Postions Methods **/ + /**********************/ + vPos:function(pos) { + switch(pos) { + case 'top': + var vPos = ScrollTop + parseInt(this.div.outerHeight(true)/2); + break; + case 'center': + var vPos = ScrollTop + (HeightDoc/2) - (parseInt(this.div.outerHeight(true))/2); + break; + case 'bottom': + var vPos = ScrollTop + HeightDoc - parseInt(this.div.outerHeight(true)); + break; + } + return vPos; + }, + + hPos:function(pos) { + switch(pos) { + case 'left': + var hPos = ScrollLeft; + break; + case 'center': + var hPos = ScrollLeft + (WidthDoc/2) - (parseInt(this.div.outerWidth(true))/2); + break; + case 'right': + var hPos = ScrollLeft + WidthDoc - parseInt(this.div.outerWidth(true)); + break; + } + return hPos; + }, + + /*********************/ + /** Show Div Method **/ + /*********************/ + _show:function(msg) { + var opts = this.opts; + this.div + .css({ + top: posTop, + left : posLeft + }); + switch (opts.VerticalPosition) { + case 'top': + this.div.animate({ + top: posTop + opts.LongTrip, + opacity:1 + },opts.ShowTimeEffect,function(){ + if(opts.onCompleted) opts.onCompleted(); + }); + if(opts.autoHide) + this._close(); + else + this.div.css('cursor','pointer').click(function(e){ + // $.jNotify._close(); + }); + break; + case 'center': + this.div.animate({ + opacity:1 + },opts.ShowTimeEffect,function(){ + if(opts.onCompleted) opts.onCompleted(); + }); + if(opts.autoHide) + this._close(); + else + this.div.css('cursor','pointer').click(function(e){ + // $.jNotify._close(); + }); + break; + case 'bottom' : + this.div.animate({ + top: posTop - opts.LongTrip, + opacity:1 + },opts.ShowTimeEffect,function(){ + if(opts.onCompleted) opts.onCompleted(); + }); + if(opts.autoHide) + this._close(); + else + this.div.css('cursor','pointer').click(function(e){ + // $.jNotify._close(); + }); + break; + } + }, + + _showOverlay:function(el){ + var opts = this.opts; + this.overlay = + $('<div>') + .css({ + backgroundColor : opts.ColorOverlay, + opacity: opts.OpacityOverlay + }) + .appendTo('body') + .show(); + + if(opts.clickOverlay) + this.overlay.click(function(e){ + e.preventDefault(); + opts.TimeShown = 0; + // $.jNotify._close(); + }); + }, + + + _close:function(){ + var opts = this.opts; + var overlay = this.overlay; + switch (opts.VerticalPosition) { + case 'top': + if(!opts.autoHide) + opts.TimeShown = 0; + this.div.stop(true, true).delay(opts.TimeShown).animate({ + top: posTop-opts.LongTrip, + opacity:0 + },opts.HideTimeEffect,function(){ + $(this).remove(); + if(opts.ShowOverlay && overlay.length > 0) + overlay.remove(); + if(opts.onClosed) opts.onClosed(); + }); + break; + case 'center': + if(!opts.autoHide) + opts.TimeShown = 0; + this.div.stop(true, true).delay(opts.TimeShown).animate({ + opacity:0 + },opts.HideTimeEffect,function(){ + $(this).remove(); + if(opts.ShowOverlay && overlay.length > 0) + overlay.remove(); + if(opts.onClosed) opts.onClosed(); + }); + break; + case 'bottom' : + if(!opts.autoHide) + opts.TimeShown = 0; + this.div.stop(true, true).delay(opts.TimeShown).animate({ + top: posTop+opts.LongTrip, + opacity:0 + },opts.HideTimeEffect,function(){ + $(this).remove(); + if(opts.ShowOverlay && overlay.length > 0) + overlay.remove(); + if(opts.onClosed) opts.onClosed(); + }); + break; + } + } + }; + + /** Init method **/ + jNotify = function(msg,options) { + var jnotify = $.extend({}, $.jNotify); + return jnotify.init(msg,options,'jNotify'); + }; + + jNotifyImage = function(msg,options) { + var jnotify = $.extend({}, $.jNotify); + return jnotify.init(msg,options,'jNotifyImage'); + }; + + jSuccess = function(msg,options) { + var jnotify = $.extend({}, $.jNotify); + return jnotify.init(msg,options,'jSuccess'); + }; + + jError = function(msg,options) { + var jnotify = $.extend({}, $.jNotify); + return jnotify.init(msg,options,'jError'); + }; })(jQuery); \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2-bootstrap.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/css/select2.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/af.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/af.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/af.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/af.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ar.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ar.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ar.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ar.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/az.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/az.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/az.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/az.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bg.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bg.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bg.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bg.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bn.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bn.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bn.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bn.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bs.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bs.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/bs.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ca.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ca.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ca.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ca.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/cs.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/cs.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/cs.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/cs.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/da.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/da.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/da.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/da.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/de.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/de.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/de.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/de.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/dsb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/dsb.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/dsb.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/dsb.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/el.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/el.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/el.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/el.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/en.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/en.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/en.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/en.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/es.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/es.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/es.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/es.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/et.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/et.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/et.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/et.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/eu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/eu.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/eu.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/eu.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fa.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fa.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fa.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fa.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fi.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fi.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fi.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fr.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fr.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/fr.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/gl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/gl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/gl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/gl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/he.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/he.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/he.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/he.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hi.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hi.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hi.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hr.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hr.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hr.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hsb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hsb.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hsb.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hsb.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hu.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hu.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hu.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hu.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hy.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hy.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hy.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/hy.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/id.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/id.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/id.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/id.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/is.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/is.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/is.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/is.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/it.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/it.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/it.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/it.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ja.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ja.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ja.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ja.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ka.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ka.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ka.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ka.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/km.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/km.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/km.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/km.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ko.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ko.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ko.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ko.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lt.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lt.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lt.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lv.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lv.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lv.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/lv.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/mk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/mk.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/mk.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/mk.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ms.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ms.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ms.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ms.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nb.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nb.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nb.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nb.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ne.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ne.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ne.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ne.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/nl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ps.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ps.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ps.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ps.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt-BR.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt-BR.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt-BR.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt-BR.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/pt.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ro.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ro.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ro.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ro.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ru.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ru.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ru.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/ru.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sk.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sk.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sk.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js similarity index 99% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js index 71e9b13ba366aaa5f38c4f7ef30c79cb0ee8becc..ad367b1aa4debed388d3e9265d0196a0cec85a0f 100755 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sq.js @@ -1,3 +1,3 @@ -/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */ - +/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */ + (function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;return e.define("select2/i18n/sq",[],function(){return{errorLoading:function(){return"Rezultatet nuk mund të ngarkoheshin."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Të lutem fshi "+t+" karakter";return t!=1&&(n+="e"),n},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Të lutem shkruaj "+t+" ose më shumë karaktere";return n},loadingMore:function(){return"Duke ngarkuar më shumë rezultate…"},maximumSelected:function(e){var t="Mund të zgjedhësh vetëm "+e.maximum+" element";return e.maximum!=1&&(t+="e"),t},noResults:function(){return"Nuk u gjet asnjë rezultat"},searching:function(){return"Duke kërkuar…"},removeAllItems:function(){return"Hiq të gjitha sendet"}}}),{define:e.define,require:e.require}})(); \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr-Cyrl.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr-Cyrl.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr-Cyrl.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr-Cyrl.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sr.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sv.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sv.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sv.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/sv.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/th.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/th.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/th.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/th.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tk.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tk.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tk.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tr.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tr.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tr.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/tr.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/uk.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/uk.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/uk.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/uk.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/vi.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/vi.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/vi.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/vi.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-CN.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-CN.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-CN.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-CN.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-TW.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-TW.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-TW.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/i18n/zh-TW.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.full.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-select2/js/select2.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-light.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-light.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-light.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-light.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-noir.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-noir.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-noir.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-noir.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-punk.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-punk.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-punk.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-punk.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-shadow.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-shadow.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-shadow.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/themes/tooltipster-shadow.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css similarity index 98% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css index 742b3651eb5070986fce54b66811237c38447759..9e140476b32cf8957654a208a07b4981679e8bb0 100755 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.css @@ -229,160 +229,160 @@ .tooltipster-update-scale { animation: tooltipster-scaling 600ms; } - -/** - * DEFAULT STYLE OF THE SIDETIP PLUGIN - * - * All styles are "namespaced" with .tooltipster-sidetip to prevent - * conflicts between plugins. - */ - -/* .tooltipster-box */ - -.tooltipster-sidetip .tooltipster-box { - background: #565656; - border: 2px solid black; - border-radius: 4px; -} - -.tooltipster-sidetip.tooltipster-bottom .tooltipster-box { - margin-top: 8px; -} - -.tooltipster-sidetip.tooltipster-left .tooltipster-box { - margin-right: 8px; -} - -.tooltipster-sidetip.tooltipster-right .tooltipster-box { - margin-left: 8px; -} - -.tooltipster-sidetip.tooltipster-top .tooltipster-box { - margin-bottom: 8px; -} - -/* .tooltipster-content */ - -.tooltipster-sidetip .tooltipster-content { - color: white; - line-height: 18px; - padding: 6px 14px; -} - -/* .tooltipster-arrow : will keep only the zone of .tooltipster-arrow-uncropped that -corresponds to the arrow we want to display */ - -.tooltipster-sidetip .tooltipster-arrow { - overflow: hidden; - position: absolute; -} - -.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow { - height: 10px; - /* half the width, for centering */ - margin-left: -10px; - top: 0; - width: 20px; -} - -.tooltipster-sidetip.tooltipster-left .tooltipster-arrow { - height: 20px; - margin-top: -10px; - right: 0; - /* top 0 to keep the arrow from overflowing .tooltipster-base when it has not - been positioned yet */ - top: 0; - width: 10px; -} - -.tooltipster-sidetip.tooltipster-right .tooltipster-arrow { - height: 20px; - margin-top: -10px; - left: 0; - /* same as .tooltipster-left .tooltipster-arrow */ - top: 0; - width: 10px; -} - -.tooltipster-sidetip.tooltipster-top .tooltipster-arrow { - bottom: 0; - height: 10px; - margin-left: -10px; - width: 20px; -} - -/* common rules between .tooltipster-arrow-background and .tooltipster-arrow-border */ - -.tooltipster-sidetip .tooltipster-arrow-background, .tooltipster-sidetip .tooltipster-arrow-border { - height: 0; - position: absolute; - width: 0; -} - -/* .tooltipster-arrow-background */ - -.tooltipster-sidetip .tooltipster-arrow-background { - border: 10px solid transparent; -} - -.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background { - border-bottom-color: #565656; - left: 0px; - top: 3px; -} - -.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background { - border-left-color: #565656; - left: -3px; - top: 0px; -} - -.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background { - border-right-color: #565656; - left: 3px; - top: 0px; -} - -.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background { - border-top-color: #565656; - left: 0px; - top: -3px; -} - -/* .tooltipster-arrow-border */ - -.tooltipster-sidetip .tooltipster-arrow-border { - border: 10px solid transparent; - left: 0; - top: 0; -} - -.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border { - border-bottom-color: black; -} - -.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border { - border-left-color: black; -} - -.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border { - border-right-color: black; -} - -.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border { - border-top-color: black; -} - -/* tooltipster-arrow-uncropped */ - -.tooltipster-sidetip .tooltipster-arrow-uncropped { - position: relative; -} - -.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped { - top: -10px; -} - -.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped { - left: -10px; -} + +/** + * DEFAULT STYLE OF THE SIDETIP PLUGIN + * + * All styles are "namespaced" with .tooltipster-sidetip to prevent + * conflicts between plugins. + */ + +/* .tooltipster-box */ + +.tooltipster-sidetip .tooltipster-box { + background: #565656; + border: 2px solid black; + border-radius: 4px; +} + +.tooltipster-sidetip.tooltipster-bottom .tooltipster-box { + margin-top: 8px; +} + +.tooltipster-sidetip.tooltipster-left .tooltipster-box { + margin-right: 8px; +} + +.tooltipster-sidetip.tooltipster-right .tooltipster-box { + margin-left: 8px; +} + +.tooltipster-sidetip.tooltipster-top .tooltipster-box { + margin-bottom: 8px; +} + +/* .tooltipster-content */ + +.tooltipster-sidetip .tooltipster-content { + color: white; + line-height: 18px; + padding: 6px 14px; +} + +/* .tooltipster-arrow : will keep only the zone of .tooltipster-arrow-uncropped that +corresponds to the arrow we want to display */ + +.tooltipster-sidetip .tooltipster-arrow { + overflow: hidden; + position: absolute; +} + +.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow { + height: 10px; + /* half the width, for centering */ + margin-left: -10px; + top: 0; + width: 20px; +} + +.tooltipster-sidetip.tooltipster-left .tooltipster-arrow { + height: 20px; + margin-top: -10px; + right: 0; + /* top 0 to keep the arrow from overflowing .tooltipster-base when it has not + been positioned yet */ + top: 0; + width: 10px; +} + +.tooltipster-sidetip.tooltipster-right .tooltipster-arrow { + height: 20px; + margin-top: -10px; + left: 0; + /* same as .tooltipster-left .tooltipster-arrow */ + top: 0; + width: 10px; +} + +.tooltipster-sidetip.tooltipster-top .tooltipster-arrow { + bottom: 0; + height: 10px; + margin-left: -10px; + width: 20px; +} + +/* common rules between .tooltipster-arrow-background and .tooltipster-arrow-border */ + +.tooltipster-sidetip .tooltipster-arrow-background, .tooltipster-sidetip .tooltipster-arrow-border { + height: 0; + position: absolute; + width: 0; +} + +/* .tooltipster-arrow-background */ + +.tooltipster-sidetip .tooltipster-arrow-background { + border: 10px solid transparent; +} + +.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background { + border-bottom-color: #565656; + left: 0px; + top: 3px; +} + +.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background { + border-left-color: #565656; + left: -3px; + top: 0px; +} + +.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background { + border-right-color: #565656; + left: 3px; + top: 0px; +} + +.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background { + border-top-color: #565656; + left: 0px; + top: -3px; +} + +/* .tooltipster-arrow-border */ + +.tooltipster-sidetip .tooltipster-arrow-border { + border: 10px solid transparent; + left: 0; + top: 0; +} + +.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border { + border-bottom-color: black; +} + +.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border { + border-left-color: black; +} + +.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border { + border-right-color: black; +} + +.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border { + border-top-color: black; +} + +/* tooltipster-arrow-uncropped */ + +.tooltipster-sidetip .tooltipster-arrow-uncropped { + position: relative; +} + +.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped { + top: -10px; +} + +.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped { + left: -10px; +} diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.bundle.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/css/tooltipster.main.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/plugins/tooltipster/SVG/tooltipster-SVG.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js similarity index 99% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js index 954aa239063d66e2700aaaeab4c72d94ccad171f..cf1758ee700c9c3266123bdc716d200d57a3871e 100755 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.js @@ -1,9 +1,9 @@ -/** - * tooltipster http://iamceege.github.io/tooltipster/ - * A rockin' custom tooltip jQuery plugin - * Developed by Caleb Jacob and Louis Ameline - * MIT license - */ +/** + * tooltipster http://iamceege.github.io/tooltipster/ + * A rockin' custom tooltip jQuery plugin + * Developed by Caleb Jacob and Louis Ameline + * MIT license + */ (function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module unless amdModuleId is set @@ -3340,7 +3340,7 @@ function transitionSupport() { // we'll return jQuery for plugins not to have to declare it as a dependency, // but it's done by a build task since it should be included only once at the -// end when we concatenate the main file with a plugin +// end when we concatenate the main file with a plugin // sideTip is Tooltipster's default plugin. // This file will be UMDified by a build task. diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.bundle.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js similarity index 99% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js index a37a1c9af9b89130d925e9d2b23512492236a156..ba82583fb09b456db08d2dfe8855a4537883ac8b 100755 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.js @@ -1,9 +1,9 @@ -/** - * tooltipster http://iamceege.github.io/tooltipster/ - * A rockin' custom tooltip jQuery plugin - * Developed by Caleb Jacob and Louis Ameline - * MIT license - */ +/** + * tooltipster http://iamceege.github.io/tooltipster/ + * A rockin' custom tooltip jQuery plugin + * Developed by Caleb Jacob and Louis Ameline + * MIT license + */ (function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module unless amdModuleId is set diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tooltipster/js/tooltipster.main.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js similarity index 99% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js index b1c4edda98b1a5013886e0819c62c759237c88ab..1390398d1049b6dc019cd17deea3380bbe231608 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-tsv/js/jquery.tsv-0.96.min.js @@ -1,48 +1,48 @@ - -(function($){$.tsv={version:"0.96-git",options:{formatValue:null,parseValue:null,arrayToObject:null,objectToArray:null,includeHeader:true,stripHeader:false,startRownum:0,___defaults_applied:true,extend:$.extend,syntax:{parserKernel:tsvParserKernel,lexer:/[\t\r\n]|[^\t\r\n]+/g,valueSeparator:"\t",rowSeparator:"\n",formatterKernel:simpleFormatterKernel}},toArray:function toArray(line,options,rownum){var opts=tsvOptions(options);var result=parser(line,true,opts,rownum);switch(result.length){case 0:return[];case 1:return result[0];default:throw new Error("Parser returned too many values.");}},fromArray:function fromArray(array,options,rownum){var opts=tsvOptions(options);opts.includeHeader=(!options||options.includesHeader===undefined)?false:options.includesHeader;return $.tsv.fromArrays([array],opts,rownum);},toArrays:function toArrays(tsv,options){var opts=tsvOptions(options);var array=parser(tsv,false,opts);if(opts.stripHeader){array[-1]=array.shift();} -return array;},fromArrays:function fromArrays(array,options,startRownum){var opts=tsvOptions(options);var rownum=startRownum||opts.startRownum||0;var syntax=opts.syntax;var cols=tsvColumns(opts,array[0]);syntax.formatterKernel("begin");function doHeaderValue(value,col){syntax.formatterKernel("value",value,col,tsvColumn(syntax,col),-1);} -if(cols&&opts.includeHeader){syntax.formatterKernel("beginHeader");cols.forEach(doHeaderValue);syntax.formatterKernel("endHeader");} -var header_offset=0;function doRow(rowData,rowIndex){if(rowData===cols){header_offset=-1;}else{var row=rownum+rowIndex+header_offset;function doValue(value,col){syntax.formatterKernel("value",value,col,tsvColumn(opts,col),row);} -syntax.formatterKernel("beginRow");rowData.forEach(doValue);syntax.formatterKernel("endRow");}} -array.forEach(doRow);return syntax.formatterKernel("end");},arrayToObject:function arrayToObject(row,options,rownum){var opts=tsvOptions(options);rownum=rownum||0;var columns=tsvColumns(opts,row);if(opts.arrayToObject){return opts.arrayToObject(row,opts,rownum);} -var dict={};for(var j=0;j<columns.length;j++){dict[columns[j]]=row[j];} -return dict;},arraysToObjects:function arraysToObjects(array,options){var opts=tsvOptions(options);if(!opts.columns){opts.columns=array.shift();} -var rownum=opts.startRownum||0;return array.map(function convert(row){return $.tsv.arrayToObject(row,opts,rownum++);});},toObjects:function toObjects(tsv,options){var opts=tsvOptions(options);return $.tsv.arraysToObjects($.tsv.toArrays(tsv,opts),opts);},objectToArray:function objectToArray(obj,options,rownum){var opts=tsvOptions(options);var columns=tsvColumns(opts,obj);rownum=rownum||0;if(opts.objectToArray){return opts.objectToArray(obj,opts,rownum);} -var row=[];for(var j=0;j<columns.length;j++){row.push(obj[columns[j]]);} -return row;},objectsToArrays:function objectsToArrays(array,options){var opts=tsvOptions(options);var rownum=options.startRownum;var result=array.map(function convert(obj){return $.tsv.objectToArray(obj,opts,rownum++);});return result;},fromObject:function fromObject(object,options){var opts=tsvOptions(options);return $.tsv.fromArray($.tsv.objectToArray(object,opts),opts);},fromObjects:function fromObjects(array,options){var opts=tsvOptions(options);var first=array.length?array[0]:{};tsvColumns(opts,first);return $.tsv.fromArrays($.tsv.objectsToArrays(array,opts),opts);},extend:$.extend,test:{formatValue:formatValue,parseValue:parseValue}};function parseValue(value,options,colnum,colname,rownum){var opts=tsvOptions(options);if(opts.parseValue){return opts.parseValue(value,opts,colnum,colname,rownum);} -return value;} -function formatValue(value,options,rownum,colnum,colname,rownum){var opts=tsvOptions(options);if(opts.formatValue){return opts.formatValue(value,opts,colnum,colname,rownum);} -return String(value);} -function copyOptions(options){return $.extend({__copy:true},options);} -function tsvOptions(options){if(options){if(options.__defaults_applied){return options;} -return $.extend(copyOptions($.tsv.options),options);} -return copyOptions($.tsv.options);} -function tsvColumn(options,index){var opts=tsvOptions(options);return String(opts.columns?opts.columns[index]:index);} -function tsvColumns(options,top){if(options.columns){return options.columns;}else{var cols=Object.keys(top||{}).sort();options.columns=cols;return cols;}} -function parser(str,single,options,startRow){var opts=tsvOptions(options);var colIdx=0;var rowIdx=startRow||0;function endOfValue(value){value=(value!==undefined)?value:this.value;value=parseValue(value,opts,colIdx,tsvColumn(opts,colIdx),rowIdx);this.row.push(value);this.value="";colIdx++;} -function endOfRow(row){row=(row!==undefined)?row:this.row;this.array.push(row);this.row=[];if(this.single){this.array=this.endOfTable();} -rowIdx++;colIdx=0;} -function endOfHeader(headers){this.headers=(headers||this.headers);} -function endOfTable(result){result=(result!==undefined)?result:this.array;if(!this.done){this.done=true;if(opts.finalize){return opts.finalize.call(this,result);}} -return result;} -var state={options:opts,single:single,state:-1,value:"",row:[],array:[],headers:[],done:false,error:false,endOfValue:endOfValue,endOfRow:endOfRow,endOfTable:endOfTable,endOfHeader:endOfHeader};if(opts.syntax.initializeParser){opts.syntax.initializeParser.call(state,state);} -opts.syntax.lexer.lastIndex=0;str.replace(opts.syntax.lexer,function transition(m0,m1){if(!state.done){opts.syntax.parserKernel.apply(state,arguments);} -if(state.error){throw new Error((typeof error==="string")?state.error:"parsing error");} -return"";});if(!state.done){opts.syntax.parserKernel.apply(state,[]);} -return state.endOfTable();} -function tsvParserKernel(m){switch(m){case"\n":case undefined:if(!this.valueSeen){this.endOfValue("");} -this.endOfRow();this.valueSeen=false;break;case"\r":break;case"\t":if(!this.valueSeen){this.endOfValue("");} -this.valueSeen=false;break;default:this.endOfValue(m);this.valueSeen=true;}} -function simpleFormatterKernel(event,param){switch(event){case"begin":this.valueSeen=false;this.rowSeen=false;this.output=[];break;case"beginRow":case"beginHeader":if(this.rowSeen){this.output.push(this.rowSeparator);} -this.valueSeen=false;break;case"value":if(this.valueSeen){this.output.push(this.valueSeparator);} -this.output.push(param);this.valueSeen=true;break;case"endRow":case"endHeader":this.rowSeen=true;break;case"end":var result=this.output.join("");delete this.output;return result;default:throw new Error("Unknown formatter event: "+event);}} -$.tsv.parseRow=$.tsv.toArray;$.tsv.parseRows=$.tsv.toArrays;$.tsv.parseObject=$.tsv.toObject;$.tsv.parseObjects=$.tsv.toObjects;$.tsv.formatRow=$.tsv.fromArray;$.tsv.formatRows=$.tsv.fromArrays;$.tsv.formatObject=$.tsv.fromObject;$.tsv.formatObjects=$.tsv.fromObjects;if(!$.csv){$.csv=$.tsv.extend({},{toArrays:function csvToArrays(csv,options){var opts=tsvOptions(options);var state=0;var value="";var result=[];var row=[];function endOfCell(){row.push(value);value="";state=0;} -function endOfRow(){row.push(value);result.push(row);row=[];state=0;} -s.replace(/(\"|,|\n|\r|[^\",\r\n]+)/gm,function(m0,m1){switch(state){case 0:if(m1==="\""){state=1;}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(/^\r$/.test(m1)){}else{if(value){throw new Error("Internal error: we have a value already.");} -value=m1;state=3;} -break;case 1:if(m1==="\""){state=2;}else if((m1===",")||(m1==="\n")||(m1==="\r")){value+=m1;state=1;}else{value+=m1;state=1;} -break;case 2:if(m1==="\""){value+=m1;state=1;}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(m1==="\r"){}else{throw new Error("Illegal state");} -break;case 3:if(m1==="\""){throw new Error("Unquoted delimiter in string");}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(m1==="\r"){}else{throw new Error("Two values, no separator?");} -break;default:throw new Error("Unknown state");} -return"";});if(state!=0){endOfRow();} + +(function($){$.tsv={version:"0.96-git",options:{formatValue:null,parseValue:null,arrayToObject:null,objectToArray:null,includeHeader:true,stripHeader:false,startRownum:0,___defaults_applied:true,extend:$.extend,syntax:{parserKernel:tsvParserKernel,lexer:/[\t\r\n]|[^\t\r\n]+/g,valueSeparator:"\t",rowSeparator:"\n",formatterKernel:simpleFormatterKernel}},toArray:function toArray(line,options,rownum){var opts=tsvOptions(options);var result=parser(line,true,opts,rownum);switch(result.length){case 0:return[];case 1:return result[0];default:throw new Error("Parser returned too many values.");}},fromArray:function fromArray(array,options,rownum){var opts=tsvOptions(options);opts.includeHeader=(!options||options.includesHeader===undefined)?false:options.includesHeader;return $.tsv.fromArrays([array],opts,rownum);},toArrays:function toArrays(tsv,options){var opts=tsvOptions(options);var array=parser(tsv,false,opts);if(opts.stripHeader){array[-1]=array.shift();} +return array;},fromArrays:function fromArrays(array,options,startRownum){var opts=tsvOptions(options);var rownum=startRownum||opts.startRownum||0;var syntax=opts.syntax;var cols=tsvColumns(opts,array[0]);syntax.formatterKernel("begin");function doHeaderValue(value,col){syntax.formatterKernel("value",value,col,tsvColumn(syntax,col),-1);} +if(cols&&opts.includeHeader){syntax.formatterKernel("beginHeader");cols.forEach(doHeaderValue);syntax.formatterKernel("endHeader");} +var header_offset=0;function doRow(rowData,rowIndex){if(rowData===cols){header_offset=-1;}else{var row=rownum+rowIndex+header_offset;function doValue(value,col){syntax.formatterKernel("value",value,col,tsvColumn(opts,col),row);} +syntax.formatterKernel("beginRow");rowData.forEach(doValue);syntax.formatterKernel("endRow");}} +array.forEach(doRow);return syntax.formatterKernel("end");},arrayToObject:function arrayToObject(row,options,rownum){var opts=tsvOptions(options);rownum=rownum||0;var columns=tsvColumns(opts,row);if(opts.arrayToObject){return opts.arrayToObject(row,opts,rownum);} +var dict={};for(var j=0;j<columns.length;j++){dict[columns[j]]=row[j];} +return dict;},arraysToObjects:function arraysToObjects(array,options){var opts=tsvOptions(options);if(!opts.columns){opts.columns=array.shift();} +var rownum=opts.startRownum||0;return array.map(function convert(row){return $.tsv.arrayToObject(row,opts,rownum++);});},toObjects:function toObjects(tsv,options){var opts=tsvOptions(options);return $.tsv.arraysToObjects($.tsv.toArrays(tsv,opts),opts);},objectToArray:function objectToArray(obj,options,rownum){var opts=tsvOptions(options);var columns=tsvColumns(opts,obj);rownum=rownum||0;if(opts.objectToArray){return opts.objectToArray(obj,opts,rownum);} +var row=[];for(var j=0;j<columns.length;j++){row.push(obj[columns[j]]);} +return row;},objectsToArrays:function objectsToArrays(array,options){var opts=tsvOptions(options);var rownum=options.startRownum;var result=array.map(function convert(obj){return $.tsv.objectToArray(obj,opts,rownum++);});return result;},fromObject:function fromObject(object,options){var opts=tsvOptions(options);return $.tsv.fromArray($.tsv.objectToArray(object,opts),opts);},fromObjects:function fromObjects(array,options){var opts=tsvOptions(options);var first=array.length?array[0]:{};tsvColumns(opts,first);return $.tsv.fromArrays($.tsv.objectsToArrays(array,opts),opts);},extend:$.extend,test:{formatValue:formatValue,parseValue:parseValue}};function parseValue(value,options,colnum,colname,rownum){var opts=tsvOptions(options);if(opts.parseValue){return opts.parseValue(value,opts,colnum,colname,rownum);} +return value;} +function formatValue(value,options,rownum,colnum,colname,rownum){var opts=tsvOptions(options);if(opts.formatValue){return opts.formatValue(value,opts,colnum,colname,rownum);} +return String(value);} +function copyOptions(options){return $.extend({__copy:true},options);} +function tsvOptions(options){if(options){if(options.__defaults_applied){return options;} +return $.extend(copyOptions($.tsv.options),options);} +return copyOptions($.tsv.options);} +function tsvColumn(options,index){var opts=tsvOptions(options);return String(opts.columns?opts.columns[index]:index);} +function tsvColumns(options,top){if(options.columns){return options.columns;}else{var cols=Object.keys(top||{}).sort();options.columns=cols;return cols;}} +function parser(str,single,options,startRow){var opts=tsvOptions(options);var colIdx=0;var rowIdx=startRow||0;function endOfValue(value){value=(value!==undefined)?value:this.value;value=parseValue(value,opts,colIdx,tsvColumn(opts,colIdx),rowIdx);this.row.push(value);this.value="";colIdx++;} +function endOfRow(row){row=(row!==undefined)?row:this.row;this.array.push(row);this.row=[];if(this.single){this.array=this.endOfTable();} +rowIdx++;colIdx=0;} +function endOfHeader(headers){this.headers=(headers||this.headers);} +function endOfTable(result){result=(result!==undefined)?result:this.array;if(!this.done){this.done=true;if(opts.finalize){return opts.finalize.call(this,result);}} +return result;} +var state={options:opts,single:single,state:-1,value:"",row:[],array:[],headers:[],done:false,error:false,endOfValue:endOfValue,endOfRow:endOfRow,endOfTable:endOfTable,endOfHeader:endOfHeader};if(opts.syntax.initializeParser){opts.syntax.initializeParser.call(state,state);} +opts.syntax.lexer.lastIndex=0;str.replace(opts.syntax.lexer,function transition(m0,m1){if(!state.done){opts.syntax.parserKernel.apply(state,arguments);} +if(state.error){throw new Error((typeof error==="string")?state.error:"parsing error");} +return"";});if(!state.done){opts.syntax.parserKernel.apply(state,[]);} +return state.endOfTable();} +function tsvParserKernel(m){switch(m){case"\n":case undefined:if(!this.valueSeen){this.endOfValue("");} +this.endOfRow();this.valueSeen=false;break;case"\r":break;case"\t":if(!this.valueSeen){this.endOfValue("");} +this.valueSeen=false;break;default:this.endOfValue(m);this.valueSeen=true;}} +function simpleFormatterKernel(event,param){switch(event){case"begin":this.valueSeen=false;this.rowSeen=false;this.output=[];break;case"beginRow":case"beginHeader":if(this.rowSeen){this.output.push(this.rowSeparator);} +this.valueSeen=false;break;case"value":if(this.valueSeen){this.output.push(this.valueSeparator);} +this.output.push(param);this.valueSeen=true;break;case"endRow":case"endHeader":this.rowSeen=true;break;case"end":var result=this.output.join("");delete this.output;return result;default:throw new Error("Unknown formatter event: "+event);}} +$.tsv.parseRow=$.tsv.toArray;$.tsv.parseRows=$.tsv.toArrays;$.tsv.parseObject=$.tsv.toObject;$.tsv.parseObjects=$.tsv.toObjects;$.tsv.formatRow=$.tsv.fromArray;$.tsv.formatRows=$.tsv.fromArrays;$.tsv.formatObject=$.tsv.fromObject;$.tsv.formatObjects=$.tsv.fromObjects;if(!$.csv){$.csv=$.tsv.extend({},{toArrays:function csvToArrays(csv,options){var opts=tsvOptions(options);var state=0;var value="";var result=[];var row=[];function endOfCell(){row.push(value);value="";state=0;} +function endOfRow(){row.push(value);result.push(row);row=[];state=0;} +s.replace(/(\"|,|\n|\r|[^\",\r\n]+)/gm,function(m0,m1){switch(state){case 0:if(m1==="\""){state=1;}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(/^\r$/.test(m1)){}else{if(value){throw new Error("Internal error: we have a value already.");} +value=m1;state=3;} +break;case 1:if(m1==="\""){state=2;}else if((m1===",")||(m1==="\n")||(m1==="\r")){value+=m1;state=1;}else{value+=m1;state=1;} +break;case 2:if(m1==="\""){value+=m1;state=1;}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(m1==="\r"){}else{throw new Error("Illegal state");} +break;case 3:if(m1==="\""){throw new Error("Unquoted delimiter in string");}else if(m1===","){endOfCell();}else if(m1==="\n"){endOfRow();}else if(m1==="\r"){}else{throw new Error("Two values, no separator?");} +break;default:throw new Error("Unknown state");} +return"";});if(state!=0){endOfRow();} return result;}});}})(jQuery); \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/external/jquery/jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/external/jquery/jquery.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/external/jquery/jquery.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/external/jquery/jquery.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_18_b81900_40x40.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_18_b81900_40x40.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_18_b81900_40x40.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_20_666666_40x40.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_20_666666_40x40.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_20_666666_40x40.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_diagonals-thick_20_666666_40x40.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_flat_10_000000_40x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_flat_10_000000_40x100.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_flat_10_000000_40x100.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_flat_10_000000_40x100.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_f6f6f6_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_f6f6f6_1x400.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_f6f6f6_1x400.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_f6f6f6_1x400.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_fdf5ce_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_fdf5ce_1x400.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_fdf5ce_1x400.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_100_fdf5ce_1x400.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_65_ffffff_1x400.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_65_ffffff_1x400.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_65_ffffff_1x400.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_glass_65_ffffff_1x400.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_gloss-wave_35_f6a828_500x100.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_gloss-wave_35_f6a828_500x100.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_gloss-wave_35_f6a828_500x100.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_100_eeeeee_1x100.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_100_eeeeee_1x100.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_100_eeeeee_1x100.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_75_ffe45c_1x100.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_75_ffe45c_1x100.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-bg_highlight-soft_75_ffe45c_1x100.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_222222_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_222222_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_222222_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_222222_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_228ef1_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_228ef1_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_228ef1_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_228ef1_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ef8c08_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ef8c08_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ef8c08_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ef8c08_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffd27a_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffd27a_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffd27a_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffd27a_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffffff_256x240.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffffff_256x240.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffffff_256x240.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/images/ui-icons_ffffff_256x240.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/index.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/index.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/index.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/index.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.structure.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.min.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.min.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.min.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery-ui/js/jquery-ui.theme.min.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/VERSION.txt diff --git a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/jquery/js/jquery.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js similarity index 99% rename from server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/jquery/js/jquery.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js index 16bb60874a82ee4b9dc89421e4b851a53ce30cab..0f60b7bd0d9c395e1748cc962810d2dee9bb9fc2 100644 --- a/server-application-server/source/java/ch/systemsx/cisd/openbis/public/resources/api/v3/lib/jquery/js/jquery.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery-1.11.3.min.js @@ -1,5 +1,5 @@ -/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; - -return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){ -return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m}); +/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){ +return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m}); diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery.cookie.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery.cookie.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery.cookie.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jquery/js/jquery.cookie.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/js/jspdf.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/js/jspdf.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/js/jspdf.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jspdf/js/jspdf.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css similarity index 99% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css index 5a438518d1142081ff28943b71f439cffe41ea15..f5a52c78569f293096f7b0843a24f573f0a4d265 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.css @@ -1,239 +1,239 @@ - -/** - * (c) jSuites Javascript Web Components - * - * Author: Paul Hodel <paul.hodel@gmail.com> - * Website: https://bossanova.uk/jsuites/ - * Description: Create amazing web based applications. - * - * MIT License - * - */ - -/** General **/ - -.jdragging { - opacity:0.2; - filter: alpha(opacity=20); -} - -.jupload { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7emlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMTItMzFUMjI6NDM6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDEtMDFUMjA6MDM6MjNaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0wMVQyMDowMzoyM1o8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowZmM3MWQxMi04NTBlLWNhNDUtOTMxOC1kYWIyOWFmYTJkODI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMTItMzFUMjI6NDM6MzBaPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk2MTA5Y2Y0LTEwM2ItNTc0Ny1hZWE3LWI5NDMxOWY0NWFkZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wMS0wMVQyMDowMjoyMFo8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTAxVDIwOjAzOjIzWjwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+tc8AsgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAGjUlEQVR42uycW2xURRjHf91SoEIBUQpYI8VSVBDExniLERNUJBpQVEDFqE1AEYkX0JCC0YjgBdEYDOIFeVEEFRBilKBogg+KiQoV5Q6Khla8lrZRBLo+zLdazs7ZM2d3zsJu55/sy3dmz5797Vy+y8wWxONxnNJXzCFwAB1AB9ABdHIAHUAH0AF0Cq929fX1ufbMA4HLgSqgHOgPdJJrfwPbgb3AJuBD4KsoH6agrq4uF6CVAncC4wVYGP0ALAVeAva0NYDFwOPARKBzhvc6ArwG1AC/toU5cDSwFXjAAjyAQmACsAOozneATwLLgdMM2/8jLxN1AxYBC/J1CL8F3BjQZhOwCqgFvgd+AuJAT6ACOBMYCVwUcJ91siDlDcC3gRtSXF8IzAe+M7xfOXC3TAOFPm3WA0NzAeDp8oUGASeKrUF60R6Zn6an6CnTgI1pfnYFMAcY43N9GTDueAR4sQylK8RvS0dzgYcsPc9U4Bmfa9XA4uMF4GXypUdkeJ8Z0nNs6hbgdZ9rPcK6OLZX4XbisH5iAd68COABvAHc63NtwbHsgf2B94BKC/faAFwY8Zy8ErhWYx8EbM42wAuAj4ETAtptllh1N9AiC0t/YLCnXV9xT6JUJ6AOKPHYX5HIJ2sAK4BvgQ4+17fJ5LxKIgudzgBGySS/3sAPtKWZwCyPrQk4ydQxtwFwH9BbY4/LIvBEyF5RIF8iG+oC/K7xEUfLEI98EVnsA28/MCQkPIDmLMIDOCDOu1fXZGMVrgJu19gbZCKuJTek62mV2QD4XIoFZT+5o10a2ylRA6wCLtXYp8uikUv6Webr1uoOdIwS4HiNbS/wFLmnZuCgx9Y+hVdhBeBwjW1+BF9uFvBqFiDGDW3a0Cus+gADPLYWVB7PpiaJn5YYZjMigles6W2NskJH0gN1RZ1EJcyWJnvi0hpUbSQK9dRwaDGIqtIGeLbG9o3lnveCT2YmCogVPqvwdpOIKB2A7TU2W+XCiQEZkSggTvGxl8m0NNc2wDKNrcXCF5mASoUFaQYw2xK8Iv4vyvtpmsTxGQHsLPPQLp9frI+FYftyiPY1liAeBs5DZYNS/XgjgTXpApwq4Gaj0k86DbK4YISBmOlwjreaw+8CzvEDJa7bojAATwU+QtUQSg0Wlr4WFwxT2Z4Ta1GZ9Md8rlcDY00ADpFfZViID7/D8oJxrCACPCIjQ6elqOK8ryM9GPg64AM+B1YAW1BJ0r9M/aaQC0YYiAWWne0FQFf0dZnngdsgOaHaXVySLj43XSY3zCRVNclSz9NpTgQRywfAVRr7WcDWmKaxDl4TKuU+LkN4kyOEF1XEMk5GmFf3eOfAKcD5moY/ypy4OsMHeTjDBSPMcF5o8X4NPs70eKAoMYSLJIDuoOl5AwRiJroJWIIq1BwM8DcLDFyPpoAESTEqN/m0aVYlQF1RtRPviB2ZWEQeRJ//Gm0BHqhttieTutJVgkrGBu0FbEbtvmoMgNjLErxEL3yH5L01oxIA79O8aTVqj7ENmWSpGw1DwhZUJTBIf1ieGlZoAFbGxG3pESLIjkolBsMXaVNC9qWrnZTFZJh69SV283v5oHrNlNA9JvGfV0scL+3cm1Q7iaFPKNY6XimTD0fFwuWaRrscqyR11Hgqh2IkZ5gPy7LtdLRKNX7gnzHgkMdYGDIx0FZUrrHVxVBHBLzDup/jlaSrNbbdMWCn5sIAxyspsrlZY18TQ3/mYoxjdpQmkFx8OgKsjAHvat4wlFZZVyce1diWA80x4DOf7Ma8LD+kaYhmGvLZ0ovoa0LP0mpZ1qXXq4Fzs/igiSRBY8BrH3bq0Ca6HlWt82od6iTBfyn9Lj6+Xx2q2nYwSz3Q9FhrE/ZSVX66BPjU51q/RLCR6IEH0KfCe8sQL85SmNRo+Ioa3tgU8Ga2jtS8RaUdPj7gTtQRqS/yfLHogErf+6Xykk52ekOTESm67AbUrvuyPARXAtyPSvz6wduK5myx7pzIcPy3N4D6Z4w3pc0O1IbybAwrWyqSubZUOsYw4DrU4Ro/bUEd3m4wAZjoie8bPtARVNkvVwAWypxu6gqtRW0u0i6kqU4qDUEVUirasANdQ8BhoVSbizai/uRmbhsEtxp1lCPwpJXpWbmBqD++uTWPQ7xm1NaVJeIomzmvIQ8bdpO0zpWozea9Aibf41WHgd9QhaJtqAPia4FfQnv/7l98M5P79zYH0AF0AB1AJwfQAXQAHUCnNPTvAKemiFU6nb96AAAAAElFTkSuQmCC); - background-repeat: no-repeat; - background-size: 100px; - background-position: center; - background-color: rgb(230, 230, 230, 0.1); - border: 1px dotted #eee; - cursor: pointer; - box-sizing: border-box; -} - -.jbackdrop { - position:fixed; - top:0px; - left:0px; - min-width:100%; - min-height:100%; - background-color:rgba(0,0,0,0.5); - border:0px; - padding:0px; - z-index:8000; - - -webkit-touch-callout: none; /* iOS Safari */ - -webkit-user-select: none; /* Safari */ - -khtml-user-select: none; /* Konqueror HTML */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* Internet Explorer/Edge */ - user-select: none; /* Non-prefixed version, currently - supported by Chrome and Opera */ -} - -.jremove { - opacity: 0.2; - filter: alpha(opacity=20); -} - -/** Animations **/ -.fade-in { - animation: fade-in 2s forwards; - -webkit-animation: fade-in 2s forwards; -} - -.fade-out { - animation: fade-out 1s forwards; - -webkit-animation: fade-out 1s forwards; -} - -.slide-left-in { - animation: slide-left-in 0.4s forwards; - -webkit-animation: slide-left-in 0.4s forwards; -} - -.slide-left-out { - animation: slide-left-out 0.4s forwards; - -webkit-animation: slide-left-out 0.4s forwards; -} - -.slide-right-in { - animation: slide-right-in 0.4s forwards; - -webkit-animation: slide-right-in 0.4s forwards; -} - -.slide-right-out { - animation: slide-right-out 0.4s forwards; - -webkit-animation: slide-right-out 0.4s forwards; -} - -.slide-top-in { - animation: slide-top-in 0.4s forwards; - -webkit-animation: slide-top-in 0.4s forwards; -} - -.slide-top-out { - animation: slide-top-out 0.2s forwards; - -webkit-animation: slide-top-out 0.2s forwards; -} - -.slide-bottom-in { - animation: slide-bottom-in 0.4s forwards; - -webkit-animation: slide-bottom-in 0.4s forwards; -} - -.slide-bottom-out { - animation: slide-bottom-out 0.2s forwards; - -webkit-animation: slide-bottom-out 0.2s forwards; -} - -/** Fadein and Fadeout **/ -@keyframes fade-in { - 0% { opacity: 0; } - 100% { opacity: 100; } -} - -@-webkit-keyframes fade-in { - 0% { opacity: 0; } - 100% { opacity: 100; } -} - -@keyframes fade-out { - 0% { opacity: 100; } - 100% { opacity: 0; } -} - -@-webkit-keyframes fade-out { - 0% { opacity: 100; } - 100% { opacity: 0; } -} - -/** Keyframes Left to Right **/ -@keyframes slide-left-in { - 0% { transform: translateX(-100%); } - 100% { transform: translateX(0%); } -} - -@-webkit-keyframes slide-left-in { - 0% { transform: translateX(-100%); } - 100% { -webkit-transform: translateX(0%); } -} - -@keyframes slide-left-out { - 0% { transform: translateX(0%); } - 100% { transform: translateX(-100%); } -} - -@-webkit-keyframes slide-left-out { - 0% { -webkit-transform: translateX(0%); } - 100% { -webkit-transform: translateX(-100%); } -} - -/** Keyframes Right to Left **/ -@keyframes slide-right-in { - 0% { transform: translateX(100%); } - 100% { transform: translateX(0%); } -} - -@-webkit-keyframes slide-right-in -{ - 0% { transform: translateX(100%); } - 100% { -webkit-transform: translateX(0%); } -} - -@keyframes slide-right-out { - 0% { transform: translateX(0%); } - 100% { transform: translateX(100%); } -} - -@-webkit-keyframes slide-right-out { - 0% { -webkit-transform: translateX(0%); } - 100% { -webkit-transform: translateX(100%); } -} - -/** Keyframes Top to Bottom **/ -@keyframes slide-top-in { - 0% { transform: translateY(-100%); } - 100% { transform: translateY(0%); } -} - -@-webkit-keyframes slide-top-in { - 0% { transform: translateY(-100%); } - 100% { -webkit-transform: translateY(0%); } -} - -@keyframes slide-top-out { - 0% { transform: translateY(0%); } - 100% { transform: translateY(-100%); } -} - -@-webkit-keyframes slide-top-out { - 0% { -webkit-transform: translateY(0%); } - 100% { -webkit-transform: translateY(-100%); } -} - -/** Keyframes Bottom to Top **/ -@keyframes slide-bottom-in { - 0% { transform: translateY(100%); } - 100% { transform: translateY(0%); } -} - -@-webkit-keyframes slide-bottom-in { - 0% { transform: translateY(100%); } - 100% { -webkit-transform: translateY(0%); } -} - -@keyframes slide-bottom-out { - 0% { transform: translateY(0%); } - 100% { transform: translateY(100%); } -} - -@-webkit-keyframes slide-bottom-out { - 0% { -webkit-transform: translateY(0%); } - 100% { -webkit-transform: translateY(100%); } -} - -@supports (-webkit-overflow-scrolling: touch) { - .app .options input:checked:before { - top:-12px; - } -} - -@-webkit-keyframes spin { - from { - -webkit-transform:rotate(0deg); - } - to { - -webkit-transform:rotate(360deg); - } -} - -@keyframes spin { - from { - transform:rotate(0deg); - } - to { - transform:rotate(360deg); - } -} - + +/** + * (c) jSuites Javascript Web Components + * + * Author: Paul Hodel <paul.hodel@gmail.com> + * Website: https://bossanova.uk/jsuites/ + * Description: Create amazing web based applications. + * + * MIT License + * + */ + +/** General **/ + +.jdragging { + opacity:0.2; + filter: alpha(opacity=20); +} + +.jupload { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7emlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTctMTItMzFUMjI6NDM6MzBaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDEtMDFUMjA6MDM6MjNaPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wMS0wMVQyMDowMzoyM1o8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD54bXAuZGlkOjBmYzcxZDEyLTg1MGUtY2E0NS05MzE4LWRhYjI5YWZhMmQ4MjwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmNyZWF0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDowZmM3MWQxMi04NTBlLWNhNDUtOTMxOC1kYWIyOWFmYTJkODI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMTItMzFUMjI6NDM6MzBaPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjk2MTA5Y2Y0LTEwM2ItNTc0Ny1hZWE3LWI5NDMxOWY0NWFkZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wMS0wMVQyMDowMjoyMFo8L3N0RXZ0OndoZW4+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ZDE3NGVkY2UtNWZkNC0wODRkLTkzNzAtZDRhODVmMzdkNjdiPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE4LTAxLTAxVDIwOjAzOjIzWjwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj44MDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+tc8AsgAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAGjUlEQVR42uycW2xURRjHf91SoEIBUQpYI8VSVBDExniLERNUJBpQVEDFqE1AEYkX0JCC0YjgBdEYDOIFeVEEFRBilKBogg+KiQoV5Q6Khla8lrZRBLo+zLdazs7ZM2d3zsJu55/sy3dmz5797Vy+y8wWxONxnNJXzCFwAB1AB9ABdHIAHUAH0AF0Cq929fX1ufbMA4HLgSqgHOgPdJJrfwPbgb3AJuBD4KsoH6agrq4uF6CVAncC4wVYGP0ALAVeAva0NYDFwOPARKBzhvc6ArwG1AC/toU5cDSwFXjAAjyAQmACsAOozneATwLLgdMM2/8jLxN1AxYBC/J1CL8F3BjQZhOwCqgFvgd+AuJAT6ACOBMYCVwUcJ91siDlDcC3gRtSXF8IzAe+M7xfOXC3TAOFPm3WA0NzAeDp8oUGASeKrUF60R6Zn6an6CnTgI1pfnYFMAcY43N9GTDueAR4sQylK8RvS0dzgYcsPc9U4Bmfa9XA4uMF4GXypUdkeJ8Z0nNs6hbgdZ9rPcK6OLZX4XbisH5iAd68COABvAHc63NtwbHsgf2B94BKC/faAFwY8Zy8ErhWYx8EbM42wAuAj4ETAtptllh1N9AiC0t/YLCnXV9xT6JUJ6AOKPHYX5HIJ2sAK4BvgQ4+17fJ5LxKIgudzgBGySS/3sAPtKWZwCyPrQk4ydQxtwFwH9BbY4/LIvBEyF5RIF8iG+oC/K7xEUfLEI98EVnsA28/MCQkPIDmLMIDOCDOu1fXZGMVrgJu19gbZCKuJTek62mV2QD4XIoFZT+5o10a2ylRA6wCLtXYp8uikUv6Webr1uoOdIwS4HiNbS/wFLmnZuCgx9Y+hVdhBeBwjW1+BF9uFvBqFiDGDW3a0Cus+gADPLYWVB7PpiaJn5YYZjMigles6W2NskJH0gN1RZ1EJcyWJnvi0hpUbSQK9dRwaDGIqtIGeLbG9o3lnveCT2YmCogVPqvwdpOIKB2A7TU2W+XCiQEZkSggTvGxl8m0NNc2wDKNrcXCF5mASoUFaQYw2xK8Iv4vyvtpmsTxGQHsLPPQLp9frI+FYftyiPY1liAeBs5DZYNS/XgjgTXpApwq4Gaj0k86DbK4YISBmOlwjreaw+8CzvEDJa7bojAATwU+QtUQSg0Wlr4WFwxT2Z4Ta1GZ9Md8rlcDY00ADpFfZViID7/D8oJxrCACPCIjQ6elqOK8ryM9GPg64AM+B1YAW1BJ0r9M/aaQC0YYiAWWne0FQFf0dZnngdsgOaHaXVySLj43XSY3zCRVNclSz9NpTgQRywfAVRr7WcDWmKaxDl4TKuU+LkN4kyOEF1XEMk5GmFf3eOfAKcD5moY/ypy4OsMHeTjDBSPMcF5o8X4NPs70eKAoMYSLJIDuoOl5AwRiJroJWIIq1BwM8DcLDFyPpoAESTEqN/m0aVYlQF1RtRPviB2ZWEQeRJ//Gm0BHqhttieTutJVgkrGBu0FbEbtvmoMgNjLErxEL3yH5L01oxIA79O8aTVqj7ENmWSpGw1DwhZUJTBIf1ieGlZoAFbGxG3pESLIjkolBsMXaVNC9qWrnZTFZJh69SV283v5oHrNlNA9JvGfV0scL+3cm1Q7iaFPKNY6XimTD0fFwuWaRrscqyR11Hgqh2IkZ5gPy7LtdLRKNX7gnzHgkMdYGDIx0FZUrrHVxVBHBLzDup/jlaSrNbbdMWCn5sIAxyspsrlZY18TQ3/mYoxjdpQmkFx8OgKsjAHvat4wlFZZVyce1diWA80x4DOf7Ma8LD+kaYhmGvLZ0ovoa0LP0mpZ1qXXq4Fzs/igiSRBY8BrH3bq0Ca6HlWt82od6iTBfyn9Lj6+Xx2q2nYwSz3Q9FhrE/ZSVX66BPjU51q/RLCR6IEH0KfCe8sQL85SmNRo+Ioa3tgU8Ga2jtS8RaUdPj7gTtQRqS/yfLHogErf+6Xykk52ekOTESm67AbUrvuyPARXAtyPSvz6wduK5myx7pzIcPy3N4D6Z4w3pc0O1IbybAwrWyqSubZUOsYw4DrU4Ro/bUEd3m4wAZjoie8bPtARVNkvVwAWypxu6gqtRW0u0i6kqU4qDUEVUirasANdQ8BhoVSbizai/uRmbhsEtxp1lCPwpJXpWbmBqD++uTWPQ7xm1NaVJeIomzmvIQ8bdpO0zpWozea9Aibf41WHgd9QhaJtqAPia4FfQnv/7l98M5P79zYH0AF0AB1AJwfQAXQAHUCnNPTvAKemiFU6nb96AAAAAElFTkSuQmCC); + background-repeat: no-repeat; + background-size: 100px; + background-position: center; + background-color: rgb(230, 230, 230, 0.1); + border: 1px dotted #eee; + cursor: pointer; + box-sizing: border-box; +} + +.jbackdrop { + position:fixed; + top:0px; + left:0px; + min-width:100%; + min-height:100%; + background-color:rgba(0,0,0,0.5); + border:0px; + padding:0px; + z-index:8000; + + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; /* Non-prefixed version, currently + supported by Chrome and Opera */ +} + +.jremove { + opacity: 0.2; + filter: alpha(opacity=20); +} + +/** Animations **/ +.fade-in { + animation: fade-in 2s forwards; + -webkit-animation: fade-in 2s forwards; +} + +.fade-out { + animation: fade-out 1s forwards; + -webkit-animation: fade-out 1s forwards; +} + +.slide-left-in { + animation: slide-left-in 0.4s forwards; + -webkit-animation: slide-left-in 0.4s forwards; +} + +.slide-left-out { + animation: slide-left-out 0.4s forwards; + -webkit-animation: slide-left-out 0.4s forwards; +} + +.slide-right-in { + animation: slide-right-in 0.4s forwards; + -webkit-animation: slide-right-in 0.4s forwards; +} + +.slide-right-out { + animation: slide-right-out 0.4s forwards; + -webkit-animation: slide-right-out 0.4s forwards; +} + +.slide-top-in { + animation: slide-top-in 0.4s forwards; + -webkit-animation: slide-top-in 0.4s forwards; +} + +.slide-top-out { + animation: slide-top-out 0.2s forwards; + -webkit-animation: slide-top-out 0.2s forwards; +} + +.slide-bottom-in { + animation: slide-bottom-in 0.4s forwards; + -webkit-animation: slide-bottom-in 0.4s forwards; +} + +.slide-bottom-out { + animation: slide-bottom-out 0.2s forwards; + -webkit-animation: slide-bottom-out 0.2s forwards; +} + +/** Fadein and Fadeout **/ +@keyframes fade-in { + 0% { opacity: 0; } + 100% { opacity: 100; } +} + +@-webkit-keyframes fade-in { + 0% { opacity: 0; } + 100% { opacity: 100; } +} + +@keyframes fade-out { + 0% { opacity: 100; } + 100% { opacity: 0; } +} + +@-webkit-keyframes fade-out { + 0% { opacity: 100; } + 100% { opacity: 0; } +} + +/** Keyframes Left to Right **/ +@keyframes slide-left-in { + 0% { transform: translateX(-100%); } + 100% { transform: translateX(0%); } +} + +@-webkit-keyframes slide-left-in { + 0% { transform: translateX(-100%); } + 100% { -webkit-transform: translateX(0%); } +} + +@keyframes slide-left-out { + 0% { transform: translateX(0%); } + 100% { transform: translateX(-100%); } +} + +@-webkit-keyframes slide-left-out { + 0% { -webkit-transform: translateX(0%); } + 100% { -webkit-transform: translateX(-100%); } +} + +/** Keyframes Right to Left **/ +@keyframes slide-right-in { + 0% { transform: translateX(100%); } + 100% { transform: translateX(0%); } +} + +@-webkit-keyframes slide-right-in +{ + 0% { transform: translateX(100%); } + 100% { -webkit-transform: translateX(0%); } +} + +@keyframes slide-right-out { + 0% { transform: translateX(0%); } + 100% { transform: translateX(100%); } +} + +@-webkit-keyframes slide-right-out { + 0% { -webkit-transform: translateX(0%); } + 100% { -webkit-transform: translateX(100%); } +} + +/** Keyframes Top to Bottom **/ +@keyframes slide-top-in { + 0% { transform: translateY(-100%); } + 100% { transform: translateY(0%); } +} + +@-webkit-keyframes slide-top-in { + 0% { transform: translateY(-100%); } + 100% { -webkit-transform: translateY(0%); } +} + +@keyframes slide-top-out { + 0% { transform: translateY(0%); } + 100% { transform: translateY(-100%); } +} + +@-webkit-keyframes slide-top-out { + 0% { -webkit-transform: translateY(0%); } + 100% { -webkit-transform: translateY(-100%); } +} + +/** Keyframes Bottom to Top **/ +@keyframes slide-bottom-in { + 0% { transform: translateY(100%); } + 100% { transform: translateY(0%); } +} + +@-webkit-keyframes slide-bottom-in { + 0% { transform: translateY(100%); } + 100% { -webkit-transform: translateY(0%); } +} + +@keyframes slide-bottom-out { + 0% { transform: translateY(0%); } + 100% { transform: translateY(100%); } +} + +@-webkit-keyframes slide-bottom-out { + 0% { -webkit-transform: translateY(0%); } + 100% { -webkit-transform: translateY(100%); } +} + +@supports (-webkit-overflow-scrolling: touch) { + .app .options input:checked:before { + top:-12px; + } +} + +@-webkit-keyframes spin { + from { + -webkit-transform:rotate(0deg); + } + to { + -webkit-transform:rotate(360deg); + } +} + +@keyframes spin { + from { + transform:rotate(0deg); + } + to { + transform:rotate(360deg); + } +} + /** * Date & Datetime picker v1.0.1 * Author: paul.hodel@gmail.com @@ -435,123 +435,123 @@ .jcalendar-fullsize .jcalendar-backdrop { display:block; } - - -/** - * Color Picker v1.0.1 - * Author: paul.hodel@gmail.com - * https://github.com/paulhodel/jtools - */ - -.jcolor { - position:relative; - display:none; - outline:none; -} - -.jcolor-content { - position:absolute; - z-index:9000; - user-select:none; - -webkit-font-smoothing: antialiased; - font-size: .875rem; - letter-spacing: .2px; - -webkit-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2); - box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2); - padding:10px; - background-color:#fff; -} - -.jcolor-focus { - display:block; -} - -.jcolor td { - border:2px solid #fff; -} - -.jcolor-selected { - border:2px solid #000 !important; - background-repeat:no-repeat; - background-size: cover; - background-position:0 0; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z' fill='white'/%3E%3C/svg%3E"); -} - -/** - * Contextmenu v1.0.1 - * Author: paul.hodel@gmail.com - * https://github.com/paulhodel/jtools - */ - -.jcontextmenu { - position:absolute; - z-index:10000; - background:#fff; - color: #555; - font-family: sans-serif; - font-size: 11px; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - -webkit-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); - -moz-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); - box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); - border: 1px solid #C6C6C6; - padding: 0px; - padding-top:4px; - padding-bottom:4px; - margin:0px; - outline:none; - display:none; -} - -.jcontextmenu.jcontextmenu-focus { - display:inline-block; -} - -.jcontextmenu li { - box-sizing: border-box; - display: block; - padding: 8px 8px 8px 30px; - width: 250px; - position: relative; - cursor: default; -} - -.jcontextmenu li a { - color: #555; - text-decoration: none; -} - -.jcontextmenu li span { - float: right; - margin-right:10px; -} - -.jcontextmenu .contextmenu-disabled { - color: #a1a192; -} - -.jcontextmenu li:not(.contextmenu-line):hover { - background: #ebebeb; -} - -.jcontextmenu li.contextmenu-line { - border-top: 1px solid #e9e9e9; - margin-top:5px; - padding:2px; -} - -.jcontextmenu hr { - border: 1px solid #e9e9e9; - border-bottom: 0; - margin-top:5px; - margin-bottom:5px; -} - + + +/** + * Color Picker v1.0.1 + * Author: paul.hodel@gmail.com + * https://github.com/paulhodel/jtools + */ + +.jcolor { + position:relative; + display:none; + outline:none; +} + +.jcolor-content { + position:absolute; + z-index:9000; + user-select:none; + -webkit-font-smoothing: antialiased; + font-size: .875rem; + letter-spacing: .2px; + -webkit-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2); + box-shadow: 0 8px 10px 1px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2); + padding:10px; + background-color:#fff; +} + +.jcolor-focus { + display:block; +} + +.jcolor td { + border:2px solid #fff; +} + +.jcolor-selected { + border:2px solid #000 !important; + background-repeat:no-repeat; + background-size: cover; + background-position:0 0; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z' fill='white'/%3E%3C/svg%3E"); +} + +/** + * Contextmenu v1.0.1 + * Author: paul.hodel@gmail.com + * https://github.com/paulhodel/jtools + */ + +.jcontextmenu { + position:absolute; + z-index:10000; + background:#fff; + color: #555; + font-family: sans-serif; + font-size: 11px; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); + -moz-box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); + box-shadow: 2px 2px 2px 0px rgba(143, 144, 145, 1); + border: 1px solid #C6C6C6; + padding: 0px; + padding-top:4px; + padding-bottom:4px; + margin:0px; + outline:none; + display:none; +} + +.jcontextmenu.jcontextmenu-focus { + display:inline-block; +} + +.jcontextmenu li { + box-sizing: border-box; + display: block; + padding: 8px 8px 8px 30px; + width: 250px; + position: relative; + cursor: default; +} + +.jcontextmenu li a { + color: #555; + text-decoration: none; +} + +.jcontextmenu li span { + float: right; + margin-right:10px; +} + +.jcontextmenu .contextmenu-disabled { + color: #a1a192; +} + +.jcontextmenu li:not(.contextmenu-line):hover { + background: #ebebeb; +} + +.jcontextmenu li.contextmenu-line { + border-top: 1px solid #e9e9e9; + margin-top:5px; + padding:2px; +} + +.jcontextmenu hr { + border: 1px solid #e9e9e9; + border-bottom: 0; + margin-top:5px; + margin-bottom:5px; +} + /** * (c) 2013 jDropdown * http://www.github.com/paulhodel/jdropdown @@ -1054,120 +1054,120 @@ { min-width:100%; } -} - -/** - * (c) jLoading - * https://github.com/paulhodel/jtools - * - * @author: Paul Hodel <paul.hodel@gmail.com> - * @description: Page loading spin - */ - -.jloading { - position:fixed; - z-index:10001; - width:100%; - left:0; - right:0; - top:0; - bottom:0; - background-color: rgba(0,0,0,0.7); -} - -.jloading::after { - content:''; - display:block; - margin:0 auto; - margin-top:50vh; - width:40px; - height:40px; - border-style:solid; - border-color:white; - border-top-color:transparent; - border-width:4px; - border-radius:50%; - -webkit-animation: spin .8s linear infinite; - animation: spin .8s linear infinite; -} - -.jloading.spin { - background-color:transparent; -} - -.jloading.spin::after { - margin:0 auto; - margin-top:80px; - border-color:#aaa; - border-top-color:transparent; -} - -/** - * (c) jTools Modal page - * https://github.com/paulhodel/jtools - * - * @author: Paul Hodel <paul.hodel@gmail.com> - * @description: Modal page - */ - -.jmodal { - position:fixed; - top:50%; - left:50%; - width:60%; - height:60%; - -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.2); - -moz-box-shadow: 0 2px 10px rgba(0,0,0,.2); - border:1px solid #ccc; - background-color:#fff; - transform: translate(-50%, -50%); - box-sizing: border-box; - padding-top:50px; - z-index:9002; - display:none; - border-radius:5px; -} - -.jmodal:before { - position:absolute; - top:0; - left:0; - width:100%; - content:attr(title); - padding:15px; - box-sizing: border-box; - background: #e3e3e3; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#e3e3e3'); - background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e3e3e3)); - background: -moz-linear-gradient(top, #ededed, #e3e3e3); - font-size:1.2em; -} - -.jmodal > div { - padding:20px; - overflow-y:auto; - max-height:100%; -} -.jmodal.no-title { - padding-top:0px; -} - -.jmodal.no-title:before { - display:none; -} - -.jmodal:after { - content:''; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); - position:absolute; - top:0; - right:0; - margin:14px; - font-size:24px; - width:24px; - height:24px; - cursor:pointer; - text-shadow: 0px 0px 5px #fff; -} - - +} + +/** + * (c) jLoading + * https://github.com/paulhodel/jtools + * + * @author: Paul Hodel <paul.hodel@gmail.com> + * @description: Page loading spin + */ + +.jloading { + position:fixed; + z-index:10001; + width:100%; + left:0; + right:0; + top:0; + bottom:0; + background-color: rgba(0,0,0,0.7); +} + +.jloading::after { + content:''; + display:block; + margin:0 auto; + margin-top:50vh; + width:40px; + height:40px; + border-style:solid; + border-color:white; + border-top-color:transparent; + border-width:4px; + border-radius:50%; + -webkit-animation: spin .8s linear infinite; + animation: spin .8s linear infinite; +} + +.jloading.spin { + background-color:transparent; +} + +.jloading.spin::after { + margin:0 auto; + margin-top:80px; + border-color:#aaa; + border-top-color:transparent; +} + +/** + * (c) jTools Modal page + * https://github.com/paulhodel/jtools + * + * @author: Paul Hodel <paul.hodel@gmail.com> + * @description: Modal page + */ + +.jmodal { + position:fixed; + top:50%; + left:50%; + width:60%; + height:60%; + -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.2); + -moz-box-shadow: 0 2px 10px rgba(0,0,0,.2); + border:1px solid #ccc; + background-color:#fff; + transform: translate(-50%, -50%); + box-sizing: border-box; + padding-top:50px; + z-index:9002; + display:none; + border-radius:5px; +} + +.jmodal:before { + position:absolute; + top:0; + left:0; + width:100%; + content:attr(title); + padding:15px; + box-sizing: border-box; + background: #e3e3e3; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#e3e3e3'); + background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#e3e3e3)); + background: -moz-linear-gradient(top, #ededed, #e3e3e3); + font-size:1.2em; +} + +.jmodal > div { + padding:20px; + overflow-y:auto; + max-height:100%; +} +.jmodal.no-title { + padding-top:0px; +} + +.jmodal.no-title:before { + display:none; +} + +.jmodal:after { + content:''; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z'/%3E%3Cpath d='M0 0h24v24H0z' fill='none'/%3E%3C/svg%3E"); + position:absolute; + top:0; + right:0; + margin:14px; + font-size:24px; + width:24px; + height:24px; + cursor:pointer; + text-shadow: 0px 0px 5px #fff; +} + + diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js similarity index 99% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js index 0de5b9a661e2cb577958171a876e4b5f40b893f1..3f2c8b53babf13953cf77be4388a14ad311c11f5 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/jsuites/jsuites.js @@ -1,25 +1,25 @@ - -/** - * (c) jSuites Javascript Web Components - * - * Author: Paul Hodel <paul.hodel@gmail.com> - * Website: https://bossanova.uk/jsuites/ - * Description: Create amazing web based applications. - * - * MIT License - * - */ -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.jSuites = factory(); - - // Keep compatibility with jtools legacy - global.jApp = global.jSuites; -}(this, (function () { - - 'use strict'; - + +/** + * (c) jSuites Javascript Web Components + * + * Author: Paul Hodel <paul.hodel@gmail.com> + * Website: https://bossanova.uk/jsuites/ + * Description: Create amazing web based applications. + * + * MIT License + * + */ +;(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.jSuites = factory(); + + // Keep compatibility with jtools legacy + global.jApp = global.jSuites; +}(this, (function () { + + 'use strict'; + var jSuites = function(options) { var obj = {} @@ -333,8 +333,8 @@ return obj; }(); - - + + jSuites.calendar = (function(el, options) { var obj = {}; obj.options = {}; @@ -1161,8 +1161,8 @@ } } } - } - + } + /** * Color Picker v1.0.1 * Author: paul.hodel@gmail.com @@ -1603,8 +1603,8 @@ el.color = obj; return obj; - }); - + }); + /** * Contextmenu v1.0.1 * Author: paul.hodel@gmail.com @@ -1703,8 +1703,8 @@ el.contextmenu = obj; return obj; - }); - + }); + /** * (c) 2013 jDropdown * http://www.github.com/paulhodel/jdropdown @@ -2430,205 +2430,205 @@ } } } - } - - jSuites.image = (function(el, options) { - var obj = {}; - obj.options = {}; - - // Default configuration - var defaults = { - minWidth:false, - onchange:null, - singleFile:true, - parser:'', - text:{ - extensionNotAllowed:'The extension is not allowed', - imageTooSmall:'The resolution is too low, try a image with a better resolution. width > 800px', - } - }; - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - // Upload icon - el.classList.add('jupload'); - - // Add image - obj.addImage = function(file) { - var img = document.createElement('img'); - img.setAttribute('data-lastmodified', file.size); - img.setAttribute('data-name', file.name); - img.setAttribute('data-size', file.size); - img.setAttribute('data-thumbs', file.thumbs); - img.setAttribute('data-cover', file.cover ? 1 : 0); - img.setAttribute('src', file.file); - img.className = 'jfile'; - img.style.width = '100%'; - - return img; - } - - // Add image - obj.addImages = function(files) { - if (obj.options.singleFile == true) { - el.innerHTML = ''; - } - - for (var i = 0; i < files.length; i++) { - el.appendChild(obj.addImage(files[i])); - } - } - - obj.addFromFile = function(file) { - if (obj.options.singleFile == true) { - el.innerHTML = ''; - } - - var type = file.type.split('/'); - if (type[0] == 'image') { - var image = new FileReader(); - image.addEventListener("load", function (v) { - - var img = document.createElement('img'); - img.setAttribute('data-lastModified', file.lastModified); - img.setAttribute('data-name', file.name); - img.setAttribute('data-size', file.size); - img.setAttribute('src', v.srcElement.result); - el.appendChild(img); - - setTimeout(function() { - if (obj.options.minWidth && (parseInt(img.width) < parseInt(obj.options.minWidth))) { - img.remove(); - alert(obj.options.text.imageTooSmall); - } else { - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(img); - } - } - }, 0); - }, false); - - image.readAsDataURL(file); - } else { - alert(text.extentionNotAllowed); - } - } - - var attachmentInput = document.createElement('input'); - attachmentInput.type = 'file'; - attachmentInput.setAttribute('accept', 'image/*'); - attachmentInput.onchange = function() { - for (var i = 0; i < this.files.length; i++) { - obj.addFromFile(this.files[i]); - } - } - - el.addEventListener("dblclick", function(e) { - var evt = new MouseEvent('click', { - bubbles: true, - cancelable: true, - view: window - }); - - attachmentInput.dispatchEvent(evt); - }); - - el.addEventListener('dragenter', function(e) { - el.style.border = '1px dashed #000'; - }); - - el.addEventListener('dragleave', function(e) { - el.style.border = '1px solid #eee'; - }); - - el.addEventListener('dragstop', function(e) { - el.style.border = '1px solid #eee'; - }); - - el.addEventListener('dragover', function(e) { - e.preventDefault(); - }); - - el.addEventListener('drop', function(e) { - e.preventDefault(); - e.stopPropagation(); - - var data = e.dataTransfer.getData('text/html'); - if (! data) { - for (var i = 0; i < e.dataTransfer.files.length; i++) { - obj.addFromFile(e.dataTransfer.files[i]); - } - } else { - if (obj.options.singleFile == true) { - el.innerHTML = ''; - } - - var template = document.createElement('template'); - template.innerHTML = data.trim(); - data = template.content.firstChild; - - var img = document.createElement('img'); - img.setAttribute('data-lastModified', ''); - img.setAttribute('data-name', ''); - img.setAttribute('data-size', ''); - el.appendChild(img); - - if (data.src.substr(0,4) == 'data') { - img.setAttribute('src', data.src); - img.setAttribute('data-size', data.src.length); - - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(img); - } - } else { - var name = data.src.split('/'); - name = name[name.length-1]; - img.setAttribute('data-name', name); - - const toDataURL = url => fetch(url) - .then(response => response.blob()) - .then(blob => new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onloadend = () => resolve(reader.result); - reader.onerror = reject; - reader.readAsDataURL(blob); - })); - - toDataURL(obj.options.parser + data.src).then(dataUrl => { - img.setAttribute('src', dataUrl); - img.setAttribute('data-size', dataUrl.length); - - setTimeout(function() { - if (parseInt(img.width) < 800) { - img.remove(); - alert(obj.options.imageTooSmall); - } else { - if (typeof(obj.options.onchange) == 'function') { - obj.options.onchange(img); - } - } - }, 0); - }); - } - } - - el.style.border = '1px solid #eee'; - - return false; - }); - - el.image = obj; - - return obj; - }); - + } + + jSuites.image = (function(el, options) { + var obj = {}; + obj.options = {}; + + // Default configuration + var defaults = { + minWidth:false, + onchange:null, + singleFile:true, + parser:'', + text:{ + extensionNotAllowed:'The extension is not allowed', + imageTooSmall:'The resolution is too low, try a image with a better resolution. width > 800px', + } + }; + + // Loop through our object + for (var property in defaults) { + if (options && options.hasOwnProperty(property)) { + obj.options[property] = options[property]; + } else { + obj.options[property] = defaults[property]; + } + } + + // Upload icon + el.classList.add('jupload'); + + // Add image + obj.addImage = function(file) { + var img = document.createElement('img'); + img.setAttribute('data-lastmodified', file.size); + img.setAttribute('data-name', file.name); + img.setAttribute('data-size', file.size); + img.setAttribute('data-thumbs', file.thumbs); + img.setAttribute('data-cover', file.cover ? 1 : 0); + img.setAttribute('src', file.file); + img.className = 'jfile'; + img.style.width = '100%'; + + return img; + } + + // Add image + obj.addImages = function(files) { + if (obj.options.singleFile == true) { + el.innerHTML = ''; + } + + for (var i = 0; i < files.length; i++) { + el.appendChild(obj.addImage(files[i])); + } + } + + obj.addFromFile = function(file) { + if (obj.options.singleFile == true) { + el.innerHTML = ''; + } + + var type = file.type.split('/'); + if (type[0] == 'image') { + var image = new FileReader(); + image.addEventListener("load", function (v) { + + var img = document.createElement('img'); + img.setAttribute('data-lastModified', file.lastModified); + img.setAttribute('data-name', file.name); + img.setAttribute('data-size', file.size); + img.setAttribute('src', v.srcElement.result); + el.appendChild(img); + + setTimeout(function() { + if (obj.options.minWidth && (parseInt(img.width) < parseInt(obj.options.minWidth))) { + img.remove(); + alert(obj.options.text.imageTooSmall); + } else { + if (typeof(obj.options.onchange) == 'function') { + obj.options.onchange(img); + } + } + }, 0); + }, false); + + image.readAsDataURL(file); + } else { + alert(text.extentionNotAllowed); + } + } + + var attachmentInput = document.createElement('input'); + attachmentInput.type = 'file'; + attachmentInput.setAttribute('accept', 'image/*'); + attachmentInput.onchange = function() { + for (var i = 0; i < this.files.length; i++) { + obj.addFromFile(this.files[i]); + } + } + + el.addEventListener("dblclick", function(e) { + var evt = new MouseEvent('click', { + bubbles: true, + cancelable: true, + view: window + }); + + attachmentInput.dispatchEvent(evt); + }); + + el.addEventListener('dragenter', function(e) { + el.style.border = '1px dashed #000'; + }); + + el.addEventListener('dragleave', function(e) { + el.style.border = '1px solid #eee'; + }); + + el.addEventListener('dragstop', function(e) { + el.style.border = '1px solid #eee'; + }); + + el.addEventListener('dragover', function(e) { + e.preventDefault(); + }); + + el.addEventListener('drop', function(e) { + e.preventDefault(); + e.stopPropagation(); + + var data = e.dataTransfer.getData('text/html'); + if (! data) { + for (var i = 0; i < e.dataTransfer.files.length; i++) { + obj.addFromFile(e.dataTransfer.files[i]); + } + } else { + if (obj.options.singleFile == true) { + el.innerHTML = ''; + } + + var template = document.createElement('template'); + template.innerHTML = data.trim(); + data = template.content.firstChild; + + var img = document.createElement('img'); + img.setAttribute('data-lastModified', ''); + img.setAttribute('data-name', ''); + img.setAttribute('data-size', ''); + el.appendChild(img); + + if (data.src.substr(0,4) == 'data') { + img.setAttribute('src', data.src); + img.setAttribute('data-size', data.src.length); + + if (typeof(obj.options.onchange) == 'function') { + obj.options.onchange(img); + } + } else { + var name = data.src.split('/'); + name = name[name.length-1]; + img.setAttribute('data-name', name); + + const toDataURL = url => fetch(url) + .then(response => response.blob()) + .then(blob => new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onloadend = () => resolve(reader.result); + reader.onerror = reject; + reader.readAsDataURL(blob); + })); + + toDataURL(obj.options.parser + data.src).then(dataUrl => { + img.setAttribute('src', dataUrl); + img.setAttribute('data-size', dataUrl.length); + + setTimeout(function() { + if (parseInt(img.width) < 800) { + img.remove(); + alert(obj.options.imageTooSmall); + } else { + if (typeof(obj.options.onchange) == 'function') { + obj.options.onchange(img); + } + } + }, 0); + }); + } + } + + el.style.border = '1px solid #eee'; + + return false; + }); + + el.image = obj; + + return obj; + }); + /** * (c) jLoading * https://github.com/paulhodel/jtools @@ -2652,620 +2652,620 @@ }; return obj; - })(); - - /** - * (c) jTools Input Mask - * https://github.com/paulhodel/jtools - * - * @author: Paul Hodel <paul.hodel@gmail.com> - * @description: Input mask - */ - - jSuites.mask = (function() { - var obj = {}; - var index = 0; - var values = [] - var pieces = []; - - obj.run = function(value, mask, decimal) { - if (value && mask) { - if (! decimal) { - decimal = '.'; - } - if (value == Number(value)) { - var number = (''+value).split('.'); - var value = number[0]; - var valueDecimal = number[1]; - } else { - value = '' + value; - } - index = 0; - values = []; - // Create mask token - obj.prepare(mask); - // Current value - var currentValue = value; - if (currentValue) { - // Checking current value - for (var i = 0; i < currentValue.length; i++) { - if (currentValue[i] != null) { - obj.process(currentValue[i]); - } - } - } - if (valueDecimal) { - obj.process(decimal); - var currentValue = valueDecimal; - if (currentValue) { - // Checking current value - for (var i = 0; i < currentValue.length; i++) { - if (currentValue[i] != null) { - obj.process(currentValue[i]); - } - } - } - } - // Formatted value - return values.join(''); - } else { - return ''; - } - } - - obj.apply = function(e) { - var mask = e.target.getAttribute('data-mask'); - if (mask && e.keyCode > 46) { - index = 0; - values = []; - // Create mask token - obj.prepare(mask); - // Current value - var currentValue = e.target.value; - if (currentValue) { - // Checking current value - for (var i = 0; i < currentValue.length; i++) { - if (currentValue[i] != null) { - obj.process(currentValue[i]); - } - } - } - // New input - obj.process(obj.fromKeyCode(e)); - // Update value to the element - e.target.value = values.join(''); - if (pieces.length == values.length && pieces[pieces.length-1].length == values[values.length-1].length) { - e.target.setAttribute('data-completed', 'true'); - } else { - e.target.setAttribute('data-completed', 'false'); - } - // Prevent default - e.preventDefault(); - } - } - - /** - * Process inputs and save to values - */ - obj.process = function(input) { - do { - if (pieces[index] == 'mm') { - if (values[index] == null || values[index] == '') { - if (parseInt(input) > 1 && parseInt(input) < 10) { - values[index] = '0' + input; - index++; - return true; - } else if (parseInt(input) < 10) { - values[index] = input; - return true; - } else { - return false; - } - } else { - if (values[index] == 1 && values[index] < 2 && parseInt(input) < 3) { - values[index] += input; - index++; - return true; - } else if (values[index] == 0 && values[index] < 10) { - values[index] += input; - index++; - return true; - } else { - return false - } - } - } else if (pieces[index] == 'dd') { - if (values[index] == null || values[index] == '') { - if (parseInt(input) > 3 && parseInt(input) < 10) { - values[index] = '0' + input; - index++; - return true; - } else if (parseInt(input) < 10) { - values[index] = input; - return true; - } else { - return false; - } - } else { - if (values[index] == 3 && parseInt(input) < 2) { - values[index] += input; - index++; - return true; - } else if (values[index] < 3 && parseInt(input) < 10) { - values[index] += input; - index++; - return true; - } else { - return false - } - } - } else if (pieces[index] == 'hh24') { - if (values[index] == null || values[index] == '') { - if (parseInt(input) > 2 && parseInt(input) < 10) { - values[index] = '0' + input; - index++; - return true; - } else if (parseInt(input) < 10) { - values[index] = input; - return true; - } else { - return false; - } - } else { - if (values[index] == 2 && parseInt(input) < 4) { - values[index] += input; - index++; - return true; - } else if (values[index] < 2 && parseInt(input) < 10) { - values[index] += input; - index++; - return true; - } else { - return false - } - } - } else if (pieces[index] == 'hh') { - if (values[index] == null || values[index] == '') { - if (parseInt(input) > 1 && parseInt(input) < 10) { - values[index] = '0' + input; - index++; - return true; - } else if (parseInt(input) < 10) { - values[index] = input; - return true; - } else { - return false; - } - } else { - if (values[index] == 1 && parseInt(input) < 3) { - values[index] += input; - index++; - return true; - } else if (values[index] < 1 && parseInt(input) < 10) { - values[index] += input; - index++; - return true; - } else { - return false - } - } - } else if (pieces[index] == 'mi' || pieces[index] == 'ss') { - if (values[index] == null || values[index] == '') { - if (parseInt(input) > 5 && parseInt(input) < 10) { - values[index] = '0' + input; - index++; - return true; - } else if (parseInt(input) < 10) { - values[index] = input; - return true; - } else { - return false; - } - } else { - if (parseInt(input) < 10) { - values[index] += input; - index++; - return true; - } else { - return false - } - } - } else if (pieces[index] == 'yy' || pieces[index] == 'yyyy') { - if (parseInt(input) < 10) { - if (values[index] == null || values[index] == '') { - values[index] = input; - } else { - values[index] += input; - } - - if (values[index].length == pieces[index].length) { - index++; - } - return true; - } else { - return false; - } - } else if (pieces[index] == '#' || pieces[index] == '#.##' || pieces[index] == '#,##') { - if (input.match(/[0-9]/g)) { - if (pieces[index] == '#.##') { - var separator = '.'; - } else if (pieces[index] == '#,##') { - var separator = ','; - } else { - var separator = ''; - } - if (values[index] == null || values[index] == '') { - values[index] = input; - } else { - values[index] += input; - if (separator) { - values[index] = values[index].match(/[0-9]/g).join(''); - var t = []; - var s = 0; - for (var j = values[index].length - 1; j >= 0 ; j--) { - t.push(values[index][j]); - s++; - if (! (s % 3)) { - t.push(separator); - } - } - t = t.reverse(); - values[index] = t.join(''); - if (values[index].substr(0,1) == separator) { - values[index] = values[index].substr(1); - } - } - } - return true; - } else { - if (pieces[index] == '#.##' && input == '.') { - // Do nothing - } else if (pieces[index] == '#,##' && input == ',') { - // Do nothing - } else { - if (values[index]) { - index++; - if (pieces[index]) { - if (pieces[index] == input) { - values[index] = input; - return true; - } else { - if (pieces[index] == '0' && pieces[index+1] == input) { - index++; - values[index] = input; - return true; - } - } - } - } - } - - return false; - } - } else if (pieces[index] == '0') { - if (input.match(/[0-9]/g)) { - values[index] = input; - index++; - return true; - } else { - return false; - } - } else if (pieces[index] == 'a') { - if (input.match(/[a-zA-Z]/g)) { - values[index] = input; - index++; - return true; - } else { - return false; - } - } else { - if (pieces[index] != null) { - if (pieces[index] == '\\a') { - var v = 'a'; - } else if (pieces[index] == '\\0') { - var v = '0'; - } else { - var v = pieces[index]; - } - values[index] = v; - if (input == v) { - index++; - return true; - } - } - } - - index++; - } while (pieces[index]); - } - - /** - * Create tokens for the mask - */ - obj.prepare = function(mask) { - pieces = []; - for (var i = 0; i < mask.length; i++) { - if (mask[i].match(/[0-9]|[a-z]|\\/g)) { - if (mask[i] == 'y' && mask[i+1] == 'y' && mask[i+2] == 'y' && mask[i+3] == 'y') { - pieces.push('yyyy'); - i += 3; - } else if (mask[i] == 'y' && mask[i+1] == 'y') { - pieces.push('yy'); - i++; - } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm' && mask[i+3] == 'm') { - pieces.push('mmmm'); - i += 3; - } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm') { - pieces.push('mmm'); - i += 2; - } else if (mask[i] == 'm' && mask[i+1] == 'm') { - pieces.push('mm'); - i++; - } else if (mask[i] == 'd' && mask[i+1] == 'd') { - pieces.push('dd'); - i++; - } else if (mask[i] == 'h' && mask[i+1] == 'h' && mask[i+2] == '2' && mask[i+3] == '4') { - pieces.push('hh24'); - i += 3; - } else if (mask[i] == 'h' && mask[i+1] == 'h') { - pieces.push('hh'); - i++; - } else if (mask[i] == 'm' && mask[i+1] == 'i') { - pieces.push('mi'); - i++; - } else if (mask[i] == 's' && mask[i+1] == 's') { - pieces.push('ss'); - i++; - } else if (mask[i] == 'a' && mask[i+1] == 'm') { - pieces.push('am'); - i++; - } else if (mask[i] == 'p' && mask[i+1] == 'm') { - pieces.push('pm'); - i++; - } else if (mask[i] == '\\' && mask[i+1] == '0') { - pieces.push('\\0'); - i++; - } else if (mask[i] == '\\' && mask[i+1] == 'a') { - pieces.push('\\a'); - i++; - } else { - pieces.push(mask[i]); - } - } else { - if (mask[i] == '#' && mask[i+1] == '.' && mask[i+2] == '#' && mask[i+3] == '#') { - pieces.push('#.##'); - i += 3; - } else if (mask[i] == '#' && mask[i+1] == ',' && mask[i+2] == '#' && mask[i+3] == '#') { - pieces.push('#,##'); - i += 3; - } else { - pieces.push(mask[i]); - } - } - } - } - - /** - * Thanks for the collaboration - */ - obj.fromKeyCode = function(e) { - var _to_ascii = { - '188': '44', - '109': '45', - '190': '46', - '191': '47', - '192': '96', - '220': '92', - '222': '39', - '221': '93', - '219': '91', - '173': '45', - '187': '61', //IE Key codes - '186': '59', //IE Key codes - '189': '45' //IE Key codes - } - - var shiftUps = { - "96": "~", - "49": "!", - "50": "@", - "51": "#", - "52": "$", - "53": "%", - "54": "^", - "55": "&", - "56": "*", - "57": "(", - "48": ")", - "45": "_", - "61": "+", - "91": "{", - "93": "}", - "92": "|", - "59": ":", - "39": "\"", - "44": "<", - "46": ">", - "47": "?" - }; - - var c = e.which; - - if (_to_ascii.hasOwnProperty(c)) { - c = _to_ascii[c]; - } - - if (!e.shiftKey && (c >= 65 && c <= 90)) { - c = String.fromCharCode(c + 32); - } else if (e.shiftKey && shiftUps.hasOwnProperty(c)) { - c = shiftUps[c]; - } else if (96 <= c && c <= 105) { - c = String.fromCharCode(c - 48); - } else { - c = String.fromCharCode(c); - } - - return c; - } - - return obj; - })(); - - /** - * (c) jSuites modal - * https://github.com/paulhodel/jsuites - * - * @author: Paul Hodel <paul.hodel@gmail.com> - * @description: Modal - */ - - jSuites.modal = (function(el, options) { - var obj = {}; - obj.options = {}; - - // Default configuration - var defaults = { - // Events - onopen:null, - onclose:null, - closed:false, - width:null, - height:null, - title:null, - }; - - // Loop through our object - for (var property in defaults) { - if (options && options.hasOwnProperty(property)) { - obj.options[property] = options[property]; - } else { - obj.options[property] = defaults[property]; - } - } - - el.classList.add('jmodal'); - - if (obj.options.title) { - el.setAttribute('title', obj.options.title); - } - if (obj.options.width) { - el.style.width = obj.options.width; - } - if (obj.options.height) { - el.style.height = obj.options.height; - } - - var container = document.createElement('div'); - for (var i = 0; i < el.children.length; i++) { - container.appendChild(el.children[i]); - } - el.appendChild(container); - - // Title - if (! el.getAttribute('title')) { - el.classList.add('no-title'); - } - - if (! obj.options.closed) { - el.style.display = 'block'; - } - - obj.open = function() { - el.style.display = 'block'; - - if (typeof(obj.options.onopen) == 'function') { - obj.options.onopen(el); - } - // Backdrop - document.body.appendChild(jSuites.backdrop); - - // Current - jSuites.modal.current = el; - } - - obj.close = function() { - el.style.display = 'none'; - - if (typeof(obj.options.onclose) == 'function') { - obj.options.onclose(el); - } - // Backdrop - jSuites.backdrop.remove(); - - // Current - jSuites.modal.current = null; - } - - if (! jSuites.modal.hasEvents) { - jSuites.modal.current = el; - - document.addEventListener('mousedown', jSuites.modal.mouseDownControls); - document.addEventListener('mousemove', jSuites.modal.mouseMoveControls); - document.addEventListener('mouseup', jSuites.modal.mouseUpControls); - - jSuites.modal.hasEvents = true; - } - - // Keep object available from the node - el.modal = obj; - - return obj; - }); - - jSuites.modal.current = null; - jSuites.modal.position = null; - - jSuites.modal.mouseUpControls = function(e) { - if (jSuites.modal.current) { - jSuites.modal.current.style.cursor = 'auto'; - } - jSuites.modal.position = null; - } - - jSuites.modal.mouseMoveControls = function(e) { - if (jSuites.modal.current && jSuites.modal.position) { - if (e.which == 1 || e.which == 3) { - var position = jSuites.modal.position; - jSuites.modal.current.style.top = (position[1] + (e.clientY - position[3]) + (position[5] / 2)) + 'px'; - jSuites.modal.current.style.left = (position[0] + (e.clientX - position[2]) + (position[4] / 2)) + 'px'; - jSuites.modal.current.style.cursor = 'move'; - } else { - jSuites.modal.current.style.cursor = 'auto'; - } - } - } - - jSuites.modal.mouseDownControls = function(e) { - jSuites.modal.position = []; - - if (e.target.classList.contains('jmodal')) { - setTimeout(function() { - - var rect = e.target.getBoundingClientRect(); - if (rect.width - (e.clientX - rect.left) < 50 && e.clientY - rect.top < 50) { - e.target.modal.close(); - } else { - if (e.target.getAttribute('title') && e.clientY - rect.top < 50) { - if (document.selection) { - document.selection.empty(); - } else if ( window.getSelection ) { - window.getSelection().removeAllRanges(); - } - - jSuites.modal.position = [ - rect.left, - rect.top, - e.clientX, - e.clientY, - rect.width, - rect.height, - ]; - } - } - }, 100); - } - } - - return jSuites; - + })(); + + /** + * (c) jTools Input Mask + * https://github.com/paulhodel/jtools + * + * @author: Paul Hodel <paul.hodel@gmail.com> + * @description: Input mask + */ + + jSuites.mask = (function() { + var obj = {}; + var index = 0; + var values = [] + var pieces = []; + + obj.run = function(value, mask, decimal) { + if (value && mask) { + if (! decimal) { + decimal = '.'; + } + if (value == Number(value)) { + var number = (''+value).split('.'); + var value = number[0]; + var valueDecimal = number[1]; + } else { + value = '' + value; + } + index = 0; + values = []; + // Create mask token + obj.prepare(mask); + // Current value + var currentValue = value; + if (currentValue) { + // Checking current value + for (var i = 0; i < currentValue.length; i++) { + if (currentValue[i] != null) { + obj.process(currentValue[i]); + } + } + } + if (valueDecimal) { + obj.process(decimal); + var currentValue = valueDecimal; + if (currentValue) { + // Checking current value + for (var i = 0; i < currentValue.length; i++) { + if (currentValue[i] != null) { + obj.process(currentValue[i]); + } + } + } + } + // Formatted value + return values.join(''); + } else { + return ''; + } + } + + obj.apply = function(e) { + var mask = e.target.getAttribute('data-mask'); + if (mask && e.keyCode > 46) { + index = 0; + values = []; + // Create mask token + obj.prepare(mask); + // Current value + var currentValue = e.target.value; + if (currentValue) { + // Checking current value + for (var i = 0; i < currentValue.length; i++) { + if (currentValue[i] != null) { + obj.process(currentValue[i]); + } + } + } + // New input + obj.process(obj.fromKeyCode(e)); + // Update value to the element + e.target.value = values.join(''); + if (pieces.length == values.length && pieces[pieces.length-1].length == values[values.length-1].length) { + e.target.setAttribute('data-completed', 'true'); + } else { + e.target.setAttribute('data-completed', 'false'); + } + // Prevent default + e.preventDefault(); + } + } + + /** + * Process inputs and save to values + */ + obj.process = function(input) { + do { + if (pieces[index] == 'mm') { + if (values[index] == null || values[index] == '') { + if (parseInt(input) > 1 && parseInt(input) < 10) { + values[index] = '0' + input; + index++; + return true; + } else if (parseInt(input) < 10) { + values[index] = input; + return true; + } else { + return false; + } + } else { + if (values[index] == 1 && values[index] < 2 && parseInt(input) < 3) { + values[index] += input; + index++; + return true; + } else if (values[index] == 0 && values[index] < 10) { + values[index] += input; + index++; + return true; + } else { + return false + } + } + } else if (pieces[index] == 'dd') { + if (values[index] == null || values[index] == '') { + if (parseInt(input) > 3 && parseInt(input) < 10) { + values[index] = '0' + input; + index++; + return true; + } else if (parseInt(input) < 10) { + values[index] = input; + return true; + } else { + return false; + } + } else { + if (values[index] == 3 && parseInt(input) < 2) { + values[index] += input; + index++; + return true; + } else if (values[index] < 3 && parseInt(input) < 10) { + values[index] += input; + index++; + return true; + } else { + return false + } + } + } else if (pieces[index] == 'hh24') { + if (values[index] == null || values[index] == '') { + if (parseInt(input) > 2 && parseInt(input) < 10) { + values[index] = '0' + input; + index++; + return true; + } else if (parseInt(input) < 10) { + values[index] = input; + return true; + } else { + return false; + } + } else { + if (values[index] == 2 && parseInt(input) < 4) { + values[index] += input; + index++; + return true; + } else if (values[index] < 2 && parseInt(input) < 10) { + values[index] += input; + index++; + return true; + } else { + return false + } + } + } else if (pieces[index] == 'hh') { + if (values[index] == null || values[index] == '') { + if (parseInt(input) > 1 && parseInt(input) < 10) { + values[index] = '0' + input; + index++; + return true; + } else if (parseInt(input) < 10) { + values[index] = input; + return true; + } else { + return false; + } + } else { + if (values[index] == 1 && parseInt(input) < 3) { + values[index] += input; + index++; + return true; + } else if (values[index] < 1 && parseInt(input) < 10) { + values[index] += input; + index++; + return true; + } else { + return false + } + } + } else if (pieces[index] == 'mi' || pieces[index] == 'ss') { + if (values[index] == null || values[index] == '') { + if (parseInt(input) > 5 && parseInt(input) < 10) { + values[index] = '0' + input; + index++; + return true; + } else if (parseInt(input) < 10) { + values[index] = input; + return true; + } else { + return false; + } + } else { + if (parseInt(input) < 10) { + values[index] += input; + index++; + return true; + } else { + return false + } + } + } else if (pieces[index] == 'yy' || pieces[index] == 'yyyy') { + if (parseInt(input) < 10) { + if (values[index] == null || values[index] == '') { + values[index] = input; + } else { + values[index] += input; + } + + if (values[index].length == pieces[index].length) { + index++; + } + return true; + } else { + return false; + } + } else if (pieces[index] == '#' || pieces[index] == '#.##' || pieces[index] == '#,##') { + if (input.match(/[0-9]/g)) { + if (pieces[index] == '#.##') { + var separator = '.'; + } else if (pieces[index] == '#,##') { + var separator = ','; + } else { + var separator = ''; + } + if (values[index] == null || values[index] == '') { + values[index] = input; + } else { + values[index] += input; + if (separator) { + values[index] = values[index].match(/[0-9]/g).join(''); + var t = []; + var s = 0; + for (var j = values[index].length - 1; j >= 0 ; j--) { + t.push(values[index][j]); + s++; + if (! (s % 3)) { + t.push(separator); + } + } + t = t.reverse(); + values[index] = t.join(''); + if (values[index].substr(0,1) == separator) { + values[index] = values[index].substr(1); + } + } + } + return true; + } else { + if (pieces[index] == '#.##' && input == '.') { + // Do nothing + } else if (pieces[index] == '#,##' && input == ',') { + // Do nothing + } else { + if (values[index]) { + index++; + if (pieces[index]) { + if (pieces[index] == input) { + values[index] = input; + return true; + } else { + if (pieces[index] == '0' && pieces[index+1] == input) { + index++; + values[index] = input; + return true; + } + } + } + } + } + + return false; + } + } else if (pieces[index] == '0') { + if (input.match(/[0-9]/g)) { + values[index] = input; + index++; + return true; + } else { + return false; + } + } else if (pieces[index] == 'a') { + if (input.match(/[a-zA-Z]/g)) { + values[index] = input; + index++; + return true; + } else { + return false; + } + } else { + if (pieces[index] != null) { + if (pieces[index] == '\\a') { + var v = 'a'; + } else if (pieces[index] == '\\0') { + var v = '0'; + } else { + var v = pieces[index]; + } + values[index] = v; + if (input == v) { + index++; + return true; + } + } + } + + index++; + } while (pieces[index]); + } + + /** + * Create tokens for the mask + */ + obj.prepare = function(mask) { + pieces = []; + for (var i = 0; i < mask.length; i++) { + if (mask[i].match(/[0-9]|[a-z]|\\/g)) { + if (mask[i] == 'y' && mask[i+1] == 'y' && mask[i+2] == 'y' && mask[i+3] == 'y') { + pieces.push('yyyy'); + i += 3; + } else if (mask[i] == 'y' && mask[i+1] == 'y') { + pieces.push('yy'); + i++; + } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm' && mask[i+3] == 'm') { + pieces.push('mmmm'); + i += 3; + } else if (mask[i] == 'm' && mask[i+1] == 'm' && mask[i+2] == 'm') { + pieces.push('mmm'); + i += 2; + } else if (mask[i] == 'm' && mask[i+1] == 'm') { + pieces.push('mm'); + i++; + } else if (mask[i] == 'd' && mask[i+1] == 'd') { + pieces.push('dd'); + i++; + } else if (mask[i] == 'h' && mask[i+1] == 'h' && mask[i+2] == '2' && mask[i+3] == '4') { + pieces.push('hh24'); + i += 3; + } else if (mask[i] == 'h' && mask[i+1] == 'h') { + pieces.push('hh'); + i++; + } else if (mask[i] == 'm' && mask[i+1] == 'i') { + pieces.push('mi'); + i++; + } else if (mask[i] == 's' && mask[i+1] == 's') { + pieces.push('ss'); + i++; + } else if (mask[i] == 'a' && mask[i+1] == 'm') { + pieces.push('am'); + i++; + } else if (mask[i] == 'p' && mask[i+1] == 'm') { + pieces.push('pm'); + i++; + } else if (mask[i] == '\\' && mask[i+1] == '0') { + pieces.push('\\0'); + i++; + } else if (mask[i] == '\\' && mask[i+1] == 'a') { + pieces.push('\\a'); + i++; + } else { + pieces.push(mask[i]); + } + } else { + if (mask[i] == '#' && mask[i+1] == '.' && mask[i+2] == '#' && mask[i+3] == '#') { + pieces.push('#.##'); + i += 3; + } else if (mask[i] == '#' && mask[i+1] == ',' && mask[i+2] == '#' && mask[i+3] == '#') { + pieces.push('#,##'); + i += 3; + } else { + pieces.push(mask[i]); + } + } + } + } + + /** + * Thanks for the collaboration + */ + obj.fromKeyCode = function(e) { + var _to_ascii = { + '188': '44', + '109': '45', + '190': '46', + '191': '47', + '192': '96', + '220': '92', + '222': '39', + '221': '93', + '219': '91', + '173': '45', + '187': '61', //IE Key codes + '186': '59', //IE Key codes + '189': '45' //IE Key codes + } + + var shiftUps = { + "96": "~", + "49": "!", + "50": "@", + "51": "#", + "52": "$", + "53": "%", + "54": "^", + "55": "&", + "56": "*", + "57": "(", + "48": ")", + "45": "_", + "61": "+", + "91": "{", + "93": "}", + "92": "|", + "59": ":", + "39": "\"", + "44": "<", + "46": ">", + "47": "?" + }; + + var c = e.which; + + if (_to_ascii.hasOwnProperty(c)) { + c = _to_ascii[c]; + } + + if (!e.shiftKey && (c >= 65 && c <= 90)) { + c = String.fromCharCode(c + 32); + } else if (e.shiftKey && shiftUps.hasOwnProperty(c)) { + c = shiftUps[c]; + } else if (96 <= c && c <= 105) { + c = String.fromCharCode(c - 48); + } else { + c = String.fromCharCode(c); + } + + return c; + } + + return obj; + })(); + + /** + * (c) jSuites modal + * https://github.com/paulhodel/jsuites + * + * @author: Paul Hodel <paul.hodel@gmail.com> + * @description: Modal + */ + + jSuites.modal = (function(el, options) { + var obj = {}; + obj.options = {}; + + // Default configuration + var defaults = { + // Events + onopen:null, + onclose:null, + closed:false, + width:null, + height:null, + title:null, + }; + + // Loop through our object + for (var property in defaults) { + if (options && options.hasOwnProperty(property)) { + obj.options[property] = options[property]; + } else { + obj.options[property] = defaults[property]; + } + } + + el.classList.add('jmodal'); + + if (obj.options.title) { + el.setAttribute('title', obj.options.title); + } + if (obj.options.width) { + el.style.width = obj.options.width; + } + if (obj.options.height) { + el.style.height = obj.options.height; + } + + var container = document.createElement('div'); + for (var i = 0; i < el.children.length; i++) { + container.appendChild(el.children[i]); + } + el.appendChild(container); + + // Title + if (! el.getAttribute('title')) { + el.classList.add('no-title'); + } + + if (! obj.options.closed) { + el.style.display = 'block'; + } + + obj.open = function() { + el.style.display = 'block'; + + if (typeof(obj.options.onopen) == 'function') { + obj.options.onopen(el); + } + // Backdrop + document.body.appendChild(jSuites.backdrop); + + // Current + jSuites.modal.current = el; + } + + obj.close = function() { + el.style.display = 'none'; + + if (typeof(obj.options.onclose) == 'function') { + obj.options.onclose(el); + } + // Backdrop + jSuites.backdrop.remove(); + + // Current + jSuites.modal.current = null; + } + + if (! jSuites.modal.hasEvents) { + jSuites.modal.current = el; + + document.addEventListener('mousedown', jSuites.modal.mouseDownControls); + document.addEventListener('mousemove', jSuites.modal.mouseMoveControls); + document.addEventListener('mouseup', jSuites.modal.mouseUpControls); + + jSuites.modal.hasEvents = true; + } + + // Keep object available from the node + el.modal = obj; + + return obj; + }); + + jSuites.modal.current = null; + jSuites.modal.position = null; + + jSuites.modal.mouseUpControls = function(e) { + if (jSuites.modal.current) { + jSuites.modal.current.style.cursor = 'auto'; + } + jSuites.modal.position = null; + } + + jSuites.modal.mouseMoveControls = function(e) { + if (jSuites.modal.current && jSuites.modal.position) { + if (e.which == 1 || e.which == 3) { + var position = jSuites.modal.position; + jSuites.modal.current.style.top = (position[1] + (e.clientY - position[3]) + (position[5] / 2)) + 'px'; + jSuites.modal.current.style.left = (position[0] + (e.clientX - position[2]) + (position[4] / 2)) + 'px'; + jSuites.modal.current.style.cursor = 'move'; + } else { + jSuites.modal.current.style.cursor = 'auto'; + } + } + } + + jSuites.modal.mouseDownControls = function(e) { + jSuites.modal.position = []; + + if (e.target.classList.contains('jmodal')) { + setTimeout(function() { + + var rect = e.target.getBoundingClientRect(); + if (rect.width - (e.clientX - rect.left) < 50 && e.clientY - rect.top < 50) { + e.target.modal.close(); + } else { + if (e.target.getAttribute('title') && e.clientY - rect.top < 50) { + if (document.selection) { + document.selection.empty(); + } else if ( window.getSelection ) { + window.getSelection().removeAllRanges(); + } + + jSuites.modal.position = [ + rect.left, + rect.top, + e.clientX, + e.clientY, + rect.width, + rect.height, + ]; + } + } + }, 100); + } + } + + return jSuites; + }))); \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2 b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2 rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/material-icons.css b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/material-icons.css similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/material-icons.css rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/material-icons/material-icons.css diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/mozilla/js/infra.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/mozilla/js/infra.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/mozilla/js/infra.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/mozilla/js/infra.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/VERSION.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/VERSION.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/VERSION.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/VERSION.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/js/naturalSort.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/js/naturalSort.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/js/naturalSort.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/naturalsort/js/naturalSort.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.LICENSE.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.LICENSE.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.LICENSE.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.LICENSE.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.map b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.map similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.map rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/Grid.js.map diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.development.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.development.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.development.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.development.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.production.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.production.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.production.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react-dom.production.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.development.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.development.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.development.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.development.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.production.min.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.production.min.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.production.min.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/lib/react/react.production.min.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/paper.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/paper.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/paper.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/paper.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/BBBServerFacade.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/BBBServerFacade.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/BBBServerFacade.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/BBBServerFacade.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/UiComponents.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/UiComponents.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/UiComponents.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/UiComponents.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/plugin.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/plugin.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/plugin.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-table.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-table.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-table.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-table.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-trigger.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-trigger.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-trigger.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/snakemake-trigger.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/BBBHub_EXPERIMENT_DEFINITION.zip b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/BBBHub_EXPERIMENT_DEFINITION.zip similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/BBBHub_EXPERIMENT_DEFINITION.zip rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/BBBHub_EXPERIMENT_DEFINITION.zip diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub-icon.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub-icon.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub-icon.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub-icon.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/bbb-hub.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-0.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-0.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-0.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-0.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-1.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-1.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-1.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-1.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-2.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-2.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-2.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-2.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-3.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-3.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-3.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-3.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-4.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-4.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-4.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-4.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-5.png b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-5.png similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-5.png rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload-5.png diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help-upload.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/bbb-hub/www/help.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/flow/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/flow/plugin.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/flow/plugin.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/flow/plugin.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/generic/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/generic/plugin.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/generic/plugin.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/generic/plugin.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/life-sciences/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/life-sciences/plugin.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/life-sciences/plugin.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/life-sciences/plugin.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/microscopy/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/microscopy/plugin.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/microscopy/plugin.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/microscopy/plugin.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/plugin.js b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/plugin.js similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/plugin.js rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/plugin.js diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/www/template.html b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/www/template.html similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/www/template.html rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/plugins/template-extra-utilities/www/template.html diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/version.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/version.txt similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/version.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/html/version.txt diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/as/webapps/eln-lims/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/core-plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/core-plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/core-plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/core-plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/eln-lims-dropbox-marker.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/eln-lims-dropbox-marker.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/eln-lims-dropbox-marker.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/eln-lims-dropbox-marker.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox-marker/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/eln-lims-dropbox.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/eln-lims-dropbox.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/eln-lims-dropbox.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/eln-lims-dropbox.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/drop-boxes/eln-lims-dropbox/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/plugin.properties diff --git a/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/flow.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/flow.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/microscopy.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/microscopy.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/microscopy.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/resolver-plugins/microscopy.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/script.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/script.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/file-system-plugins/eln-tree/script.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/maintenance-tasks/blastdb/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/maintenance-tasks/blastdb/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/maintenance-tasks/blastdb/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/maintenance-tasks/blastdb/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/archiving-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/archiving-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/archiving-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/archiving-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoBuilder.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoBuilder.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoBuilder.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoBuilder.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoObject.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoObject.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoObject.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/DetailInfoObject.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoBuilder.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoBuilder.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoBuilder.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoBuilder.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoObject.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoObject.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoObject.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/SimpleInfoObject.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/Util.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/Util.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/Util.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/Util.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/script.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/script.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/dropbox-monitor-api/script.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt similarity index 97% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt index 37632244cd498ae2093f51b3ae8c2b975bf9f4e2..6e9a4bd1c0c96614a118cc7df8f371dedd5e2441 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23-licence.txt @@ -1,34 +1,34 @@ -Copyright (c) 2006-2019, the HTMLCleaner project -All rights reserved. - -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the following -conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* The name of HtmlCleaner may not be used to endorse or promote - products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -Report any issues and contact the developers through Sourceforge at +Copyright (c) 2006-2019, the HTMLCleaner project +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* The name of HtmlCleaner may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Report any issues and contact the developers through Sourceforge at https://sourceforge.net/projects/htmlcleaner/ \ No newline at end of file diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/htmlcleaner-2.23.jar diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.java b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.java similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.java rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.java diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.sh b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.sh similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.sh rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/PlasmapperConnector.sh diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta similarity index 98% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta index 190e2431671ab6769c9d1564b5594ec25a1d5514..ee4455e26b4088ea22fb1d4d8fca9850285e1716 100644 --- a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta +++ b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper-source/testdata/FRP1955.fasta @@ -1,72 +1,72 @@ ->Act1_mkokappa (5632 bp) -GACGTCGAAAGAACGCGGCATTAGCAACATTTGCGAAGCGAACGATTTTGCGAACTGCTATTAATTAActctGGCGCGcc -actactttttggaactcttgttgttctttggagttcaatgcgtccatctttacagtcctgtcttattgttcttgatttgt -gccccgtaaaatactgttacttggttctggcgaggtattggatagttcctttttataaaggccatgaagGtttttctttc -caattttttttttttcgtcattatagaaatcattacgaccgagattcccggCATATGGTAATAACTGATATAATTAAATT -GAAGCTCTAATTTGTGAGTTTAGTATACATGCATTTACTTATAATACAGTTTTTTAGTTTTGCTGGCCGCATCTTCTCAA -ATATGCTTCCCAGCCTGCTTTTCTGTAACGTTCACCCTCTACCTTAGCATCCCTTCCCTTTGCAAATAGTCCTCTTCCAA -CAATAATAATGTCAGATCCTGTAGAGACCACATCATCCACGGTTCTATACTGTTGACCCAATGCGTCTCCCTTGTCATCT -AAACCCACACCGGGTGTCATAATCAACCAATCGTAACCTTCATCTCTTCCACCCATGTCTCTTTGAGCAATAAAGCCGAT -AACAAAATCTTTGTCGCTCTTCGCAATGTCAACAGTACCCTTAGTATATTCTCCAGTAGCTAGGGAGCCCTTGCATGACA -ATTCTGCTAACATCAAAAGGCCTCTAGGTTCCTTTGTTACTTCTTCCGCCGCCTGCTTCAAACCGCTAACAATACCTGGG -CCCACCACACCGTGTGCATTCGTAATGTCTGCCCATTCTGCTATTCTGTATACACACGCAGAGTACTGCAATTTGACTGT -ATTACCAATGTCAGCAAATTTTCTGTCTTCGAAGAGTAAAAAATTGTACTTGGCGGATAATGCCTTTAGCGGCTTAACTG -TGCCCTCCATGGAAAAATCAGTCAAGAGATCCACATGTGTTTTTAGTAAACAAATTTTGGGACCTAATGCTTCAACTAAC -TCCAGTAATTCCTTGGTGGTACGAACATCCAATGAAGCACACAAGTTTGTTTGCTTTTCGTGCATGATATTAAATAGCTT -GGCAGCAACAGGACTAGGATGAGTAGCAGCACGTTCCTTATATGTAGCTTTCGACATGATTTATCTTCGTTTCCTGCACG -TTTTTGTTCTGTGCAGTTGGGTTAAGAATACTGGGCAATTTCATGTTTCTTCAACACCACCTATGCGTATATATACCAAT -CTAAGTCTGTGCTCCTTCCTTCGTTCTTCCTTCTGCTCGGAGATTACCGAATCAAAAAAATTTCAAAGAAACCGGAATCA -AAAAAAAGAACAAAAAAAAAAAAGATGAATGAAAAGCGATCGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGG -TTTTCCCAGTCACGACGTTGTAAAACGACGGCCAGTGAATTGTAATACGACTCACTATAGGGCGAATTGGAGAAACAGAA -TAATATATAAACCTGTATAATATAACCTTGAAGACTATATTTCTTTTCGCGGCCGCCTATAGGGCGAATTGGAGCTCCAC -CGCGGTGGCGGCCGCTCTAGAGAAGCGGGTAAGCTGCCACAGCAATTAATGCACAACATTTAACCTACATTCTTCCTTAT -CGGATCgTCAAAACCCTTAAAAAgATATGCCTCACCCTAACATATTTTCCAATTAACCCTCAATATTTCTCTGTCACCCG -GCCTCTATTTTCCATTTTCTTCTTTACCCGCCACGCGTTTTTTTCTTTCAAATTTTTTTCTTCCTTCTTCTTTTTCTTCC -ACGTCCTCTTGCATAAATAAATAAACCGTTTTGAAACCAAACTCGCCTCTCTCTCTCCTTTTTGAAATATTTTTGGGTTT -GTTTGATCCTTTCCTTCCCAATCTCTCTTGTTTAATATATATTCATTTATATCACGCTCTCTTTTTATCTTCCTTTTTTT -CCTCTCTCTTGTATTCTTCCTTCCCCTTTCTACTCAAACCAAGAAGAAAAAGAAAAGGTCAATCTTTGTTAAAGAATAGG -ATCTTCTACTACATCAGCTTTTAGATTTTTCACGCTTACTGCTTTTTTCTTCCCAAGATCGAAAATTTACTGAATTAACA -ACTAGTGGATCCCCCGGGCTGCAGGAATTCGATATCAagctTATGAGATCTGTTTCTGTTATTAAGCCAGAAATGAAGAT -GAGATATTACATGGATGGTTCTGTTAATGGTCATGAATTTACTATTGAAGGTGAAGGTACTGGTAGACCATATGAAGGTC -ATCAAGAAATGACTTTGAGAGTTACTATGGCTGAAGGTGGTCCAATGCCATTTGCTTTTGATTTGGTTTCTCATGTTTTT -TGTTACGGTCATAGAGTTTTTACAAAGTACCCAGAAGAAATTCCAGATTACTTTAAGCAAGCATTTCCAGAAGGTTTGTC -TTGGGAAAGATCATTGGAATTTGAAGATGGTGGTTCTGCTTCTGTTTCTGCTCATATTTCTTTGAGAGGTAACACTTTTT -ACCATAAGTCTAAGTTTACTGGTGTTAATTTTCCAGCTGATGGTCCAATTATGCAAAATCAATCTGTTGATTGGGAACCA -TCTACTGAAAAGATTACTGCTTCTGATGGTGTTTTGAAAGGTGATGTTACAATGTACTTGAAATTGGAAGGTGGTGGTAA -TCATAAATGTCAATTCAAGACTACTTATAAAGCTGCTGAAAAGATTTTGGAAATGCCAGGTGATCATTATATTGGTCATA -GATTGGTTAGAAAGACTGAAGGTAACATTACTGAACAAGTTGAAGATGCTGTTGCTCATTCTGGATCCTAGCtcgaGACA -GGCCCCTTTTCCTTTGTCtATATCATGTAATTAGTTATGTCACGCTTACATTCACGCCCTCCTCCCACATCCGCTCTAAC -CGAAAAGGAAGGAGTTAGACAACCTGAAGTCTAGGTCCCTATTTATTTTTTTTAATAGTTATGTTAGTATTAAGAACGTT -ATTTATATTTCAAATTTTTCTTTTTTTTCTGTACAAACGCGTGTACGCATGTAACATTATACTGAAAACCTTGCTTGAGA -AGGTTTTGGGACGCTCGAAGGCTTTAATTTGCAAGgTTCGCAGTTTACACTCTCATCGTCGCTCTCATCATCGCTTCCGT -TGTTGTTTTCCTTAGTAGCGTCTGCTTGGTACCCAGCTTCGGCCGTATTTACAGATAACGATGTCGTTATTATATATATA -TATATATATTGTCACTTGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTTCGAGCTTGGCGTAATCATGGTCATAG -CTGTTTCCTGTGTGAAATTGTTATCCGCTCACAACAGCTGgatgaattgaaTagctttatggaccctgaaaccacagcca -cattaaccttctttgatggtcaaaacttatccttcaccataaatatgcctcgcaaaaaaggtaattaacatatatagaat -tacattatttatgaaatatcatcactatctcttagcatctttaatccttttctacatcagataacttcggtttgttatca -tcgtctgtattgtcatcaattggCGCGCCtctcCCTGCAGGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTG -CGTATTGGGCGCTCTTCCGCTTCCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCA -CTCAAAGGCGGTAATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGG -CCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGC -TCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCC -TGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCT -GTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGC -GCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAG -GATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGAACAG -TATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACC -GCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTT -TTGTTTAAACCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAG -GATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACA -GTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTGACTCCCCGTC -GTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGC -TCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCC -AGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACA -GGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATC -CCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATGGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCAC -TCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCA -ACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACA -TAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGAT -CCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAA -ACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATA -TTATTGAAGCATTTATCAGGGTTATTGTCTCATGAGCGGATACATATTTGAATGTATTTAGAAAAATAAACAAATAGGGG -TTCCGCGCACATTTCCCCGAAAAGTGCCACCT +>Act1_mkokappa (5632 bp) +GACGTCGAAAGAACGCGGCATTAGCAACATTTGCGAAGCGAACGATTTTGCGAACTGCTATTAATTAActctGGCGCGcc +actactttttggaactcttgttgttctttggagttcaatgcgtccatctttacagtcctgtcttattgttcttgatttgt +gccccgtaaaatactgttacttggttctggcgaggtattggatagttcctttttataaaggccatgaagGtttttctttc +caattttttttttttcgtcattatagaaatcattacgaccgagattcccggCATATGGTAATAACTGATATAATTAAATT +GAAGCTCTAATTTGTGAGTTTAGTATACATGCATTTACTTATAATACAGTTTTTTAGTTTTGCTGGCCGCATCTTCTCAA +ATATGCTTCCCAGCCTGCTTTTCTGTAACGTTCACCCTCTACCTTAGCATCCCTTCCCTTTGCAAATAGTCCTCTTCCAA +CAATAATAATGTCAGATCCTGTAGAGACCACATCATCCACGGTTCTATACTGTTGACCCAATGCGTCTCCCTTGTCATCT +AAACCCACACCGGGTGTCATAATCAACCAATCGTAACCTTCATCTCTTCCACCCATGTCTCTTTGAGCAATAAAGCCGAT +AACAAAATCTTTGTCGCTCTTCGCAATGTCAACAGTACCCTTAGTATATTCTCCAGTAGCTAGGGAGCCCTTGCATGACA +ATTCTGCTAACATCAAAAGGCCTCTAGGTTCCTTTGTTACTTCTTCCGCCGCCTGCTTCAAACCGCTAACAATACCTGGG +CCCACCACACCGTGTGCATTCGTAATGTCTGCCCATTCTGCTATTCTGTATACACACGCAGAGTACTGCAATTTGACTGT +ATTACCAATGTCAGCAAATTTTCTGTCTTCGAAGAGTAAAAAATTGTACTTGGCGGATAATGCCTTTAGCGGCTTAACTG +TGCCCTCCATGGAAAAATCAGTCAAGAGATCCACATGTGTTTTTAGTAAACAAATTTTGGGACCTAATGCTTCAACTAAC +TCCAGTAATTCCTTGGTGGTACGAACATCCAATGAAGCACACAAGTTTGTTTGCTTTTCGTGCATGATATTAAATAGCTT +GGCAGCAACAGGACTAGGATGAGTAGCAGCACGTTCCTTATATGTAGCTTTCGACATGATTTATCTTCGTTTCCTGCACG +TTTTTGTTCTGTGCAGTTGGGTTAAGAATACTGGGCAATTTCATGTTTCTTCAACACCACCTATGCGTATATATACCAAT +CTAAGTCTGTGCTCCTTCCTTCGTTCTTCCTTCTGCTCGGAGATTACCGAATCAAAAAAATTTCAAAGAAACCGGAATCA +AAAAAAAGAACAAAAAAAAAAAAGATGAATGAAAAGCGATCGGATGTGCTGCAAGGCGATTAAGTTGGGTAACGCCAGGG +TTTTCCCAGTCACGACGTTGTAAAACGACGGCCAGTGAATTGTAATACGACTCACTATAGGGCGAATTGGAGAAACAGAA +TAATATATAAACCTGTATAATATAACCTTGAAGACTATATTTCTTTTCGCGGCCGCCTATAGGGCGAATTGGAGCTCCAC +CGCGGTGGCGGCCGCTCTAGAGAAGCGGGTAAGCTGCCACAGCAATTAATGCACAACATTTAACCTACATTCTTCCTTAT +CGGATCgTCAAAACCCTTAAAAAgATATGCCTCACCCTAACATATTTTCCAATTAACCCTCAATATTTCTCTGTCACCCG +GCCTCTATTTTCCATTTTCTTCTTTACCCGCCACGCGTTTTTTTCTTTCAAATTTTTTTCTTCCTTCTTCTTTTTCTTCC +ACGTCCTCTTGCATAAATAAATAAACCGTTTTGAAACCAAACTCGCCTCTCTCTCTCCTTTTTGAAATATTTTTGGGTTT +GTTTGATCCTTTCCTTCCCAATCTCTCTTGTTTAATATATATTCATTTATATCACGCTCTCTTTTTATCTTCCTTTTTTT +CCTCTCTCTTGTATTCTTCCTTCCCCTTTCTACTCAAACCAAGAAGAAAAAGAAAAGGTCAATCTTTGTTAAAGAATAGG +ATCTTCTACTACATCAGCTTTTAGATTTTTCACGCTTACTGCTTTTTTCTTCCCAAGATCGAAAATTTACTGAATTAACA +ACTAGTGGATCCCCCGGGCTGCAGGAATTCGATATCAagctTATGAGATCTGTTTCTGTTATTAAGCCAGAAATGAAGAT +GAGATATTACATGGATGGTTCTGTTAATGGTCATGAATTTACTATTGAAGGTGAAGGTACTGGTAGACCATATGAAGGTC +ATCAAGAAATGACTTTGAGAGTTACTATGGCTGAAGGTGGTCCAATGCCATTTGCTTTTGATTTGGTTTCTCATGTTTTT +TGTTACGGTCATAGAGTTTTTACAAAGTACCCAGAAGAAATTCCAGATTACTTTAAGCAAGCATTTCCAGAAGGTTTGTC +TTGGGAAAGATCATTGGAATTTGAAGATGGTGGTTCTGCTTCTGTTTCTGCTCATATTTCTTTGAGAGGTAACACTTTTT +ACCATAAGTCTAAGTTTACTGGTGTTAATTTTCCAGCTGATGGTCCAATTATGCAAAATCAATCTGTTGATTGGGAACCA +TCTACTGAAAAGATTACTGCTTCTGATGGTGTTTTGAAAGGTGATGTTACAATGTACTTGAAATTGGAAGGTGGTGGTAA +TCATAAATGTCAATTCAAGACTACTTATAAAGCTGCTGAAAAGATTTTGGAAATGCCAGGTGATCATTATATTGGTCATA +GATTGGTTAGAAAGACTGAAGGTAACATTACTGAACAAGTTGAAGATGCTGTTGCTCATTCTGGATCCTAGCtcgaGACA +GGCCCCTTTTCCTTTGTCtATATCATGTAATTAGTTATGTCACGCTTACATTCACGCCCTCCTCCCACATCCGCTCTAAC +CGAAAAGGAAGGAGTTAGACAACCTGAAGTCTAGGTCCCTATTTATTTTTTTTAATAGTTATGTTAGTATTAAGAACGTT +ATTTATATTTCAAATTTTTCTTTTTTTTCTGTACAAACGCGTGTACGCATGTAACATTATACTGAAAACCTTGCTTGAGA +AGGTTTTGGGACGCTCGAAGGCTTTAATTTGCAAGgTTCGCAGTTTACACTCTCATCGTCGCTCTCATCATCGCTTCCGT +TGTTGTTTTCCTTAGTAGCGTCTGCTTGGTACCCAGCTTCGGCCGTATTTACAGATAACGATGTCGTTATTATATATATA +TATATATATTGTCACTTGTACCCAGCTTTTGTTCCCTTTAGTGAGGGTTAATTTCGAGCTTGGCGTAATCATGGTCATAG +CTGTTTCCTGTGTGAAATTGTTATCCGCTCACAACAGCTGgatgaattgaaTagctttatggaccctgaaaccacagcca +cattaaccttctttgatggtcaaaacttatccttcaccataaatatgcctcgcaaaaaaggtaattaacatatatagaat +tacattatttatgaaatatcatcactatctcttagcatctttaatccttttctacatcagataacttcggtttgttatca +tcgtctgtattgtcatcaattggCGCGCCtctcCCTGCAGGCATTAATGAATCGGCCAACGCGCGGGGAGAGGCGGTTTG +CGTATTGGGCGCTCTTCCGCTTCCTCGCTCACTGACTCGCTGCGCTCGGTCGTTCGGCTGCGGCGAGCGGTATCAGCTCA +CTCAAAGGCGGTAATACGGTTATCCACAGAATCAGGGGATAACGCAGGAAAGAACATGTGAGCAAAAGGCCAGCAAAAGG +CCAGGAACCGTAAAAAGGCCGCGTTGCTGGCGTTTTTCCATAGGCTCCGCCCCCCTGACGAGCATCACAAAAATCGACGC +TCAAGTCAGAGGTGGCGAAACCCGACAGGACTATAAAGATACCAGGCGTTTCCCCCTGGAAGCTCCCTCGTGCGCTCTCC +TGTTCCGACCCTGCCGCTTACCGGATACCTGTCCGCCTTTCTCCCTTCGGGAAGCGTGGCGCTTTCTCATAGCTCACGCT +GTAGGTATCTCAGTTCGGTGTAGGTCGTTCGCTCCAAGCTGGGCTGTGTGCACGAACCCCCCGTTCAGCCCGACCGCTGC +GCCTTATCCGGTAACTATCGTCTTGAGTCCAACCCGGTAAGACACGACTTATCGCCACTGGCAGCAGCCACTGGTAACAG +GATTAGCAGAGCGAGGTATGTAGGCGGTGCTACAGAGTTCTTGAAGTGGTGGCCTAACTACGGCTACACTAGAAGAACAG +TATTTGGTATCTGCGCTCTGCTGAAGCCAGTTACCTTCGGAAAAAGAGTTGGTAGCTCTTGATCCGGCAAACAAACCACC +GCTGGTAGCGGTGGTTTTTTTGTTTGCAAGCAGCAGATTACGCGCAGAAAAAAAGGATCTCAAGAAGATCCTTTGATCTT +TTGTTTAAACCTACGGGGTCTGACGCTCAGTGGAACGAAAACTCACGTTAAGGGATTTTGGTCATGAGATTATCAAAAAG +GATCTTCACCTAGATCCTTTTAAATTAAAAATGAAGTTTTAAATCAATCTAAAGTATATATGAGTAAACTTGGTCTGACA +GTTACCAATGCTTAATCAGTGAGGCACCTATCTCAGCGATCTGTCTATTTCGTTCATCCATAGTTGCCTGACTCCCCGTC +GTGTAGATAACTACGATACGGGAGGGCTTACCATCTGGCCCCAGTGCTGCAATGATACCGCGAGACCCACGCTCACCGGC +TCCAGATTTATCAGCAATAAACCAGCCAGCCGGAAGGGCCGAGCGCAGAAGTGGTCCTGCAACTTTATCCGCCTCCATCC +AGTCTATTAATTGTTGCCGGGAAGCTAGAGTAAGTAGTTCGCCAGTTAATAGTTTGCGCAACGTTGTTGCCATTGCTACA +GGCATCGTGGTGTCACGCTCGTCGTTTGGTATGGCTTCATTCAGCTCCGGTTCCCAACGATCAAGGCGAGTTACATGATC +CCCCATGTTGTGCAAAAAAGCGGTTAGCTCCTTCGGTCCTCCGATGGTTGTCAGAAGTAAGTTGGCCGCAGTGTTATCAC +TCATGGTTATGGCAGCACTGCATAATTCTCTTACTGTCATGCCATCCGTAAGATGCTTTTCTGTGACTGGTGAGTACTCA +ACCAAGTCATTCTGAGAATAGTGTATGCGGCGACCGAGTTGCTCTTGCCCGGCGTCAATACGGGATAATACCGCGCCACA +TAGCAGAACTTTAAAAGTGCTCATCATTGGAAAACGTTCTTCGGGGCGAAAACTCTCAAGGATCTTACCGCTGTTGAGAT +CCAGTTCGATGTAACCCACTCGTGCACCCAACTGATCTTCAGCATCTTTTACTTTCACCAGCGTTTCTGGGTGAGCAAAA +ACAGGAAGGCAAAATGCCGCAAAAAAGGGAATAAGGGCGACACGGAAATGTTGAATACTCATACTCTTCCTTTTTCAATA +TTATTGAAGCATTTATCAGGGTTATTGTCTCATGAGCGGATACATATTTGAATGTATTTAGAAAAATAAACAAATAGGGG +TTCCGCGCACATTTCCCCGAAAAGTGCCACCT diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/plasmapper.jar diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/lib/zip4j_1.3.2.jar diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/script.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/script.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/script.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/eln-lims-api/script.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exportsApi.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exportsApi.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exportsApi.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/exportsApi.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/generalExports.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/generalExports.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/generalExports.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/generalExports.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/exports-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore-source/PersistentKeyValueStore.java b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore-source/PersistentKeyValueStore.java similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore-source/PersistentKeyValueStore.java rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore-source/PersistentKeyValueStore.java diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/lib/persistentkeyvaluestore.jar diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/password-reset-api.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/password-reset-api.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/password-reset-api.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/password-reset-api.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/password-reset-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/exportsApi.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/exportsApi.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/exportsApi.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/exportsApi.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/rcExports.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/rcExports.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/rcExports.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/rc-exports-api/rcExports.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/exportsApi.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/exportsApi.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/exportsApi.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/exportsApi.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/job-scheduler-source/JobScheduler.java b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/job-scheduler-source/JobScheduler.java similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/job-scheduler-source/JobScheduler.java rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/job-scheduler-source/JobScheduler.java diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/lib/job-scheduler.jar diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/zenodoExports.py b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/zenodoExports.py similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/zenodoExports.py rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/reporting-plugins/zenodo-exports-api/zenodoExports.py diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/search-domain-services/blastsearch/plugin.properties b/ui-eln-lims/src/core-plugins/eln-lims/1/dss/search-domain-services/blastsearch/plugin.properties similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/dss/search-domain-services/blastsearch/plugin.properties rename to ui-eln-lims/src/core-plugins/eln-lims/1/dss/search-domain-services/blastsearch/plugin.properties diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/1/utilities/unfreeze.sql b/ui-eln-lims/src/core-plugins/eln-lims/1/utilities/unfreeze.sql similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/1/utilities/unfreeze.sql rename to ui-eln-lims/src/core-plugins/eln-lims/1/utilities/unfreeze.sql diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/10 b/ui-eln-lims/src/core-plugins/eln-lims/10 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/10 rename to ui-eln-lims/src/core-plugins/eln-lims/10 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/2 b/ui-eln-lims/src/core-plugins/eln-lims/2 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/2 rename to ui-eln-lims/src/core-plugins/eln-lims/2 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/3 b/ui-eln-lims/src/core-plugins/eln-lims/3 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/3 rename to ui-eln-lims/src/core-plugins/eln-lims/3 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/4 b/ui-eln-lims/src/core-plugins/eln-lims/4 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/4 rename to ui-eln-lims/src/core-plugins/eln-lims/4 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/5 b/ui-eln-lims/src/core-plugins/eln-lims/5 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/5 rename to ui-eln-lims/src/core-plugins/eln-lims/5 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/6 b/ui-eln-lims/src/core-plugins/eln-lims/6 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/6 rename to ui-eln-lims/src/core-plugins/eln-lims/6 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/7 b/ui-eln-lims/src/core-plugins/eln-lims/7 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/7 rename to ui-eln-lims/src/core-plugins/eln-lims/7 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/8 b/ui-eln-lims/src/core-plugins/eln-lims/8 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/8 rename to ui-eln-lims/src/core-plugins/eln-lims/8 diff --git a/core-plugin-openbis/dist/core-plugins/eln-lims/9 b/ui-eln-lims/src/core-plugins/eln-lims/9 similarity index 100% rename from core-plugin-openbis/dist/core-plugins/eln-lims/9 rename to ui-eln-lims/src/core-plugins/eln-lims/9