Compare commits

..
2530 changed files with 69398 additions and 101091 deletions
+1
View File
@@ -17,6 +17,7 @@ demo-shell/resources/
/angular.json
/desktop.ini
/cspell.json
/.travis.yml
/CODE_OF_CONDUCT.md
/.stylelintignore
/ALFRESCOCORS.md
-8
View File
@@ -13,14 +13,6 @@ trim_trailing_whitespace = true
indent_style = space
indent_size = 2
[*.yaml]
indent_style = space
indent_size = 2
[*.yml]
indent_style = space
indent_size = 2
[*.md]
max_line_length = off
trim_trailing_whitespace = false
+6 -74
View File
@@ -1,14 +1,7 @@
{
"root": true,
"ignorePatterns": [
"projects/**/*",
"**/node_modules/**/*",
"lib/cli/node_modules/**/*",
"**/node_modules",
"**/docker",
"**/assets",
"**/scripts",
"**/docs"
"projects/**/*"
],
"overrides": [
{
@@ -29,21 +22,9 @@
],
"plugins": [
"eslint-plugin-unicorn",
"eslint-plugin-rxjs",
"ban",
"license-header"
"eslint-plugin-rxjs"
],
"rules": {
"ban/ban": [
"error",
{ "name": "eval", "message": "Calls to eval is not allowed." },
{ "name": "fdescribe", "message": "Calls to fdescribe is not allowed" },
{ "name": "fit", "message": "Calls to fit is not allowed" },
{ "name": "xit", "message": "Calls to xit is not allowed" },
{ "name": "xdescribe", "message": "Calls to xdescribe is not allowed" },
{ "name": ["test", "only"], "message": "Calls to test.only is not allowed" },
{ "name": ["describe", "only"], "message": "Calls to describe.only is not allowed" }
],
"@angular-eslint/component-selector": [
"error",
{
@@ -82,25 +63,9 @@
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-require-imports": "off",
"@typescript-eslint/no-var-requires": "error",
"@typescript-eslint/naming-convention": [
"error",
{
"selector": [
"classProperty",
"objectLiteralProperty",
"typeProperty",
"classMethod",
"objectLiteralMethod",
"typeMethod",
"accessor",
"enumMember"
],
"format": null,
"modifiers": ["requiresQuotes"]
}
],
"@typescript-eslint/member-ordering": "off",
"prefer-arrow/prefer-arrow-functions": "off",
"@typescript-eslint/member-ordering": "warn",
"prefer-arrow/prefer-arrow-functions": "warn",
"brace-style": [
"error",
@@ -116,31 +81,6 @@
}
],
"no-bitwise": "off",
"no-console": [
"error",
{
"allow": [
"warn",
"dir",
"timeLog",
"assert",
"clear",
"count",
"countReset",
"group",
"groupEnd",
"table",
"dirxml",
"error",
"groupCollapsed",
"Console",
"profile",
"profileEnd",
"timeStamp",
"context"
]
}
],
"no-duplicate-imports": "error",
"no-multiple-empty-lines": "error",
"no-redeclare": "error",
@@ -149,15 +89,7 @@
"rxjs/no-subject-unsubscribe": "error",
"rxjs/no-subject-value": "error",
"rxjs/no-unsafe-takeuntil": "error",
"unicorn/filename-case": "error",
"@typescript-eslint/no-unused-expressions": [
"error",
{
"allowShortCircuit": true,
"allowTernary": true
}
],
"license-header/header": ["error", "./license-community.txt"]
"unicorn/filename-case": "error"
}
},
{
-83
View File
@@ -1,83 +0,0 @@
name: "before-install"
description: "launch before_install.sh and then parse env vars"
inputs:
act:
description: 'enable act debug'
required: false
type: boolean
default: 'false'
runs:
using: "composite"
steps:
- name: Before install
if: ${{ ! env.ACT }}
shell: bash
run: |
pip install --user --quiet awscli
- name: base vars
shell: bash
run: |
{
echo "GIT_HASH=$(git rev-parse HEAD)";
echo "BASE_HASH=$(git merge-base origin/${GITHUB_BASE_REF} HEAD)";
echo "HEAD_HASH=HEAD";
echo "HEAD_COMMIT_HASH=${GH_COMMIT}";
echo "NX_CALCULATION_FLAGS=--all";
echo "BUILD_OPTS=--configuration production";
echo CI_FORCE_RUN=false;
echo NODE_VERSION=$(node -v);
} >> $GITHUB_ENV
- name: affected:* flag parser
shell: bash
if: ${{ contains(github.event.head_commit.message , '[affected:*]') }}
run: |
echo "Setting up CI to run with commit flag [affected:*] flag."
echo "BREAK_ACTION=true" >> $GITHUB_ENV
- name: ci:force flag parser
shell: bash
if: ${{ contains(github.event.head_commit.message , '[ci:force]') }}
run: |
echo "Forcing CI to run with commit flag [ci:force]."
echo CI_FORCE_RUN=true >> $GITHUB_ENV
echo "BREAK_ACTION=true" >> $GITHUB_ENV
- name: PULL_REQUEST event
if: ${{ env.BREAK_ACTION == false && github.event_name == 'pull_request' && !github.event.pull_request.merged }}
shell: bash
run: |
echo "Setting up CI flags for Pull Request event"
NX_CALCULATION_FLAGS="--base=origin/${GITHUB_BASE_REF} --head=$HEAD_HASH"
{
echo "NX_CALCULATION_FLAGS=$NX_CALCULATION_FLAGS";
echo "BASE_HASH=origin/${GITHUB_BASE_REF}";
echo "BREAK_ACTION=true";
} >> $GITHUB_ENV
- name: RELEASE on master/develop patch branch
if: ${{ env.BREAK_ACTION == false && github.event.pull_request.merged }}
shell: bash
run: |
if [[ "${{ github.ref_name }}" =~ ^master(-patch.*)?$ ]]; then
# into master(-patch*)
echo "Setting up CI flags for Push on master patch"
elif [[ "${{ github.ref_name }}" =~ ^develop-patch.*$ ]]; then
# into develop-patch*
echo "Setting up CI flags for Push develop patch"
else
echo "Setting up CI flags for Push on develop branch"
base=$(git describe --tags $(git rev-list --tags --max-count=1))
echo "NX_CALCULATION_FLAGS=--base=$base --head=$HEAD_HASH" >> $GITHUB_ENV
fi
echo "BREAK_ACTION=true" >> $GITHUB_ENV
- name: SCHEDULE event
if: ${{ github.event_name == 'schedule' }}
shell: bash
env:
EV_NAME: ${{ github.event_name }}
run: |
echo "Setting up CI to run on SCHEDULE"
echo "NX_CALCULATION_FLAGS=--all" >> $GITHUB_ENV
@@ -1,27 +0,0 @@
name: "Download build artifacts"
description: "Download build artifacts"
runs:
using: "composite"
steps:
- name: download and extract artifacts from s3
shell: bash
env:
REMOTE_PATH: "alfresco-ng2-components/build-cache/${{ github.run_id }}"
run: |
packages=( dist nxcache node_modules )
for i in "${packages[@]}"; do
time aws s3 cp --no-progress s3://${S3_BUILD_BUCKET_SHORT_NAME}/${REMOTE_PATH}/$i.tar.gz $i.tar.gz
du -h $i.tar.gz
time tar xzf $i.tar.gz
done
- name: show files
shell: bash
run: |
pwd
ls -lha
echo "====DIST===="
find dist -maxdepth 1 -type d
echo "====NXCACHE===="
find nxcache -maxdepth 1 -type d
echo "====ADF===="
find node_modules/@alfresco/ -maxdepth 1 -type d
-172
View File
@@ -1,172 +0,0 @@
name: "e2e"
description: "e2e"
inputs:
e2e-test-id:
description: "Test id"
required: true
e2e-test-folder:
description: "Test folder"
required: true
e2e-test-provider:
description: "Test provider"
required: true
e2e-test-auth:
description: "Test auth"
required: true
output:
description: "Output path"
required: true
check-cs-env:
required: true
description: check cs env
default: "false"
check-ps-env:
required: true
description: check ps env
default: "false"
check-external-cs-env:
required: true
description: check external cs env
default: "false"
check-ps-cloud-env:
required: true
description: check ps cloud env
default: "false"
e2e-tar-name: #
required: false
default: e2e.tar.gz
apa-proxy: #
description: "proxy host"
required: true
runs:
using: "composite"
steps:
- name: use APA as PROXY host if apa-proxy is set
shell: bash
run: |
if [[ -n "${{ inputs.apa-proxy }}" ]]; then
echo "APA proxy set."
echo "PROXY_HOST_BPM=${E2E_HOST_APA}" >> $GITHUB_ENV
fi
- name: install aws cli
shell: bash
run: pip install awscli
- name: download smartrunner test results from s3 bucket if they exist
shell: bash
env:
REMOTE_PATH: smart-runner/${{ github.run_id}}/${{ inputs.e2e-test-folder }}-${{ inputs.e2e-test-id}}/e2e.tar.gz
run: |
set -u;
mkdir -p "${SMART_RUNNER_PATH}"
if [[ $(aws s3 ls "s3://${S3_BUILD_BUCKET_SHORT_NAME}/adf/${REMOTE_PATH}" > /dev/null; echo $?) -eq 0 ]]; then
echo "downloading test files"
aws s3 cp "s3://${S3_BUILD_BUCKET_SHORT_NAME}/adf/${REMOTE_PATH}" .;
tar xzf ${{ inputs.e2e-tar-name }};
else
echo "nothing to download";
fi
- name: check EXTERNAL-CS is UP
shell: bash
if: ${{ inputs.check-external-cs-env == 'true' }}
run: |
set -u;
./node_modules/@alfresco/adf-cli/bin/adf-cli \
check-cs-env \
--host "$EXTERNAL_ACS_HOST" \
-u "$E2E_USERNAME" \
-p "$E2E_PASSWORD" || exit 1
- name: Check CS is UP
shell: bash
if: ${{ inputs.check-cs-env == 'true' }}
run: |
set -u;
./node_modules/@alfresco/adf-cli/bin/adf-cli \
check-cs-env \
--host "$E2E_HOST" \
-u "$E2E_USERNAME" \
-p "$E2E_PASSWORD" || exit 1
- name: check PS is UP
shell: bash
if: ${{ inputs.check-ps-env == 'true' }}
run: |
set -u;
./node_modules/@alfresco/adf-cli/bin/adf-cli init-aps-env \
--host "$E2E_HOST" \
-u "$E2E_USERNAME" \
-p "$E2E_PASSWORD" \
--license "$AWS_S3_BUCKET_ACTIVITI_LICENSE" || exit 1
- name: check PS-CLOUD is UP
shell: bash
if: ${{ inputs.check-ps-cloud-env == 'true' }}
run: |
set -u;
./node_modules/@alfresco/adf-cli/bin/adf-cli init-aae-env \
--oauth "$E2E_HOST" \
--host "$E2E_HOST_APA" \
--modelerUsername "$E2E_MODELER_USERNAME" \
--modelerPassword "$E2E_MODELER_PASSWORD" \
--devopsUsername "$E2E_DEVOPS_USERNAME" \
--devopsPassword "$E2E_DEVOPS_PASSWORD" \
--clientId 'alfresco' || exit 1
- name: variables sanification
env:
FOLDER: "${{ inputs.e2e-test-folder }}"
PROVIDER: "${{ inputs.e2e-test-provider }}"
AUTH_TYPE: "${{ inputs.e2e-test-auth }}"
E2E_TEST_ID: "${{ inputs.e2e-test-id }}"
shell: bash
run: |
set -u;
echo $PROXY_HOST_BPM
echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV
- name: run test with retries
id: retry_run
env:
FOLDER: "${{ inputs.e2e-test-folder }}"
PROVIDER: "${{ inputs.e2e-test-provider }}"
AUTH_TYPE: "${{ inputs.e2e-test-auth }}"
E2E_TEST_ID: "${{ inputs.e2e-test-id }}"
uses: nick-fields/retry@v2.8.2
with:
timeout_minutes: 40
max_attempts: 2
retry_wait_seconds: 30
shell: bash
command: |
set -u;
export GH_ACTION_RETRY_COUNT=$(cat ${GITHUB_OUTPUT} | grep -E '^[0-9]{1,2}$' | tail -n1)
echo "RETRY GH_ACTION_RETRY_COUNT = <$GH_ACTION_RETRY_COUNT>"
if [[ ${{ inputs.e2e-test-folder }} == 'content-services/upload' ]]; then
export DISPLAY=:99
chromedriver --url-base=/wd/hub &
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 & # optional
bash ./scripts/github/e2e/e2e.sh "$E2E_TEST_ID" "browser" || exit 1
else
bash ./scripts/github/e2e/e2e.sh "$E2E_TEST_ID" || exit 1
fi
- name: upload artifacts on gh
id: upload_gh
uses: actions/upload-artifact@v3
with:
name: e2e-artifact-output
path: /home/runner/work/alfresco-ng2-components/alfresco-ng2-components/e2e-output-*
- name: upload smart-runner tests results on s3 to cache tests
shell: bash
if: always()
env:
REMOTE_PATH: "smart-runner/${{ github.run_id}}/${{ inputs.e2e-test-folder }}-${{ inputs.e2e-test-id}}/e2e.tar.gz"
# description: always upload newer results
run: |
tar czf "${{ inputs.e2e-tar-name }}" "${SMART_RUNNER_PATH}"
aws s3 cp "${{ inputs.e2e-tar-name }}" "s3://${S3_BUILD_BUCKET_SHORT_NAME}/adf/${REMOTE_PATH}"
-30
View File
@@ -1,30 +0,0 @@
name: 'enable dryrun'
description: 'check if must run pipeline in dryrun mode'
inputs:
dry-run-flag:
description: 'enable dryrun'
required: false
type: boolean
default: true
outputs:
dryrun:
description: "long sha of the tag"
value: ${{ steps.dryrun.outputs.dryrun }}
runs:
using: "composite"
steps:
- name: set dryrun flag to TRUE
shell: bash
id: dryrun
run: |
if [[ '${{ inputs.dry-run-flag }}' == 'true' ]]; then
echo "dryrun=--dryrun" >> $GITHUB_OUTPUT;
echo "enabling dryrun"
else
echo "dryrun=" >> $GITHUB_OUTPUT;
echo "dryrun NOT enabled"
fi
@@ -1,19 +0,0 @@
name: 'Get tag sha'
description: 'get the sha of the latest or a specific tag'
outputs:
tag_sha:
description: "long sha of the tag"
value: ${{ steps.sha_out.outputs.tag_sha }}
runs:
using: "composite"
steps:
- name: get tag short sha
shell: bash
id: sha_out
run: |
tag_sha=$(git rev-list -n 1 $(git tag --sort=-creatordate | head -n 1))
echo "tag_sha=$tag_sha" >> $GITHUB_OUTPUT
echo $tag_sha
@@ -1,28 +0,0 @@
name: 'Check NPM bundle'
description: 'check npm bundle'
inputs:
branch_name:
description: "override GITHUB_REF_NAME"
required: false
default: $GITHUB_REF_NAME
runs:
using: "composite"
steps:
- name: load "NPM TAG"
uses: ./.github/actions/set-npm-tag
with:
branch_name: ${{ inputs.branch_name }}
- name: check npm bundle
shell: bash
id: sha_out
run: |
if [[ -z $TAG_NPM ]]; then
echo "TAG_NPM not set, aborting"
exit 1
fi
ADF_VERSION=$(npm view @alfresco/adf-core@${TAG_NPM} version)
echo "check bundle on TAG_NPM='${TAG_NPM}' and ADF_VERSION='${ADF_VERSION}'"
./scripts/github/build/npm-check-bundles.sh -v ${ADF_VERSION}
-37
View File
@@ -1,37 +0,0 @@
name: "set npm tag"
description: "se NPM tag"
inputs:
event_name:
description: "override github.event_name"
required: false
default: ${{ github.event_name }}
branch_name:
description: "override GITHUB_REF_NAME"
required: false
default: $GITHUB_REF_NAME
runs:
using: "composite"
steps:
- name: set TAG_NPM
shell: bash
run: |
TAG_NPM="alpha"
VERSION_IN_PACKAGE_JSON=$(node -p "require('./package.json')".version)
echo "version in package.json=${VERSION_IN_PACKAGE_JSON}"
if [[ ${{ inputs.branch_name }} =~ ^master(-patch.*)?$ ]]; then
# Pre-release versions
if [[ $VERSION_IN_PACKAGE_JSON =~ ^[0-9]*\.[0-9]*\.[0-9]*-A\.[0-9]*$ ]];
then
TAG_NPM=next
# Stable major versions
else
TAG_NPM=latest
fi
fi
if [[ ${{ inputs.branch_name }} =~ ^develop(-patch.*)?$ ]]; then
TAG_NPM=alpha
fi
echo "TAG_NPM=${TAG_NPM}" >> $GITHUB_ENV
-13
View File
@@ -1,13 +0,0 @@
name: 'Install Google Chrome'
description: 'Install Google Chrome'
runs:
using: "composite"
steps:
- name: Install google chrome
shell: bash
run: |
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb
sudo ln -s /usr/bin/google-chrome /usr/bin/chrome
chrome --version
-61
View File
@@ -1,61 +0,0 @@
name: 'Setup'
description: 'Initialize cache, env var load'
inputs:
enable-cache:
description: 'enable caching'
required: false
type: boolean
default: 'true'
enable-node-modules-cache:
description: 'enable caching for node modules'
required: false
type: boolean
default: 'true'
act:
description: 'enable act debug'
required: false
type: boolean
default: 'false'
runs:
using: "composite"
steps:
- name: install NPM
uses: actions/setup-node@v3
with:
node-version: 14
cache-dependency-path: package-lock.json
- name: get latest tag sha
id: tag-sha
uses: Alfresco/alfresco-build-tools/.github/actions/git-latest-tag@v1.29.0
# CACHE
- name: Node Modules cache
id: node-modules-cache
if: ${{ inputs.enable-node-modules-cache == 'true' }}
uses: actions/cache@v3
env:
cache-name: node-modules-cache
with:
path: |
node_modules
key: .npm-${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
node_modules-${{ runner.os }}-build-${{ env.cache-name }}-
node_modules-${{ runner.os }}-build-
node_modules-${{ runner.os }}-
- name: pip cache
uses: actions/cache@v3
if: ${{ inputs.enable-cache == 'true' }}
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-
restore-keys: |
${{ runner.os }}
- name: load "NPM TAG"
uses: ./.github/actions/set-npm-tag
- name: before install script
uses: ./.github/actions/before-install
with:
act: ${{ inputs.act }}
- name: link nx executable
run: sudo ln -s $(npm bin)/nx /usr/bin/nx
shell: bash
@@ -1,19 +0,0 @@
name: "Upload build artifacts"
description: "Upload build artifacts"
runs:
using: "composite"
steps:
- name: tar and upload artifacts
shell: bash
env:
REMOTE_PATH: "alfresco-ng2-components/build-cache/${{ github.run_id }}"
run: |
packages=( dist nxcache node_modules )
for i in "${packages[@]}"; do
time tar czf $i.tar.gz $i
du -h $i.tar.gz
time aws s3 cp --no-progress $i.tar.gz "s3://${S3_BUILD_BUCKET_SHORT_NAME}/${REMOTE_PATH}/$i.tar.gz"
done
-1
View File
@@ -5,7 +5,6 @@ updates:
schedule:
interval: "weekly"
day: "sunday"
time: "07:00"
open-pull-requests-limit: 5
target-branch: develop
ignore:
-101
View File
@@ -1,101 +0,0 @@
name: "upstream adf"
on:
workflow_call:
inputs:
repo_to_update:
description: Repository to update
type: string
required: false
default: alfresco-applications
workflow_dispatch:
inputs:
cluster_operation:
description: trigger adf test
type: choice
required: true
options:
- TRIGGER_ALPHA_ADF
default: TRIGGER_ALPHA_ADF
repo_to_update:
description: Repository to update
type: choice
required: true
options:
- all
- alfresco-content-app
- alfresco-applications
- alfresco-apps
default: all
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
GITHUB_BRANCH: ${{ github.ref_name }}
GH_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
GH_BUILD_DIR: ${{ github.workspace }}
GH_COMMIT: ${{ github.sha }}
BUILD_ID: ${{ github.run_id }}
GH_RUN_NUMBER: ${{ github.run_attempt }}
GH_BUILD_NUMBER: ${{ github.run_id }}
JOB_ID: ${{ github.run_id }}
PROXY_HOST_BPM: ${{ secrets.E2E_HOST }}
E2E_HOST_APA: ${{ secrets.E2E_HOST_APA }}
E2E_HOST: ${{ secrets.E2E_HOST }}
E2E_USERNAME: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
E2E_ADMIN_EMAIL_IDENTITY: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_ADMIN_PASSWORD_IDENTITY: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
USERNAME_ADF: ${{ secrets.E2E_USERNAME }}
PASSWORD_ADF: ${{ secrets.E2E_PASSWORD }}
URL_HOST_ADF: ${{ secrets.URL_HOST_ADF }}
IDENTITY_ADMIN_EMAIL: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
IDENTITY_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
AWS_S3_BUCKET_ACTIVITI_LICENSE: ${{ secrets.AWS_S3_BUCKET_ACTIVITI_LICENSE }}
HOST_SSO: ${{ secrets.HOST_SSO }}
LOG_LEVEL: "ERROR"
E2E_LOG_LEVEL: "ERROR"
E2E_MODELER_USERNAME: ${{ secrets.E2E_MODELER_USERNAME }}
E2E_MODELER_PASSWORD: ${{ secrets.E2E_MODELER_PASSWORD }}
EXTERNAL_ACS_HOST: ${{ secrets.EXTERNAL_ACS_HOST }}
E2E_DEVOPS_USERNAME: ${{ secrets.E2E_DEVOPS_USERNAME }}
E2E_DEVOPS_PASSWORD: ${{ secrets.E2E_DEVOPS_PASSWORD }}
USERNAME_SUPER_ADMIN_ADF: ${{ secrets.USERNAME_SUPER_ADMIN_ADF }}
PASSWORD_SUPER_ADMIN_ADF: ${{ secrets.PASSWORD_SUPER_ADMIN_ADF }}
HR_USER: ${{ secrets.HR_USER }}
HR_USER_PASSWORD: ${{ secrets.HR_USER_PASSWORD }}
NPM_REGISTRY_ADDRESS: ${{ secrets.NPM_REGISTRY_ADDRESS }}
NPM_REGISTRY_TOKEN: ${{ secrets.NPM_REGISTRY_TOKEN }}
DOCKER_REPOSITORY_USER: ${{ secrets.DOCKER_REPOSITORY_USER }}
DOCKER_REPOSITORY_PASSWORD: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }}
DOCKER_REPOSITORY_DOMAIN: ${{ secrets.DOCKER_REPOSITORY_DOMAIN }}
DOCKER_REPOSITORY_STORYBOOK: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/storybook"
DOCKER_REPOSITORY: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/demo-shell"
NODE_OPTIONS: "--max-old-space-size=5120"
GH_PACKAGES_READ_ONLY_TOKEN: ${{ secrets.HYLAND_GH_PACKAGES_READ_ONLY_TOKEN }}
jobs:
trigger_adf:
name: trigger adf
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: install NPM
uses: actions/setup-node@v3
with:
node-version: 14
cache-dependency-path: package-lock.json
# - name: Debug on failure
# uses: mxschmitt/action-tmate@v3
# with:
# timeout-minutes: 60
# limit-access-to-actor: true
- name: Trigger Alpha ADF child build
shell: bash
if: ${{ contains(github.event.head_commit.message, '[trigger adf]') || inputs.cluster_operation == 'TRIGGER_ALPHA_ADF' || github.event.schedule == '0 12 * * *' }}
run: |
npm install github-api
./scripts/github/update/update-project.sh -p $GH_BUILD_NUMBER -t $GH_TOKEN -v alpha -c $GH_COMMIT -r ${{ inputs.repo_to_update }}
+9 -4
View File
@@ -16,15 +16,20 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v2
with:
# We must fetch at least the immediate parents so that if this is
# a pull request then we can checkout the head.
fetch-depth: 2
# If this run was triggered by a pull request event, then checkout
# the head of the pull request instead of the merge commit.
- run: git checkout HEAD^2
if: ${{ github.event_name == 'pull_request' }}
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v1
# Override language selection by uncommenting this and choosing your languages
with:
languages: javascript
@@ -32,7 +37,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
uses: github/codeql-action/autobuild@v1
# ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -46,4 +51,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v1
-73
View File
@@ -1,73 +0,0 @@
name: "cron e2e daily"
on:
schedule:
- cron: '0 12 * * *'
env:
BASE_REF: ${{ github.base_ref }}
HEAD_REF: ${{ github.head_ref }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
GITHUB_BRANCH: ${{ github.ref_name }}
GH_BUILD_DIR: ${{ github.workspace }}
GH_COMMIT: ${{ github.sha }}
BUILD_ID: ${{ github.run_id }}
GH_RUN_NUMBER: ${{ github.run_attempt }}
GH_BUILD_NUMBER: ${{ github.run_id }}
JOB_ID: ${{ github.run_id }}
PROXY_HOST_BPM: ${{ secrets.E2E_HOST }}
E2E_HOST_APA: ${{ secrets.E2E_HOST_APA }}
E2E_HOST: ${{ secrets.E2E_HOST }}
E2E_USERNAME: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
E2E_ADMIN_EMAIL_IDENTITY: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_ADMIN_PASSWORD_IDENTITY: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
USERNAME_ADF: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
PASSWORD_ADF: ${{ secrets.E2E_PASSWORD }}
URL_HOST_ADF: "http://localhost:4200"
IDENTITY_ADMIN_EMAIL: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
IDENTITY_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
AWS_S3_BUCKET_ACTIVITI_LICENSE: ${{ secrets.AWS_S3_BUCKET_ACTIVITI_LICENSE }}
HOST_SSO: ${{ secrets.HOST_SSO }}
LOG_LEVEL: "ERROR"
E2E_LOG_LEVEL: "ERROR"
E2E_MODELER_USERNAME: ${{ secrets.E2E_MODELER_USERNAME }}
E2E_MODELER_PASSWORD: ${{ secrets.E2E_MODELER_PASSWORD }}
EXTERNAL_ACS_HOST: ${{ secrets.EXTERNAL_ACS_HOST }}
E2E_DEVOPS_USERNAME: ${{ secrets.E2E_DEVOPS_USERNAME }}
E2E_DEVOPS_PASSWORD: ${{ secrets.E2E_DEVOPS_PASSWORD }}
USERNAME_SUPER_ADMIN_ADF: ${{ secrets.USERNAME_SUPER_ADMIN_ADF }}
PASSWORD_SUPER_ADMIN_ADF: ${{ secrets.PASSWORD_SUPER_ADMIN_ADF }}
HR_USER: ${{ secrets.HR_USER }}
HR_USER_PASSWORD: ${{ secrets.HR_USER_PASSWORD }}
SMART_RUNNER_PATH: ".protractor-smartrunner"
S3_DBP_PATH: ${{ secrets.S3_DBP_PATH }}
S3_BUILD_BUCKET_SHORT_NAME: ${{ secrets.S3_BUILD_BUCKET_SHORT_NAME }}
NODE_OPTIONS: "--max-old-space-size=5120"
DOCKER_REPOSITORY_DOMAIN: ${{ secrets.DOCKER_REPOSITORY_DOMAIN }}
DOCKER_REPOSITORY_USER: ${{ secrets.DOCKER_REPOSITORY_USER }}
DOCKER_REPOSITORY_PASSWORD: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }}
DOCKER_REPOSITORY_STORYBOOK: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/storybook"
DOCKER_REPOSITORY: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/demo-shell"
REPO_OWNER: "Alfresco"
REPO_NAME: "alfresco-ng2-components"
DEMO_SHELL_DIR: "./dist/demo-shell"
STORYBOOK_DIR: "./dist/storybook/stories"
BUILT_LIBS_DIR: "./dist/libs"
NODE_MODULES_DIR: "./node_modules"
SMART_RUNNER_DIRECTORY: ".protractor-smartrunner"
SAVE_SCREENSHOT: true
REDIRECT_URI: /
BROWSER_RUN: false
MAXINSTANCES: 2
PLAYWRIGHT_WORKERS: 2
PLAYWRIGHT_STORYBOOK_E2E_HOST: http://localhost
PLAYWRIGHT_STORYBOOK_E2E_PORT: 4400
PROXY_HOST_ECM: ${{ secrets.E2E_HOST }}
jobs:
run-e2e:
name: run e2e
uses: ./.github/workflows/pull-request.yml
secrets: inherit
-27
View File
@@ -1,27 +0,0 @@
name: "cron upstream daily"
on:
schedule:
- cron: '0 12 * * *'
jobs:
adf-upstream-alpha-alfresco-aca:
name: trigger upstream alpha for alfresco-content-app
uses: ./.github/workflows/adf_alpha.yml
secrets: inherit
with:
repo_to_update: alfresco-content-app
adf-upstream-alpha-alfresco-apps:
name: trigger upstream alpha for alfresco-applications
uses: ./.github/workflows/adf_alpha.yml
secrets: inherit
with:
repo_to_update: alfresco-applications
adf-upstream-alpha-hxp:
name: trigger upstream alpha for hxp monorepo
uses: ./.github/workflows/adf_alpha.yml
secrets: inherit
with:
repo_to_update: alfresco-apps
-16
View File
@@ -1,16 +0,0 @@
name: pr-workflow
on:
push:
branches:
- "devops/*"
jobs:
adf-upstream-alpha-hxp:
name: trigger upstream alpha for hxp monorepo
uses: ./.github/workflows/adf_alpha.yml
secrets: inherit
with:
repo_to_update: alfresco-apps
-111
View File
@@ -1,111 +0,0 @@
name: "git-tag"
on:
workflow_call:
inputs:
dry-run-release:
description: 'enable dry-run on artifact push'
required: false
type: boolean
default: true
push:
branches:
- master
- master-patch-*
env:
BASE_REF: ${{ github.base_ref }}
HEAD_REF: ${{ github.head_ref }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
GITHUB_BRANCH: ${{ github.ref_name }}
GH_BUILD_DIR: ${{ github.workspace }}
GH_COMMIT: ${{ github.sha }}
BUILD_ID: ${{ github.run_id }}
GH_RUN_NUMBER: ${{ github.run_attempt }}
GH_BUILD_NUMBER: ${{ github.run_id }}
JOB_ID: ${{ github.run_id }}
PROXY_HOST_BPM: ${{ secrets.E2E_HOST }}
E2E_HOST_APA: ${{ secrets.E2E_HOST_APA }}
E2E_HOST: ${{ secrets.E2E_HOST }}
E2E_USERNAME: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
E2E_ADMIN_EMAIL_IDENTITY: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_ADMIN_PASSWORD_IDENTITY: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
USERNAME_ADF: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
PASSWORD_ADF: ${{ secrets.E2E_PASSWORD }}
URL_HOST_ADF: "http://localhost:4200"
IDENTITY_ADMIN_EMAIL: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
IDENTITY_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
AWS_S3_BUCKET_ACTIVITI_LICENSE: ${{ secrets.AWS_S3_BUCKET_ACTIVITI_LICENSE }}
HOST_SSO: ${{ secrets.HOST_SSO }}
LOG_LEVEL: "ERROR"
E2E_LOG_LEVEL: "ERROR"
E2E_MODELER_USERNAME: ${{ secrets.E2E_MODELER_USERNAME }}
E2E_MODELER_PASSWORD: ${{ secrets.E2E_MODELER_PASSWORD }}
EXTERNAL_ACS_HOST: ${{ secrets.EXTERNAL_ACS_HOST }}
E2E_DEVOPS_USERNAME: ${{ secrets.E2E_DEVOPS_USERNAME }}
E2E_DEVOPS_PASSWORD: ${{ secrets.E2E_DEVOPS_PASSWORD }}
USERNAME_SUPER_ADMIN_ADF: ${{ secrets.USERNAME_SUPER_ADMIN_ADF }}
PASSWORD_SUPER_ADMIN_ADF: ${{ secrets.PASSWORD_SUPER_ADMIN_ADF }}
HR_USER: ${{ secrets.HR_USER }}
HR_USER_PASSWORD: ${{ secrets.HR_USER_PASSWORD }}
SMART_RUNNER_PATH: ".protractor-smartrunner"
S3_DBP_PATH: ${{ secrets.S3_DBP_PATH }}
S3_BUILD_BUCKET_SHORT_NAME: ${{ secrets.S3_BUILD_BUCKET_SHORT_NAME }}
NODE_OPTIONS: "--max-old-space-size=5120"
DOCKER_REPOSITORY_DOMAIN: ${{ secrets.DOCKER_REPOSITORY_DOMAIN }}
DOCKER_REPOSITORY_USER: ${{ secrets.DOCKER_REPOSITORY_USER }}
DOCKER_REPOSITORY_PASSWORD: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }}
DOCKER_REPOSITORY_STORYBOOK: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/storybook"
DOCKER_REPOSITORY: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/demo-shell"
NPM_REGISTRY_ADDRESS: ${{ secrets.NPM_REGISTRY_ADDRESS }}
NPM_REGISTRY_TOKEN: ${{ secrets.NPM_REGISTRY_TOKEN }}
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
REPO_OWNER: "Alfresco"
REPO_NAME: "alfresco-ng2-components"
DEMO_SHELL_DIR: "./dist/demo-shell"
STORYBOOK_DIR: "./dist/storybook/stories"
BUILT_LIBS_DIR: "./dist/libs"
NODE_MODULES_DIR: "./node_modules"
SMART_RUNNER_DIRECTORY: ".protractor-smartrunner"
SAVE_SCREENSHOT: true
REDIRECT_URI: /
BROWSER_RUN: false
MAXINSTANCES: 2
PLAYWRIGHT_WORKERS: 2
PLAYWRIGHT_STORYBOOK_E2E_HOST: http://localhost
PLAYWRIGHT_STORYBOOK_E2E_PORT: 4400
PROXY_HOST_ECM: ${{ secrets.E2E_HOST }}
jobs:
release:
uses: ./.github/workflows/release.yml
secrets: inherit
with:
dry-run-release: false
setup:
needs: release
timeout-minutes: 20
name: "Release tag"
runs-on: ubuntu-22.04
env:
GITHUB_TOKEN: $GH_TOKEN
steps:
- name: Checkout repository
uses: actions/checkout@v3
- id: set-dryrun
uses: ./.github/actions/enable-dryrun
with:
dry-run-flag: ${{ inputs.dry-run-release }}
- name: install NPM
uses: actions/setup-node@v3
with:
node-version: 14
- name: "Release tag"
run: |
git fetch --all --quiet
BRANCH=${GITHUB_REF##*/} ./scripts/github/release/git-tag.sh ${{ steps.set-dryrun.outputs.dryrun }}
-413
View File
@@ -1,413 +0,0 @@
name: "pull-request"
on:
workflow_call:
inputs:
dry-run-release:
description: 'enable dry-run on artifact push'
required: false
type: boolean
default: true
devel:
description: 'devel'
required: false
type: string
default: false
pull_request:
types: [opened, synchronize, reopened]
branches:
- develop
- master
- develop-patch*
- master-patch*
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
BASE_REF: ${{ github.base_ref }}
HEAD_REF: ${{ github.head_ref }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
GITHUB_BRANCH: ${{ github.ref_name }}
GH_BUILD_DIR: ${{ github.workspace }}
GH_COMMIT: ${{ github.sha }}
BUILD_ID: ${{ github.run_id }}
GH_RUN_NUMBER: ${{ github.run_attempt }}
GH_BUILD_NUMBER: ${{ github.run_id }}
JOB_ID: ${{ github.run_id }}
PROXY_HOST_BPM: ${{ secrets.E2E_HOST }}
E2E_HOST_APA: ${{ secrets.E2E_HOST_APA }}
E2E_HOST: ${{ secrets.E2E_HOST }}
E2E_USERNAME: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
E2E_ADMIN_EMAIL_IDENTITY: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_ADMIN_PASSWORD_IDENTITY: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
USERNAME_ADF: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
PASSWORD_ADF: ${{ secrets.E2E_PASSWORD }}
URL_HOST_ADF: "http://localhost:4200"
IDENTITY_ADMIN_EMAIL: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
IDENTITY_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
AWS_S3_BUCKET_ACTIVITI_LICENSE: ${{ secrets.AWS_S3_BUCKET_ACTIVITI_LICENSE }}
HOST_SSO: ${{ secrets.HOST_SSO }}
LOG_LEVEL: "ERROR"
E2E_LOG_LEVEL: "ERROR"
E2E_MODELER_USERNAME: ${{ secrets.E2E_MODELER_USERNAME }}
E2E_MODELER_PASSWORD: ${{ secrets.E2E_MODELER_PASSWORD }}
EXTERNAL_ACS_HOST: ${{ secrets.EXTERNAL_ACS_HOST }}
E2E_DEVOPS_USERNAME: ${{ secrets.E2E_DEVOPS_USERNAME }}
E2E_DEVOPS_PASSWORD: ${{ secrets.E2E_DEVOPS_PASSWORD }}
USERNAME_SUPER_ADMIN_ADF: ${{ secrets.USERNAME_SUPER_ADMIN_ADF }}
PASSWORD_SUPER_ADMIN_ADF: ${{ secrets.PASSWORD_SUPER_ADMIN_ADF }}
HR_USER: ${{ secrets.HR_USER }}
HR_USER_PASSWORD: ${{ secrets.HR_USER_PASSWORD }}
SMART_RUNNER_PATH: ".protractor-smartrunner"
S3_DBP_PATH: ${{ secrets.S3_DBP_PATH }}
S3_BUILD_BUCKET_SHORT_NAME: ${{ secrets.S3_BUILD_BUCKET_SHORT_NAME }}
NODE_OPTIONS: "--max-old-space-size=5120"
DOCKER_REPOSITORY_DOMAIN: ${{ secrets.DOCKER_REPOSITORY_DOMAIN }}
DOCKER_REPOSITORY_USER: ${{ secrets.DOCKER_REPOSITORY_USER }}
DOCKER_REPOSITORY_PASSWORD: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }}
DOCKER_REPOSITORY_STORYBOOK: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/storybook"
DOCKER_REPOSITORY: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/demo-shell"
REPO_OWNER: "Alfresco"
REPO_NAME: "alfresco-ng2-components"
DEMO_SHELL_DIR: "./dist/demo-shell"
STORYBOOK_DIR: "./dist/storybook/stories"
BUILT_LIBS_DIR: "./dist/libs"
NODE_MODULES_DIR: "./node_modules"
SMART_RUNNER_DIRECTORY: ".protractor-smartrunner"
SAVE_SCREENSHOT: true
REDIRECT_URI: /
BROWSER_RUN: false
MAXINSTANCES: 2
PLAYWRIGHT_WORKERS: 2
PLAYWRIGHT_STORYBOOK_E2E_HOST: http://localhost
PLAYWRIGHT_STORYBOOK_E2E_PORT: 4400
PROXY_HOST_ECM: ${{ secrets.E2E_HOST }}
jobs:
check-package-lock:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Check package-lock.json version
run: |
if [[ $(jq '.lockfileVersion == 2' package-lock.json) == "true" ]] ; then
echo -e "\033[31mpackage-lock must be version 1\033[0m"
exit 1
else
echo -e "\033[32mpackage-lock.json has a correct version\033[0m"
fi
check-if-pr-is-approved:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Check if PR is approved
id: action
if: ${{ github.event_name != 'schedule' }}
uses: kamatama41/get-pr-number-action@5c77b38a1b4974ebf8a9521a689f38a5898eadd6
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: check if pr is approved
env:
DEVEL_FLAG: ${{ inputs.devel }}
GH_TOKEN: ${{ github.token }}
skip_check: "false"
run: |
if [ "${{ github.actor }}" == "dependabot[bot]" ] || [ "${{ github.actor }}" == "alfresco-build" ]; then
echo -e "\033[32mCommit by ${{ github.actor }}. No need for approval.\033[0m"
skip_check="true"
fi
if [ "${{ github.event_name }}" == "schedule" ]; then
echo -e "\033[32mSchedule event\033[0m"
skip_check="true"
fi
if [[ "$DEVEL_FLAG" == "true" ]]; then
echo -e "\033[32mDevel flag\033[0m"
skip_check="true"
fi
if [ "$skip_check" == "false" ]; then
echo "Checking PR approval"
prNumber=${{ steps.action.outputs.number }}
checkApproval=$(gh api /repos/Alfresco/alfresco-ng2-components/pulls/$prNumber/reviews | jq '.[] | select(.state == "APPROVED") | .user.login')
if [[ $checkApproval ]]; then
echo -e "\033[32mPR approved\033[0m"
else
echo -e "\033[31mPR NOT approved\033[0m"
exit 1
fi
fi
setup:
# long timeout required when cache has to be recreated
timeout-minutes: 30
name: "Setup"
runs-on: ubuntu-22.04
needs: [check-if-pr-is-approved, check-package-lock]
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history for all tags and branches
- uses: ./.github/actions/setup
- name: install
run: |
npm ci
nx run cli:bundle
nx run testing:bundle
- run: nx print-affected $NX_CALCULATION_FLAGS
- uses: ./.github/actions/upload-node-modules-and-artifacts
unit-tests:
timeout-minutes: 30
name: "Unit tests: ${{ matrix.unit-tests.name }}"
runs-on: ubuntu-22.04
needs: [setup]
strategy:
fail-fast: false
# max-parallel: 4
matrix:
unit-tests:
- name: content-services
exclude: "insights,core,extensions,process-services,process-services-cloud"
- name: core
exclude: "insights,content-services,process-services,process-services-cloud"
- name: insights and process-services
exclude: "core,extensions,content-services,process-services-cloud"
- name: process-cloud
exclude: "insights,core,extensions,content-services,process-services"
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history for all tags and branches
- uses: ./.github/actions/setup
- uses: ./.github/actions/download-node-modules-and-artifacts
- name: Run unit tests
run: |
/usr/bin/xvfb-run --auto-servernum nx affected:test $NX_CALCULATION_FLAGS --exclude=${{ matrix.unit-tests.exclude }}
lint:
# long timeout required when cache has to be recreated
timeout-minutes: 30
name: "Lint"
runs-on: ubuntu-22.04
needs: [setup]
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history for all tags and branches
- uses: ./.github/actions/setup
- uses: ./.github/actions/download-node-modules-and-artifacts
- run: nx affected --target=lint $NX_CALCULATION_FLAGS
build-libs:
# long timeout required when cache has to be recreated
timeout-minutes: 30
name: "Build libs"
runs-on: ubuntu-22.04
needs: [setup]
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history for all tags and branches
- uses: ./.github/actions/setup
- uses: ./.github/actions/download-node-modules-and-artifacts
- run: nx affected:build $NX_CALCULATION_FLAGS --prod
- run: nx build demoshell --configuration production
- run: nx affected --target=build-storybook $NX_CALCULATION_FLAGS --configuration ci
- uses: ./.github/actions/upload-node-modules-and-artifacts
e2e-storybook:
timeout-minutes: 20
name: "e2e: storybook"
needs: [build-libs, lint, unit-tests]
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history for all
- uses: ./.github/actions/setup
- uses: ./.github/actions/download-node-modules-and-artifacts
- name: Process Cloud Storybook Playwright
run: |
npx playwright install chromium
sudo sysctl -w fs.inotify.max_user_watches=524288
npx nx affected --target=e2e-playwright $NX_CALCULATION_FLAGS || exit 1
- uses: ./.github/actions/upload-node-modules-and-artifacts
e2e:
timeout-minutes: 90
name: "e2e: ${{ matrix.e2e-test.description }}"
needs: [build-libs, lint, unit-tests]
runs-on: ubuntu-22.04
strategy:
fail-fast: false
# max-parallel: 4
matrix:
e2e-test:
- description: "Core"
test-id: "core"
folder: "core"
provider: "ALL"
auth: "OAUTH"
check-cs-env: "true"
check-ps-env: "true"
- description: "Content: Components"
test-id: "content-services"
folder: "content-services/components"
provider: "ECM"
auth: "BASIC"
check-cs-env: "true"
- description: "Content: Directives"
test-id: "content-services"
folder: "content-services/directives"
provider: "ECM"
auth: "BASIC"
check-cs-env: "true"
- description: "Content: Document List"
test-id: "content-services"
folder: "content-services/document-list"
provider: "ECM"
auth: "BASIC"
check-cs-env: "true"
- description: "Content: Metadata"
test-id: "content-services"
folder: "content-services/metadata"
provider: "ECM"
auth: "BASIC"
check-cs-env: "true"
- description: "Content: Upload and Versioning"
test-id: "content-services"
folder: "content-services/upload"
provider: "ECM"
auth: "BASIC"
check-cs-env: "true"
- description: "Search"
test-id: "content-services"
folder: "search"
provider: "ECM"
auth: "BASIC"
check-cs-env: "true"
- description: "Process: Form"
test-id: "process-services"
folder: "process-services/form"
provider: "BPM"
auth: "OAUTH"
check-ps-env: "true"
check-external-cs-env: "true"
- description: "Process: Process"
test-id: "process-services"
folder: "process-services/process"
provider: "BPM"
auth: "OAUTH"
check-ps-env: "true"
check-external-cs-env: "true"
- description: "Process: Tasks"
test-id: "process-services"
folder: "process-services/tasks"
provider: "BPM"
auth: "OAUTH"
check-ps-env: "true"
check-external-cs-env: "true"
- description: "Process: Widget"
test-id: "process-services"
folder: "process-services/widgets"
provider: "BPM"
auth: "OAUTH"
check-ps-env: "true"
check-external-cs-env: "true"
- description: "Process Cloud: Form"
test-id: "process-services-cloud"
folder: "process-services-cloud/form-field"
provider: "ALL"
auth: "OAUTH"
apa-proxy: true
check-cs-env: "true"
check-ps-cloud-env: "true"
- description: "Process Cloud: People"
test-id: "process-services-cloud"
folder: "process-services-cloud/people"
provider: "ALL"
auth: "OAUTH"
apa-proxy: true
check-cs-env: "true"
check-ps-cloud-env: "true"
- description: "Process Cloud: Process"
test-id: "process-services-cloud"
folder: "process-services-cloud/process"
provider: "ALL"
auth: "OAUTH"
apa-proxy: true
check-cs-env: "true"
check-ps-cloud-env: "true"
- description: "Process Cloud: Start Task"
test-id: "process-services-cloud"
folder: "process-services-cloud/start-task"
provider: "ALL"
auth: "OAUTH"
apa-proxy: true
check-cs-env: "true"
check-ps-cloud-env: "true"
- description: "Process Cloud: Tasks List"
test-id: "process-services-cloud"
folder: "process-services-cloud/task-list"
provider: "ALL"
auth: "OAUTH"
apa-proxy: true
check-cs-env: "true"
check-ps-cloud-env: "true"
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # Fetch all history for all
- uses: ./.github/actions/setup
with:
enable-cache: "true"
enable-node-modules-cache: "true"
- uses: ./.github/actions/download-node-modules-and-artifacts
- name: setup chrome
uses: ./.github/actions/setup-chrome
- name: e2e
uses: ./.github/actions/e2e
with:
e2e-test-id: ${{ matrix.e2e-test.test-id }}
e2e-test-folder: ${{ matrix.e2e-test.folder }}
e2e-test-provider: ${{ matrix.e2e-test.provider }}
e2e-test-auth: ${{ matrix.e2e-test.auth }}
check-cs-env: ${{ matrix.e2e-test.check-cs-env }}
check-ps-env: ${{ matrix.e2e-test.check-ps-env }}
check-ps-cloud-env: ${{ matrix.e2e-test.check-ps-cloud-env }}
check-external-cs-env: ${{ matrix.e2e-test.check-external-cs-env }}
apa-proxy: ${{ matrix.e2e-test.apa-proxy }}
finalize:
if: ${{ always() }}
runs-on: ubuntu-latest
name: Final Results
needs: [check-if-pr-is-approved, check-package-lock, unit-tests, build-libs, e2e, e2e-storybook]
steps:
- name: workflow failure
run: exit 1
if: ${{ contains(needs.*.result, 'failure') }}
- name: workflow canceled
run: exit 1
if: ${{ contains(needs.*.result, 'cancelled') }}
- name: workflow success
run: exit 0
if: ${{ contains(needs.*.result, 'success') }}
+3 -3
View File
@@ -1,4 +1,4 @@
on:
on:
issue_comment:
types: [created]
name: Automatic Rebase
@@ -9,10 +9,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout the latest code
uses: actions/checkout@v3
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Automatic Rebase
uses: cirrus-actions/rebase@1.8
uses: cirrus-actions/rebase@1.3.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-223
View File
@@ -1,223 +0,0 @@
name: "release"
on:
workflow_call:
inputs:
dry-run-release:
description: 'enable dry-run on artifact push'
required: false
type: boolean
default: true
pull_request:
types: [closed]
branches:
- develop
- master
- develop-patch*
- master-patch*
env:
BASE_REF: ${{ github.base_ref }}
HEAD_REF: ${{ github.head_ref }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
GITHUB_BRANCH: ${{ github.ref_name }}
GH_BUILD_DIR: ${{ github.workspace }}
GH_COMMIT: ${{ github.sha }}
BUILD_ID: ${{ github.run_id }}
GH_RUN_NUMBER: ${{ github.run_attempt }}
GH_BUILD_NUMBER: ${{ github.run_id }}
JOB_ID: ${{ github.run_id }}
PROXY_HOST_BPM: ${{ secrets.E2E_HOST }}
E2E_HOST_APA: ${{ secrets.E2E_HOST_APA }}
E2E_HOST: ${{ secrets.E2E_HOST }}
E2E_USERNAME: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_PASSWORD: ${{ secrets.E2E_PASSWORD }}
E2E_ADMIN_EMAIL_IDENTITY: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
E2E_ADMIN_PASSWORD_IDENTITY: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
#USERNAME_ADF: ${{ secrets.E2E_USERNAME }}
USERNAME_ADF: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
PASSWORD_ADF: ${{ secrets.E2E_PASSWORD }}
URL_HOST_ADF: "http://localhost:4200"
IDENTITY_ADMIN_EMAIL: ${{ secrets.E2E_ADMIN_EMAIL_IDENTITY }}
IDENTITY_ADMIN_PASSWORD: ${{ secrets.E2E_ADMIN_PASSWORD_IDENTITY }}
AWS_S3_BUCKET_ACTIVITI_LICENSE: ${{ secrets.AWS_S3_BUCKET_ACTIVITI_LICENSE }}
HOST_SSO: ${{ secrets.HOST_SSO }}
LOG_LEVEL: "ERROR"
E2E_LOG_LEVEL: "ERROR"
E2E_MODELER_USERNAME: ${{ secrets.E2E_MODELER_USERNAME }}
E2E_MODELER_PASSWORD: ${{ secrets.E2E_MODELER_PASSWORD }}
EXTERNAL_ACS_HOST: ${{ secrets.EXTERNAL_ACS_HOST }}
E2E_DEVOPS_USERNAME: ${{ secrets.E2E_DEVOPS_USERNAME }}
E2E_DEVOPS_PASSWORD: ${{ secrets.E2E_DEVOPS_PASSWORD }}
USERNAME_SUPER_ADMIN_ADF: ${{ secrets.USERNAME_SUPER_ADMIN_ADF }}
PASSWORD_SUPER_ADMIN_ADF: ${{ secrets.PASSWORD_SUPER_ADMIN_ADF }}
HR_USER: ${{ secrets.HR_USER }}
HR_USER_PASSWORD: ${{ secrets.HR_USER_PASSWORD }}
SMART_RUNNER_PATH: ".protractor-smartrunner"
S3_DBP_PATH: ${{ secrets.S3_DBP_PATH }}
S3_BUILD_BUCKET_SHORT_NAME: ${{ secrets.S3_BUILD_BUCKET_SHORT_NAME }}
NODE_OPTIONS: "--max-old-space-size=5120"
DOCKER_REPOSITORY_DOMAIN: ${{ secrets.DOCKER_REPOSITORY_DOMAIN }}
DOCKER_REPOSITORY_USER: ${{ secrets.DOCKER_REPOSITORY_USER }}
DOCKER_REPOSITORY_PASSWORD: ${{ secrets.DOCKER_REPOSITORY_PASSWORD }}
DOCKER_REPOSITORY_STORYBOOK: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/storybook"
DOCKER_REPOSITORY: "${{ secrets.DOCKER_REPOSITORY_DOMAIN }}/alfresco/demo-shell"
GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN }}
REPO_OWNER: "Alfresco"
REPO_NAME: "alfresco-ng2-components"
DEMO_SHELL_DIR: "./dist/demo-shell"
STORYBOOK_DIR: "./dist/storybook/stories"
BUILT_LIBS_DIR: "./dist/libs"
NODE_MODULES_DIR: "./node_modules"
SMART_RUNNER_DIRECTORY: ".protractor-smartrunner"
SAVE_SCREENSHOT: true
REDIRECT_URI: /
BROWSER_RUN: false
MAXINSTANCES: 2
PLAYWRIGHT_WORKERS: 2
PLAYWRIGHT_STORYBOOK_E2E_HOST: http://localhost
PLAYWRIGHT_STORYBOOK_E2E_PORT: 4400
jobs:
setup:
timeout-minutes: 20
if: github.event.pull_request.merged || ${{ inputs.dry-run-release }}
name: "Setup"
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: ./.github/actions/setup
with:
enable-cache: false
enable-node-modules-cache: false
- name: install
run: |
npm ci
nx run cli:bundle
nx run testing:bundle
- uses: ./.github/actions/upload-node-modules-and-artifacts
release-demoshell:
needs: [setup]
timeout-minutes: 15
if: github.event.pull_request.merged || ${{ inputs.dry-run-release }}
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 1
- run: git fetch --all
- id: set-dryrun
uses: ./.github/actions/enable-dryrun
with:
dry-run-flag: ${{ inputs.dry-run-release }}
- uses: ./.github/actions/setup
with:
enable-cache: false
enable-node-modules-cache: false
- uses: ./.github/actions/download-node-modules-and-artifacts
- name: release Demoshell docker
run: |
nx build demoshell --configuration production
. ./scripts/github/release/docker-tag.sh
./scripts/github/release/release-demoshell-docker.sh ${{ steps.set-dryrun.outputs.dryrun }}
release-storybook:
needs: [setup]
timeout-minutes: 15
if: github.event.pull_request.merged || ${{ inputs.dry-run-release }}
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 1
- run: git fetch --all
- id: set-dryrun
uses: ./.github/actions/enable-dryrun
with:
dry-run-flag: ${{ inputs.dry-run-release }}
- uses: ./.github/actions/setup
with:
enable-cache: false
enable-node-modules-cache: false
act: ${{ inputs.dry-run-release }}
- uses: ./.github/actions/download-node-modules-and-artifacts
- name: release Storybook docker
run: |
nx run stories:build-storybook --configuration ci
. ./scripts/github/release/docker-tag.sh
./scripts/github/release/release-storybook-docker.sh ${{ steps.set-dryrun.outputs.dryrun }}
release-npm:
needs: [setup]
timeout-minutes: 15
if: github.event.pull_request.merged == true || ${{ inputs.dry-run-release }}
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: ./.github/actions/setup
with:
enable-cache: false
enable-node-modules-cache: false
- id: set-dryrun
uses: ./.github/actions/enable-dryrun
with:
dry-run-flag: ${{ inputs.dry-run-release }}
- uses: ./.github/actions/download-node-modules-and-artifacts
- name: check PR number
id: action
uses: kamatama41/get-pr-number-action@v0
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: save PR number
env:
GH_TOKEN: ${{ github.token }}
shell: bash
run: |
echo "PR_NUMBER=${{ steps.action.outputs.number }}" >> $GITHUB_ENV
- name: build libraries
run: |
set -u;
./scripts/github/build/bumpversion.sh
nx affected:build $NX_CALCULATION_FLAGS --prod --exclude="demoshell" --skip-nx-cache
nx affected $NX_CALCULATION_FLAGS --target=pretheme
- uses: actions/setup-node@v3
name: release libraries GH registry
with:
node-version: 14
registry-url: 'https://npm.pkg.github.com'
scope: '@alfresco'
- run: nx affected --target=npm-publish $NX_CALCULATION_FLAGS --tag=$TAG_NPM || exit 1
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/setup-node@v3
name: release libraries Npm registry
with:
node-version: 14
registry-url: 'https://${{ vars.NPM_REGISTRY_ADDRESS }}'
scope: '@alfresco'
- run: nx affected --target=npm-publish $NX_CALCULATION_FLAGS --tag=$TAG_NPM || exit 1
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_REGISTRY_TOKEN }}
npm-check-bundle:
needs: [release-npm]
timeout-minutes: 15
if: github.event.pull_request.merged == true || ${{ inputs.dry-run-release }}
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
- uses: ./.github/actions/npm-check-bundle
+1 -3
View File
@@ -1,4 +1,3 @@
/.angular/cache
*.log
node_modules
bundles
@@ -11,7 +10,6 @@ dist/
e2e/.env.cloud
tmp
temp
/nxcache
e2e-output*/
/e2e/downloads/
*.npmrc
@@ -32,5 +30,5 @@ out-tsc
e2e-result-*
licenses.txt
.DS_Store
.angular
nxcache
-4
View File
@@ -1,4 +0,0 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run affected:lint
+20
View File
@@ -0,0 +1,20 @@
pull_request_rules:
- name: automatic merge for Dependabot pull requests
conditions:
- author=dependabot-preview[bot]
- status-success=continuous-integration/travis-ci/pr
- status-success=security/snyk - package.json (eromano (GitHub marketplace))
actions:
merge:
method: merge
- name: merge when all requested reviews are valid
conditions:
- status-success=continuous-integration/travis-ci/pr
- status-success=security/snyk - package.json (eromano (GitHub marketplace))
- '#approved-reviews-by>=1'
- '#changes-requested-reviews-by=0'
- '#commented-reviews-by=0'
- label!="do not merge"
actions:
merge:
method: merge
-1
View File
@@ -1 +0,0 @@
14
-1
View File
@@ -1 +0,0 @@
/lib/cli/scripts/resources.ts
+1 -2
View File
@@ -1,9 +1,8 @@
import { create } from '@storybook/theming';
import alfrescoLogo from '../lib/core/src/lib/assets/images/alfresco-logo.svg';
export default create({
base: 'light',
brandTitle: 'Hyland | Alfresco Storybook App',
brandUrl: 'https://www.alfresco.com/',
brandImage: alfrescoLogo,
brandImage: '/assets/storybook-logo.png',
});
+7 -3
View File
@@ -1,7 +1,11 @@
module.exports = {
stories: [],
addons: ['@storybook/addon-essentials'],
framework: '@storybook/angular',
staticDirs: [ { from: '../../../demo-shell/src/app.config.json', to: 'app.config.json' } ],
core: { builder: 'webpack5' }
// uncomment the property below if you want to apply some webpack config globally
// webpackFinal: async (config, { configType }) => {
// // Make whatever fine-grained changes you need that should apply to all storybook configs
// // Return the altered config
// return config;
// },
};
-4
View File
@@ -1,4 +0,0 @@
export const parameters = {
docs: { inlineStories: true },
controls: { expanded: true }
};
+8 -8
View File
@@ -1,10 +1,10 @@
{
"extends": "../tsconfig.json",
"exclude": [
"../**/*.spec.js",
"../**/*.spec.ts",
"../**/*.spec.tsx",
"../**/*.spec.jsx"
],
"include": ["../**/*"]
"extends": "../tsconfig.json",
"exclude": [
"../**/*.spec.js",
"../**/*.spec.ts",
"../**/*.spec.tsx",
"../**/*.spec.jsx"
],
"include": ["../**/*"]
}
+12
View File
@@ -0,0 +1,12 @@
/**
* Export a function. Accept the base config as the only param.
* @param {Object} options
* @param {Required<import('webpack').Configuration>} options.config
* @param {'DEVELOPMENT' | 'PRODUCTION'} options.mode - change the build configuration. 'PRODUCTION' is used when building the static version of storybook.
*/
module.exports = async ({ config, mode }) => {
// Make whatever fine-grained changes you need
// Return the altered config
return config;
};
+1 -1
View File
@@ -1,2 +1,2 @@
_theming.scss
lib/core/src/lib/viewer/components/pdf-viewer-host.component.scss
lib/core/viewer/components/pdf-viewer-host.component.scss
+474
View File
@@ -0,0 +1,474 @@
import:
- source: Alfresco/alfresco-build-tools:.travis.docker_hub_login.yml@v1.1.1
git:
depth: 3
quiet: true
language: node_js
arch: arm64-graviton2
dist: bionic
node_js:
- '14'
before_install: . ./scripts/ci/job_hooks/before_install.sh
install: ./scripts/ci/job_hooks/install.sh
env:
global:
# REPOSITORY
- REPO_OWNER="Alfresco"
- REPO_NAME="alfresco-ng2-components"
- S3_DBP_PATH="s3://alfresco-travis-builds/adf"
- DEMO_SHELL_DIR="./dist/demo-shell"
- BUILT_LIBS_DIR="./lib/dist"
- NODE_MODULES_DIR="./node_modules"
- SMART_RUNNER_DIRECTORY=".protractor-smartrunner"
#E2E VARIABLES
- SAVE_SCREENSHOT=true
- REDIRECT_URI=/
- BROWSER_RUN=true
- MAXINSTANCES=2
- PROXY_HOST_ADF=$E2E_HOST
- HOST_SSO=$HOST_SSO
- USERNAME_ADF=$E2E_USERNAME
- PASSWORD_ADF=$E2E_PASSWORD
- IDENTITY_ADMIN_EMAIL=$E2E_ADMIN_EMAIL_IDENTITY
- IDENTITY_ADMIN_PASSWORD=$E2E_ADMIN_PASSWORD_IDENTITY
- URL_HOST_ADF="http://localhost:4200"
#PLAYWRIGHT VARIABLES
- PLAYWRIGHT_WORKERS=2
- PLAYWRIGHT_STORYBOOK_E2E_HOST=http://localhost
- PLAYWRIGHT_STORYBOOK_E2E_PORT=4400
branches:
only:
- master
- develop
- /.*old-env.*/
- /.*next-release.*/
- /.*beta.*/
stages:
- name: Prerequisite
- name: Setup
- name: "Build lib"
if: tag IS blank
- name: "Check bundle"
if: type = push AND tag IS blank OR (type = cron || type = api)
- name: "Trigger Alpha ADF child build"
if: (branch = develop AND (type = cron || type = api)) OR commit_message =~ /\[trigger adf\]/
- name: "Build Demo shell"
if: tag IS blank
- name: "Unit test Lib"
if: type = pull_request || (type = cron || type = api)
- name: "e2e Test"
if: type = pull_request || (type = cron || type = api)
- name: "Storybook Playwright Tests"
if: type = pull_request || (type = cron || type = api)
- name: "Release tag"
if: branch = master
- name: "Deprecate develop builds"
if: branch = master
addons:
chrome: stable
before_script:
- export GIT_HASH=`git rev-parse HEAD`
services:
- xvfb
jobs:
include:
# Big Bang ===================
- stage: Prerequisite
name: "Before anything unnece$$ary happens..."
if: type == pull_request
language: python
python: 3.8
install: echo "no install here"
script: ./scripts/ci/jobs/dbpci-build-guard-check $TRAVIS_PULL_REQUEST || exit 1
# Setup ======================
- stage: Setup
name: "Node modules cache preparation"
script: echo "Only here for setting up the shared node_modules"
workspaces:
create:
name: node_modules_cache
paths:
- "$NODE_MODULES_DIR"
use: node_modules_cache
# Run Only for any PR
- stage: "Build lib"
name: "Lib::Build"
script:
- ./scripts/travis/build/build-libs.sh || travis_terminate 1
- ./scripts/travis/release/release-npm.sh || travis_terminate 1
workspaces:
create:
name: built_libs_cache
paths:
- "$BUILT_LIBS_DIR"
- "$NODE_MODULES_DIR"
use: node_modules_cache
- stage: "Build lib"
name: "Lint"
script: ./scripts/lint.sh
workspaces:
use: node_modules_cache
- stage: "Build Demo shell"
name: "Demo Shell & Storybook :Build && dockerize"
script:
# Build Demo shell & Storybook for production docker"
- NODE_OPTIONS=--max_old_space_size=8192 nx build demoshell --configuration production
- NODE_OPTIONS=--max_old_space_size=8192 nx run stories:build-storybook --configuration ci
- ./scripts/travis/release/release-docker.sh
workspaces:
create:
name: built_demo_shell_cache
paths:
- "$DEMO_SHELL_DIR"
use:
- built_libs_cache
- stage: "Unit test Lib"
name: "content::unit"
script: ./scripts/travis/unit-test/content.sh
workspaces:
use: built_libs_cache
- stage: "Unit test Lib"
name: "core-extension::unit"
script: ./scripts/travis/unit-test/core-extension.sh
workspaces:
use: built_libs_cache
- stage: "Unit test Lib"
name: "process-insights::unit"
script: ./scripts/travis/unit-test/process.sh
workspaces:
use: built_libs_cache
- stage: "Unit test Lib"
name: "process-cloud::unit"
script: ./scripts/travis/unit-test/process-cloud.sh
workspaces:
use: built_libs_cache
- stage: "Trigger Alpha ADF child build"
name: "Trigger Alpha ADF child build"
script: ./scripts/travis/update/update-project.sh -p $TRAVIS_BUILD_NUMBER -t $GITHUB_TOKEN -v alpha
workspaces:
use: built_libs_cache
- stage: "Release tag"
script: ./scripts/travis/release/git-tag.sh
- stage: "Deprecate develop builds"
script:
- ADF_VERSION=$(npm view @alfresco/adf-core@${TAG_NPM} version)
- ./scripts/travis/release/deprecate-develop-build.sh -v ${ADF_VERSION}
- stage: "Storybook Playwright Tests"
name: "Process Cloud"
before_script: ./scripts/ci/jobs/dbpci-before-playwright
script: ./scripts/travis/storybook-testing/storybook-test.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
- stage: "e2e Test"
name: "Core"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="core"
- PROVIDER='ALL'
- AUTH_TYPE='OAUTH'
- stage: "e2e Test"
name: "Content: Components"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="content-services/components"
- PROVIDER="ECM"
- AUTH_TYPE="BASIC"
- stage: "e2e Test"
name: "Content: Directives"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="content-services/directives"
- PROVIDER="ECM"
- AUTH_TYPE="BASIC"
- stage: "e2e Test"
name: "Content: Document List"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="content-services/document-list"
- PROVIDER="ECM"
- AUTH_TYPE="BASIC"
- stage: "e2e Test"
name: "Content: Metadata"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="content-services/metadata"
- PROVIDER="ECM"
- AUTH_TYPE="BASIC"
- stage: "e2e Test"
name: "Content: Upload and Versioning"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="content-services/upload"
- PROVIDER="ECM"
- AUTH_TYPE="BASIC"
- stage: "e2e Test"
name: "Search"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="search"
- PROVIDER="ECM"
- AUTH_TYPE="BASIC"
- stage: "e2e Test"
name: "Process: Form"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-external-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services/form"
- PROVIDER="BPM"
- AUTH_TYPE="OAUTH"
- stage: "e2e Test"
name: "Process: Process"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-external-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services/process"
- PROVIDER="BPM"
- AUTH_TYPE="OAUTH"
- stage: "e2e Test"
name: "Process: Tasks"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-external-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services/tasks"
- PROVIDER="BPM"
- AUTH_TYPE="OAUTH"
- stage: "e2e Test"
name: "Process: Widgets"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-external-cs-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services/widgets"
- PROVIDER="BPM"
- AUTH_TYPE="OAUTH"
- stage: "e2e Test"
name: "Process Cloud : Form"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-cloud-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services-cloud/form-field"
- PROVIDER="ALL"
- AUTH_TYPE="OAUTH"
- stage: "e2e Test"
name: "Process Cloud : People"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-cloud-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services-cloud/people"
- PROVIDER="ALL"
- AUTH_TYPE="OAUTH"
- stage: "e2e Test"
name: "Process Cloud : Process"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-cloud-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services-cloud/process"
- PROVIDER="ALL"
- AUTH_TYPE="OAUTH"
- stage: "e2e Test"
name: "Process Cloud : Start Task"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-cloud-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services-cloud/start-task"
- PROVIDER="ALL"
- AUTH_TYPE="OAUTH"
- stage: "e2e Test"
name: "Process Cloud : Tasks List"
before_script:
- ./scripts/ci/job_hooks/before_e2e.sh
- ./scripts/ci/check-env/check-cs-env.sh || travis_terminate 1
- ./scripts/ci/check-env/check-ps-cloud-env.sh || travis_terminate 1
script: ./scripts/travis/e2e/e2e.sh
after_script: ./scripts/ci/job_hooks/after_e2e.sh
workspaces:
use:
- built_libs_cache
- built_demo_shell_cache
env:
- FOLDER="process-services-cloud/task-list"
- PROVIDER="ALL"
- AUTH_TYPE="OAUTH"
- stage: Check bundle
script:
- ADF_VERSION=$(npm view @alfresco/adf-core@${TAG_NPM} version)
- ./scripts/travis/build/npm-check-bundles.sh -v ${ADF_VERSION}
workspaces:
use: built_libs_cache
notifications:
slack:
on_pull_requests: false
rooms:
secure: "qcTP/+rhVweMSZZAQMPz4sW7boS8XC0RX1SPYgg7hIfxBr9747WpRLkJ1sirkVaXI/6XfYAyl42CTfPmTuJxIC+co/NSnEDknwVsnKZd0O/ykTpo+mxIN4BTZX8dm+gELR5IEYQPs+Yki3ZnD9b+0mCK1yD8JallKCQeE2U9BhzZhP/Fn0ce35EulybNp3QQDaox0XC+7gadMdxlvK8mzP1scw76wRLtx25QLxxV+OwEw0bzyh8y3onfjHfnoDcUQWRTNdnjapzmgf1LNdC202A5kwp5sJggfSDr+ActRqaMvv4BbMsFpdan34B6zPQJfyZL1r8IB8O8BEKcAaOUVcTjnZAOom8kHS8F07/mo5xnNYmV8oNX2/egr1CiG4U0EAGF2XGqM+vetYnF88LTEzy84kVxmSwKGVfzlGOyTplMXJ1iCENndtfWm1AXhAFj5RSsSAZg6IStTM+mcpnC75moEwQtj8bTenwehHz1HQAjQX7xeTQo27SxDc7oqp1ReyXCllMjKxckjVGmp2j6yxn1Jl55kivBj57vluLtEtziOGluVELP5E2fV0VAuErNhnjLm4LJARVN76PQaTOXYwATVVJJDhb/77TesvxQsr3VfiROEKm7QB7IDFjghjLLisSX67JQ5+7K/qMlqf9+9hNw4n0v1eMylVjt+gyxspc="
on_failure: always
on_success: change
template:
- "Repo `%{repository_slug}` *%{result}* build (<%{build_url}|#%{build_number}>) for commit (<%{compare_url}|%{commit}>) on branch `%{branch}`."
- "Author: %{author} Execution time: *%{duration}*"
- "Message: %{message}"
cache:
npm: false
directories:
- tmp
+2 -1
View File
@@ -1,5 +1,6 @@
{
"recommendations": [
"lucono.karma-test-explorer"
"stylelint.vscode-stylelint",
"editorconfig.editorconfig",
]
}
+2 -2
View File
@@ -8,6 +8,7 @@
"**/coverage": true,
"**/.happypack": true
},
"editor.renderIndentGuides": true,
"markdownlint.config": {
"MD032": false,
"MD004": false,
@@ -30,6 +31,5 @@
"less",
"postcss",
"scss"
],
"editor.guides.indentation": true
]
}
View File
+7 -6
View File
@@ -2,8 +2,8 @@
| branch | status |
| --- | --- |
| master | [![git-tag](https://github.com/Alfresco/alfresco-ng2-components/actions/workflows/git-tag.yml/badge.svg)](https://github.com/Alfresco/alfresco-ng2-components/actions/workflows/git-tag.yml) |
| develop | [![cron schedule](https://github.com/Alfresco/alfresco-ng2-components/actions/workflows/cron.yml/badge.svg)](https://github.com/Alfresco/alfresco-ng2-components/actions/workflows/cron.yml)|
| master | [![Build Status](https://travis-ci.com/Alfresco/alfresco-ng2-components.svg?branch=master)](https://travis-ci.com/Alfresco/alfresco-ng2-components) |
| develop | [![Build Status](https://travis-ci.com/Alfresco/alfresco-ng2-components.svg?branch=develop)](https://travis-ci.com/Alfresco/alfresco-ng2-components) |
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/d9eb873741da403bb3284778102372e7)](https://www.codacy.com/app/Alfresco/alfresco-ng2-components?utm_source=github.com&utm_medium=referral&utm_content=Alfresco/alfresco-ng2-components&utm_campaign=badger)
[![Join the chat at https://gitter.im/Alfresco/alfresco-ng2-components](https://badges.gitter.im/Alfresco/alfresco-ng2-components.svg)](https://gitter.im/Alfresco/alfresco-ng2-components?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
@@ -39,8 +39,8 @@ ADF Libraries list:
- [Insights](https://github.com/Alfresco/alfresco-ng2-components/tree/develop/lib/insights)
- [Process Service Cloud](https://github.com/Alfresco/alfresco-ng2-components/tree/develop/lib/process-services-cloud)
- [Process service](https://github.com/Alfresco/alfresco-ng2-components/tree/develop/lib/process-services)
- [Stories](https://github.com/Alfresco/alfresco-ng2-components/tree/develop/lib/stories)
- [Stories](https://github.com/Alfresco/alfresco-ng2-components/tree/develop/lib/stories)
## Demo Application
A separate application showcasing integration of components can be found
@@ -49,7 +49,7 @@ The app has examples of basic interaction for both APS and ACS components.
## Yeoman generators
To speed up the development of your ADF application, use the
To speed up the development of your ADF application, use the
[Yeoman Generator](https://github.com/Alfresco/generator-ng2-alfresco-app).
This will create a full working project with all the right libraries and tools.
@@ -69,6 +69,7 @@ All components are supported in the following browsers:
|Edge |13, 14 |
|Internet Explorer |11 |
* Due to a [known issue](https://bugzilla.mozilla.org/show_bug.cgi?id=1188880) in Firefox, the Alfresco Upload Component does not currently support folder upload functionality on Firefox.
* Due to a [known issue](https://bugzilla.mozilla.org/show_bug.cgi?id=1188880) in Firefox, the Alfresco Upload Component does not currently support folder upload functionality on Firefox.
See the [Browser Support](BROWSER-SUPPORT.md) article for more details.
+239 -545
View File
File diff suppressed because it is too large Load Diff
+3 -8
View File
@@ -27,7 +27,6 @@
"CSRF",
"datacolumn",
"datarow",
"Datasource",
"datatable",
"dateitem",
"datepicker",
@@ -63,11 +62,9 @@
"highlightable",
"hotfix",
"imgpreview",
"Inplace",
"intitem",
"jira",
"jsons",
"jwks",
"keycodes",
"keyvaluepairs",
"keyvaluepairsitem",
@@ -79,15 +76,15 @@
"mincount",
"minlength",
"minmax",
"jsons",
"Inplace",
"MLTEXT",
"mousedrag",
"mouseenter",
"multiselect",
"mysites",
"nginx",
"numbervisibilityprocess",
"OAUTHCONFIG",
"oidc",
"pdfjs",
"penta",
"printf",
@@ -124,7 +121,6 @@
"uncheck",
"Unclaim",
"unfavorite",
"unlisten",
"unshare",
"UPDATEPERMISSIONS",
"uploader",
@@ -136,8 +132,7 @@
"webm",
"webscript",
"Whitespaces",
"xdescribe",
"xsrf"
"xdescribe"
],
"dictionaries": [
"html",
+5 -1
View File
@@ -4,6 +4,10 @@
"outDir": "../out-tsc/e2e",
"module": "commonjs",
"target": "es5",
"types": ["jasmine", "jasminewd2", "node"]
"types":[
"jasmine",
"jasminewd2",
"node"
]
}
}
+1 -1
View File
@@ -50,7 +50,7 @@ module.exports = function (config) {
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['ChromeHeadless'],
browsers: ['Chrome'],
singleRun: false
});
};
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "Alfresco-ADF-Angular-Demo",
"description": "Demo shell for Alfresco Angular components",
"version": "6.0.0-A.3",
"version": "4.8.0",
"author": "Alfresco Software, Ltd.",
"repository": {
"type": "git",
-76
View File
@@ -1,76 +0,0 @@
module.exports = {
getDeployedAppsProxy: function(processHost, deployedApps) {
let deployedAppProxy = {};
if (deployedApps) {
try {
const deployedAppsArray = JSON.parse(deployedApps);
for (const app of deployedAppsArray) {
const appName = app.name;
const appPath = `/${appName}`;
const appPathRewrite = `^/${appName}`;
deployedAppProxy = {
...deployedAppProxy,
[appPath]: {
target: `${processHost}`,
secure: false,
pathRewrite: {
[appPathRewrite]: appName,
},
changeOrigin: true,
},
};
}
} catch (e) {
console.log(e);
}
}
return deployedAppProxy;
},
getShareProxy: function(host) {
console.log('Target for /alfresco', host);
return {
'/alfresco': {
target: host,
secure: false,
logLevel: 'debug',
changeOrigin: true,
onProxyReq: function(request) {
if(request["method"] !== "GET")
request.setHeader("origin", host);
},
// workaround for REPO-2260
onProxyRes: function (proxyRes, req, res) {
const header = proxyRes.headers['www-authenticate'];
if (header && header.startsWith('Basic')) {
proxyRes.headers['www-authenticate'] = 'x' + header;
}
},
},
}
},
getApsProxy: function(host) {
console.log('Target for /activiti-app', host);
return {
'/activiti-app': {
target: host,
secure: false,
logLevel: 'debug',
changeOrigin: true,
},
}
},
getIdentityAdapterServiceProxy: function(host) {
console.log('Target for /identity-adapter-service', host);
return {
'/identity-adapter-service': {
target: host,
secure: false,
logLevel: 'debug',
changeOrigin: true,
},
}
}
};
+25 -11
View File
@@ -1,15 +1,29 @@
require('dotenv').config();
const { getDeployedAppsProxy, getShareProxy, getApsProxy, getIdentityAdapterServiceProxy } = require('./proxy-helpers');
const legacyHost = process.env.PROXY_HOST_ADF;
const cloudHost = process.env.CLOUD_PROXY_HOST_ADF || process.env.PROXY_HOST_ADF;
const cloudApps = process.env.APP_CONFIG_APPS_DEPLOYED;
const apsHost = process.env.PROXY_HOST_ADF;
var PROXY_HOST_ADF = process.env.PROXY_HOST_ADF;
console.log('PROXY_HOST_ADF' + PROXY_HOST_ADF);
module.exports = {
...getShareProxy(legacyHost),
...getApsProxy(apsHost),
...getDeployedAppsProxy(cloudHost, cloudApps),
...getIdentityAdapterServiceProxy(cloudHost)
"/alfresco": {
"target": (PROXY_HOST_ADF || "http://localhost:8080"),
"secure": false,
"pathRewrite": {
"^/alfresco/alfresco": ""
},
"changeOrigin": true,
// workaround for REPO-2260
onProxyRes: function (proxyRes, req, res) {
const header = proxyRes.headers['www-authenticate'];
if (header && header.startsWith('Basic')) {
proxyRes.headers['www-authenticate'] = 'x' + header;
}
}
},
"/activiti-app": {
"target": (PROXY_HOST_ADF || "http://localhost:8080"),
"secure": false,
"pathRewrite": {
"^/activiti-app/activiti-app": ""
},
"changeOrigin": true
}
};
+11 -45
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "نوع المصادقة",
"BASIC": "مصادقة أساسية",
"SSO": "SSO",
"IMPLICIT-FLOW": "تدفق ضمني",
"PROVIDER": "موفر",
"REQUIRED": "هذا الحقل مطلوب",
"CS_URL_ERROR": "لا يتطابق عنوان Content Services مع تنسيق URL",
"PS_URL_ERROR": "لا يتطابق عنوان Process Services مع تنسيق URL",
"TITLE": "الإعدادات",
"CS-HOST": "عنوان URL لـ Content Services",
"BP-HOST": "عنوان URL لـ Process Services",
"BACK": "عودة",
"APPLY": "تطبيق",
"NOT_VALID": "لم يتم التعرف على http(s)://host|ip:port(/path)، جرّب عنوان URL مختلفًا.",
"REDIRECT": "إعادة توجيه URI",
"REDIRECT_LOGOUT": "إعادة توجيه خروج URI",
"SILENT": "دخول صامت",
"SCOPE": "نطاق",
"CLIENT": "معرف العميل",
"PUBLIC_URLS": "عناوين url العامة لتسجيل الدخول الصامت",
"SECRET": "سر"
},
"ABOUT": {
"DEVELOPMENT": "وضع التطوير"
},
@@ -67,7 +44,7 @@
"VERSION": {
"NO_PERMISSION": "ليس لديك إذن لإدارة إصدارات هذا المحتوى",
"NO_PERMISSION_EVENT": "ليس لديك إذن ${event.permission} ل${event.action} ${event.type}",
"CHOOSE_FILE": "حدد ملف لرؤية إصداراته",
"CHOOSE_FILE": "تحديد ملف لرؤية إصداراته",
"DIALOG": {
"CLOSE": "إغلاق",
"TITLE": "إدارة الإصدارات"
@@ -81,9 +58,9 @@
},
"APP_LAYOUT": {
"APP": "تطبيق",
"HEADER_TEXT_COLOR": "لون نص الرأس",
"HEADER_TEXT_COLOR": "لون نص العنوان",
"APP_NAME": "تطبيق ADF التوضيحي",
"FILTERED_SEARCH": "رأس عامل التصفية",
"FILTERED_SEARCH": "عنوان عامل التصفية",
"HOME": "رئيسية",
"NODE-SELECTOR": "محدد العقدة",
"SITES": "المواقع",
@@ -119,13 +96,13 @@
"WORD_TO_SEARCH": "بحث عن كلمة",
"SEARCH_CREATED_BY": "تم الإنشاء بواسطة",
"SEARCH_SERVICE_APPROACH": "حدد هذا لتعطيل خاصية الإدخال والتكوين باستخدام الخدمة",
"HEADER_DATA": "بيانات الرأس",
"HEADER_DATA": "بيانات العنوان",
"TREE_VIEW": "طريقة عرض الشجرة",
"EXPAND_LIST": "قائمة العناصر القابلة للتوسيع",
"ICONS": "أيقونات",
"PEOPLE_GROUPS_CLOUD": "سحابة الأشخاص/المجموعة",
"TASK_HEADER_CLOUD": {
"COMPONENT_NAME": "رأس مهمة السحابة",
"COMPONENT_NAME": "عنوان مهمة السحابة",
"APP_NAME_INPUT": "اسم التطبيق",
"TASK_ID_INPUT": "معرف المهمة",
"FIND_TASK_BUTTON": "بحث عن المهمة"
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "مكون سحابة المجموعة",
"CONFIRM-DIALOG": "مربع حوار التأكيد",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "قائمة مهام الخدمات",
"RICH_TEXT_EDITOR": "محرر نص منسق"
"SERVICE_TASK_LIST": "قائمة مهام الخدمات"
},
"TRASHCAN": {
"ACTIONS": {
@@ -187,7 +163,7 @@
"DELETE": "حذف",
"FAVORITES": "إضافة إلى المفضلات",
"SHARE": "مشاركة",
"THEME": "حدد نسق",
"THEME": "تحديد نسق",
"SHOW_VERSION": "إظهار الإصدار",
"HIDE_VERSION": "إخفاء الإصدار",
"LISTVIEW": "وضع عرض القائمة",
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "استبدال أعمدة",
"LOAD_NODE": "تحميل عقدة",
"MULTISELECT": "تحديد متعدد",
"MULTISELECT_DESCRIPTION": "استخدام Cmd (Mac) أو Ctrl (Windows) لتبديل تحديد العناصر المتعددة",
"USE_CUSTOM_COLUMN_HEADER": "استخدم نموذج مخصص للرأس 'المستخدم'",
"CUSTOM_COLUMN_HEADER": "قالب رأس المستخدم المخصص"
"MULTISELECT_DESCRIPTION": "استخدام Cmd (Mac) أو Ctrl (Windows) لتبديل تحديد العناصر المتعددة"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "لم يتم تحديد تقرير. اختر تقريرًا من القائمة"
@@ -236,7 +210,7 @@
"START-PROCESS": "بدء العملية",
"PROCESS-AUDIT-LOG": "سجل تدقيق العملية",
"TASK-AUDIT-LOG": "سجل تدقيق المهمة",
"TASK-SHOW-HEADER": "إظهار تفاصيل الرأس"
"TASK-SHOW-HEADER": "إظهار تفاصيل العنوان"
},
"PS_CLOUD_TAB": {
"APPS_TAB": "تطبيق",
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "كل المجموعات المحددة مسبقًا",
"INVALID_USERS": "المستخدمون غير الصالحين",
"INVALID_GROUPS": "مجموعات غير صالحة",
"READONLY_MODE": "وضع القراءة فقط",
"GROUPS_RESTRICTION": "قيود المجموعات"
"READONLY_MODE": "وضع القراءة فقط"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "تحديد متعدد",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "نوع الإجراء"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "تم إنشاء زر مجلد جديد",
"EDIT_NODE_LABEL": "زر تحرير العقدة",
"DELETE_NODE_LABEL": "زر حذف أيقونة العقدة"
},
"DEFAULT_SEARCH": "افتراضي",
"OPEN_DIALOG": "فتح الحوار",
"SHOW_LIST_LABEL": "انقر لعرض القائمة"
"DEFAULT_SEARCH": "افتراضي"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Typ ověřování",
"BASIC": "Základní ověřování",
"SSO": "Jednotné přihlášení",
"IMPLICIT-FLOW": "Implicitní tok",
"PROVIDER": "Poskytovatel",
"REQUIRED": "Toto pole je povinné",
"CS_URL_ERROR": "Adresa Content Services neodpovídá formátu adresy URL",
"PS_URL_ERROR": "Adresa Process Services neodpovídá formátu adresy URL",
"TITLE": "Nastavení",
"CS-HOST": "Adresa URL pro Content Services",
"BP-HOST": "Adresa URL pro Process Services",
"BACK": "Zpět",
"APPLY": "Použít",
"NOT_VALID": "http(s)://host|ip:port(/path) nelze rozeznat. Použijte jinou adresu URL.",
"REDIRECT": "URI pro přesměrování",
"REDIRECT_LOGOUT": "URI pro přesměrování (odhlášení)",
"SILENT": "Přihlášení na pozadí",
"SCOPE": "Rozsah",
"CLIENT": "ID klienta",
"PUBLIC_URLS": "Veřejné adresy URL pro přihlášení na pozadí",
"SECRET": "Tajné"
},
"ABOUT": {
"DEVELOPMENT": "Režim pro vývojáře"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Součást cloudu skupin",
"CONFIRM-DIALOG": "Dialogové okno s potvrzením",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Seznam úloh služby",
"RICH_TEXT_EDITOR": "Rich Text Editor"
"SERVICE_TASK_LIST": "Seznam úloh služby"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Nahradit sloupce",
"LOAD_NODE": "Načíst uzel",
"MULTISELECT": "Hromadný výběr",
"MULTISELECT_DESCRIPTION": "Pomocí klávesy Ctrl (Windows) nebo Cmd (Mac) můžete přepínat výběr více položek",
"USE_CUSTOM_COLUMN_HEADER": "Použít vlastní šablonu pro záhlaví ,Uživatel",
"CUSTOM_COLUMN_HEADER": "Vlastní šablona záhlaví Uživatel"
"MULTISELECT_DESCRIPTION": "Pomocí klávesy Ctrl (Windows) nebo Cmd (Mac) můžete přepínat výběr více položek"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Nebyly zvoleny žádné zprávy. Vyberte zprávu ze seznamu"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Všechny předvolené skupiny",
"INVALID_USERS": "Neplatní uživatelé",
"INVALID_GROUPS": "Neplatné skupiny",
"READONLY_MODE": "Režim jen pro čtení",
"GROUPS_RESTRICTION": "Omezení skupin"
"READONLY_MODE": "Režim jen pro čtení"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Hromadný výběr",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Typ akce"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Vytvořit tlačítko pro novou složku",
"EDIT_NODE_LABEL": "Upravit tlačítko uzlu",
"DELETE_NODE_LABEL": "Odebrat tlačítko ikony uzlu"
},
"DEFAULT_SEARCH": "Výchozí",
"OPEN_DIALOG": "Otevřít dialogové okno",
"SHOW_LIST_LABEL": "Na seznam pro zobrazení klikněte"
"DEFAULT_SEARCH": "Výchozí"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Godkendelsestype",
"BASIC": "Grundlæggende godkendelse",
"SSO": "SSO",
"IMPLICIT-FLOW": "Implicit flow",
"PROVIDER": "Udbyder",
"REQUIRED": "Dette felt er påkrævet",
"CS_URL_ERROR": "Content Services-adressen matcher ikke URL-formatet",
"PS_URL_ERROR": "Process Services-adressen matcher ikke URL-adresseformatet",
"TITLE": "Indstillinger",
"CS-HOST": "Content Services-URL",
"BP-HOST": "Process Services-URL",
"BACK": "Tilbage",
"APPLY": "Anvend",
"NOT_VALID": "http(s)://vært|ip-adresse:port(/sti) blev ikke genkendt. Prøv en anden URL-adresse.",
"REDIRECT": "URI til omdirigering",
"REDIRECT_LOGOUT": "Omdiriger URI til aflogning",
"SILENT": "Uovervåget login",
"SCOPE": "Omfang",
"CLIENT": "Klient-id",
"PUBLIC_URLS": "Uovervåget login til offentlige URL-adresser",
"SECRET": "Hemmelig"
},
"ABOUT": {
"DEVELOPMENT": "Udv. model"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Gruppecloudkomponent",
"CONFIRM-DIALOG": "Bekræftelsesdialogboks",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Opgaveliste for tjeneste",
"RICH_TEXT_EDITOR": "Rich Text Editor"
"SERVICE_TASK_LIST": "Opgaveliste for tjeneste"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Erstat kolonner",
"LOAD_NODE": "Indlæs node",
"MULTISELECT": "Vælg flere",
"MULTISELECT_DESCRIPTION": "Brug Kommando (Mac) eller Ctrl (Windows) for at vælge flere elementer",
"USE_CUSTOM_COLUMN_HEADER": "Brug tilpasset skabelon til overskrift 'Bruger'",
"CUSTOM_COLUMN_HEADER": "Tilpasset brugeroverskriftskabelon"
"MULTISELECT_DESCRIPTION": "Brug Kommando (Mac) eller Ctrl (Windows) for at vælge flere elementer"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Du skal vælge en rapport på listen til venstre"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Alle forudvalgte grupper",
"INVALID_USERS": "Ugyldige brugere",
"INVALID_GROUPS": "Ugyldige grupper",
"READONLY_MODE": "Skrivebeskyttet tilstand",
"GROUPS_RESTRICTION": "Gruppebegrænsning"
"READONLY_MODE": "Skrivebeskyttet tilstand"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Multivalg",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Handlingstype"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Knap Opret en ny mappe",
"EDIT_NODE_LABEL": "Knap Redigér knude",
"DELETE_NODE_LABEL": "Knap Slet knudeikon"
},
"DEFAULT_SEARCH": "Standard",
"OPEN_DIALOG": "Åbn dialog",
"SHOW_LIST_LABEL": "Klik for at vise listen"
"DEFAULT_SEARCH": "Standard"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Authentifizierungstyp",
"BASIC": "Basisauthentifizierung",
"SSO": "SSO",
"IMPLICIT-FLOW": "Impliziter Fluss",
"PROVIDER": "Provider",
"REQUIRED": "Dieses Feld ist erforderlich",
"CS_URL_ERROR": "Content Services-Adresse nicht im richtigen URL-Format",
"PS_URL_ERROR": "Process Services-Adresse nicht im richtigen URL-Format",
"TITLE": "Einstellungen",
"CS-HOST": "URL für Content Services",
"BP-HOST": "URL für Process Services",
"BACK": "Zurück",
"APPLY": "Anwenden",
"NOT_VALID": "http(s)://host|ip:port(/path) nicht erkannt. Probieren Sie es mit einer anderen URL.",
"REDIRECT": "Umleitungs-URI",
"REDIRECT_LOGOUT": "Umleitungs-URI zum Abmelden",
"SILENT": "Automatische Anmeldung",
"SCOPE": "Bereich",
"CLIENT": "Client-ID",
"PUBLIC_URLS": "Öffentliche URLs für automatische Anmeldung",
"SECRET": "Geheimnis"
},
"ABOUT": {
"DEVELOPMENT": "Entwicklermodus"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Gruppen-Cloud-Komponente",
"CONFIRM-DIALOG": "Bestätigungsdialog",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Service-Aufgabenliste",
"RICH_TEXT_EDITOR": "Rich-Text-Editor"
"SERVICE_TASK_LIST": "Service-Aufgabenliste"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Spalten ersetzen",
"LOAD_NODE": "Node laden",
"MULTISELECT": "Mehrfachauswahl",
"MULTISELECT_DESCRIPTION": "Mit der Befehls- (Mac) oder der Steuerungstaste (Windows) können Sie die Auswahl mehrerer Elemente umschalten",
"USE_CUSTOM_COLUMN_HEADER": "Benutzerdefinierte Vorlage für 'Benutzer'-Kopfzeile verwenden",
"CUSTOM_COLUMN_HEADER": "Benutzerdefinierte Vorlage für Benutzer-Kopfzeile"
"MULTISELECT_DESCRIPTION": "Mit der Befehls- (Mac) oder der Steuerungstaste (Windows) können Sie die Auswahl mehrerer Elemente umschalten"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Kein Bericht ausgewählt. Wählen Sie einen Bericht aus der Liste"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Alle vorausgewählten Gruppen",
"INVALID_USERS": "Unzulässige Benutzer",
"INVALID_GROUPS": "Unzulässige Gruppen",
"READONLY_MODE": "Schreibgeschützter Modus",
"GROUPS_RESTRICTION": "Gruppenbeschränkung"
"READONLY_MODE": "Schreibgeschützter Modus"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Mehrfachauswahl",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Aktionstyp"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Schaltfläche für einen neuen Ordner erstellen",
"EDIT_NODE_LABEL": "Schaltfläche Node bearbeiten",
"DELETE_NODE_LABEL": "Schaltfläche für Node-Symbol löschen"
},
"DEFAULT_SEARCH": "Standard",
"OPEN_DIALOG": "Dialog öffnen",
"SHOW_LIST_LABEL": "Klicken Sie, um die Liste anzuzeigen"
"DEFAULT_SEARCH": "Standard"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Authentication type",
"BASIC": "Basic Authentication",
"SSO": "SSO",
"IMPLICIT-FLOW": "Implicit Flow",
"PROVIDER": "Provider",
"REQUIRED": "This field is required",
"CS_URL_ERROR": "Content Services address doesn't match the URL format",
"PS_URL_ERROR": "Process Services address doesn't match the URL format",
"TITLE": "Settings",
"CS-HOST": "Content Services URL",
"BP-HOST": "Process Services URL",
"BACK": "Back",
"APPLY": "APPLY",
"NOT_VALID": "http(s)://host|ip:port(/path) not recognized, try a different URL.",
"REDIRECT": "Redirect URI",
"REDIRECT_LOGOUT": "Redirect URI Logout",
"SILENT": "Silent Login",
"SCOPE": "Scope",
"CLIENT": "Client ID",
"PUBLIC_URLS": "Public urls silent Login",
"SECRET": "Secret"
},
"ABOUT": {
"DEVELOPMENT":"Dev Mode"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Groups Cloud Component",
"CONFIRM-DIALOG": "Confirmation Dialog",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Service Task List",
"RICH_TEXT_EDITOR": "Rich Text Editor"
"SERVICE_TASK_LIST": "Service Task List"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Replace columns",
"LOAD_NODE": "Load Node",
"MULTISELECT": "Multiselect",
"MULTISELECT_DESCRIPTION": "Use Cmd (Mac) or Ctrl (Windows) to toggle selection of multiple items",
"USE_CUSTOM_COLUMN_HEADER": "Use custom template for 'User' header",
"CUSTOM_COLUMN_HEADER": "Custom User Header Template"
"MULTISELECT_DESCRIPTION": "Use Cmd (Mac) or Ctrl (Windows) to toggle selection of multiple items"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "No report selected. Choose a report from the list"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "All Preselected Groups",
"INVALID_USERS": "Invalid Users",
"INVALID_GROUPS": "Invalid Groups",
"READONLY_MODE": "Read-only Mode",
"GROUPS_RESTRICTION": "Groups Restriction"
"READONLY_MODE": "Read-only Mode"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Multiselection",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Action Type"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Create a new folder button",
"EDIT_NODE_LABEL": "Edit node button",
"DELETE_NODE_LABEL": "Delete node icon button"
},
"DEFAULT_SEARCH": "Default",
"OPEN_DIALOG": "Open dialog",
"SHOW_LIST_LABEL": "Click to show the list"
"DEFAULT_SEARCH": "Default"
}
+4 -15
View File
@@ -111,8 +111,7 @@
"GROUPS_CLOUD": "Componente en la nube de grupos",
"CONFIRM-DIALOG": "Cuadro de diálogo de confirmación",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Lista de tareas de servicio",
"RICH_TEXT_EDITOR": "Editor de texto enriquecido"
"SERVICE_TASK_LIST": "Lista de tareas de servicio"
},
"TRASHCAN": {
"ACTIONS": {
@@ -197,9 +196,7 @@
"REPLACE_COLUMNS": "Sustituir columnas",
"LOAD_NODE": "Cargar nodo",
"MULTISELECT": "Selección múltiple",
"MULTISELECT_DESCRIPTION": "Utilice Cmd (Mac) o Ctrl (Windows) para cambiar la selección de varios elementos",
"USE_CUSTOM_COLUMN_HEADER": "Utilizar una plantilla personalizada para el encabezado 'Usuario'",
"CUSTOM_COLUMN_HEADER": "Plantilla de encabezado de usuario personalizado"
"MULTISELECT_DESCRIPTION": "Utilice Cmd (Mac) o Ctrl (Windows) para cambiar la selección de varios elementos"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "No se ha seleccionado ningún informe. Elija un informe de la lista."
@@ -333,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Todos los grupos preseleccionados",
"INVALID_USERS": "Usuarios no válidos",
"INVALID_GROUPS": "Grupos no válidos",
"READONLY_MODE": "Modo de solo lectura",
"GROUPS_RESTRICTION": "Restricción de grupos"
"READONLY_MODE": "Modo de solo lectura"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Selección múltiple",
@@ -358,12 +354,5 @@
"ACTION_TYPE": "Tipo de acción"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Crear un nuevo botón de carpeta",
"EDIT_NODE_LABEL": "Editar botón de nodo",
"DELETE_NODE_LABEL": "Eliminar el botón del icono del nodo"
},
"DEFAULT_SEARCH": "Predeterminado",
"OPEN_DIALOG": "Abrir cuadro de diálogo",
"SHOW_LIST_LABEL": "Hacer clic para mostrar la lista"
"DEFAULT_SEARCH": "Predeterminado"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Todennustyyppi",
"BASIC": "Perustodennus",
"SSO": "Kertakirjautuminen",
"IMPLICIT-FLOW": "Epäsuora kulku",
"PROVIDER": "Palvelu",
"REQUIRED": "Tämä kenttä on pakollinen",
"CS_URL_ERROR": "Content Services -osoite ei täsmää URL-muodon kanssa",
"PS_URL_ERROR": "Process Services -osoite ei täsmää URL-muodon kanssa",
"TITLE": "Asetukset",
"CS-HOST": "Content Servicesin URL-osoite",
"BP-HOST": "Process Servicesin URL-osoite",
"BACK": "Takaisin",
"APPLY": "Käytä",
"NOT_VALID": "Osoitetta http(s)://host|ip:port(/path) ei tunnisteta. Kokeile toista URL-osoitetta.",
"REDIRECT": "Uudelleenohjauksen URI-osoite",
"REDIRECT_LOGOUT": "Uudelleenohjauksen URI-osoite uloskirjautuminen",
"SILENT": "Hiljainen kirjautuminen",
"SCOPE": "Laajuus",
"CLIENT": "Asiakastunnus",
"PUBLIC_URLS": "Yleisten url-osoitteiden hiljainen sisäänkirjaus",
"SECRET": "Salainen"
},
"ABOUT": {
"DEVELOPMENT": "Kehitystapa"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Ryhmäpilvi-komponentti",
"CONFIRM-DIALOG": "Vahvistusvalintaikkuna",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Palvelutehtäväluettelo",
"RICH_TEXT_EDITOR": "RTF-editori"
"SERVICE_TASK_LIST": "Palvelutehtäväluettelo"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Korvaa sarakkeita",
"LOAD_NODE": "Lataa solmu",
"MULTISELECT": "Monivalinta",
"MULTISELECT_DESCRIPTION": "Voit valita useita kohteita Cmd- (Mac) tai Ctrl-näppäimen (Windows) avulla",
"USE_CUSTOM_COLUMN_HEADER": "Käytä mukautettua mallia \"Käyttäjä\"-otsikolle",
"CUSTOM_COLUMN_HEADER": "Mukautettu käyttäjäotsikon malli"
"MULTISELECT_DESCRIPTION": "Voit valita useita kohteita Cmd- (Mac) tai Ctrl-näppäimen (Windows) avulla"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Yhtään raporttia ei ole valittuna. Valitse raportti luettelosta."
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Kaikki esivalitut ryhmät",
"INVALID_USERS": "Kelpaamattomat käyttäjät",
"INVALID_GROUPS": "Kelpaamattomat ryhmät",
"READONLY_MODE": "Vain luku -tila",
"GROUPS_RESTRICTION": "Ryhmärajoitus"
"READONLY_MODE": "Vain luku -tila"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Monivalinta",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Toiminnon tyyppi"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Luo uusi kansio -painike",
"EDIT_NODE_LABEL": "Muokkaa solmua -painike",
"DELETE_NODE_LABEL": "Poista solmukuvake -painike"
},
"DEFAULT_SEARCH": "Oletus",
"OPEN_DIALOG": "Avaa valintaikkuna",
"SHOW_LIST_LABEL": "Näytä luettelo napsauttamalla"
"DEFAULT_SEARCH": "Oletus"
}
+8 -42
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Type d'authentification",
"BASIC": "Authentification de base",
"SSO": "SSO",
"IMPLICIT-FLOW": "Flux implicite",
"PROVIDER": "Fournisseur",
"REQUIRED": "Ce champ est obligatoire",
"CS_URL_ERROR": "L'adresse Content Services ne correspond pas au format d'URL",
"PS_URL_ERROR": "L'adresse Process Services ne correspond pas au format d'URL",
"TITLE": "Paramètres",
"CS-HOST": "URL de Content Services",
"BP-HOST": "URL de Process Services",
"BACK": "Retour",
"APPLY": "Appliquer",
"NOT_VALID": "Adresse http(s)://host|ip:port(/path) non reconnue, essayez une autre URL.",
"REDIRECT": "URI de redirection",
"REDIRECT_LOGOUT": "Déconnexion URI de redirection",
"SILENT": "Connexion en mode silencieux",
"SCOPE": "Etendue",
"CLIENT": "ID client",
"PUBLIC_URLS": "URL publiques pour connexion en mode silencieux",
"SECRET": "Secret"
},
"ABOUT": {
"DEVELOPMENT": "Mode développement"
},
@@ -106,7 +83,7 @@
"FORM_LOADING": "Chargement du formulaire",
"UPLOADER": "Chargeur",
"WEBSCRIPT": "Script Web",
"TAG": "Tag",
"TAG": "Balise",
"PIPES": "Tuyaux",
"TRASHCAN": "Corbeille",
"SOCIAL": "Réseaux sociaux",
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Composant cloud des groupes",
"CONFIRM-DIALOG": "Boîte de dialogue de confirmation",
"COMMUNITY": "Communauté",
"SERVICE_TASK_LIST": "Liste des tâches de service",
"RICH_TEXT_EDITOR": "Editeur de texte enrichi"
"SERVICE_TASK_LIST": "Liste des tâches de service"
},
"TRASHCAN": {
"ACTIONS": {
@@ -169,7 +145,7 @@
"COLUMNS": {
"DISPLAY_NAME": "Nom affiché",
"IS_LOCKED": "Verrouiller",
"TAG": "Tag",
"TAG": "Balise",
"NODE_ID": "ID du nœud",
"CREATED_BY": "Créé par",
"CREATED_ON": "Créé le",
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Remplacer les colonnes",
"LOAD_NODE": "Charger le nœud",
"MULTISELECT": "Sélection multiple",
"MULTISELECT_DESCRIPTION": "Utiliser Cmd (Mac) ou Ctrl (Windows) pour activer/désactiver la sélection d'éléments multiples",
"USE_CUSTOM_COLUMN_HEADER": "Utiliser un modèle personnalisé pour l'en-tête 'Utilisateur'",
"CUSTOM_COLUMN_HEADER": "Modèle d'en-tête Utilisateur personnalisé"
"MULTISELECT_DESCRIPTION": "Utiliser Cmd (Mac) ou Ctrl (Windows) pour activer/désactiver la sélection d'éléments multiples"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Aucun rapport sélectionné. Choisissez un rapport dans la liste"
@@ -294,9 +268,9 @@
"RATING": "Composant d'évaluation"
},
"TAG": {
"LIST": "Liste des tags Content Services",
"LIST": "Liste de balises Content Services",
"INSERT": "Insérer l'ID du nœud",
"NODE_LIST": "Liste des tags par ID de nœud"
"NODE_LIST": "Liste de balises par ID de nœud"
},
"DEMO_PERMISSION": {
"INHERIT_PERMISSION_BUTTON": "Hériter des droits d'accès",
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Tous les groupes présélectionnés",
"INVALID_USERS": "Utilisateurs non valides",
"INVALID_GROUPS": "Groupes non valides",
"READONLY_MODE": "Mode lecture seule",
"GROUPS_RESTRICTION": "Restriction de groupes"
"READONLY_MODE": "Mode lecture seule"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Multisélection",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Type d'action"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Bouton Créer un nouveau dossier",
"EDIT_NODE_LABEL": "Bouton Modifier le nœud",
"DELETE_NODE_LABEL": "Bouton Supprimer l'icône du nœud"
},
"DEFAULT_SEARCH": "Par défaut",
"OPEN_DIALOG": "Boîte de dialogue Ouvrir",
"SHOW_LIST_LABEL": "Cliquer pour afficher la liste"
"DEFAULT_SEARCH": "Par défaut"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Tipo di autenticazione",
"BASIC": "Autenticazione di base",
"SSO": "SSO",
"IMPLICIT-FLOW": "Flusso implicito",
"PROVIDER": "Fornitore",
"REQUIRED": "Questo campo è obbligatorio",
"CS_URL_ERROR": "L'indirizzo Content Services non corrisponde al formato dell'URL",
"PS_URL_ERROR": "L'indirizzo Process Services non corrisponde al formato dell'URL",
"TITLE": "Impostazioni",
"CS-HOST": "URL Content Services",
"BP-HOST": "URL Process Services",
"BACK": "Indietro",
"APPLY": "Applica",
"NOT_VALID": "http(s)://host|ip:port(/path) non riconosciuto, provare un URL diverso.",
"REDIRECT": "Reindirizza URI",
"REDIRECT_LOGOUT": "Reindirizza logout URI",
"SILENT": "Login invisibile",
"SCOPE": "Ambito",
"CLIENT": "ID client",
"PUBLIC_URLS": "URL pubblici per login invisibile",
"SECRET": "Segreto"
},
"ABOUT": {
"DEVELOPMENT": "Modalità sviluppo"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Componente Cloud gruppi",
"CONFIRM-DIALOG": "Finestra di conferma",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Elenco compiti servizio",
"RICH_TEXT_EDITOR": "Editor di testo RTF"
"SERVICE_TASK_LIST": "Elenco compiti servizio"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Sostituisci colonne",
"LOAD_NODE": "Carica nodo",
"MULTISELECT": "Selezione multipla",
"MULTISELECT_DESCRIPTION": "Usa Cmd (Mac) o Ctrl (Windows) per attivare/disattivare la selezione di più elementi",
"USE_CUSTOM_COLUMN_HEADER": "Usa il modello personalizzato per l'intestazione \"Utente\"",
"CUSTOM_COLUMN_HEADER": "Modello personalizzato per intestazione Utente"
"MULTISELECT_DESCRIPTION": "Usa Cmd (Mac) o Ctrl (Windows) per attivare/disattivare la selezione di più elementi"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Nessun rapporto selezionato. Scegliere un rapporto dall'elenco"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Tutti i gruppi preselezionati",
"INVALID_USERS": "Utenti non validi",
"INVALID_GROUPS": "Gruppi non validi",
"READONLY_MODE": "Modalità sola lettura",
"GROUPS_RESTRICTION": "Limitazione gruppi"
"READONLY_MODE": "Modalità sola lettura"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Selezione multipla",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Tipo di azione"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Crea pulsante nuova cartella",
"EDIT_NODE_LABEL": "Modifica pulsante nodo",
"DELETE_NODE_LABEL": "Elimina icona nodo"
},
"DEFAULT_SEARCH": "Predefinito",
"OPEN_DIALOG": "Apri finestra di dialogo",
"SHOW_LIST_LABEL": "Fai clic per mostrare l'elenco"
"DEFAULT_SEARCH": "Predefinito"
}
+7 -41
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "認証タイプ",
"BASIC": "基本認証",
"SSO": "SSO",
"IMPLICIT-FLOW": "暗黙的フロー",
"PROVIDER": "プロバイダ",
"REQUIRED": "このフィールドは必須です",
"CS_URL_ERROR": "Content Services のアドレスが URL 形式と一致しません",
"PS_URL_ERROR": "Process Services のアドレスが URL 形式と一致しません",
"TITLE": "設定",
"CS-HOST": "Content Services の URL",
"BP-HOST": "Process Services の URL",
"BACK": "戻る",
"APPLY": "適用",
"NOT_VALID": "http(s)://host|ip:port(/path) が認識されません。別の URL を指定してください。",
"REDIRECT": "リダイレクト URI",
"REDIRECT_LOGOUT": "リダイレクト URI のログアウト",
"SILENT": "サイレントログイン",
"SCOPE": "範囲",
"CLIENT": "クライアント ID",
"PUBLIC_URLS": "サイレントログインのパブリック URL",
"SECRET": "シークレット"
},
"ABOUT": {
"DEVELOPMENT": "開発モード"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "グループのクラウドコンポーネント",
"CONFIRM-DIALOG": "確認ダイアログ",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "サービスタスクリスト",
"RICH_TEXT_EDITOR": "リッチテキストエディタ"
"SERVICE_TASK_LIST": "サービスタスクリスト"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "列の置換",
"LOAD_NODE": "ノードの読み込み",
"MULTISELECT": "複数選択",
"MULTISELECT_DESCRIPTION": "複数選択の切り替えを行うには、Cmd (Mac) キーまたは Ctrl (Windows) キーを押します",
"USE_CUSTOM_COLUMN_HEADER": "「ユーザー」ヘッダーにカスタムテンプレートを使用",
"CUSTOM_COLUMN_HEADER": "カスタムユーザーヘッダーテンプレート"
"MULTISELECT_DESCRIPTION": "複数選択の切り替えを行うには、Cmd (Mac) キーまたは Ctrl (Windows) キーを押します"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "レポートが選択されていません。リストからレポートを選択してください。"
@@ -271,7 +245,7 @@
"RESULTS": "検索結果",
"NO_RESULT": "一致するアイテムはありません",
"FACET_FIELDS": {
"TYPE": "1:タイプ",
"TYPE": "1:種類",
"SIZE": "2:サイズ",
"CREATOR": "3:作成者",
"MODIFIER": "4:変更者",
@@ -280,7 +254,7 @@
"FACET_QUERIES": {
"MY_FACET_QUERIES": "あなたのファセットクエリ",
"CREATED_THIS_YEAR": "1.今年作成",
"MIMETYPE": "2.タイプ: HTML",
"MIMETYPE": "2.種類: HTML",
"XTRASMALL": "3.サイズ: 極小",
"SMALL": "4.サイズ: 小",
"MEDIUM": "5.サイズ: 中",
@@ -316,7 +290,7 @@
},
"PROCESS_LIST_DEMO": {
"ERROR_MESSAGE": {
"APP_ID_REQUIRED_ERROR": "アプリケーション ID を挿入する",
"APP_ID_REQUIRED_ERROR": "アプリケーション ID を挿入してください",
"APP_ID_TYPE_ERROR": "アプリケーション ID は数字でなければなりません",
"NUMBER_GREATER_THAN": "値は {{ value }} 以上でなければなりません"
},
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "選択されている全グループ",
"INVALID_USERS": "無効なユーザー",
"INVALID_GROUPS": "無効なグループ",
"READONLY_MODE": "読み取り専用モード",
"GROUPS_RESTRICTION": "グループ制限"
"READONLY_MODE": "読み取り専用モード"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "複数選択",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "処理のタイプ"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "新しいフォルダボタンの作成",
"EDIT_NODE_LABEL": "ノードボタンの編集",
"DELETE_NODE_LABEL": "ノードアイコンボタンの削除"
},
"DEFAULT_SEARCH": "デフォルト",
"OPEN_DIALOG": "ダイアログを開く",
"SHOW_LIST_LABEL": "クリックしてリストを表示"
"DEFAULT_SEARCH": "デフォルト"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Godkjenningstype",
"BASIC": "Grunnleggende godkjenning",
"SSO": "SSO",
"IMPLICIT-FLOW": "Implisitt flyt",
"PROVIDER": "Leverandør",
"REQUIRED": "Dette feltet er påkrevd",
"CS_URL_ERROR": "Adressen til innholdstjenesten stemmer ikke med URL-formatet",
"PS_URL_ERROR": "Adressen til prosesstjenestene stemmer ikke med URL-formatet",
"TITLE": "Innstillinger",
"CS-HOST": "URL tinnholdstjenester",
"BP-HOST": "URL prosesstjenester",
"BACK": "Tilbake",
"APPLY": "Bruk",
"NOT_VALID": "http(s)://host|ip:port(/path) ikke gjenkjent, prøv en annen URL.",
"REDIRECT": "Omdirigerings-URI",
"REDIRECT_LOGOUT": "Omdirigerings-URI avlogging",
"SILENT": "Stille pålogging",
"SCOPE": "Område",
"CLIENT": "Klient-ID",
"PUBLIC_URLS": "Offentlige URL-er for stille pålogging",
"SECRET": "Hemmelig"
},
"ABOUT": {
"DEVELOPMENT": "Utvikl.modus"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Gruppesky-kompontent",
"CONFIRM-DIALOG": "Bekreftelsesdialog",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Serviceoppgaveliste",
"RICH_TEXT_EDITOR": "Åpne rik teksteditor"
"SERVICE_TASK_LIST": "Serviceoppgaveliste"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "erstatt kolonner",
"LOAD_NODE": "Last node",
"MULTISELECT": "Multivalg",
"MULTISELECT_DESCRIPTION": "Bruk Cmd (Mac) eller Ctrl (Windows) for å veksle mellom valg av flere elementer",
"USE_CUSTOM_COLUMN_HEADER": "Bruk egendefinert mal for toppteksten 'bruker'",
"CUSTOM_COLUMN_HEADER": "Egendefinert topptekst for bruker"
"MULTISELECT_DESCRIPTION": "Bruk Cmd (Mac) eller Ctrl (Windows) for å veksle mellom valg av flere elementer"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Ingen rapport valgt. Velg en rapport fra listen"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Alle forhåndsvalgte grupper",
"INVALID_USERS": "Ugyldige brukere",
"INVALID_GROUPS": "Ugyldige grupper",
"READONLY_MODE": "Skrivebeskyttet modus",
"GROUPS_RESTRICTION": "Gruppebegrensning"
"READONLY_MODE": "Skrivebeskyttet modus"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Flervalg",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Handlingstype"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Opprett en ny mappe-knapp",
"EDIT_NODE_LABEL": "Rediger node-knapp",
"DELETE_NODE_LABEL": "Slett nodeikon-knapp"
},
"DEFAULT_SEARCH": "Standard",
"OPEN_DIALOG": "Åpne dialog",
"SHOW_LIST_LABEL": "Klikk for å vise listen"
"DEFAULT_SEARCH": "Standard"
}
+5 -39
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Verificatietype",
"BASIC": "Basisverificatie",
"SSO": "SSO",
"IMPLICIT-FLOW": "Impliciete stroom",
"PROVIDER": "Provider",
"REQUIRED": "Dit veld is vereist",
"CS_URL_ERROR": "Content Services-adres komt niet overeen met de URL-indeling",
"PS_URL_ERROR": "Process Services-adres komt niet overeen met de URL-indeling",
"TITLE": "Instellingen",
"CS-HOST": "Content Services-URL",
"BP-HOST": "Process Services-URL",
"BACK": "Terug",
"APPLY": "Toepassen",
"NOT_VALID": "http(s)://host|ip:port(/path) niet herkend, probeer een andere URL.",
"REDIRECT": "Omleidings-URI",
"REDIRECT_LOGOUT": "Omleidings-URI afmelden",
"SILENT": "Stille aanmelding",
"SCOPE": "Bereik",
"CLIENT": "Client-id",
"PUBLIC_URLS": "Openbare URL's voor stille aanmelding",
"SECRET": "Geheim"
},
"ABOUT": {
"DEVELOPMENT": "Ontwikkelaarsmodus"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Component Groepencloud",
"CONFIRM-DIALOG": "Bevestigingsdialoogvenster",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Lijst met servicetaken",
"RICH_TEXT_EDITOR": "RTF-editor"
"SERVICE_TASK_LIST": "Lijst met servicetaken"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Kolommen vervangen",
"LOAD_NODE": "Node laden",
"MULTISELECT": "Multiselect",
"MULTISELECT_DESCRIPTION": "Cmd (Mac) of Ctrl (Windows) gebruiken om de selectie van meerdere items in of uit te schakelen",
"USE_CUSTOM_COLUMN_HEADER": "Aangepaste sjabloon voor 'User'-koptekst gebruiken",
"CUSTOM_COLUMN_HEADER": "Aangepaste sjabloon voor User-koptekst"
"MULTISELECT_DESCRIPTION": "Cmd (Mac) of Ctrl (Windows) gebruiken om de selectie van meerdere items in of uit te schakelen"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Geen rapport geselecteerd. Kies een rapport uit de lijst"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Alle voorgeselecteerde groepen",
"INVALID_USERS": "Ongeldige gebruikers",
"INVALID_GROUPS": "Ongeldige groepen",
"READONLY_MODE": "Alleen-lezenmodus",
"GROUPS_RESTRICTION": "Groepenbeperking"
"READONLY_MODE": "Alleen-lezenmodus"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Multiselectie",
@@ -377,16 +350,9 @@
"TITLE": "Titel",
"ICON": "Pictogram",
"TASK_ID": "Taak-id",
"PROCESS_ID": "Procesinstance-id",
"PROCESS_ID": "Procesinstantie-id",
"ACTION_TYPE": "Actietype"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Knop Nieuwe map maken",
"EDIT_NODE_LABEL": "Knop Node bewerken",
"DELETE_NODE_LABEL": "Pictogramknop Node verwijderen"
},
"DEFAULT_SEARCH": "Standaard",
"OPEN_DIALOG": "Dialoogvenster Openen",
"SHOW_LIST_LABEL": "Klik om de lijst weer te geven"
"DEFAULT_SEARCH": "Standaard"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Typ uwierzytelnienia",
"BASIC": "Uwierzytelnienie podstawowe",
"SSO": "Logowanie jednokrotne",
"IMPLICIT-FLOW": "Niejawny przepływ",
"PROVIDER": "Dostawca",
"REQUIRED": "To pole jest wymagane.",
"CS_URL_ERROR": "Adres usług Content Services jest niezgodny z formatem adresu URL.",
"PS_URL_ERROR": "Adres usług Process Services jest niezgodny z formatem adresu URL.",
"TITLE": "Ustawienia",
"CS-HOST": "Adres URL usług Content Services",
"BP-HOST": "Adres URL usług Process Services",
"BACK": "Wstecz",
"APPLY": "Zastosuj",
"NOT_VALID": "Nie rozpoznano adresu http(s)://host|ip:port(/path). Spróbuj użyć innego adresu URL.",
"REDIRECT": "Identyfikator URI przekierowania",
"REDIRECT_LOGOUT": "Identyfikator URI przekierowania — wylogowanie",
"SILENT": "Ciche logowanie",
"SCOPE": "Zakres",
"CLIENT": "Identyfikator klienta",
"PUBLIC_URLS": "Publiczne URL do cichego logowania",
"SECRET": "Klucz tajny"
},
"ABOUT": {
"DEVELOPMENT": "Tryb progr."
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Składnik Chmura dla grup",
"CONFIRM-DIALOG": "Okno dialogowe potwierdzenia",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Lista zadań serwisowych",
"RICH_TEXT_EDITOR": "Edytor tekstu sformatowanego"
"SERVICE_TASK_LIST": "Lista zadań serwisowych"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Zastąp kolumny",
"LOAD_NODE": "Wczytaj węzeł",
"MULTISELECT": "Wybór wielokrotny",
"MULTISELECT_DESCRIPTION": "Używaj klawiszy Cmd (system Mac) lub Ctrl (system Windows), aby przełączać wybieranie wielu elementów.",
"USE_CUSTOM_COLUMN_HEADER": "Użyj szablonu niestandardowego dla nagłówka 'Użytkownik'",
"CUSTOM_COLUMN_HEADER": "Szablon niestandardowy nagłówka Użytkownik"
"MULTISELECT_DESCRIPTION": "Używaj klawiszy Cmd (system Mac) lub Ctrl (system Windows), aby przełączać wybieranie wielu elementów."
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Nie wybrano raportu. Wybierz raport z listy."
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Wszystkie wstępnie wybrane grupy",
"INVALID_USERS": "Nieprawidłowi użytkownicy",
"INVALID_GROUPS": "Nieprawidłowe grupy",
"READONLY_MODE": "Tryb tylko do odczytu",
"GROUPS_RESTRICTION": "Ograniczenie grup"
"READONLY_MODE": "Tryb tylko do odczytu"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Wybór wielokrotny",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Typ czynności"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Przycisk Utwórz nowy folder",
"EDIT_NODE_LABEL": "Przycisk Edytuj węzeł",
"DELETE_NODE_LABEL": "Przycisk Usuń ikonę węzła"
},
"DEFAULT_SEARCH": "Domyślne",
"OPEN_DIALOG": "Otwórz okno dialogowe",
"SHOW_LIST_LABEL": "Kliknij, aby wyświetlić listę"
"DEFAULT_SEARCH": "Domyślne"
}
+7 -41
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Tipo de autenticação",
"BASIC": "Autenticação básica",
"SSO": "SSO",
"IMPLICIT-FLOW": "Fluxo implícito",
"PROVIDER": "Provedor",
"REQUIRED": "Este campo é obrigatório",
"CS_URL_ERROR": "O endereço do Content Services não corresponde ao formato de URL",
"PS_URL_ERROR": "O endereço do Process Services não corresponde ao formato de URL",
"TITLE": "Configurações",
"CS-HOST": "URL do Content Services",
"BP-HOST": "URL do Process Services",
"BACK": "Voltar",
"APPLY": "Aplicar",
"NOT_VALID": "http(s)://host|ip:port(/path) não reconhecida, tente uma URL diferente.",
"REDIRECT": "Redirecionar URI",
"REDIRECT_LOGOUT": "Redirecionar logout de URI",
"SILENT": "Login silencioso",
"SCOPE": "Escopo",
"CLIENT": "ID de cliente",
"PUBLIC_URLS": "Login silencioso de URLs públicas",
"SECRET": "Segredo"
},
"ABOUT": {
"DEVELOPMENT": "Modo de desenvolvimento"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Componente da Nuvem de Grupos",
"CONFIRM-DIALOG": "Caixa de diálogo de confirmação",
"COMMUNITY": "Comunidade",
"SERVICE_TASK_LIST": "Lista de tarefas de serviços",
"RICH_TEXT_EDITOR": "Editor de RTF"
"SERVICE_TASK_LIST": "Lista de tarefas de serviços"
},
"TRASHCAN": {
"ACTIONS": {
@@ -181,9 +157,9 @@
"TOOLBAR": {
"CARDVIEW": "Modo de visualização de cartão",
"SHARE_EDIT": "Editar configurações",
"NEW_FOLDER": "Nova pasta",
"NEW_FOLDER": "Nova Pasta",
"EDIT_FOLDER": "Editar pasta",
"DOWNLOAD": "Baixar",
"DOWNLOAD": "Descarregar",
"DELETE": "Excluir",
"FAVORITES": "Adicionar aos favoritos",
"SHARE": "Compartilhar",
@@ -198,7 +174,7 @@
"ASPECTS": "Atualizar aspectos",
"LOCK": "Bloqueio",
"METADATA": "Informações",
"DOWNLOAD": "Baixar",
"DOWNLOAD": "Descarregar",
"PERMISSION": "Permissão",
"FOLDER": {
"COPY": "Copiar",
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Substituir colunas",
"LOAD_NODE": "Carregar Nó",
"MULTISELECT": "Seleção Múltipla",
"MULTISELECT_DESCRIPTION": "Use Cmd (Mac) ou Ctrl (Windows) para alternar a seleção de vários itens",
"USE_CUSTOM_COLUMN_HEADER": "Usar modelo personalizado para o cabeçalho 'Usuário'",
"CUSTOM_COLUMN_HEADER": "Modelo personalizado do cabeçalho Usuário"
"MULTISELECT_DESCRIPTION": "Use Cmd (Mac) ou Ctrl (Windows) para alternar a seleção de vários itens"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Nenhum relatório selecionado. Escolha um relatório na lista"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Todos os grupos pré-selecionados",
"INVALID_USERS": "Usuários inválidos",
"INVALID_GROUPS": "Grupos inválidos",
"READONLY_MODE": "Modo somente leitura",
"GROUPS_RESTRICTION": "Restrição de grupos"
"READONLY_MODE": "Modo somente leitura"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Seleção Múltipla",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Tipo de ação"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Criar um novo botão de pasta",
"EDIT_NODE_LABEL": "Editar botão de nó",
"DELETE_NODE_LABEL": "Excluir botão de ícone de nó"
},
"DEFAULT_SEARCH": "Padrão",
"OPEN_DIALOG": "Abrir caixa de diálogo",
"SHOW_LIST_LABEL": "Clique para mostrar a lista"
"DEFAULT_SEARCH": "Padrão"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Тип авторизации",
"BASIC": "Базовая авторизация",
"SSO": "SSO",
"IMPLICIT-FLOW": "Неявный поток",
"PROVIDER": "Поставщик",
"REQUIRED": "Поле обязательно для заполнения",
"CS_URL_ERROR": "Адрес Content Services не соответствует формату URL",
"PS_URL_ERROR": "Адрес Process Services не соответствует формату URL",
"TITLE": "Параметры",
"CS-HOST": "URL-адрес Content Services",
"BP-HOST": "URL-адрес Process Services",
"BACK": "Назад",
"APPLY": "Применить",
"NOT_VALID": "http(s)://host|ip:port(/path) не распознан, используйте другой URL-адрес.",
"REDIRECT": "URI перенаправления",
"REDIRECT_LOGOUT": "Выход URI перенаправления",
"SILENT": "Автоматический вход",
"SCOPE": "Область применения",
"CLIENT": "Идентификатор клиента",
"PUBLIC_URLS": "Общедоступные URL-адреса с автоматическим входом",
"SECRET": "Секретный"
},
"ABOUT": {
"DEVELOPMENT": "Режим разработки"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Компонент облака «Группы»",
"CONFIRM-DIALOG": "Диалоговое окно подтверждения",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Список сервисных задач",
"RICH_TEXT_EDITOR": "Редактор форматированного текста"
"SERVICE_TASK_LIST": "Список сервисных задач"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Заменить столбцы",
"LOAD_NODE": "Загрузить узел",
"MULTISELECT": "Выбор нескольких вариантов",
"MULTISELECT_DESCRIPTION": "Использовать кнопку Cmd (Mac) или Ctrl (Windows) для переключения выбора нескольких элементов",
"USE_CUSTOM_COLUMN_HEADER": "Использовать пользовательский шаблон для заголовка «Пользователь»",
"CUSTOM_COLUMN_HEADER": "Пользовательский шаблон заголовка пользователя"
"MULTISELECT_DESCRIPTION": "Использовать кнопку Cmd (Mac) или Ctrl (Windows) для переключения выбора нескольких элементов"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Отчет не выбран. Выберите отчет из списка"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Все заранее заданные группы",
"INVALID_USERS": "Недействительные пользователи",
"INVALID_GROUPS": "Недействительные группы",
"READONLY_MODE": "Режим только для чтения",
"GROUPS_RESTRICTION": "Ограничение для групп"
"READONLY_MODE": "Режим только для чтения"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Выбор нескольких",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Тип действия"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Кнопка \"Создать новую папку\"",
"EDIT_NODE_LABEL": "Кнопка \"Редактировать узел\"",
"DELETE_NODE_LABEL": "Кнопка \"Удалить значок узла\""
},
"DEFAULT_SEARCH": "По умолчанию",
"OPEN_DIALOG": "Открыть диалог",
"SHOW_LIST_LABEL": "Нажмите для отображения списка"
"DEFAULT_SEARCH": "По умолчанию"
}
+4 -38
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "Autentiseringstyp",
"BASIC": "Grundläggande autentisering",
"SSO": "SSO",
"IMPLICIT-FLOW": "Implicit flöde",
"PROVIDER": "Leverantör",
"REQUIRED": "Detta fält krävs",
"CS_URL_ERROR": "Content Services-adressen matchar inte URL-formatet",
"PS_URL_ERROR": "Process Services-adressen matchar inte URL-formatet",
"TITLE": "Inställningar",
"CS-HOST": "Content Services-URL",
"BP-HOST": "Process Services-URL",
"BACK": "Tillbaka",
"APPLY": "Tillämpa",
"NOT_VALID": "http(s)://host|ip:port(/path) kändes inte igen, testa annan URL.",
"REDIRECT": "Omdirigera URI",
"REDIRECT_LOGOUT": "Omdirigera URI-utloggning",
"SILENT": "Tyst inloggning",
"SCOPE": "Definitionsområde",
"CLIENT": "Klient-ID",
"PUBLIC_URLS": "Offentliga url:er för tyst inloggning",
"SECRET": "Hemlig"
},
"ABOUT": {
"DEVELOPMENT": "Utvecklarläge"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "Grupper moln-komponent",
"CONFIRM-DIALOG": "Dialogruta för bekräftelse",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "Serviceuppgiftslista",
"RICH_TEXT_EDITOR": "RT-redigerare"
"SERVICE_TASK_LIST": "Serviceuppgiftslista"
},
"TRASHCAN": {
"ACTIONS": {
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "Ersätt kolumner",
"LOAD_NODE": "Läs in nod",
"MULTISELECT": "Flerval",
"MULTISELECT_DESCRIPTION": "Använd Cmd (Mac) eller Ctrl (Windows) för att växla val av flera objekt",
"USE_CUSTOM_COLUMN_HEADER": "Använd anpassad mall för \"Användare\"-rubrik",
"CUSTOM_COLUMN_HEADER": "Anpassad användarhuvudmall"
"MULTISELECT_DESCRIPTION": "Använd Cmd (Mac) eller Ctrl (Windows) för att växla val av flera objekt"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "Ingen rapport vald. Välj en rapport från listan"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "Alla förvalda grupper",
"INVALID_USERS": "Ogiltiga användare",
"INVALID_GROUPS": "Ogiltiga grupper",
"READONLY_MODE": "Skrivskyddat läge",
"GROUPS_RESTRICTION": "Gruppbegränsning"
"READONLY_MODE": "Skrivskyddat läge"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "Flerval",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "Åtgärdstyp"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "Knappen Skapa en ny mapp",
"EDIT_NODE_LABEL": "Knappen Redigera nod",
"DELETE_NODE_LABEL": "Knappen Radera nodikon"
},
"DEFAULT_SEARCH": "Standard",
"OPEN_DIALOG": "Öppna dialogruta",
"SHOW_LIST_LABEL": "Klicka för att visa listan"
"DEFAULT_SEARCH": "Standard"
}
+11 -45
View File
@@ -1,28 +1,5 @@
{
"APP": {
"HOST_SETTINGS": {
"TYPE-AUTH": "身份验证类型",
"BASIC": "基本身份验证",
"SSO": "SSO",
"IMPLICIT-FLOW": "隐式流",
"PROVIDER": "提供程序",
"REQUIRED": "此字段为必填字段",
"CS_URL_ERROR": "Content Services 地址与 URL 格式不匹配",
"PS_URL_ERROR": "Process Services 地址与 URL 格式不匹配",
"TITLE": "设置",
"CS-HOST": "Content Services URL",
"BP-HOST": "Process Services URL",
"BACK": "返回",
"APPLY": "应用",
"NOT_VALID": "http(s)://host|ip:port(/path) 无法识别,请使用其他 URL。",
"REDIRECT": "重定向 URI",
"REDIRECT_LOGOUT": "重定向 URI 注销",
"SILENT": "静默登录",
"SCOPE": "范围",
"CLIENT": "客户端 ID",
"PUBLIC_URLS": "用于静默登录的公共 URL",
"SECRET": "机密"
},
"ABOUT": {
"DEVELOPMENT": "Dev 模式"
},
@@ -106,7 +83,7 @@
"FORM_LOADING": "表单加载",
"UPLOADER": "上传程序",
"WEBSCRIPT": "Webscript",
"TAG": "标",
"TAG": "标",
"PIPES": "管道",
"TRASHCAN": "垃圾桶",
"SOCIAL": "社交",
@@ -126,7 +103,7 @@
"PEOPLE_GROUPS_CLOUD": "人员/一组云",
"TASK_HEADER_CLOUD": {
"COMPONENT_NAME": "云的任务标题",
"APP_NAME_INPUT": "App 名称",
"APP_NAME_INPUT": "应用程序名称",
"TASK_ID_INPUT": "任务 id",
"FIND_TASK_BUTTON": "查找任务"
},
@@ -134,8 +111,7 @@
"GROUPS_CLOUD": "组云组件",
"CONFIRM-DIALOG": "确认对话",
"COMMUNITY": "Community",
"SERVICE_TASK_LIST": "服务任务列表",
"RICH_TEXT_EDITOR": "RTF 编辑器"
"SERVICE_TASK_LIST": "服务任务列表"
},
"TRASHCAN": {
"ACTIONS": {
@@ -174,7 +150,7 @@
"CREATED_BY": "创建者",
"CREATED_ON": "创建日期",
"CREATED": "已创建",
"SIZE": "尺寸",
"SIZE": "字号(&S)",
"DELETED_ON": "已删除",
"DELETED_BY": "删除人"
},
@@ -220,9 +196,7 @@
"REPLACE_COLUMNS": "替换列",
"LOAD_NODE": "加载节点",
"MULTISELECT": "多选",
"MULTISELECT_DESCRIPTION": "使用 Cmd (Mac) 或 Ctrl (Windows) 切换多个项目的选择",
"USE_CUSTOM_COLUMN_HEADER": "为“用户”标题使用自定义模板",
"CUSTOM_COLUMN_HEADER": "自定义用户标题模板"
"MULTISELECT_DESCRIPTION": "使用 Cmd (Mac) 或 Ctrl (Windows) 切换多个项目的选择"
},
"ANALYTICS_REPORT": {
"NO_REPORT_MESSAGE": "未选择报告,请从列表中选择报告"
@@ -304,8 +278,8 @@
},
"TASK_LIST_DEMO": {
"ERROR_MESSAGE": {
"APP_ID_REQUIRED_ERROR": "插入 App ID",
"APP_ID_TYPE_ERROR": "App ID 必须为数字",
"APP_ID_REQUIRED_ERROR": "插入应用程序 ID",
"APP_ID_TYPE_ERROR": "应用程序 ID 必须为数字",
"NUMBER_TYPE_ERROR": "值必须是数字",
"NUMBER_GREATER_THAN": "值必须大于或等于 {{ value }}"
},
@@ -316,8 +290,8 @@
},
"PROCESS_LIST_DEMO": {
"ERROR_MESSAGE": {
"APP_ID_REQUIRED_ERROR": "插入 App ID",
"APP_ID_TYPE_ERROR": "App ID 必须为数字",
"APP_ID_REQUIRED_ERROR": "插入应用程序 ID",
"APP_ID_TYPE_ERROR": "应用程序 ID 必须为数字",
"NUMBER_GREATER_THAN": "值必须大于或等于 {{ value }}"
},
"PROCESS_CONTEXT_MENU": "流程列表上下文菜单"
@@ -356,8 +330,7 @@
"ALL_PRESELECTED_GROUPS": "所有预选组",
"INVALID_USERS": "无效用户",
"INVALID_GROUPS": "无效组",
"READONLY_MODE": "只读模式",
"GROUPS_RESTRICTION": "组限制"
"READONLY_MODE": "只读模式"
},
"SETTINGS_CLOUD": {
"MULTISELECTION": "多重选择",
@@ -381,12 +354,5 @@
"ACTION_TYPE": "操作类型"
}
},
"BREADCRUMB_DEMO": {
"NEW_FOLDER_LABEL": "创建一个新文件夹按钮",
"EDIT_NODE_LABEL": "编辑节点按钮",
"DELETE_NODE_LABEL": "删除节点图标按钮"
},
"DEFAULT_SEARCH": "默认值",
"OPEN_DIALOG": "打开对话框",
"SHOW_LIST_LABEL": "单击以显示列表"
"DEFAULT_SEARCH": "默认值"
}
+2 -11
View File
@@ -1,5 +1,5 @@
{
"$schema": "../../lib/core/src/lib/app-config/schema.json",
"$schema": "../../lib/core/app-config/schema.json",
"ecmHost": "{protocol}//{hostname}{:port}",
"bpmHost": "{protocol}//{hostname}{:port}",
"identityHost": "{protocol}//{hostname}{:port}/auth/admin/realms/alfresco",
@@ -18,7 +18,7 @@
"oauth2": {
"host": "{protocol}//{hostname}{:port}/auth/realms/alfresco",
"clientId": "alfresco",
"scope": "openid profile email",
"scope": "openid",
"secret": "",
"implicitFlow": true,
"silentLogin": true,
@@ -1327,15 +1327,6 @@
"title": "ADF_CLOUD_TASK_LIST.PROPERTIES.LAST_MODIFIED",
"sortable": true,
"format": "timeAgo"
},
{
"id": "description",
"key": "description",
"type": "text",
"title": "ADF_CLOUD_TASK_LIST.PROPERTIES.DESCRIPTION",
"sortable": false,
"draggable": false,
"isHidden": true
}
]
}
+3 -5
View File
@@ -28,8 +28,7 @@ import {
TRANSLATION_PROVIDER,
DebugAppConfigService,
CoreModule,
CoreAutomationService,
AuthModule
CoreAutomationService
} from '@alfresco/adf-core';
import { ExtensionsModule } from '@alfresco/adf-extensions';
import { AppComponent } from './app.component';
@@ -115,7 +114,7 @@ import localeSv from '@angular/common/locales/sv';
import { setupAppNotifications } from './services/app-notifications-factory';
import { AppNotificationsService } from './services/app-notifications.service';
import { SearchFilterChipsComponent } from './components/search/search-filter-chips.component';
import { UserInfoComponent } from './components/app-layout/user-info/user-info.component';
import { AlfrescoApiModule } from '@alfresco/adf-core/alfresco-api';
registerLocaleData(localeFr);
registerLocaleData(localeDe);
@@ -140,7 +139,6 @@ registerLocaleData(localeSv);
environment.e2e ? NoopAnimationsModule : BrowserAnimationsModule,
ReactiveFormsModule,
RouterModule.forRoot(appRoutes, { useHash: true, relativeLinkResolution: 'legacy' }),
...(environment.oidc ? [AuthModule.forRoot({ useHash: true })] : []),
FormsModule,
HttpClientModule,
MaterialModule,
@@ -155,13 +153,13 @@ registerLocaleData(localeSv);
ThemePickerModule,
ChartsModule,
AppCloudSharedModule,
AlfrescoApiModule,
MonacoEditorModule.forRoot()
],
declarations: [
AppComponent,
LogoutComponent,
AppLayoutComponent,
UserInfoComponent,
HomeComponent,
SearchBarComponent,
SearchResultComponent,
-4
View File
@@ -321,10 +321,6 @@ export const appRoutes: Routes = [
path: 'datatable/dnd',
loadChildren: () => import('./components/datatable/drag-and-drop/datatable-dnd.module').then(m => m.AppDataTableDndModule)
},
{
path: 'rich-text-editor',
loadChildren: () => import('./components/rich-text-editor/rich-text-editor.module').then(m => m.AppRichTextEditorModule)
},
{
path: 'search',
component: SearchResultComponent,
@@ -1,34 +1,4 @@
<mat-slide-toggle [(ngModel)]="dev">{{'APP.ABOUT.DEVELOPMENT' | translate }}</mat-slide-toggle>
<adf-about>
<adf-about-panel *ngIf="dev" [label]="'ABOUT.SERVER_SETTINGS.TITLE' | translate">
<ng-template>
<adf-about-server-settings></adf-about-server-settings>
</ng-template>
</adf-about-panel>
<adf-about-panel *ngIf="dev" [label]="'ABOUT.PACKAGES.TITLE' | translate">
<ng-template>
<adf-about-package-list [dependencies]="pkg?.dependencies"></adf-about-package-list>
</ng-template>
</adf-about-panel>
<adf-about-panel [label]="'ABOUT.REPOSITORY' | translate" *ngIf="repository">
<ng-template>
<adf-about-repository-info [data]="repository"></adf-about-repository-info>
</ng-template>
</adf-about-panel>
<adf-about-panel [label]="'ABOUT.VERSIONS.TITLE' | translate">
<ng-template>
<adf-about-platform-version [repository]="repository" [process]="bpmVersion"></adf-about-platform-version>
</ng-template>
</adf-about-panel>
<adf-about-panel *ngIf="extensions$ | async as extensions" [label]="'ABOUT.PLUGINS.TITLE' | translate">
<ng-template>
<adf-about-extension-list [data]="extensions"></adf-about-extension-list>
</ng-template>
</adf-about-panel>
</adf-about>
<adf-about [dev]="dev" [pkg]="pkg"> </adf-about>
@@ -0,0 +1,3 @@
.adf-extension-details-container {
padding: 4px;
}
@@ -15,52 +15,20 @@
* limitations under the License.
*/
import { Component, OnInit } from '@angular/core';
import { AppExtensionService, ExtensionRef } from '@alfresco/adf-extensions';
import { AuthenticationService, BpmProductVersionModel, DiscoveryApiService, RepositoryInfo } from '@alfresco/adf-core';
import { Component } from '@angular/core';
import pkg from '../../../../../package.json';
import { Observable } from 'rxjs';
@Component({
selector: 'app-about-page',
templateUrl: './about.component.html'
templateUrl: './about.component.html',
styleUrls: ['./about.component.scss']
})
export class AboutComponent implements OnInit {
export class AboutComponent {
pkg: any;
dev: true;
extensions$: Observable<ExtensionRef[]>;
repository: RepositoryInfo = null;
bpmVersion: BpmProductVersionModel = null;
constructor(
private authService: AuthenticationService,
private appExtensions: AppExtensionService,
private discovery: DiscoveryApiService
) {
constructor() {
this.pkg = pkg;
this.extensions$ = this.appExtensions.references$;
}
ngOnInit(): void {
if (this.authService.isEcmLoggedIn()) {
this.setECMInfo();
}
if (this.authService.isBpmLoggedIn()) {
this.setBPMInfo();
}
}
setECMInfo() {
this.discovery.getEcmProductInfo().subscribe((repository) => {
this.repository = repository as RepositoryInfo;
});
}
setBPMInfo() {
this.discovery.getBpmProductInfo().subscribe((bpmVersion) => {
this.bpmVersion = bpmVersion;
});
}
}
@@ -22,7 +22,8 @@
<div class="app-header-delimiexpandedSidenavter"></div>
<app-shell-user-info [menuPositionX]="'before'" [menuPositionY]="'above'"></app-shell-user-info>
<adf-userinfo [menuPositionX]="'before'" [menuPositionY]="'above'">
</adf-userinfo>
<app-theme-picker></app-theme-picker>
<button data-automation-id="language-menu-button" mat-icon-button [matMenuTriggerFor]="langMenu">
@@ -74,7 +74,6 @@ export class AppLayoutComponent implements OnInit, OnDestroy {
{ href: '/datatable/dnd', icon: 'view_module', title: 'Drag and Drop' },
{ href: '/copy-content', icon: 'view_module', title: 'Copy Content' }
]},
{ href: '/rich-text-editor', icon: 'list_alt', title: 'APP_LAYOUT.RICH_TEXT_EDITOR' },
{ href: '/template-list', icon: 'list_alt', title: 'APP_LAYOUT.TEMPLATE' },
{ href: '/webscript', icon: 'extension', title: 'APP_LAYOUT.WEBSCRIPT' },
{ href: '/tag', icon: 'local_offer', title: 'APP_LAYOUT.TAG' },
@@ -127,7 +126,7 @@ export class AppLayoutComponent implements OnInit, OnDestroy {
this.color = color;
} else {
this.color = undefined;
document.documentElement.style.setProperty('--theme-primary-color', color);
document.documentElement.style.setProperty('--adf-header-background-color', color);
}
});
@@ -138,7 +137,7 @@ export class AppLayoutComponent implements OnInit, OnDestroy {
this.headerService.headerTextColor
.pipe(takeUntil(this.onDestroy$))
.subscribe(headerTextColor => {
document.documentElement.style.setProperty('--theme-primary-color-default-contrast', headerTextColor);
document.documentElement.style.setProperty('--adf-header-text-color', headerTextColor);
});
this.headerService.logo
@@ -1,21 +0,0 @@
<ng-container>
<adf-content-user-info
*ngIf="mode === userInfoMode.CONTENT || mode === userInfoMode.CONTENT_SSO"
[ecmUser]="ecmUser$ | async"
[identityUser]="identityUser$ | async"
[isLoggedIn]="isLoggedIn"
[mode]="mode"
></adf-content-user-info>
<adf-identity-user-info
*ngIf="mode === userInfoMode.SSO"
[identityUser]="identityUser$ | async"
[isLoggedIn]="isLoggedIn"
></adf-identity-user-info>
<adf-process-user-info
*ngIf="mode === userInfoMode.PROCESS || mode === userInfoMode.ALL"
[bpmUser]="bpmUser$ | async"
[ecmUser]="ecmUser$ | async"
[isLoggedIn]="isLoggedIn"
[mode]="mode"
></adf-process-user-info>
</ng-container>
@@ -6,13 +6,13 @@
<mat-label>Node Id For Aspects</mat-label>
<input matInput placeholder="Node Id" [(ngModel)]="currentNodeId">
</mat-form-field>
<button mat-raised-button color="primary" [attr.aria-label]="'SHOW_LIST_LABEL' | translate" (click)="showAspectForNode()">
<button mat-raised-button color="primary" aria-label="Click to show the list" (click)="showAspectForNode()">
Show/Hide List
</button>
<adf-aspect-list [nodeId]="currentNodeId" *ngIf="isShowed" (valueChanged)="onValueChanged($event)"></adf-aspect-list>
</div>
<div>
<button mat-fab color="primary" [attr.aria-label]="'OPEN_DIALOG' | translate" (click)="openAspectDialog()">
<button mat-fab color="primary" aria-label="Open dialog" (click)="openAspectDialog()">
Dialog
</button>
</div>
@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { DialogAspectListService } from '@alfresco/adf-content-services';
import { AspectListService } from '@alfresco/adf-content-services';
import { Component } from '@angular/core';
@Component({
@@ -30,14 +30,14 @@ export class AspectListSampleComponent {
currentResult: string[] = [];
constructor(private dialogAspectListService: DialogAspectListService) { }
constructor(private aspectListService: AspectListService) { }
showAspectForNode() {
this.isShowed = !this.isShowed;
}
openAspectDialog() {
this.dialogAspectListService.openAspectListDialog(this.currentNodeId).subscribe((result) => this.currentResult = Array.from(result));
this.aspectListService.openAspectListDialog(this.currentNodeId).subscribe((result) => this.currentResult = Array.from(result));
}
onValueChanged(aspects) {
@@ -64,13 +64,13 @@
</adf-toolbar-title>
<adf-toolbar-divider fxFlex="0 0 auto"></adf-toolbar-divider>
<div fxFlex="0 0 auto">
<button mat-icon-button [attr.aria-label]="'BREADCRUMB_DEMO.NEW_FOLDER_LABEL' | translate">
<button mat-icon-button aria-label="Create a new folder button">
<mat-icon>create_new_folder</mat-icon>
</button>
<button mat-icon-button [attr.aria-label]="'BREADCRUMB_DEMO.EDIT_NODE_LABEL' | translate">
<button mat-icon-button aria-label="Edit node button">
<mat-icon>create</mat-icon>
</button>
<button mat-icon-button [attr.aria-label]="'BREADCRUMB_DEMO.DELETE_NODE_LABEL' | translate">
<button mat-icon-button aria-label="Delete node icon button">
<mat-icon>delete</mat-icon>
</button>
</div>
@@ -14,7 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';
import { CloudLayoutService } from './services/cloud-layout.service';
@@ -1,3 +1,4 @@
<adf-alfresco-viewer
<adf-viewer
[overlayMode]="true"
[nodeId]="nodeId">
</adf-alfresco-viewer>
</adf-viewer>
@@ -49,7 +49,8 @@ export class CommunityStartProcessCloudDemoComponent implements OnInit {
openSnackMessage(event: any) {
this.notificationService.openSnackMessage(
event.response.body.message
event.response.body.message,
4000
);
}
}
@@ -42,7 +42,8 @@ export class CommunityStartTaskCloudDemoComponent {
openSnackMessage(event: any) {
this.notificationService.openSnackMessage(
event.response.body.message
event.response.body.message,
4000
);
}
}
@@ -12,22 +12,20 @@
'PEOPLE_GROUPS_CLOUD.MULTI' | translate }}</mat-radio-button>
</mat-radio-group>
<div class="app-people-control-options">
<mat-radio-group (change)="onChangePeopleFilterMode($event)">
<mat-radio-button [checked]="true" class="app-people-single-mode" value="appName">{{
'PEOPLE_GROUPS_CLOUD.APP_FILTER_MODE' | translate }}</mat-radio-button>
<mat-radio-button class="app-people-multiple-mode" data-automation-id="app-people-filter-role" value="role">{{
'PEOPLE_GROUPS_CLOUD.ROLE_FILTER_MODE' | translate }}</mat-radio-button>
</mat-radio-group>
<mat-form-field *ngIf="!isPeopleAppNameSelected()" class="app-preselect-value">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.ROLE' | translate }} ["ACTIVITI_ADMIN", "ACTIVITI_USER"]</mat-label>
<input matInput (input)="setPeopleRoles($any($event).target?.value)" data-automation-id="app-people-roles-input" />
</mat-form-field>
<mat-form-field *ngIf="isPeopleAppNameSelected()" class="app-preselect-value">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.APP_NAME' | translate }}</mat-label>
<input matInput (input)="setPeopleAppName($any($event).target?.value)" data-automation-id="app-people-app-input" />
</mat-form-field>
<mat-form-field class="app-preselect-value">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.ROLE' | translate }} ["ACTIVITI_ADMIN", "ACTIVITI_USER"]</mat-label>
<input matInput
(input)="setPeopleRoles($any($event).target?.value)"
data-automation-id="app-people-roles-input"/>
</mat-form-field>
<mat-form-field class="app-preselect-value">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.GROUPS_RESTRICTION' | translate }} ["hr", "sales"]</mat-label>
<input matInput
(input)="setPeopleGroupsRestriction($any($event).target?.value)"
data-automation-id="app-people-groups-restriction-input"/>
</mat-form-field>
<mat-form-field class="app-preselect-value-full">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.PRESELECTED_VALUE' | translate }} {{ defaultPeoplePlaceholder }}</mat-label>
<input matInput (input)="setPeoplePreselectValue($any($event).target?.value)" data-automation-id="app-people-preselect-input" />
@@ -44,7 +42,6 @@
[validate]="peoplePreselectValidation"
[appName]="peopleAppName"
[roles]="peopleRoles"
[groupsRestriction]="groupsRestriction"
[title]="'ADF_TASK_LIST.START_TASK.FORM.LABEL.ASSIGNEE'"
[mode]="peopleMode"
(warning)="onUsersWarning($event)"></adf-cloud-people>
@@ -86,18 +83,24 @@
'PEOPLE_GROUPS_CLOUD.MULTI' | translate }}</mat-radio-button>
</mat-radio-group>
<div class="app-groups-control-options">
<mat-radio-group (change)="onChangeGroupsFilterMode($event)">
<mat-radio-button [checked]="true" class="app-people-single-mode" value="appName">{{
'PEOPLE_GROUPS_CLOUD.APP_FILTER_MODE' | translate }}</mat-radio-button>
<mat-radio-button class="app-people-multiple-mode" data-automation-id="app-group-filter-role" value="role">{{
'PEOPLE_GROUPS_CLOUD.ROLE_FILTER_MODE' | translate }}</mat-radio-button>
</mat-radio-group>
<mat-form-field *ngIf="!isGroupAppNameSelected()" class="app-preselect-value">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.ROLE' | translate }} ["ACTIVITI_ADMIN", "ACTIVITI_USER"]</mat-label>
<input matInput
(input)="setGroupRoles($any($event).target?.value)"
data-automation-id="app-group-roles-input"/>
</mat-form-field>
<mat-form-field *ngIf="isGroupAppNameSelected()" class="app-preselect-value">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.APP_NAME' | translate }}</mat-label>
<input matInput
(input)="setGroupAppName($any($event).target?.value)"
data-automation-id="app-group-app-input"/>
</mat-form-field>
<mat-form-field class="app-preselect-value">
<mat-label>{{ 'PEOPLE_GROUPS_CLOUD.ROLE' | translate }} ["ACTIVITI_ADMIN", "ACTIVITI_USER"]</mat-label>
<input matInput
(input)="setGroupRoles($any($event).target?.value)"
data-automation-id="app-group-roles-input"/>
</mat-form-field>
<mat-form-field class="app-preselect-value-full">
<mat-label>Preselect: {{ defaultGroupPlaceholder }}</mat-label>
<input matInput
@@ -16,9 +16,10 @@
*/
import { Component, ViewEncapsulation } from '@angular/core';
import { ComponentSelectionMode, IdentityUserModel, IdentityGroupModel } from '@alfresco/adf-process-services-cloud';
import { ComponentSelectionMode } from '@alfresco/adf-process-services-cloud';
import { MatCheckboxChange } from '@angular/material/checkbox';
import { MatRadioChange } from '@angular/material/radio';
import { IdentityGroupModel, IdentityUserModel } from '@alfresco/adf-core';
@Component({
selector: 'app-people-groups-cloud',
@@ -36,7 +37,6 @@ export class PeopleGroupCloudDemoComponent {
preSelectUsers: IdentityUserModel[] = [];
invalidUsers: IdentityUserModel[] = [];
peopleRoles: string[] = [];
groupsRestriction: string[] = [];
peopleAppName: string;
peopleFilterMode: string = this.defaultFilterMode;
peoplePreselectValidation = false;
@@ -75,10 +75,6 @@ export class PeopleGroupCloudDemoComponent {
this.groupAppName = value;
}
setPeopleGroupsRestriction(value: string): void {
this.groupsRestriction = this.getArrayFromString(value);
}
onChangePeopleMode(event: MatRadioChange): void {
this.peopleMode = event.value;
}
@@ -19,7 +19,7 @@ import { Component, OnInit, OnDestroy } from '@angular/core';
import { CloudLayoutService, ActionMenuModel } from '../services/cloud-layout.service';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { UntypedFormGroup, UntypedFormControl } from '@angular/forms';
import { FormGroup, FormControl } from '@angular/forms';
@Component({
selector: 'app-cloud-settings',
@@ -44,12 +44,12 @@ export class CloudSettingsComponent implements OnInit, OnDestroy {
{ value: 'multiple', title: 'Multiple' }
];
actionMenuForm = new UntypedFormGroup({
key: new UntypedFormControl(''),
title: new UntypedFormControl(''),
icon: new UntypedFormControl(''),
visible: new UntypedFormControl(true),
disabled: new UntypedFormControl(false)
actionMenuForm = new FormGroup({
key: new FormControl(''),
title: new FormControl(''),
icon: new FormControl(''),
visible: new FormControl(true),
disabled: new FormControl(false)
});
constructor(private cloudLayoutService: CloudLayoutService) { }
@@ -17,7 +17,7 @@
import { Component, ViewChild } from '@angular/core';
import { TaskHeaderCloudComponent } from '@alfresco/adf-process-services-cloud';
import { UntypedFormControl } from '@angular/forms';
import { FormControl } from '@angular/forms';
@Component({
templateUrl: './task-header-cloud-demo.component.html',
@@ -32,8 +32,8 @@ export class TaskHeaderCloudDemoComponent {
errorMessage;
appNameFormControl = new UntypedFormControl('');
taskIdFormControl = new UntypedFormControl('');
appNameFormControl = new FormControl('');
taskIdFormControl = new FormControl('');
constructor() {}
@@ -10,7 +10,7 @@
Sticky header
</mat-slide-toggle>
<div data-automation-id="datatable" class="adf-datatable-demo-app">
<div style="height: 310px; overflow-y: auto;" data-automation-id="datatable">
<adf-datatable
#dataTable
[data]="data"
@@ -20,7 +20,6 @@
[actions]="true"
[resolverFn]="resolver"
rowStyleClass="custom-row-style"
[showMainDatatableActions]="true"
(showRowActionsMenu)="onShowRowActionsMenu($event)"
(executeRowAction)="onExecuteRowAction($event)">
<!-- HTML column definition demo -->
@@ -40,26 +39,7 @@
</data-column>
</data-columns>
-->
<adf-main-menu-datatable-template>
<ng-template let-mainMenuTrigger>
<adf-datatable-column-selector
[columns]="data.getColumns()"
[mainMenuTrigger]="mainMenuTrigger"
(submitColumnsVisibility)="onColumnsVisibilityChange($event)">
</adf-datatable-column-selector>
</ng-template>
</adf-main-menu-datatable-template>
</adf-datatable>
<ng-template #customColumnHeaderTemplate>
<div>
<span class="adf-datatable-demo-app-custom-user-header">
{{ 'DATATABLE.CUSTOM_COLUMN_HEADER'| translate }}
</span>
</div>
</ng-template>
</div>
<div>
@@ -69,7 +49,6 @@
<div data-automation-id="multiselect">
<mat-checkbox [(ngModel)]="multiselect">{{ 'DATATABLE.MULTISELECT'| translate }}</mat-checkbox>
</div>
<div>
<p>{{ 'DATATABLE.MULTISELECT_DESCRIPTION'| translate }}</p>
<mat-form-field>
@@ -80,11 +59,9 @@
</mat-select>
</mat-form-field>
</div>
<div class="adf-datatable-demo-app-actions">
<div>
<button mat-raised-button (click)="reset()">{{ 'DATATABLE.RESET_DEFAULT'| translate }}</button>
<button mat-raised-button (click)="addRow()">{{ 'DATATABLE.ADD_ROW'| translate }}</button>
<button mat-raised-button (click)="replaceRows()">{{ 'DATATABLE.REPLACE_ROWS'| translate }}</button>
<button mat-raised-button (click)="replaceColumns()">{{ 'DATATABLE.REPLACE_COLUMNS'| translate }}</button>
<button mat-raised-button (click)="showCustomHeaderColumn()">{{ 'DATATABLE.USE_CUSTOM_COLUMN_HEADER'| translate }}</button>
</div>
@@ -1,13 +0,0 @@
.adf-datatable-demo-app {
height: 310px;
overflow-y: auto;
&-actions {
display: flex;
column-gap: 4px;
}
&-custom-user-header {
color: red;
}
}
@@ -15,7 +15,7 @@
* limitations under the License.
*/
import { Component, Input, ViewChild } from '@angular/core';
import { Component, Input } from '@angular/core';
import {
DataCellEvent,
DataColumn,
@@ -56,20 +56,17 @@ export class FilteredDataAdapter extends ObjectDataTableAdapter {
@Component({
selector: 'app-datatable',
templateUrl: './datatable.component.html',
styleUrls: ['./datatable.component.scss']
templateUrl: './datatable.component.html'
})
export class DataTableComponent {
@Input()
selectionMode = 'single';
@ViewChild('customColumnHeaderTemplate') customColumnHeaderTemplate;
multiselect = false;
data: FilteredDataAdapter;
stickyHeader = false;
@Input()
selectionMode = 'single';
selectionModes = [
{ value: 'none', viewValue: 'None' },
{ value: 'single', viewValue: 'Single' },
@@ -87,6 +84,7 @@ export class DataTableComponent {
}
resolver(row: DataRow, col: DataColumn): any {
debugger;
const value = row.getValue(col.key);
if (col.key === 'users') {
return (value || []).map(user => `${user.firstName} ${user.lastName}`).toString();
@@ -230,13 +228,13 @@ export class DataTableComponent {
],
[
{ type: 'image', key: 'icon', title: '', srTitle: 'Thumbnail' },
{ type: 'text', key: 'id', title: 'Id', sortable: true , cssClass: '', draggable: true},
{ type: 'date', key: 'createdOn', title: 'Created On', sortable: true, cssClass: 'adf-ellipsis-cell adf-expand-cell-2', draggable: true },
{ type: 'text', key: 'name', title: 'Name', cssClass: 'adf-ellipsis-cell', sortable: true, draggable: true },
{ type: 'text', key: 'createdBy.name', title: 'Created By', sortable: true, cssClass: '', draggable: true},
{ type: 'json', key: 'json', title: 'Json', cssClass: 'adf-expand-cell-2', draggable: true},
{ type: 'text', key: 'users', title: 'Users', cssClass: 'adf-expand-cell-2', draggable: true},
{ type: 'json', key: 'status', title: 'Status', cssClass: 'adf-expand-cell-2', draggable: true}
{ type: 'text', key: 'id', title: 'Id', sortable: true , cssClass: '' },
{ type: 'date', key: 'createdOn', title: 'Created On', sortable: true, cssClass: 'adf-ellipsis-cell adf-expand-cell-2' },
{ type: 'text', key: 'name', title: 'Name', cssClass: 'adf-ellipsis-cell', sortable: true },
{ type: 'text', key: 'createdBy.name', title: 'Created By', sortable: true, cssClass: ''},
{ type: 'json', key: 'json', title: 'Json', cssClass: 'adf-expand-cell-2'},
{ type: 'text', key: 'users', title: 'Users', cssClass: 'adf-expand-cell-2'},
{ type: 'json', key: 'status', title: 'Status', cssClass: 'adf-expand-cell-2'}
]
);
@@ -301,21 +299,6 @@ export class DataTableComponent {
this.data.setColumns(columns);
}
showCustomHeaderColumn() {
const columns = this.data.getColumns().map(column => {
if (column.title === 'Users') {
return {
...column,
header: this.customColumnHeaderTemplate
};
}
return column;
});
this.data.setColumns(columns);
}
onShowRowActionsMenu(event: DataCellEvent) {
const myAction = {
title: 'Hello'
@@ -326,10 +309,6 @@ export class DataTableComponent {
];
}
onColumnsVisibilityChange(columns: DataColumn[]): void {
this.data.setColumns(columns);
}
onExecuteRowAction(event: DataRowActionEvent) {
const args = event.value;
window.alert(`My custom action: ${args.action.title}`);
@@ -26,7 +26,7 @@ import {
} from '@angular/core';
import { NodeEntry, Node } from '@alfresco/js-api';
import { BehaviorSubject, Subject } from 'rxjs';
import { NodesApiService } from '@alfresco/adf-core';
import { AlfrescoApiService } from '@alfresco/adf-core';
import { takeUntil } from 'rxjs/operators';
@Component({
@@ -52,12 +52,12 @@ export class NameColumnComponent implements OnInit, OnDestroy {
private onDestroy$ = new Subject<boolean>();
constructor(private element: ElementRef, private nodesApiService: NodesApiService) {}
constructor(private element: ElementRef, private alfrescoApiService: AlfrescoApiService) {}
ngOnInit() {
this.updateValue();
this.nodesApiService.nodeUpdated
this.alfrescoApiService.nodeUpdated
.pipe(takeUntil(this.onDestroy$))
.subscribe((node: Node) => {
const row = this.context.row;
@@ -1,382 +1,336 @@
<ng-container *ngIf="nodeId">
<ng-container *ngIf="nodeId || content">
<adf-alfresco-viewer
(showViewerChange)="onViewerClosed()"
<ng-template let-node="node" #sidebarRightTemplate>
<adf-info-drawer [title]="'APP.INFO_DRAWER.TITLE' | translate">
<adf-info-drawer-tab label="APP.INFO_DRAWER.COMMENTS">
<adf-comments [nodeId]="nodeId" [readOnly]="!isCommentEnabled"></adf-comments>
</adf-info-drawer-tab>
<adf-info-drawer-tab label="APP.INFO_DRAWER.PROPERTIES">
<adf-content-metadata-card *ngIf="isPreset" [node]="node"
[multi]="multi"
[preset]="customPreset"
[readOnly]="isReadOnly"
[displayAspect]="showAspect"
[displayDefaultProperties]="displayDefaultProperties"
[displayEmpty]="displayEmptyMetadata"></adf-content-metadata-card>
<adf-content-metadata-card *ngIf="!isPreset" [node]="node"
[multi]="multi"
[readOnly]="isReadOnly"
[displayAspect]="showAspect"
[displayDefaultProperties]="displayDefaultProperties"
[displayEmpty]="displayEmptyMetadata"></adf-content-metadata-card>
<p class="toggle">
<mat-slide-toggle
id="adf-metadata-default-properties"
[color]="'primary'"
(change)="toggleDisplayProperties()"
[checked]="displayDefaultProperties">
Display Default Properties
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-metadata-empty"
[color]="'primary'"
(change)="toggleEmptyMetadata()"
[checked]="displayEmptyMetadata">
Display Empty Metadata
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-metadata-multi"
[color]="'primary'"
(change)="toggleMulti()"
[checked]="multi">
Multi accordion
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-metadata-readonly"
[color]="'primary'"
(change)="toggleReadOnly()"
[checked]="isReadOnly">
Read Only
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-toggle-custom-preset"
[color]="'primary'"
(change)="togglePreset()"
[checked]="isPreset">
Custom preset
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-form-field floatPlaceholder="float">
<input matInput
placeholder="Display Aspect"
[(ngModel)]="desiredAspect">
</mat-form-field>
<button mat-raised-button (click)="applyAspect()" color="primary">
Apply Aspect
</button>
</p>
<p class="toggle">
<ng-container *ngIf="isPreset">
<mat-form-field floatPlaceholder="float">
<input matInput
placeholder="Custom Preset"
[(ngModel)]="customPreset"
data-automation-id="adf-text-custom-preset">
</mat-form-field>
<button mat-raised-button id="adf-metadata-aplly" (click)="applyCustomPreset()" color="primary">
Apply
</button>
</ng-container>
</p>
</adf-info-drawer-tab>
<adf-info-drawer-tab label="APP.INFO_DRAWER.VERSIONS">
<mat-card>
<mat-card-content>
<adf-version-manager [node]="node"
(uploadError)="onUploadError($event)"
(viewVersion)="onViewVersion($event)">
</adf-version-manager>
</mat-card-content>
</mat-card>
</adf-info-drawer-tab>
</adf-info-drawer>
</ng-template>
<ng-template let-node="node" #sidebarLeftTemplate>
<adf-info-drawer [title]="'Viewer Options'">
<adf-info-drawer-tab label="Settings">
<p class="toggle">
<mat-slide-toggle
id="adf-switch-custoname"
[color]="'primary'"
(change)="toggleCustomName()"
[checked]="customName">
Custom Name
</mat-slide-toggle>
</p>
<p class="toggle">
<ng-container *ngIf="customName">
<mat-form-field floatLabel="never">
<input matInput
placeholder="Custom Name"
[(ngModel)]="displayName"
data-automation-id="adf-text-custom-name">
</mat-form-field>
</ng-container>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-fileurl"
[color]="'primary'"
(change)="toggleFileUrl()"
[checked]="fileUrlSwitch">
Url File
</mat-slide-toggle>
</p>
<p class="toggle">
<ng-container *ngIf="fileUrlSwitch">
<mat-form-field floatPlaceholder="float">
<input matInput
placeholder="Url File"
[(ngModel)]="urlFile"
data-automation-id="adf-text-file-url">
</mat-form-field>
</ng-container>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-toolbar"
[color]="'primary'"
(change)="toggleShowToolbar()"
[checked]="showToolbar">
Show Toolbar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-goback"
[color]="'primary'"
(change)="toggleAllowGoBack()"
[checked]="allowGoBack">
Allow GoBack
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-openwith"
[color]="'primary'"
(change)="toggleOpenWith()"
[checked]="openWith">
Open With
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-moreactions"
[color]="'primary'"
(change)="toggleOpenMoreActions()"
[checked]="moreActions">
More Actions
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-moreactionsmenu"
[color]="'primary'"
(change)="toggleMoreActionsMenu()"
[checked]="moreActionsMenu">
More Actions Menu
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-download"
[color]="'primary'"
(change)="toggleAllowDownload()"
[checked]="allowDownload">
Allow Download
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-print"
[color]="'primary'"
(change)="toggleAllowPrint()"
[checked]="allowPrint">
Allow Print
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-allowsidebar"
[color]="'primary'"
(change)="toggleAllowRightSidebar()"
[checked]="allowRightSidebar">
Allow Right Sidebar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-allowLeftSidebar"
[color]="'primary'"
(change)="toggleAllowLeftSidebar()"
[checked]="allowLeftSidebar">
Allow Left Sidebar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-toggle-custom-toolbar"
[color]="'primary'"
(change)="toggleToolbar()"
[checked]="customToolbar">
Custom Toolbar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-tab-with-icon"
[color]="'primary'"
(change)="toggleShowTabWithIcon()"
[checked]="showTabWithIcon">
Show tab with icon
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-icon-and-label-tab"
[color]="'primary'"
(change)="toggleShowTabWithIconAndLabel()"
[checked]="showTabWithIconAndLabel">
Show tab with icon and label
</mat-slide-toggle>
</p>
<p class="toggle">
<button mat-raised-button id="adf-switch-showrightsidebar" (click)="toggleShowRightSidebar()"
color="primary">
Toggle Right Sidebar
</button>
</p>
<p class="toggle">
<button mat-raised-button id="adf-switch-showleftsidebar" (click)="hideLeftSidebar()"
color="primary">
Hide Left Sidebar
</button>
</p>
</adf-info-drawer-tab>
<adf-info-drawer-tab
*ngIf="showTabWithIcon"
[label]=""
[icon]="'face'"
data-automation-id="adf-settings-tab">
</adf-info-drawer-tab>
<adf-info-drawer-tab
*ngIf="showTabWithIconAndLabel"
[label]="'Comments'"
[icon]="'comment'"
data-automation-id="adf-settings-tab">
</adf-info-drawer-tab>
</adf-info-drawer>
</ng-template>
<adf-viewer
[blobFile]="content"
[nodeId]="nodeId"
[versionId]="versionId"
[showRightSidebar]="showRightSidebar"
[showLeftSidebar]="showLeftSidebar"
[allowGoBack]="allowGoBack"
[displayName]="displayName"
[showToolbar]="showToolbar"
[allowPrint]="allowPrint"
[allowDownload]="allowDownload"
[allowRightSidebar]="allowRightSidebar"
[allowLeftSidebar]="allowLeftSidebar"
[sidebarLeftTemplate]="sidebarLeftTemplate"
[sidebarRightTemplate]="sidebarRightTemplate">
<adf-viewer-toolbar *ngIf="customToolbar" data-automation-id="adf-viewer-custom-toolbar">
<h1>My custom toolbar</h1>
</adf-viewer-toolbar>
<adf-viewer-toolbar-actions *ngIf="moreActions">
<button mat-icon-button id="adf-viewer-time">
<mat-icon>alarm</mat-icon>
</button>
<button mat-icon-button id="adf-viewer-upload">
<mat-icon>backup</mat-icon>
</button>
<button mat-icon-button id="adf-viewer-bug">
<mat-icon>bug_report</mat-icon>
</button>
</adf-viewer-toolbar-actions>
<adf-viewer-more-actions *ngIf="moreActionsMenu">
<button mat-menu-item id="adf-viewer-more-menu-alarm">
<mat-icon>alarm</mat-icon>
<span>Alarm</span>
</button>
<button mat-menu-item id="adf-viewer-more-menu-backup">
<mat-icon>backup</mat-icon>
<span>Backup</span>
</button>
<button mat-menu-item id="adf-viewer-more-menu-bug">
<mat-icon>bug_report</mat-icon>
<span>Bug report</span>
</button>
</adf-viewer-more-actions>
<ng-container *ngIf="openWith">
<adf-viewer-open-with>
<button mat-menu-item>
<mat-icon>dialpad</mat-icon>
<span>Option 1</span>
</button>
<button mat-menu-item disabled>
<mat-icon>voicemail</mat-icon>
<span>Option 2</span>
</button>
<button mat-menu-item>
<mat-icon>notifications_off</mat-icon>
<span>Option 3</span>
</button>
</adf-viewer-open-with>
</ng-container>
</adf-alfresco-viewer>
</ng-container>
<ng-template let-node="node" #sidebarRightTemplate>
<adf-info-drawer [title]="'APP.INFO_DRAWER.TITLE' | translate">
<adf-info-drawer-tab label="APP.INFO_DRAWER.COMMENTS">
<adf-node-comments
[nodeId]="nodeId"
[readOnly]="!isCommentEnabled"
>
</adf-node-comments>
</adf-info-drawer-tab>
<adf-info-drawer-tab label="APP.INFO_DRAWER.PROPERTIES">
<adf-content-metadata-card *ngIf="isPreset" [node]="node"
[multi]="multi"
[preset]="customPreset"
[readOnly]="isReadOnly"
[displayAspect]="showAspect"
[displayDefaultProperties]="displayDefaultProperties"
[displayEmpty]="displayEmptyMetadata"></adf-content-metadata-card>
<adf-content-metadata-card *ngIf="!isPreset" [node]="node"
[multi]="multi"
[readOnly]="isReadOnly"
[displayAspect]="showAspect"
[displayDefaultProperties]="displayDefaultProperties"
[displayEmpty]="displayEmptyMetadata"></adf-content-metadata-card>
<p class="toggle">
<mat-slide-toggle
id="adf-metadata-default-properties"
[color]="'primary'"
(change)="toggleDisplayProperties()"
[checked]="displayDefaultProperties">
Display Default Properties
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-metadata-empty"
[color]="'primary'"
(change)="toggleEmptyMetadata()"
[checked]="displayEmptyMetadata">
Display Empty Metadata
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-metadata-multi"
[color]="'primary'"
(change)="toggleMulti()"
[checked]="multi">
Multi accordion
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-metadata-readonly"
[color]="'primary'"
(change)="toggleReadOnly()"
[checked]="isReadOnly">
Read Only
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-toggle-custom-preset"
[color]="'primary'"
(change)="togglePreset()"
[checked]="isPreset">
Custom preset
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-form-field floatPlaceholder="float">
<input matInput
placeholder="Display Aspect"
[(ngModel)]="desiredAspect">
</mat-form-field>
<button mat-raised-button (click)="applyAspect()" color="primary">
Apply Aspect
</button>
</p>
<p class="toggle">
<ng-container *ngIf="isPreset">
<mat-form-field floatPlaceholder="float">
<input matInput
placeholder="Custom Preset"
[(ngModel)]="customPreset"
data-automation-id="adf-text-custom-preset">
</mat-form-field>
<button mat-raised-button id="adf-metadata-aplly" (click)="applyCustomPreset()" color="primary">
Apply
</button>
</ng-container>
</p>
</adf-info-drawer-tab>
<adf-info-drawer-tab label="APP.INFO_DRAWER.VERSIONS">
<mat-card>
<mat-card-content>
<adf-version-manager [node]="node"
(uploadError)="onUploadError($event)"
(viewVersion)="onViewVersion($event)">
</adf-version-manager>
</mat-card-content>
</mat-card>
</adf-info-drawer-tab>
</adf-info-drawer>
</ng-template>
<ng-template #sidebarLeftTemplate>
<adf-info-drawer [title]="'Viewer Options'">
<adf-info-drawer-tab label="Settings">
<p class="toggle">
<mat-slide-toggle
id="adf-switch-fileurl"
[color]="'primary'"
(change)="toggleFileUrl()"
[checked]="fileUrlSwitch">
Url File
</mat-slide-toggle>
</p>
<p class="toggle">
<ng-container *ngIf="fileUrlSwitch">
<mat-form-field floatPlaceholder="float">
<input matInput
placeholder="Url File"
[(ngModel)]="urlFile"
data-automation-id="adf-text-file-url">
</mat-form-field>
</ng-container>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-toolbar"
[color]="'primary'"
(change)="toggleShowToolbar()"
[checked]="showToolbar">
Show Toolbar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-goback"
[color]="'primary'"
(change)="toggleAllowGoBack()"
[checked]="allowGoBack">
Allow GoBack
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-openwith"
[color]="'primary'"
(change)="toggleOpenWith()"
[checked]="openWith">
Open With
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-moreactions"
[color]="'primary'"
(change)="toggleOpenMoreActions()"
[checked]="moreActions">
More Actions
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-moreactionsmenu"
[color]="'primary'"
(change)="toggleMoreActionsMenu()"
[checked]="moreActionsMenu">
More Actions Menu
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-download"
[color]="'primary'"
(change)="toggleAllowDownload()"
[checked]="allowDownload">
Allow Download
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-print"
[color]="'primary'"
(change)="toggleAllowPrint()"
[checked]="allowPrint">
Allow Print
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-allowsidebar"
[color]="'primary'"
(change)="toggleAllowRightSidebar()"
[checked]="allowRightSidebar">
Allow Right Sidebar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-switch-allowLeftSidebar"
[color]="'primary'"
(change)="toggleAllowLeftSidebar()"
[checked]="allowLeftSidebar">
Allow Left Sidebar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-toggle-custom-toolbar"
[color]="'primary'"
(change)="toggleToolbar()"
[checked]="customToolbar">
Custom Toolbar
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-tab-with-icon"
[color]="'primary'"
(change)="toggleShowTabWithIcon()"
[checked]="showTabWithIcon">
Show tab with icon
</mat-slide-toggle>
</p>
<p class="toggle">
<mat-slide-toggle
id="adf-icon-and-label-tab"
[color]="'primary'"
(change)="toggleShowTabWithIconAndLabel()"
[checked]="showTabWithIconAndLabel">
Show tab with icon and label
</mat-slide-toggle>
</p>
<p class="toggle">
<button mat-raised-button id="adf-switch-showrightsidebar" (click)="toggleShowRightSidebar()"
color="primary">
Toggle Right Sidebar
</button>
</p>
<p class="toggle">
<button mat-raised-button id="adf-switch-showleftsidebar" (click)="hideLeftSidebar()"
color="primary">
Hide Left Sidebar
</button>
</p>
</adf-info-drawer-tab>
<adf-info-drawer-tab
*ngIf="showTabWithIcon"
[label]=""
[icon]="'face'"
data-automation-id="adf-settings-tab">
</adf-info-drawer-tab>
<adf-info-drawer-tab
*ngIf="showTabWithIconAndLabel"
[label]="'Comments'"
[icon]="'comment'"
data-automation-id="adf-settings-tab">
</adf-info-drawer-tab>
</adf-info-drawer>
</ng-template>
<ng-container *ngIf="blobFile">
<adf-viewer
[blobFile]="blobFile"
[fileName]="fileName"
[showRightSidebar]="showRightSidebar"
[showLeftSidebar]="showLeftSidebar"
[allowGoBack]="allowGoBack"
[showToolbar]="showToolbar"
[allowRightSidebar]="allowRightSidebar"
[allowLeftSidebar]="allowLeftSidebar"
(showViewerChange)="onViewerClosed()"
[urlFile]="urlFile"
(showViewerChange)="onViewerVisibilityChanged()"
[sidebarLeftTemplate]="sidebarLeftTemplate"
[sidebarRightTemplate]="sidebarRightTemplate">
@@ -428,5 +382,36 @@
</adf-viewer-open-with>
</ng-container>
<!--
<adf-viewer-extension [supportedExtensions]="['json']">
<ng-template let-urlFileContent="urlFileContent" let-extension="extension">
<h1>JSON VIEWER</h1>
</ng-template>
</adf-viewer-extension>
-->
<!--
<adf-viewer-extension [supportedExtensions]="['png']">
<ng-template>
<h1>PNG Viewer</h1>
</ng-template>
</adf-viewer-extension>
-->
<!--
<adf-viewer-extension [supportedExtensions]="['pdf']">
<ng-template>
<h1>PDF Viewer</h1>
</ng-template>
</adf-viewer-extension>
-->
<!--
<extension-viewer [supportedExtensions]="['obj','3DS']" #extension>
<ng-template let-urlFileContent="urlFileContent" let-extension="extension" >
<threed-viewer [urlFile]="urlFileContent" [extension]="extension" ></threed-viewer>
</ng-template>
</extension-viewer>
-->
</adf-viewer>
</ng-container>
@@ -17,14 +17,8 @@
import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { ActivatedRoute, Router, PRIMARY_OUTLET } from '@angular/router';
import {
ContentService,
AllowableOperationsEnum,
PermissionsEnum,
NodesApiService,
FileUploadErrorEvent,
NotificationService
} from '@alfresco/adf-core';
import { ContentService, AllowableOperationsEnum, PermissionsEnum, NodesApiService, FileUploadErrorEvent } from '@alfresco/adf-core';
import { MatSnackBar } from '@angular/material/snack-bar';
import { PreviewService } from '../../services/preview.service';
@Component({
@@ -45,6 +39,7 @@ export class FileViewComponent implements OnInit {
customPreset: string = null;
displayDefaultProperties = true;
showToolbar = true;
displayName = null;
urlFile = null;
allowGoBack = true;
openWith = false;
@@ -54,6 +49,7 @@ export class FileViewComponent implements OnInit {
allowLeftSidebar = true;
moreActions = true;
moreActionsMenu = false;
customName = false;
fileUrlSwitch = false;
showLeftSidebar = null;
showRightSidebar = false;
@@ -63,16 +59,15 @@ export class FileViewComponent implements OnInit {
showTabWithIconAndLabel = false;
desiredAspect: string = null;
showAspect: string = null;
content: Blob;
name: string;
fileName: string;
blobFile: Blob;
constructor(private router: Router,
private route: ActivatedRoute,
private snackBar: MatSnackBar,
private nodeApiService: NodesApiService,
private contentServices: ContentService,
private preview: PreviewService,
private notificationService: NotificationService) {
private preview: PreviewService) {
}
ngOnInit() {
@@ -92,9 +87,9 @@ export class FileViewComponent implements OnInit {
},
() => this.router.navigate(['/files', id])
);
} else if (this.preview?.content) {
this.blobFile = this.preview.content;
this.fileName = this.preview.name;
} else if (this.preview.content) {
this.content = this.preview.content;
this.displayName = this.preview.name;
}
});
}
@@ -103,14 +98,14 @@ export class FileViewComponent implements OnInit {
this.preview.showResource(this.nodeId, versionId);
}
onViewerClosed() {
onViewerVisibilityChanged() {
const primaryUrl = this.router.parseUrl(this.router.url).root.children[PRIMARY_OUTLET].toString();
this.router.navigateByUrl(primaryUrl);
}
onUploadError(event: FileUploadErrorEvent) {
const errorMessage = event.error;
this.notificationService.showError(errorMessage);
this.snackBar.open(errorMessage, '', { duration: 4000 });
}
toggleEmptyMetadata() {
@@ -181,6 +176,14 @@ export class FileViewComponent implements OnInit {
this.showTabWithIconAndLabel = !this.showTabWithIconAndLabel;
}
toggleCustomName() {
this.customName = !this.customName;
if (!this.customName) {
this.displayName = null;
}
}
toggleFileUrl() {
this.fileUrlSwitch = !this.fileUrlSwitch;
@@ -19,7 +19,7 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';
import { CoreModule, InfoDrawerModule } from '@alfresco/adf-core';
import { ContentModule, ContentDirectiveModule, VersionManagerModule, ContentMetadataModule } from '@alfresco/adf-content-services';
import { ContentDirectiveModule, VersionManagerModule, ContentMetadataModule } from '@alfresco/adf-content-services';
import { FileViewComponent } from './file-view.component';
const routes: Routes = [
@@ -34,9 +34,7 @@ const routes: Routes = [
CommonModule,
RouterModule.forChild(routes),
CoreModule,
ContentModule,
InfoDrawerModule,
ContentModule,
ContentDirectiveModule,
ContentMetadataModule,
VersionManagerModule
@@ -15,48 +15,16 @@
* limitations under the License.
*/
import {
Component,
Input,
OnInit,
OnChanges,
OnDestroy,
Optional,
EventEmitter,
ViewChild,
SimpleChanges,
Output,
ViewEncapsulation
} from '@angular/core';
import { Component, Input, OnInit, OnChanges, OnDestroy, Optional, EventEmitter, ViewChild, SimpleChanges, Output, ViewEncapsulation } from '@angular/core';
import { Location } from '@angular/common';
import { MatDialog } from '@angular/material/dialog';
import { ActivatedRoute, Params, Router } from '@angular/router';
import { MinimalNodeEntity, NodePaging, Pagination, MinimalNodeEntryEntity, SiteEntry, SearchEntry, NodeEntry } from '@alfresco/js-api';
import {
MinimalNodeEntity,
NodePaging,
Pagination,
MinimalNodeEntryEntity,
SiteEntry,
SearchEntry,
NodeEntry
} from '@alfresco/js-api';
import {
AlfrescoApiService,
AuthenticationService,
AppConfigService,
AppConfigValues,
ContentService,
FolderCreatedEvent,
LogService,
NotificationService,
UploadService,
DataRow,
UserPreferencesService,
PaginationComponent,
FormValues,
DisplayMode,
ShowHeaderMode,
InfinitePaginationComponent,
AlfrescoApiService, AuthenticationService, AppConfigService, AppConfigValues, ContentService, FolderCreatedEvent, LogService, NotificationService,
UploadService, DataRow, UserPreferencesService,
PaginationComponent, FormValues, DisplayMode, ShowHeaderMode, InfinitePaginationComponent,
SharedLinksApiService,
FormRenderingService,
FileUploadEvent,
NodesApiService
@@ -70,8 +38,7 @@ import {
LibraryDialogComponent,
ContentMetadataService,
FilterSearch,
DialogAspectListService,
SharedLinksApiService
AspectListService
} from '@alfresco/adf-content-services';
import { SelectAppsDialogComponent, ProcessFormRenderingService } from '@alfresco/adf-process-services';
@@ -91,7 +58,7 @@ const DEFAULT_FOLDER_TO_SHOW = '-my-';
styleUrls: ['./files.component.scss'],
encapsulation: ViewEncapsulation.None,
providers: [
{provide: FormRenderingService, useClass: ProcessFormRenderingService}
{ provide: FormRenderingService, useClass: ProcessFormRenderingService }
]
})
export class FilesComponent implements OnInit, OnChanges, OnDestroy {
@@ -113,9 +80,9 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
toolbarColor: ThemePalette;
selectionModes = [
{value: 'none', viewValue: 'None'},
{value: 'single', viewValue: 'Single'},
{value: 'multiple', viewValue: 'Multiple'}
{ value: 'none', viewValue: 'None' },
{ value: 'single', viewValue: 'Single' },
{ value: 'multiple', viewValue: 'Multiple' }
];
// The identifier of a node. You can also use one of these well-known aliases: -my- | -shared- | -root-
@@ -228,13 +195,13 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
@Output()
deleteElementSuccess: EventEmitter<any> = new EventEmitter();
@ViewChild('documentList', {static: true})
@ViewChild('documentList', { static: true })
documentList: DocumentListComponent;
@ViewChild('standardPagination')
standardPagination: PaginationComponent;
@ViewChild(InfinitePaginationComponent, {static: true})
@ViewChild(InfinitePaginationComponent, { static: true })
infinitePaginationComponent: InfinitePaginationComponent;
permissionsStyle: PermissionStyleModel[] = [];
@@ -266,7 +233,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
public alfrescoApiService: AlfrescoApiService,
private contentMetadataService: ContentMetadataService,
private sharedLinksApiService: SharedLinksApiService,
private dialogAspectListService: DialogAspectListService,
private aspectListService: AspectListService,
private nodeService: NodesApiService) {
}
@@ -314,31 +281,31 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
}
this.uploadService.fileUploadComplete
.pipe(
debounceTime(300),
scan((files, currentFile) => [...files, currentFile], []),
takeUntil(this.onDestroy$)
)
.subscribe((value: any[]) => {
let selectedNodes: NodeEntry[] = [];
.pipe(
debounceTime(300),
scan((files, currentFile) => [...files, currentFile], []),
takeUntil(this.onDestroy$)
)
.subscribe((value: any[]) => {
let selectedNodes: NodeEntry[] = [];
if (this.preselectNodes) {
if (value && value.length > 0) {
if (this.selectionMode === 'single') {
selectedNodes = [...[value[value.length - 1]].map((uploadedFile) => uploadedFile.data)];
} else {
selectedNodes = [...value.map((uploadedFile) => uploadedFile.data)];
}
this.selectedNodes = [...selectedNodes];
if (this.preselectNodes) {
if (value && value.length > 0 ) {
if (this.selectionMode === 'single') {
selectedNodes = [...[value[value.length - 1]].map((uploadedFile) => uploadedFile.data)];
} else {
selectedNodes = [...value.map((uploadedFile) => uploadedFile.data)];
}
this.selectedNodes = [...selectedNodes];
}
}
this.onFileUploadEvent(value[0]);
});
this.onFileUploadEvent(value[0]);
});
this.uploadService.fileUploadDeleted
.pipe(takeUntil(this.onDestroy$))
.subscribe(value => this.onFileUploadEvent(value));
.pipe(takeUntil(this.onDestroy$))
.subscribe(value => this.onFileUploadEvent(value));
this.contentService.folderCreated
.pipe(takeUntil(this.onDestroy$))
@@ -397,7 +364,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
getCurrentDocumentListNode(): MinimalNodeEntity[] {
if (this.documentList.folderNode) {
return [{entry: this.documentList.folderNode}];
return [{ entry: this.documentList.folderNode }];
} else {
return [];
}
@@ -497,7 +464,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
if (this.contentService.hasAllowableOperations(contentEntry, 'update')) {
this.dialog.open(VersionManagerDialogAdapterComponent, {
data: {contentEntry, showComments, allowDownload},
data: { contentEntry, showComments, allowDownload },
panelClass: 'adf-version-manager-dialog',
width: '630px'
});
@@ -507,8 +474,8 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
}
onAspectUpdate(event: any) {
this.dialogAspectListService.openAspectListDialog(event.value.entry.id).subscribe((aspectList) => {
this.nodeService.updateNode(event.value.entry.id, {aspectNames: [...aspectList]}).subscribe(() => {
this.aspectListService.openAspectListDialog(event.value.entry.id).subscribe((aspectList) => {
this.nodeService.updateNode(event.value.entry.id, {aspectNames : [...aspectList]}).subscribe(() => {
this.openSnackMessageInfo('Node Aspects Updated');
});
});
@@ -720,9 +687,9 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
onFilterSelected(activeFilters: FilterSearch[]) {
if (activeFilters.length) {
this.navigateToFilter(activeFilters);
this.navigateToFilter(activeFilters);
} else {
this.clearFilterNavigation();
this.clearFilterNavigation();
}
}
@@ -738,7 +705,7 @@ export class FilesComponent implements OnInit, OnChanges, OnDestroy {
objectFromMap[filter.key] = paramValue;
});
this.router.navigate([], {relativeTo: this.route, queryParams: objectFromMap});
this.router.navigate([], { relativeTo: this.route, queryParams: objectFromMap });
}
clearFilterNavigation() {
@@ -18,8 +18,9 @@
import { Component, Inject, ViewEncapsulation } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { MinimalNodeEntryEntity } from '@alfresco/js-api';
import { MatSnackBar } from '@angular/material/snack-bar';
import { PreviewService } from '../../services/preview.service';
import { FileUploadErrorEvent, NotificationService } from '@alfresco/adf-core';
import { FileUploadErrorEvent } from '@alfresco/adf-core';
@Component({
templateUrl: './version-manager-dialog-adapter.component.html',
@@ -36,8 +37,8 @@ export class VersionManagerDialogAdapterComponent {
showVersionComparison = false;
constructor(private previewService: PreviewService,
private notificationService: NotificationService,
@Inject(MAT_DIALOG_DATA) data: any,
private snackBar: MatSnackBar,
private containingDialog?: MatDialogRef<VersionManagerDialogAdapterComponent>) {
this.contentEntry = data.contentEntry;
this.newFileVersion = data.hasOwnProperty('newFileVersion') ? data.newFileVersion : this.newFileVersion;
@@ -47,7 +48,7 @@ export class VersionManagerDialogAdapterComponent {
uploadError(event: FileUploadErrorEvent) {
const errorMessage = event.error;
this.notificationService.showError(errorMessage);
this.snackBar.open(errorMessage, '', { duration: 4000 });
}
close() {
@@ -15,19 +15,26 @@
* limitations under the License.
*/
import { Observable, of } from 'rxjs';
import { Observable, of, Subject } from 'rxjs';
import { Injectable } from '@angular/core';
import {
TaskFormService
} from '@alfresco/adf-process-services';
import { AlfrescoApiService, LogService } from '@alfresco/adf-core';
AlfrescoApiService,
EcmModelService,
LogService,
FormService,
FormOutcomeEvent
} from '@alfresco/adf-core';
@Injectable()
export class FakeTaskFormService extends TaskFormService {
export class FakeFormService extends FormService {
executeOutcome = new Subject<FormOutcomeEvent>();
constructor(apiService: AlfrescoApiService, logService: LogService) {
super(apiService, logService);
constructor(
ecmModelService: EcmModelService,
apiService: AlfrescoApiService,
protected logService: LogService
) {
super(ecmModelService, apiService, logService);
}
public getRestFieldValues(
@@ -17,7 +17,7 @@
import { Component, ViewChild, OnDestroy, OnInit } from '@angular/core';
import { FormModel, FormService, LogService, FormOutcomeEvent } from '@alfresco/adf-core';
import { FormComponent, EditorService } from '@alfresco/adf-process-services';
import { FormComponent } from '@alfresco/adf-process-services';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@@ -42,7 +42,7 @@ export class FormListComponent implements OnInit, OnDestroy {
showValidationIcon = false;
private onDestroy$ = new Subject<boolean>();
constructor(private formService: FormService, private editorService: EditorService, private logService: LogService) {
constructor(private formService: FormService, private logService: LogService) {
}
ngOnInit() {
@@ -63,7 +63,7 @@ export class FormListComponent implements OnInit, OnDestroy {
onRowDblClick(event: CustomEvent<any>) {
const rowForm = event.detail.value.obj;
this.editorService.getFormDefinitionById(rowForm.id).subscribe((formModel) => {
this.formService.getFormDefinitionById(rowForm.id).subscribe((formModel) => {
const form = this.formService.parseForm(formModel.formDefinition);
this.form = form;
});
@@ -22,11 +22,8 @@ import {
FormOutcomeEvent,
CoreAutomationService
} from '@alfresco/adf-core';
import {
TaskFormService
} from '@alfresco/adf-process-services';
import { InMemoryFormService } from '../../services/in-memory-form.service';
import { FakeTaskFormService } from './fake-tak-form.service';
import { FakeFormService } from './fake-form.service';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@@ -34,7 +31,7 @@ import { takeUntil } from 'rxjs/operators';
selector: 'app-form-loading',
templateUrl: './form-loading.component.html',
styleUrls: ['./form-loading.component.scss'],
providers: [{ provide: FakeTaskFormService, useClass: TaskFormService }]
providers: [{ provide: FormService, useClass: FakeFormService }]
})
export class FormLoadingComponent implements OnInit, OnDestroy {
form: FormModel;
@@ -18,7 +18,7 @@
import { Component, OnInit, OnDestroy } from '@angular/core';
import { NotificationService } from '@alfresco/adf-core';
import { MatSnackBarConfig } from '@angular/material/snack-bar';
import { UntypedFormBuilder, UntypedFormGroup, UntypedFormControl } from '@angular/forms';
import { FormBuilder, FormGroup, FormControl } from '@angular/forms';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
@@ -33,7 +33,7 @@ export class NotificationsComponent implements OnInit, OnDestroy {
actionOutput = '';
snackBarConfigObject = '';
configForm: UntypedFormGroup;
configForm: FormGroup;
snackBarConfig: MatSnackBarConfig = new MatSnackBarConfig();
@@ -60,16 +60,16 @@ export class NotificationsComponent implements OnInit, OnDestroy {
private onDestroy$ = new Subject<boolean>();
constructor(private notificationService: NotificationService,
private formBuilder: UntypedFormBuilder) {
private formBuilder: FormBuilder) {
this.snackBarConfig.duration = this.defaultDuration;
}
ngOnInit() {
this.configForm = this.formBuilder.group({
direction: new UntypedFormControl(''),
horizontalPosition: new UntypedFormControl(''),
verticalPosition: new UntypedFormControl(''),
duration: new UntypedFormControl('')
direction: new FormControl(''),
horizontalPosition: new FormControl(''),
verticalPosition: new FormControl(''),
duration: new FormControl('')
});
this.configForm.valueChanges
@@ -15,8 +15,8 @@
(preview)="showPreview($event)">
</adf-document-list>
<adf-alfresco-viewer
<adf-viewer
[(showViewer)]="showViewer"
[overlayMode]="isOverlay"
[nodeId]="nodeId">
</adf-alfresco-viewer>
</adf-viewer>
@@ -16,7 +16,7 @@
*/
import { Component, OnInit, OnDestroy } from '@angular/core';
import { UntypedFormGroup, UntypedFormBuilder, Validators, UntypedFormControl, AbstractControl } from '@angular/forms';
import { FormGroup, FormBuilder, Validators, FormControl, AbstractControl } from '@angular/forms';
import { ActivatedRoute, Params } from '@angular/router';
import { debounceTime, takeUntil } from 'rxjs/operators';
import { Subject } from 'rxjs';
@@ -30,7 +30,7 @@ const DEFAULT_SIZE = 20;
export class ProcessListDemoComponent implements OnInit, OnDestroy {
minValue = 0;
processListForm: UntypedFormGroup;
processListForm: FormGroup;
appId: number;
processDefId: string;
processInsId: string;
@@ -55,7 +55,7 @@ export class ProcessListDemoComponent implements OnInit, OnDestroy {
private onDestroy$ = new Subject<boolean>();
constructor(private route: ActivatedRoute,
private formBuilder: UntypedFormBuilder) {
private formBuilder: FormBuilder) {
}
ngOnInit() {
@@ -79,13 +79,13 @@ export class ProcessListDemoComponent implements OnInit, OnDestroy {
buildForm() {
this.processListForm = this.formBuilder.group({
processAppId: new UntypedFormControl(this.appId, [Validators.pattern('^[0-9]*$'), Validators.min(this.minValue)]),
processDefinitionId: new UntypedFormControl(''),
processInstanceId: new UntypedFormControl(''),
processState: new UntypedFormControl(''),
processSort: new UntypedFormControl(''),
processSize: new UntypedFormControl('', [Validators.pattern('^[0-9]*$'), Validators.min(this.minValue)]),
processPage: new UntypedFormControl('', [Validators.pattern('^[0-9]*$'), Validators.min(this.minValue)])
processAppId: new FormControl(this.appId, [Validators.pattern('^[0-9]*$'), Validators.min(this.minValue)]),
processDefinitionId: new FormControl(''),
processInstanceId: new FormControl(''),
processState: new FormControl(''),
processSort: new FormControl(''),
processSize: new FormControl('', [Validators.pattern('^[0-9]*$'), Validators.min(this.minValue)]),
processPage: new FormControl('', [Validators.pattern('^[0-9]*$'), Validators.min(this.minValue)])
});
this.processListForm.valueChanges
@@ -149,31 +149,31 @@ export class ProcessListDemoComponent implements OnInit, OnDestroy {
return this.processListForm.get(key) as T;
}
get processAppId(): UntypedFormControl {
return this.getControl<UntypedFormControl>('processAppId');
get processAppId(): FormControl {
return this.getControl<FormControl>('processAppId');
}
get processDefinitionId(): UntypedFormControl {
return this.getControl<UntypedFormControl>('processDefinitionId');
get processDefinitionId(): FormControl {
return this.getControl<FormControl>('processDefinitionId');
}
get processInstanceId(): UntypedFormControl {
return this.getControl<UntypedFormControl>('processInstanceId');
get processInstanceId(): FormControl {
return this.getControl<FormControl>('processInstanceId');
}
get processState(): UntypedFormControl {
return this.getControl<UntypedFormControl>('processState');
get processState(): FormControl {
return this.getControl<FormControl>('processState');
}
get processSort(): UntypedFormControl {
return this.getControl<UntypedFormControl>('processSort');
get processSort(): FormControl {
return this.getControl<FormControl>('processSort');
}
get processSize(): UntypedFormControl {
return this.getControl<UntypedFormControl>('processSize');
get processSize(): FormControl {
return this.getControl<FormControl>('processSize');
}
get processPage(): UntypedFormControl {
return this.getControl<UntypedFormControl>('processPage');
get processPage(): FormControl {
return this.getControl<FormControl>('processPage');
}
}
@@ -22,9 +22,10 @@ import { UploadService, AlfrescoApiService, AppConfigService, DiscoveryApiServic
import { PreviewService } from '../../services/preview.service';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { AlfrescoApiClientFactory } from '@alfresco/adf-core/alfresco-api';
export function processUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService, discoveryApiService: DiscoveryApiService) {
return new ProcessUploadService(api, config, discoveryApiService);
export function processUploadServiceFactory(api: AlfrescoApiService, config: AppConfigService, discoveryApiService: DiscoveryApiService, alfrescoApiClientFactory: AlfrescoApiClientFactory) {
return new ProcessUploadService(api, config, discoveryApiService, alfrescoApiClientFactory);
}
@Component({
@@ -35,7 +36,7 @@ export function processUploadServiceFactory(api: AlfrescoApiService, config: App
{
provide: UploadService,
useFactory: (processUploadServiceFactory),
deps: [AlfrescoApiService, AppConfigService, DiscoveryApiService]
deps: [AlfrescoApiService, AppConfigService, DiscoveryApiService, AlfrescoApiClientFactory]
}
]
})
@@ -21,12 +21,10 @@
<mat-expansion-panel-header>
<mat-panel-title>
<mat-icon>assignment</mat-icon>
<div id="tasks-accordion-title" class="app-accordion-title-padding">Tasks</div>
<div class="app-accordion-title-padding">Tasks</div>
</mat-panel-title>
</mat-expansion-panel-header>
<adf-task-filters [filterParam]="filterSelected"
role="group"
aria-labelledby="tasks-accordion-title"
[appId]="appId"
[showIcon]="showTaskFilterIcon"
(filterClicked)="onTaskFilterClick($event)"
@@ -140,13 +138,11 @@
<mat-expansion-panel-header>
<mat-panel-title>
<mat-icon>assessment</mat-icon>
<div id="process-accordion-title" class="app-accordion-title-padding">Processes</div>
<div class="app-accordion-title-padding">Processes</div>
</mat-panel-title>
</mat-expansion-panel-header>
<adf-process-instance-filters
#activitiProcessFilter
role="group"
aria-labelledby="process-accordion-title"
[appId]="appId"
[filterParam]="filterSelected"
[showIcon]="showProcessFilterIcon"

Some files were not shown because too many files have changed in this diff Show More