From 83a287f8c4ba89f20ed7574051ded99b61534554 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 10 Apr 2022 17:20:28 +0200 Subject: [PATCH] update workflow --- .github/workflows/main.yml | 95 +++++++++++++++++++++++++++ Controller.js | 126 ----------------------------------- Models/Navigation.js | 131 ------------------------------------- Theme/Backend/side.tpl.php | 4 +- 4 files changed, 97 insertions(+), 259 deletions(-) delete mode 100755 Controller.js delete mode 100755 Models/Navigation.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 25248d1..bdf3062 100755 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -131,6 +131,96 @@ jobs: env: CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}" run: "bash <(curl -s https://codecov.io/bash) -f tests/coverage.xml" + static-tests: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, 'NO_CI')" + strategy: + fail-fast: false + max-parallel: 3 + matrix: + php-versions: ['8.0'] + steps: + - name: Checkout Repository + uses: actions/checkout@master + with: + fetch-depth: 1 + submodules: recursive + token: ${{ secrets.GITHUB }} + - name: Checkout Build Repository + uses: actions/checkout@master + with: + fetch-depth: 1 + ref: develop + repository: Karaka/Build + path: Build + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@master + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, gd, zip, dom, mysql, pgsql, sqlite, imap, bcmath, redis, memcached + ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 + - name: Get Composer Cache Directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + - name: Cache dependencies + uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + - name: Setup Composer + run: composer install + - name: phpstan + run: vendor/bin/phpstan analyse -a phpOMS/Autoloader.php --no-progress -l 9 -c Build/Config/phpstan.neon ./ + codestyle-tests: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, 'NO_CI')" + strategy: + fail-fast: false + max-parallel: 3 + matrix: + php-versions: ['8.0'] + steps: + - name: Checkout Repository + uses: actions/checkout@master + with: + fetch-depth: 1 + submodules: recursive + token: ${{ secrets.GITHUB }} + - name: Checkout Build Repository + uses: actions/checkout@master + with: + fetch-depth: 1 + ref: develop + repository: Karaka/Build + path: Build + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@master + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, gd, zip, dom, mysql, pgsql, sqlite, imap, bcmath, redis, memcached + ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1 + - name: Get Composer Cache Directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + - name: Cache dependencies + uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + - name: Setup Composer + run: composer install + - name: phpcs + run: vendor/bin/phpcs ./ --standard="Build/Config/phpcs.xml" -s --report=full + - name: Install NPM + uses: actions/setup-node@v3 + with: + node-version: '14' + cache: 'npm' + - run: npm install + - name: eslint + run: npx eslint ./ -c Build/Config/.eslintrc.json custom: runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, 'NO_CI')" @@ -165,6 +255,11 @@ jobs: run: | if [[ $(find ./ -name "*tpl.php" | xargs grep -E '=\"[\#\$\%\^\&\*\(\)\\/\ ]*\"') -ne "" ]]; then exit 1; fi if [[ $(find ./ -name "*tpl.php" | xargs grep -P '(\)') -ne "" ]]; then exit 1; fi + if [[ $(find ./ -name "*tpl.php" | xargs grep -P '()') -ne "" ]]; then exit 1; fi + if [[ $(find ./ -name "*tpl.php" | xargs grep -P '()') -ne "" ]]; then exit 1; fi + if [[ $(find ./ -name "*tpl.php" | xargs grep -P '(style=)') -ne "" ]]; then exit 1; fi + if [[ $(find ./ -name "*tpl.php" | xargs grep -P '(value|title|alt|aria\-label)(=\")((?!\<\?).)*(>)') -ne "" ]]; then exit 1; fi + if [[ $(find ./ -name "*tpl.php" | xargs grep -P '(\|\|\|\)) -ne "" ]]; then exit 1; fi - name: Js strict run: if [[ $(grep -r -L "\"use strict\";" --include=*.js ./) -ne "" ]]; then exit 1; fi - name: Js inspection diff --git a/Controller.js b/Controller.js deleted file mode 100755 index 2ec657a..0000000 --- a/Controller.js +++ /dev/null @@ -1,126 +0,0 @@ -import { Autoloader } from '../../jsOMS/Autoloader.js'; -import { Application } from '../../Web/Backend/js/backend.js'; -import { Navigation } from './Models/Navigation.js'; - -Autoloader.defineNamespace('jsOMS.Modules'); - -/** - * Navigation controller. - * - * @copyright Dennis Eichhorn - * @license OMS License 1.0 - * @version 1.0.0 - * @since 1.0.0 - */ -jsOMS.Modules.Navigation = class { - /** - * Constructor - * - * @since 1.0.0 - */ - constructor() { - this.navigation = {}; - /** global: jsOMS */ - /** global: localStorage */ - this.rawNavData = JSON.parse(window.localStorage.getItem(Navigation.MODULE_NAME)); - this.rawNavData = this.rawNavData !== null ? this.rawNavData : {}; - }; - - /** - * Bind navigation - * - * @param {string} id Navigation to bind (optional) - * - * @return {void} - * - * @since 1.0.0 - */ - bind (id) { - const e = typeof id === 'undefined' ? document.getElementsByClassName('nav') : [document.getElementById(id)]; - const length = e.length; - - for (let i = 0; i < length; ++i) { - if (e[i] === null) { - continue; - } - - this.bindElement(e[i]); - } - }; - - /** - * Bind navigation element - * - * @param {Element} e Element to bind - * - * @return {void} - * - * @since 1.0.0 - */ - bindElement (e) { - const extend = e.querySelectorAll('li label'); - const self = this; - - this.navigation[e.id] = new Navigation(this.rawNavData[e.id]); - - // On load - const open = this.navigation[e.id].getOpen(); - let ele = null; - - for (let key in open) { - if (open.hasOwnProperty(key) && (ele = document.getElementById(key)) !== null) { - ele.checked = open[key]; - } - } - - if (!this.navigation[e.id].isVisible()) { - let width = window.innerWidth - || document.documentElement.clientWidth - || document.body.clientWidth; - - /** - * @todo Navigation sidebar width - * The sidebar navigation is not working properly if the content is too wide then the side nav becomes smaller (resize window for testing) - */ - e.nextElementSibling.checked = width < 800; - } - - e.scrollTop = this.navigation[e.id].getScrollPosition().y; - e.scrollLeft = this.navigation[e.id].getScrollPosition().x; - - // Bind minimize/maximize - jsOMS.addEventListenerToAll(extend, 'click', function () { - let box = document.getElementById(this.getAttribute('for')); - - if (!box.checked) { - self.navigation[e.id].setOpen(box.id); - } else { - self.navigation[e.id].setClose(box.id); - } - - localStorage.setItem(Navigation.MODULE_NAME, JSON.stringify(self.navigation)); - }); - - // Bind show/hide - e.addEventListener('change', function () { - self.navigation[e.id].setVisible(this.checked); - localStorage.setItem(Navigation.MODULE_NAME, JSON.stringify(self.navigation)); - }); - - // Bind scroll - e.addEventListener('scroll', function () { - self.navigation[e.id].setScrollPosition(this.scrollLeft, this.scrollTop); - localStorage.setItem(Navigation.MODULE_NAME, JSON.stringify(self.navigation)); - }); - }; -}; - -/** - * Module id - * - * @var {string} - * @since 1.0.0 - */ -Navigation.MODULE_NAME = '1000500001'; - -window.omsApp.moduleManager.get('Navigation').bind('nav-side-outer'); \ No newline at end of file diff --git a/Models/Navigation.js b/Models/Navigation.js deleted file mode 100755 index fc462f9..0000000 --- a/Models/Navigation.js +++ /dev/null @@ -1,131 +0,0 @@ -export class Navigation { - /** - * Construct - * - * @param {Object} data Initialization (optional) - * - * @since 1.0.0 - */ - constructor (data) - { - if (typeof data === 'undefined') { - this.scrollPosition = {x: 0, y: 0}; - this.activeLinks = {}; - this.visible = true; - this.openCategories = {}; - } else { - this.scrollPosition = typeof data.scrollPosition === 'undefined' ? {x : 0, y : 0} : data.scrollPosition; - this.activeLinks = typeof data.activeLinks === 'undefined' ? {} : data.activeLinks; - this.visible = typeof data.visible === 'undefined' ? true : data.visible; - this.openCategories = typeof data.openCategories === 'undefined' ? {} : data.openCategories; - } - }; - - /** - * Set scroll position - * - * @param {int} x Horizontal position - * @param {int} y Vertical position - * - * @return {void} - * - * @since 1.0.0 - */ - setScrollPosition (x, y) - { - this.scrollPosition.x = x; - this.scrollPosition.y = y; - }; - - /** - * Get scroll position - * - * @return {Object} - * - * @since 1.0.0 - */ - getScrollPosition () - { - return this.scrollPosition; - }; - - /** - * Open navigation category - * - * @param {string} id Category id - * - * @return {void} - * - * @since 1.0.0 - */ - setOpen (id) - { - this.openCategories[id] = true; - }; - - /** - * Close navigation category - * - * @param {string} id Category id - * - * @return {void} - * - * @since 1.0.0 - */ - setClose (id) - { - delete this.openCategories[id]; - }; - - /** - * Get open navigation elements - * - * @return {Object} - * - * @since 1.0.0 - */ - getOpen () - { - return this.openCategories; - }; - - active (id) - { - this.allInactive(); - }; - - allInactive () - { - - }; - - inactive (id) - { - }; - - /** - * Set navigation visibility - * - * @param {bool} visible Visibility - * - * @return {bool} - * - * @since 1.0.0 - */ - setVisible (visible) - { - this.visible = visible; - }; - - /** - * Is navigation visible - * - * @return {bool} - * - * @since 1.0.0 - */ - isVisible () - { - return this.visible; - }; -}; diff --git a/Theme/Backend/side.tpl.php b/Theme/Backend/side.tpl.php index 9dfd736..d33f318 100755 --- a/Theme/Backend/side.tpl.php +++ b/Theme/Backend/side.tpl.php @@ -19,12 +19,12 @@ use \Modules\Navigation\Models\NavigationType; * @var \Modules\Navigation\Views\NavigationView $this */ if (isset($this->nav[NavigationType::SIDE])) : ?> -