Custom Webpack config for platform-webworker or worker-loader

Hello,
I have to run some angular code inside a separated thread. With ng eject being currently disabled, is it possible to use angular-cli-builders in order modify the webpack configuration to use platform-webworker or worker-loader ?
Example: webpack config proposed for worker-loader:
// webpack.config.js {   module: {     rules: [       {         test: /\.worker\.js$/,         use: { loader: 'worker-loader' }       }     ]   } }

Seems all right to me and should work. Doesn't it?
On Wed, Aug 8, 2018, 22:29 Ajyress<EMAIL_ADDRESS>wrote:

Hello,
I have to run some angular code inside a separated thread. With ng eject
being currently disabled, is it possible to use angular-cli-builders in
order modify the webpack configuration to use platform-webworker
https://blog.angularindepth.com/angular-with-web-workers-step-by-step-dc11d5872135
or worker-loader https://github.com/webpack-contrib/worker-loader ?
Example: webpack config proposed for worker-loader:
// webpack.config.js { module: { rules: [ { test: /.worker.js$/, use: {
loader: 'worker-loader' } } ] } }
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/meltedspark/angular-cli-builders/issues/13, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AJXjb62mYjxiNqtaW-0GS69PqppoARVtks5uOzwrgaJpZM4V0hwi
.

Are you using replaceDuplicatePlugins option?

I indeed forgot the option replaceDuplicatePlugins = true. Now I don't have any error when running ng build or ng serve, it compiles successfully, thanks a lot!
I still have an error I don't know how to resolve on the browser console, but I don't think it's related to angular-cli-builders
core.js:3697 Uncaught Error: StaticInjectorError(Platform: core)[NgZone]:
  In this configuration Angular requires Zone.js
    at new NgZone (core.js:3697)
    at createNgZone (platform-webworker.js:1013)
    at resolveToken (core.js:1296)
    at tryResolveToken (core.js:1244)
    at<EMAIL_ADDRESS>(core.js:1141)
    at initializeGenericWorkerRenderer (platform-webworker.js:977)
    at platform-webworker.js:999
    at core.js:4200
    at Array.forEach (<anonymous>)
    at createPlatform (core.js:4200)
NgZone @ core.js:3697
createNgZone @ platform-webworker.js:1013
resolveToken @ core.js:1296
tryResolveToken @ core.js:1244
<EMAIL_ADDRESS>@ core.js:1141
initializeGenericWorkerRenderer @ platform-webworker.js:977
(anonymous) @ platform-webworker.js:999
(anonymous) @ core.js:4200
createPlatform @ core.js:4200
(anonymous) @ core.js:4221
(anonymous) @ core.js:4217
bootstrapWorkerUi @ platform-webworker.js:1782
./src/main.ts @ main.ts:12
__webpack_require__ @ bootstrap:76
0 @ main.ts:15
__webpack_require__ @ bootstrap:76
checkDeferredModules @ bootstrap:43
webpackJsonpCallback @ bootstrap:30
(anonymous) @ main.chunk.js:1
platform-webworker.js:1019 GET http://localhost:4200/webworker.bundle.js 404 (Not Found)

Have you specified the original config for the replaced plugins like it is mentioned in #14?

You are right, i didn't specify the original config for the replaced plugins!
On the links that you give in #14, I see that some plugin options are given by wco: WebpackConfigOptions. I found the interface declaration on build-options.ts but I still have to dive in a little bit to understand how it works :).

After some research, I managed to get rid of the previous error and some others.
I'm now stuck on the exact same error that someone asked of StackOverflow yesterday.

Could you create a minimal reproduction case so that I would be able to investigate?

Thanks again for proposing your help.
Here is a minimal reproduction of the error, with angular CLI 6.1.3:
ng new myWorkerApp
cd myWorkerApp
npm install
npm install --save @angular/platform-webworker @angular/platform-webworker-dynamic
npm i -D angular-cli-builders
Change src/app/app.module.ts with the following code:
import { WorkerAppModule, WORKER_APP_LOCATION_PROVIDERS } from '@angular/platform-webworker';
import { NgModule } from '@angular/core';
import { APP_BASE_HREF } from '@angular/common'

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    WorkerAppModule
  ],
  providers: [
    {
      provide: APP_BASE_HREF,
      useValue: '/'
    },
    WORKER_APP_LOCATION_PROVIDERS
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Change src/main.ts with the following code:
import { enableProdMode } from '@angular/core';
import { bootstrapWorkerUi, WORKER_UI_LOCATION_PROVIDERS } from '@angular/platform-webworker';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}

bootstrapWorkerUi('webworker.bundle.js', WORKER_UI_LOCATION_PROVIDERS);

Create src/workerLoader.ts file containing the following code:
import './polyfills.ts';
import '@angular/core';
import '@angular/common';

import { platformWorkerAppDynamic } from '@angular/platform-webworker-dynamic';
import { AppModule } from './app/app.module';

platformWorkerAppDynamic().bootstrapModule(AppModule);

Configure angular.json as following:
//... some stuff...
"build": {
          "builder": "angular-cli-builders:custom-webpack-browser",
          "options": {
            "customWebpackConfig": {
               "path": "./extra-webpack.config.js",
               "replaceDuplicatePlugins": true
            },
            //... some stuff...
"serve": {
          "builder": "angular-cli-builders:generic-dev-server",
          "options": {
            "browserTarget": "myWorkerApp:build"
          },
//... some stuff...

Create an extra-webpack.config.js file with the following code:

const path = require('path');

const entryPoints = ["inline","polyfills","sw-register","styles","vendor","main"];

const HtmlWebpackPlugin = require('html-webpack-plugin');
const AotPlugin = require('@ngtools/webpack').AngularCompilerPlugin;

module.exports = {
    target : "web",
    "entry": {
      "main": [
        "./src/main.ts"
      ],
      "polyfills": [
        "./src/polyfills.ts"
      ],
      "styles": [
        "./src/styles.css"
      ],
      "webworker": [
        "./src/workerLoader.ts"
      ]
    },
    "output": {
      "path": path.join(process.cwd(), "dist"),
      "filename": "webworker.bundle.js",
      "chunkFilename": "[id].chunk.js"
    },
    "module": { },
    "plugins": [
      new HtmlWebpackPlugin({
        "template": "./src/index.html",
        "filename": "./index.html",
        "hash": false,
        "inject": true,
        "compile": true,
        "favicon": false,
        "minify": false,
        "cache": true,
        "showErrors": true,
        "chunks": "all",
        "xhtml": true,
        "excludeChunks": [
          "webworker"
        ],
        "title": "Webpack App",
        "chunksSortMode": function sort(left, right) {
          let leftIndex = entryPoints.indexOf(left.names[0]);
          let rightIndex = entryPoints.indexOf(right.names[0]);
          if (leftIndex > rightIndex) {
            return 1;
          }
          else if (leftIndex < rightIndex) {
            return -1;
          }
          else {
            return 0;
          }
        }
      }),
      new AotPlugin({
        "mainPath": "main.ts",
        "entryModule": 'src/app/app.module#AppModule',
        "hostReplacementPaths": {
          "environments/environment.ts": "environments/environment.ts"
        },
        "exclude": [],
        "tsConfigPath": "src/tsconfig.app.json",
        "skipCodeGeneration": true
      })
    ],
    optimization: {
      splitChunks: {
        cacheGroups: {
          vendor: {
            name: 'vendor',
            test: /\/node_modules\//,
            chunks: 'all',
            priority: 0,
            enforce: true,
          },
        },
      },
    },
  };

Run ng serve

I finally managed to get it work!
I had to add the following option to  customWebpackConfig  in angular.json:
mergeStrategies": {"optimization":"replace"}
Not related to the issue, i also had to replace webworker.bundle.js with [name].bundle.js in extra-webpack.config.js

Great, happy to hear that! Would you share your final configuration with us, please?

My final configuration:
angular.json:
//... some stuff...
"build": {
          "builder": "angular-cli-builders:custom-webpack-browser",
          "options": {
            "customWebpackConfig": {
               "path": "./extra-webpack.config.js",
               "replaceDuplicatePlugins": true,
               "mergeStrategies": {"optimization":"replace"}
            },
            //... some stuff...
"serve": {
          "builder": "angular-cli-builders:generic-dev-server",
          "options": {
            "browserTarget": "myWorkerApp:build"
          },
//... some stuff...

extra-webpack.config.js:
const path = require('path');

const entryPoints = ["inline","polyfills","sw-register","styles","vendor","main"];

const HtmlWebpackPlugin = require('html-webpack-plugin');
const AotPlugin = require('@ngtools/webpack').AngularCompilerPlugin;

module.exports = {
    target : "web",
    "entry": {
      "main": [
        "./src/main.ts"
      ],
      "polyfills": [
        "./src/polyfills.ts"
      ],
      "styles": [
        "./src/styles.css"
      ],
      "webworker": [
        "./src/workerLoader.ts"
      ]
    },
    "output": {
      "path": path.join(process.cwd(), "dist"),
      "filename": "[name].bundle.js",
      "chunkFilename": "[id].chunk.js"
    },
    "module": { },
    "plugins": [
      new HtmlWebpackPlugin({
        "template": "./src/index.html",
        "filename": "./index.html",
        "hash": false,
        "inject": true,
        "compile": true,
        "favicon": false,
        "minify": false,
        "cache": true,
        "showErrors": true,
        "chunks": "all",
        "xhtml": true,
        "excludeChunks": [
          "webworker"
        ],
        "title": "Webpack App",
        "chunksSortMode": function sort(left, right) {
          let leftIndex = entryPoints.indexOf(left.names[0]);
          let rightIndex = entryPoints.indexOf(right.names[0]);
          if (leftIndex > rightIndex) {
            return 1;
          }
          else if (leftIndex < rightIndex) {
            return -1;
          }
          else {
            return 0;
          }
        }
      }),
      new AotPlugin({
        "mainPath": "main.ts",
        "entryModule": 'src/app/app.module#AppModule',
        "hostReplacementPaths": {
          "environments/environment.ts": "environments/environment.ts"
        },
        "exclude": [],
        "tsConfigPath": "src/tsconfig.app.json",
        "skipCodeGeneration": true
      })
    ],
    optimization: {
      splitChunks: {
        cacheGroups: {
          vendor: {
            name: 'vendor',
            test: /\/node_modules\//,
            chunks: 'all',
            priority: 0,
            enforce: true,
          },
        },
      },
    },
  };

I'm still new to wepback, I can't tell this configuration is optimal or not but it works

Hey I tried creating an Angular app running in a web worker following your configuration but I cannot get it working. All I'm getting is an empty page, the workerLoader.ts is never executed. I assume for some reason the worker isn't loaded properly, but I don't know why.

I assume you're trying to apply the configuration @Ajyress provided?
If I recall correctly this issue was open before plugins merge support.
Plugins merge is supported now, so you might not need to specify the whole plugin configuration. Although if you do want to replace plugins and did specify replaceDuplicatePlugins flag it should work just as it worked before.

@meltedspark Yeah I was trying @Ajyress configuration. No luck with changing replaceDuplicatePlugins to false either. The worker does not seem to be loaded.

Would you mind providing a repository with minimal reproduction?

Hi,
The configuration changes quite a lot now that there is plugins merge support.
Also now you have to install both @angular-builders/custom-webpack and  @angular-builders/dev-server.
Here is a reproduction with angular CLI 6.2.2:
ng new workerAppRepro
cd workerAppRepro
npm install
npm install --save @angular/platform-webworker @angular/platform-webworker-dynamic
npm i -D @angular-builders/custom-webpack
npm i -D @angular-builders/dev-server
Change src/app/app.module.ts with the following code:
import { WorkerAppModule, WORKER_APP_LOCATION_PROVIDERS } from '@angular/platform-webworker';
import { NgModule } from '@angular/core';
import { APP_BASE_HREF } from '@angular/common'

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    WorkerAppModule
  ],
  providers: [
    {
      provide: APP_BASE_HREF,
      useValue: '/'
    },
    WORKER_APP_LOCATION_PROVIDERS
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

Change src/main.ts with the following code:
import { enableProdMode } from '@angular/core';
import { bootstrapWorkerUi, WORKER_UI_LOCATION_PROVIDERS } from '@angular/platform-webworker';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}

bootstrapWorkerUi('webworker.bundle.js', WORKER_UI_LOCATION_PROVIDERS);

Create src/workerLoader.ts file containing the following code:
import './polyfills.ts';
import '@angular/core';
import '@angular/common';

import { platformWorkerAppDynamic } from '@angular/platform-webworker-dynamic';
import { AppModule } from './app/app.module';

platformWorkerAppDynamic().bootstrapModule(AppModule);

Configure angular.json as following:
//... some stuff...
        "build": {
          "builder": "@angular-builders/custom-webpack:browser",
          "options": {
            "customWebpackConfig": {
               "path": "./extra-webpack.config.js",
               "mergeStrategies": {
                 "entry": "replace",
                 "output": "replace",
                 "optimization":"replace"
                }
            },
 //... some stuff...
        "serve": {
          "builder": "@angular-builders/dev-server:generic",
          "options": {
            "browserTarget": "workerAppRepro:build"
          },
//... some stuff...

Create an extra-webpack.config.js file with the following code:
const path = require('path');
const entryPoints = ["inline","polyfills","sw-register","styles","vendor","main"];
const HtmlWebpackPlugin = require('html-webpack-plugin');
const AotPlugin = require('@ngtools/webpack').AngularCompilerPlugin;

module.exports = {
    "entry": {
      "main": [
        "./src/main.ts"
      ],
      "polyfills": [
        "./src/polyfills.ts"
      ],
      "styles": [
        "./src/styles.css"
      ],
      "webworker": [
        "./src/workerLoader.ts"
      ]
    },
    "output": {
      "path": path.join(process.cwd(), "dist"),
      "filename": "[name].bundle.js",
      "chunkFilename": "[id].chunk.js"
    },
    "plugins": [
      new HtmlWebpackPlugin({
        "template": "./src/index.html",
        "filename": "./index.html",
        "excludeChunks": [
          "webworker"
        ],
        "chunksSortMode": function sort(left, right) {
          let leftIndex = entryPoints.indexOf(left.names[0]);
          let rightIndex = entryPoints.indexOf(right.names[0]);
          if (leftIndex > rightIndex) {
            return 1;
          }
          else if (leftIndex < rightIndex) {
            return -1;
          }
          else {
            return 0;
          }
        }
      }),
      new AotPlugin({
        "mainPath": "main.ts",
        "entryModule": 'src/app/app.module#AppModule',
        "exclude": [],
        "tsConfigPath": "src/tsconfig.app.json",
        "skipCodeGeneration": true
      })
    ],
    optimization: {
      splitChunks: {
        cacheGroups: {
          vendor: {
            name: 'vendor',
            test: /\/node_modules\//,
            chunks: 'all',
            priority: 0,
            enforce: true,
          },
        },
      },
    },
  };

@Ajyress so you're saying it's not working with the new config? Or does it?
Anyways, if you use replaceDuplicatePlugins option it should the same way it worked before (no plugins merge).
Can you confirm it doesn't work even with this option enabled in the new version, while it does work in the old version?
Thanks for cooperation!

it works for me with the new config I gave today.
It also works when I set replaceDuplicatePlugins  to true with this exact same configuration.
In this situation, I think it is better not to use replaceDuplicatePlugins as I don't know the exact webpack config provided by angular. Merging the config seems a better option.

@Ajyress great, thank you very much.
@thillmann could you try the exact same configuration and confirm it works for you?

@Ajyress Thanks, I'll give it a try! @meltedspark Yeah will do later! Thanks!

I can confirm the configuration provided here works, applied it to my project just now. The only thing I had to enhance was absolutizing the path to the entryModule in the AotPlugin configuration:
new AotPlugin({
        "entryModule": path.join(__dirname, 'src/app/app.module#AppModule'),

otherwise I kept getting build errors, with complaints that the app/app.module can't be found. Other than that, it just works! Great job and many thanks @Ajyress!

Hmm, now it doesn't work anymore. Strange, as I can't understand the change in my environment that broke it. I can reproduce the error creating an app from scratch (the example from above with workerAppRepro), the build runs fine but I get an error while bootstrapping: Uncaught ReferenceError: window is not defined. I guess it's related to this, but am unable to work around the issue (redefining output.globalObject resolves the error, but the app is not loaded). Maybe some bumped dependency broke it? @Ajyress can you please verify if the steps still work from scratch for you?

How it goes? Is this angular-builders issue or it's just a matter of configuration? If it worked before and is broken in a newer version I should investigate, as there were no breaking changes since then.

It's not working for me any of this example with angular 7.
Steps:
ng new ng722
angular.json config
"build-webpack": {
          "builder": "@angular-builders/custom-webpack:browser",
          "options": {
            "customWebpackConfig": {
              "path": "./extra-webpack.config.js",
              "replaceDuplicatePlugins": true,
              "mergeStrategies": {
                "entry": "append",
                "output": "replace",
                "optimization": "replace"
              }
            },
            "outputPath": "dist/ng722",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.app.json",
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ],
            "styles": [
              "src/styles.scss"
            ],
            "scripts": []
          }
        },
        "serve-webpack": {
          "builder": "@angular-builders/dev-server:generic",
          "options": {
            "browserTarget": "ng722:build-webpack"
          }
        },

webpack-extra.config.js
const path = require('path');
const entryPoints = ["inline","polyfills","sw-register","styles","vendor","main"];
const HtmlWebpackPlugin = require('html-webpack-plugin');
const AotPlugin = require('@ngtools/webpack').AngularCompilerPlugin;

module.exports = {
  "entry": {
    "webworker": [
      "./src/workerLoader.ts"
    ]
  },
  "output": {
    "path": path.join(process.cwd(), "dist"),
    "filename": "[name].bundle.js",
    "chunkFilename": "[id].chunk.js",
    "globalObject": "this"
  },
  "plugins": [
    new HtmlWebpackPlugin({
      "template": "./src/index.html",
      "filename": "./index.html",
      "excludeChunks": [
        "webworker"
      ],
      "chunksSortMode": function sort(left, right) {
        let leftIndex = entryPoints.indexOf(left.names[0]);
        let rightIndex = entryPoints.indexOf(right.names[0]);
        if (leftIndex > rightIndex) {
          return 1;
        }
        else if (leftIndex < rightIndex) {
          return -1;
        }
        else {
          return 0;
        }
      }
    }),
    new AotPlugin({
      "mainPath": "main.ts",
      "entryModule": 'src/app/app.module#AppModule',
      "exclude": [],
      "tsConfigPath": "src/tsconfig.app.json",
      "skipCodeGeneration": true
    })
  ],
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendor: {
          name: 'vendor',
          test: /\/node_modules\//,
          chunks: 'all',
          priority: 0,
          enforce: true,
        },
      },
    },
  },
};

workerLoader.ts
console.log('worker');
import './polyfills.ts';
import '@angular/core';
import '@angular/common';

import { platformWorkerAppDynamic } from '@angular/platform-webworker-dynamic';
import { AppModule } from './app/app.module';

platformWorkerAppDynamic().bootstrapModule(AppModule);

main.ts
import {enableProdMode} from '@angular/core';
import {bootstrapWorkerUi, WORKER_UI_LOCATION_PROVIDERS} from '@angular/platform-webworker';
import {environment} from './environments/environment';

if (environment.production) {
  enableProdMode();
}

console.log('main');
bootstrapWorkerUi('webworker.bundle.js', WORKER_UI_LOCATION_PROVIDERS);

package.json
"bworker": "ng run ng722:build-worker",
"sworker": "ng run ng722:serve-webpack"

yarn sworker
Open the browser, connect to localhost:4200, and open the console. The app prints:
main

expected behavior
main
worker

If I comment all lines of workerLoader.ts except console.log('worker'), then the app prints this log, but if I add only polyfills, no logs printed.
My conclusion: I think this is a webpack problem. Any ideas?

@Serginho I'd assume it's not even a webpack problem but some configuration issue. Since this problem is quite common I'd like to find a solution and add it to the documentation.
Let's try to figure it out together.
Would you mind creating a minimal reproduction repo so that it would be faster to get to the point?
Also, just to confirm - neither build or serve work for you, neither in prod or dev mode, is that right?
Probably someone of Angular CLI team can shed some light on this mystery (how the webworkers should be enabled for Angular 7+). @hansl, @filipesilva, @mgechev, guys, any suggestions?
I'm reopening this issue just to track it, labeling as not-an-issue.

@meltedspark Here is the proof of concept: https://github.com/Serginho/angular-platform-webworker
I can confirm it's not working for build and serve configurations.
Thanks for helping.

Angular CLI has no support for webworkers currently. https://github.com/angular/angular-cli/pull/12575 aims to support bundling workers, https://github.com/angular/angular-cli/issues/2305 tracks using workers in a CLI app, and https://github.com/angular/angular-cli/issues/2305 tracks running Angular in a web worker.

I have try this , but when i run npm  start, webpack  failed to compile with "ERROR in Resolution of relative paths requires a containing file."
 const path = require('path');

 const entryPoints = ["inline","polyfills","sw-register","styles","vendor","main"];

 const HtmlWebpackPlugin = require('html-webpack-plugin');

 const AotPlugin = require('@ngtools/webpack').AngularCompilerPlugin;

 module.exports = {

"entry": {
    "main": [
        "./src/main.ts"
    ],
    "polyfills": [
        "./src/polyfills.ts"
    ],
    "styles": [
        "./src/styles.scss"
    ],
    "webworker": [
        "./src/workerLoader.ts"
    ]
},
"output": {
    "path": path.join(process.cwd(), "dist"),
    "filename": "[name].bundle.js",
    "chunkFilename": "[id].chunk.js"
},
"plugins": [
    new HtmlWebpackPlugin({
        "template": "./src/index.html",
        "filename": "./index.html",
        "excludeChunks": [
            "webworker"
        ],
        "chunksSortMode": function sort(left, right) {
            let leftIndex = entryPoints.indexOf(left.names[0]);
            let rightIndex = entryPoints.indexOf(right.names[0]);
            if (leftIndex > rightIndex) {
                return 1;
            }
            else if (leftIndex < rightIndex) {
                return -1;
            }
            else {
                return 0;
            }
        }
    }),
    new AotPlugin({
        "mainPath": "main.ts",
        "entryModule": './src/app/app.module#AppModule',
        "exclude": [],
        "tsConfigPath": "src/tsconfig.app.json",
        "skipCodeGeneration": true

    })
],
optimization: {
        splitChunks: {
              cacheGroups: {
                    vendor: {
                        name: 'vendor',
                        test: /\/node_modules\//,
                        chunks: 'all',
                        priority: 0,
                        enforce: true,
                  },
             },
       },
 },
 };

Can anyone help me to fix this error?  thanks.

I have tried  this solution  @Ajyress  , but i have an error  "Cannot read property 'getTypeChecker' of undefined"  in  @ngtools\webpack\src\angular_compiler_plugin.js
I am using angular v7  , any idea what can i do to solve it?

For anyone who's coming to this thread looking to run part of his application in WebWorker - it is officially supported since Angular 8: https://angular.io/guide/web-worker

Did you do some tests? @meltedspark angular 8 deprecates platform-worker, we dont have any guarantee if it will works properly and sngular cli 8 autobundle workers but it's not compatible with lazy loading.

I personally did not do any tests but this guy definitely did.

@meltedspark This guy bundles stuff in a workers. But it didn't test platform-webworker.
I pretty sure angular-cli won't work with lazy loading because you need two webpack targets amd angular-cli only supports one (target=web). To say webpack: hey compiles me this part with target=web and this other part with target=webworker you will have lots of changes in the CLI. That's the problem.

Hi @meltedspark, I have a question with custom web worker in angular 8, could you provide some advices?
https://stackoverflow.com/questions/56785853/how-to-custom-web-worker-by-angular-builder-in-angular-8


More config options. Change default faction TAG. Add TAG to player nickname above head

Is it possible to add more config options, like:

change or disable FACTIONLESS tag;
visible tag on top of player model (like team tag)
disable chat messages about power points in chat and disable point system at all;
placeholder for team tag, team chat for other chat, tab formatting mods that use Placeholder API;
disable HOME and other teleport options, to make factions more hardcore

What do you mean by "team chat for other chat"? The home system can already be disabled with the current config by setting the home field to false. The power system can also be effectively disabled by setting all the power options to 0 except for ticks. A visible tag above players would most likely have to be the role of another mod that supports the Placeholder API.

We can add a placeholder with that has the faction name without the FACTIONLESS tag

team chat for other chat

I mean chat and tab formatting mods, specifically Styled Chat, Styled Player List. Also, does war work? How will it act without point system?

We can add a placeholder with that has the faction name without the FACTIONLESS tag

Thanks for your work

We can add a placeholder with that has the faction name without the FACTIONLESS tag

I just looked back through the code and the faction name placeholder doesn't have the factionless tag. If you wanted to make the tab list not include the factionless tag you can disable the tab menu from the factions mod in the config (factions.json > display > tabMenu = false), then use another tab mod (Styled Player List)

Also, does war work? How will it act without point system?

War isn't implemented yet


Annotated optional fields with omitempty by using new optional config value

It could be useful to annotate optional fields annotate with omitempty when using pointers.
By allowing this option, input fields that get removed (and not used is the executed queries) will not break.
This gives the library an advantage to be more resilient  against break API changes.
To introduce this option, a new optional config value is introduced pointer_omitempty.
If optional: pointer_omitempty is set. We generate
type Task_insert_input struct {
  Id: *int `json:"id,omitempty"`
}

based on
input task_insert_input {
  id: Int
}

The @genqlient(omitempty) config will override the previous defined config.
I have:

[x] Written a clear PR title and description (above)
[x] Signed the Khan Academy CLA
[x] Added tests covering my changes, if applicable
[ ] Included a link to the issue fixed, if applicable
[x] Included documentation, for new features
[x] Added an entry to the changelog

@benjaminjkraft Thanks for the feedback. I updated the PR accordingly. I hope I understood your suggestion correctly.

@rmennes @benjaminjkraft -- this PR is exciting and looks to be the last key piece for excellent usability with my complex Hasura GraphQL schema for both queries and mutations (details in https://github.com/Khan/genqlient/issues/272#issuecomment-2244321789).

This is a great change. Looking forward to it.


Community marketplace switcher

As a user I want to be able to easily switch between different collections within a community marketplace (eg. Gmoney community https://www.gmoney.market/)
Acceptance Criteria:

Remove search bar from community marketplaces with 2-10 communities (replace with collection switcher)
Keep search bar for communities with more than 10 communities (eg. Artblocks community)
Support collection navigation alongside external nav links

Figma designs:
https://www.figma.com/file/viovJLYOfUuB6TnW67qF5N/reservoir?node-id=1183%3A48752

[ ] Automatically close menu when user selects a collection from menu
[ ] Use H6 font style for top navigation and collection menu so that when a custom is being used it applies here

Ready for staging


Downcase header names in Events that PostAgent emits

HTTP header names are case-insensitive and they may vary depending on FARADAY_HTTP_BACKEND, so downcase them for the ease of using.
As you can see in this failure, the net_http backend downcases response header names whereas the typhoeus backend does not.

Makes sense to me, do you know why we support multiple faraday backends, can't we just use the one which has the most features?

@dsander I guess the adoption of Faraday allows us to avoid lock-in to a specific HTTP client library, and by making the backend a user option one can choose any library that meets one's needs: performance/scalability, stability, etc.

For me, typhoeus had an issue that leads to hang, so it was great I could easily switch to net_http that worked rock solid.  It might not scale well, but as I was the only user for the service and that was perfectly fine.

I see, never had issues with typhoeus, but I also do not have many agents that do web requests.

How likely do we think this is to break someone's flow that is dependent on a specific header case?

@cantino The default backend (typhoeus) preserves the cases, so it is highly likely this is going to break existing flows.  We could perhaps mitigate the breakage by adding some tweak to Liquid so hash key lookup is made case-insensitively, but I'm not even sure if it would not break other parts.

Is there any canonical form that most sites use, like Content-Type or CONTENT-TYPE, that we could normalize to?  I feel like 'Content-Type' is the most common?

Hmm so either way we can not be backwards compatible with for all users, right? I think Content-Type is the most common capitalization form, if we normalize to that we might break setups that use typhoeus with a website that does respond with CONTENT-TYPE.
Since HTTP headers are supposed to be case insensitive down-casing seems to be the most rational approach, but probably also breaks more setups then the other options.

@dsander I've been doing some pretty involved research on this (for other reasons) and the capitalization pattern /[A-Z][a-z].-[A-Z][a-z]./ seems to be the most prevalent.  As for how many clients internally normalize the headers' case, I honestly don't know.

I added a new option to configure how to normalize header names, and a migration to preserve backward compatibility while making the capitalized style the default for new agents going forward.
How does it look?

Nice! Looks good to me.

Looks good!


Use shared cheatcode factory

Use CairoSharedCheatcodeFactory to avoid duplicating code. Move factories to one file.

I am wondering if we should remove other factories overall - doesn't seem like we need cheatcodes to be separated (for now). And if it's not needed now, it'd be better to remove them, and just add them later.

I was thinking about it. We may need this distinction if we decide to reimplement fuzzing.


Firebase Notification IOS

Randomly notification stopped working on IOS.

Using firebase_messaging: ^6.0.16.

FirebaseAppDelegateProxyEnabled is set to "NO" & Tried with false too.

In didFinishLaunchingWithOptions

if (@available(iOS 10.0, *)) {
  [UNUserNotificationCenter currentNotificationCenter].delegate = (id<UNUserNotificationCenterDelegate>) self;
}

Tried with this method too

override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    Mixpanel.mainInstance().people.addPushDeviceToken(deviceToken) //For Mixpanel purposes, not needed if not using
    Messaging.messaging().apnsToken = deviceToken //*THIS WAS MISSING*
    super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) //Not sure if calling super is required, but did anyway
  }

I am using Channel stable, v1.17.5 version of FLUTTER
I am facing this issue from last 1 week, Notifications starts coming & breaks automatically, Showing notRegistered error on api side, please help.

I'm having the same issue.

Hi @luis-cruzt ,
I found the issue, to get fcm token use
Stream<String> fcmStream = _firebaseMessaging.onTokenRefresh;
    fcmStream.listen((token) {
      print("Refreshed Notifications Token: $token");
      SecurityManager securityManager = sl.get<SecurityManager>();
      securityManager.notificationToken = token;
    });

Now its working fine,

After running the app directly from xcode, the notifications came again.
First i ran flutter build ios
And then opened xcode and ran the build.
Everything is working again finally.


remove semicolons.

Thanks for this. If you can click through on the CLA, I can merge!

@googlebot I signed it!


Update pip-compile call

Updates the pip-compile call.

What does this do?

What does this do?

@samuelcolvin  has the details.

@theunkn0wn1 If you tell me the details, we can speed up here.

Resolves the GHSA I filled on pydantic/pydantic.
The pip compile call with default parameters is insecure and already caused an incident.


NavController Lifecycleevents-table

Hey Community!
I found a layout-problem here at the table for the Lifecycleevents:
http://ionicframework.com/docs/v2/api/navigation/NavController/

Greets,
Bernhard

I was about to post this as well.

Thanks! Closing as a duplicate of #885. :Smile:


MF-466 - ARM docker deployment

Signed-off-by: Ivan Milošević<EMAIL_ADDRESS>What does this do?
Docker deployment for arm32v7, compatible with MFX-1 gateway
Which issue(s) does this PR fix/relate to?
Resolves #466
List any changes that modify/break current functionality
Have you included tests for your changes?
Did you document any new/modified functionality?
Notes

Codecov Report

Merging #756 into master will increase coverage by 0.23%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #756      +/-   ##
==========================================
+ Coverage   84.94%   85.17%   +0.23%
==========================================
  Files          69       69
  Lines        4449     4412      -37
==========================================
- Hits         3779     3758      -21
+ Misses        443      436       -7
+ Partials      227      218       -9

Impacted Files
Coverage Δ

things/postgres/things.go
78.91% <0%> (-2.59%)
:arrow_down:

things/postgres/channels.go
78.94% <0%> (-0.12%)
:arrow_down:

things/api/http/transport.go
98.19% <0%> (+1.63%)
:arrow_up:

writers/cassandra/init.go
85.71% <0%> (+14.28%)
:arrow_up:

things/api/http/requests.go
96.15% <0%> (+18.73%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update c8979ac...637bf62. Read the comment docs.


Sorting Algorithm

#1 Added some sorting algorithms.
Hope you like it.

Keep contributing 👍

Thanks for merging.
Can you please tell me the changes?
I will remember those  before making another PR.

Like there are bunch of things you can consider

Adding some link to documentation and examples related to that so that new comers can easily get that thing
Add comments in between code wherever needed so it is easy to understood
Add more spacing between codes to look it bit more nicerer

Also you can check out my README PROFILE i have designed it whole myself . Do star it ...

@all-contributors please add @lucy2512  code

@all-contributors please add @lucy2512   code


Update unequivocal-ams for Typst 0.12.0

Fixed deprecations (context, paragraph spacing)
Fixed block spacing of figures and bibliography (changing to #set par(spacing: ...) seems to have changed all block spacing to match paragraph spacing, which is short in this template)
Switched to show rule on figure.caption for figures
Used std.bibliography
Fixed figure alignment for theorems

Fixes unrelated to Typst version:

Fixed theorems not having a space between Theorem 1.1. and Theorem title.

Adding a block around a figure is a bad idea. I'll be fixing this first.


Add Notifications and Notifications Dashboards to 2.1 manifest

Signed-off-by: Mohammad Qureshi<EMAIL_ADDRESS>Description
Add Notifications and Notifications Dashboards to 2.1 manifest
Issues Resolved
List any issues this PR will resolve, e.g. Closes [...].
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

Merging #2243 (b0b94e7) into main (a252bed) will increase coverage by 5.43%.
The diff coverage is n/a.

@@              Coverage Diff              @@
##               main     #2243      +/-   ##
=============================================
+ Coverage     94.56%   100.00%   +5.43%
=============================================
  Files           205         6     -199
  Lines          4254       105    -4149
  Branches         29        19      -10
=============================================
- Hits           4023       105    -3918
+ Misses          225         0     -225
+ Partials          6         0       -6

Impacted Files
Coverage Δ

...ests/jenkins/jobs/AssembleManifest_tar_Jenkinsfile

src/manifests_workflow/component_opensearch.py

...ts_workflow/component_opensearch_dashboards_min.py

src/test_workflow/integ_test/service.py

src/ci_workflow/ci_check_list.py

src/sign_workflow/sign_args.py

src/test_workflow/integ_test/service_opensearch.py

src/test_workflow/test_component.py

tests/jenkins/jobs/UploadToS3_Jenkinsfile

...c/test_workflow/dependency_installer_opensearch.py

... and 189 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update a252bed...b0b94e7. Read the comment docs.

Hi @qreshi , can you resolve the merge conflict?
Thanks!


RELX_REPLACE_OS_VARS boot script fails on awk with env vars containing certain characters

we had an environment variable, export DB_PASSWORD='Pntu>x9hC<6&zX:e' that prevented the boot script from getting anywhere, freezing in this area
if [ $RELX_REPLACE_OS_VARS ]; then
    awk '{while(match($0,"[$]{[^}]*}")) {var=substr($0,RSTART+2,RLENGTH -3);gsub("[$]{"var"}",ENVIRON[var])}}1' < $SYS_CONFIG > $SYS_CONFIG.2.config
    SYS_CONFIG=$SYS_CONFIG.2.config
fi

source on GH
changing to another password fixed the script and got our app up and running.

Interesting, I'll have to dig in to awk a bit to figure out why it's choking on that string. Thanks for reporting!

Just had this happen with another password. Seems like the bad character is the &

@novaugust I fixed this in distillery, but haven't yet ported the fix to exrm. You can see the commit where I did so referenced above. I'll push the fix to exrm as soon as I'm able.


insertion sort in cpp

Description
To show insertion sort in Cpp language via documentation

Domain of Contribution 📊

[ x] C/CPP

/assign


PassesNot doesn't work as expected

Hi, I was trying to analyze the following one line python code.
cur111.execute(BeautifulSoup(cp.request.params["keyname"]))
I define the source as the call with code that contains "cp.request.params"; sink as "execute" and sanitizer as "BeautifulSoup"
After I run the joern sql to check the results for them all.  The result for all three is:
List(
148L,
"cur3.execute(BeautifulSoup(input()))",
List("./snippets/py-test/c1.py"),
Some(value = 33)
),
When I run: sink.reachableBy(source), the result includes the 148L as expected. So far so good.
But when I run: sink.reachableBy(source).passesNot(sanitizer), the result has the 148L as well. I think this is quite confusing. Since source, sink, and sanitizer all contain 148L. Why does the result tell the opposite that it does not flow through 148L.
Is this a bug?

@yzn12345 Could you share the def statements for source, sink, and sanitizer?


home: add activationExtra option

I have added the option home.activationExtra. With this option the user can run arbitrary scripts during activation time like for example copying some private files which should not be added to the nix store.
I hope that I added the new option in the right place, please correct me if I'm wrong!

I think the travis build failure originated by a network issue.. Maybe someone could restart the build?

Thanks for the contribution! Unfortunately I'll decline this since users should use home.activation directly. The suitable solution for exposing this to users would be to add a description of home.activation usage in the documentation.
I've been working a bit on simplifying home.activation and giving it a proper type and will then also document its use. I'm a bit busy at the moment but might be able to finish this up before too long.

That would be a more flexible solution. I'm looking forward to this feature!


Add support for quoted actors with special chars.

This make possible to use special characters for actor names, but with this quotes will break actors.
I also need a way to handle quotes in quotes, and whitespace, but I wanted you to review as it is the first time I work in a parser.
This resolves #107.

@bramp any thoughts on it?

This looks good. Thanks for the change, and sorry for the delay!


[BXMSPROD-1190] - Upgrade PME

Thank you for submitting this pull request
JIRA: BXMSPROD-1190
referenced Pull Requests: (please edit the URLs of referenced pullrequests if they exist)

https://github.com/kiegroup/kie-jenkins-scripts/pull/1007

Jenkins retest this

jenkins retest this please

if @winklerm agrees we can merge


Bootstrap command not found after upgrade

Description
I updated to the new version v0.4.9, and now I get this error when using the command. Checking the available commands, bootstrap does not appear in the list. Is there anything additional to install, or any changes related to this?
running reward bootstrap

running reward

running reward info

Edit 1
In existing projects, the command is available.
┌🦁 leoner in 📁 magento-test on 🌿 TEST-123 •3 ⌀1 ✗
└❯ reward
 ██▀███  ▓█████  █     █░ ▄▄▄       ██▀███  ▓█████▄
▓██ ▒ ██▒▓█   ▀ ▓█░ █ ░█░▒████▄    ▓██ ▒ ██▒▒██▀ ██▌
▓██ ░▄█ ▒▒███   ▒█░ █ ░█ ▒██  ▀█▄  ▓██ ░▄█ ▒░██   █▌
▒██▀▀█▄  ▒▓█  ▄ ░█░ █ ░█ ░██▄▄▄▄██ ▒██▀▀█▄  ░▓█▄   ▌
░██▓ ▒██▒░▒████▒░░██▒██▓  ▓█   ▓██▒░██▓ ▒██▒░▒████▓
░ ▒▓ ░▒▓░░░ ▒░ ░░ ▓░▒ ▒   ▒▒   ▓▒█░░ ▒▓ ░▒▓░ ▒▒▓  ▒
  ░▒ ░ ▒░ ░ ░  ░  ▒ ░ ░    ▒   ▒▒ ░  ░▒ ░ ▒░ ░ ▒  ▒
  ░░   ░    ░     ░   ░    ░   ▒     ░░   ░  ░ ░  ░
   ░        ░  ░    ░          ░  ░   ░        ░
                                             ░

Usage:
  reward [command] [flags]
  reward [command]

Environment Commands:
  bootstrap        Install and Configure the basic settings for the environment
  db               Interacts with the db service on an environment
  debug            Launches debug enabled shell within current project environment
  env              Controls an environment from any point within the root project directory
  shell            Launches into a shell within the current project environment
  sync             Manipulate syncing

Global Commands:
  env-init         Create the .env file
  info             Print out information about the environment
  install          Install required configurations
  self-update      Checks if new version exists and updates itself
  sign-certificate Create a self signed certificate for your dev hostname.
  plugin           Provides utilities for interacting with plugins
  svc              Orchestrates global services such as traefik, portainer and dnsmasq via docker-compose

Shortcuts:
  restart          Shortcut target: "env down ; env up"
  sync-restart     Shortcut target: "sync stop && sync start"
  up               Shortcut target: "svc up && env up"
  down             Shortcut target: "env down ; svc down"

Additional Commands:
  completion       Generate completion script
  version          Print the version information
  help             Help about any command

Flags:
      --app-dir string       app home directory (default "/home/omnipro/.reward")
  -y, --assume-yes           Automatic yes to prompts.
  -c, --config string        config file (default "/home/omnipro/.reward.yml")
      --debug                enable debug mode (same as --log-level=debug)
      --disable-colors       disable colors in output
      --docker-host string   docker host (default "unix:///var/run/docker.sock")
      --driver string        orchestration driver (default "docker-compose")
  -h, --help                 help for reward
      --log-level string     logging level (options: trace, debug, info, warning, error) (default "info")
      --print-environment    environment vars
      --skip-cleanup         skip cleanup of temporary files
  -v, --version              version for reward

Use "reward [command] --help" for more information about a command.

┌🦁 leoner in 📁 magento-test on 🌿 TEST-123 •3 ⌀1 ✗
└❯ reward info
+---------------------------+----------------------------------+
| INFO                      |                                  |
+---------------------------+----------------------------------+
| Reward version            | 0.4.9                            |
| Docs                      | https://rewardenv.readthedocs.io |
+---------------------------+----------------------------------+
| Global Services           |                                  |
+---------------------------+----------------------------------+
| phpmyadmin                | https://phpmyadmin.reward.test   |
| mailhog                   | https://mailhog.reward.test      |
| elastichq                 | https://elastichq.reward.test    |
| traefik                   | https://traefik.reward.test      |
| dnsmasq                   | https://dnsmasq.reward.test      |
| tunnel                    | https://tunnel.reward.test       |
+---------------------------+----------------------------------+
| Environment               |                                  |
+---------------------------+----------------------------------+
| Environment status        | Running                          |
| Environment address       | https://magento-test.test             |
| Admin URL                 | https://magento-test.test/admin       |
| Db Container Name         | magento-test-db-1                     |
| Redis Container Name      | magento-test-redis-1                  |
| Opensearch Container Name | magento-test-opensearch-1             |
+---------------------------+----------------------------------+

Specifications

Docker desktop with WSL2
Ubuntu 22.04

Hi @Mr-Leonerrr ,
that's the expected behaviour from 0.4.x. The environment related commands are only available when the environment is initialized (.env file can be found in the current directory).

Hi @Mr-Leonerrr ,
that's the expected behaviour from 0.4.x. The environment related commands are only available when the environment is initialized (.env file can be found in the current directory).

You are right, thank you very much for the clarification, creating the .env the command appears, sorry for the inconvenience. 😁


Error when html formatter tries to render error

Summary
When Cucumber::Formatter::Html tries to render an error where snippet_for goes to the else-branch (line 581)
https://github.com/cucumber/cucumber-ruby/blob/84bc859a62220290383a0a8c80ebf6820a426b4c/lib/cucumber/formatter/html.rb#L575-L583
it returns a frozen string (because of frozen_string_literal: true). When the syntax gem is not installed, modifying the frozen string in the snippet-method (line 571) raises an error (can't modify frozen String).
https://github.com/cucumber/cucumber-ruby/blob/84bc859a62220290383a0a8c80ebf6820a426b4c/lib/cucumber/formatter/html.rb#L568-L573
Possible Solution
Either highlighted += "..." to copy the frozen string instead of mutating it, or [String.new("# Couldn't get snippet for #{error_line}"), 1] in snippet_for to create a mutable string from the start.
I would have submitted a PR, but couldn't find an easy way to add a regression spec for this.
Steps to Reproduce (for bugs)
This is hard to reproduce, because I'm not sure how to reliably trigger the else-branch in snippet_for. It happened on our CI, as well as locally, and was connected with timeouts from poltergeist-gem.
Your Environment

Version used: 3.1.0 (but every version with frozen_string_literals: true is affected)

This is still relevant.

I see it consistently when hitting a particular kind of error with Watir, usually when an element is not clickable at (x,y) because of an unexpected modal dialog or some-such.
I've been able to replicate it by simply adding
raise(Selenium::WebDriver::Error::UnknownError.new('something something')
into a step definition.

I'm am seeing it consistently as well when the button is visible but not enabled. I see the error below then the can't modify frozen string. Causes my subsequent tests to fail. Installing syntax gem is a work around to fix the error.
Stack trace showing
~/.rvm/gems/ruby-2.4.1/gems/cucumber-3.1.0/lib/cucumber/formatter/html.rb:571:in 'snippet'
element present, but timed out after 30 seconds, waiting for #<Watir::Button: located: true; {:class=>"qa-forward-stepper", :tag_name=>"button"}> to be enabled (Watir::Exception::ObjectDisabledException)

@newtewt, would you be able to create a mcve app to demonstrate this particular issue? I've been working on some specs but have not been able to reproduce this issue, even when snippet is passed an error with a frozen string. i.e.
describe Html::SnippetExtractor do
  describe '#snippet' do
    let(:instance) { Html::SnippetExtractor.new }

    context 'when the error string is frozen' do
      context 'the error line doesnt end with a colon and a line number' do
        let(:error_line) { 'path/to/file'.freeze }
        let(:error) { [error_line, nil] }

        it do
          expect { instance.snippet(error) }.to raise_error
        end
      end
    end
  end
end

(Note: Ideally, this spec will fail - once it does, I can work on patching it so that it doesn't).

Html::SnippetExtractor.converter has to be a NullConverter to trigger the mutation of the frozen string, the error_line itself does not have to be frozen.

Thanks @fschwahn! I'll take a look and see what I can do.

Thanks again, @fschwahn. I can't believe I missed that!

(Cool find, fschwan!)

Hi here! What is the status of this one? I'm having this kind of errors very often :( cc @xtrasimplicity

Hi @aidamanna, this feature was released as part of Cucumber v3.1.1. Have you tried using this version?

Nop, but I will now. Thanks a lot!!!

@aidamanna Not a problem. Let us know if you have any issues.


repeated code in function renderScene() from "02 - Draw a Pyramid; Keyboard Interaction/src/main.cpp"

Fixed the issue, any more problems let me know.


Select box doesn't work in modal and in IE11

Bug description:
If you place a select element in a modal dialog (opened with the help of $modal) it works in all browsers I tested on Windows 8 and 8.1 except IE11.
Using these browsers the plunker below works well:

Firefox ESR 38.7.1
IE10
Chrome 50.0.2661.87 m

In IE11 it isn't happened anything, the select box doesn't respond on any event (mouse-over, click ...)
Link to minimally-working plunker that reproduces the issue:
http://plnkr.co/edit/hDYTAIfkczkYdwuz9ljo?p=preview
Click the button to open the modal and choose a color in the select box.
Version of Angular, UIBS, and Bootstrap
Angular: 1.5.3
UIBS: 0.13.3
Bootstrap: 3.3.6

Are you sure this is a UI Bootstrap issue and not an Angular one proper?

Not really sure, but i wasn't able to reproduce it without an UI Bootstrap Modal directive.

I updated the plnkr to angular-bootstrap 1.3.2
(Unfortunately plnkr offers old versions only in its libraries function)
Using this up-to-date version seems to fix the problem in IE11.
Look at http://plnkr.co/edit/hDYTAIfkczkYdwuz9ljo?p=preview again.

@elutz in the future, you can use our Edit in Plunker links from our demo page to get you started.  Those are typically the latest versions of everything.


make a 1.18.2 version please? i wanna add it to my modpack :D thank you very much!

Describe the Suggestion
yeah, i really need to add it to my modpack... have a nice day :D
Screenshots and Videos
No response
Additional Context
No response

Unfortunately 1.18.2 is missing quite a few features that I need, and is also not being supported by Create anymore. I highly recommend updating your modpack to a newer version.


Investigate security considerations on the local file storage

The URI resolution scheme for the file system can have some important risk implication.
We also want to handle file:///var/local and the incorrect but common file://var/local format.
We need to make sure someone cannot access files that are not under the root directory using the "../" schemefor instnace.
Generally speaking: we should put some thoughts in it.

(As far as I could tell #61 is not solving this bug.)

We also want to handle file:///var/local and the incorrect but common file://var/local format.
file://var/local currently works but var/local is interpreted as a variable path.
I think we can consider that file://var/local be the same `file:///var/local'

Concerning security issues on path, I think we can simply ban the use of ... We accept only absolute path without parent directory so that when we manipulate path inside quickwit there is no suprise.


How is the motion classifier trained?

The recognition accuracy of real motions in the paper is very high (over 99% on HumanAct12 and NTU-RGB-D). However, STGCN only achives accuracy over 80% on NTU-RGB-D. I'm wondering how the motion classifier is trained.

I also want to know this. I'm wondering if author can provide the code for training the classifier based on my own datasets.


BooleanFilter allows '2' and '3' values

NullBooleanSelect allows it and I suppose that it should not be allowed.

Yes, that's very annoying. BooleanFilter used Django's NullBooleanField whose widget NullBooleanSelect corresponds 1/2/3 to None/True/False. So only literal True/False works for a BooleanFilter but not 1/0 as its comments said. Wish it be fixed soon.

OK, I'm going to close this.
The docs say that the BooleanFilter matches True and False which is correct.
If you want additional/different logic for matching query parameters you need to create a custom widget and use that. Subclassing django.forms.widgets.NullBooleanSelect seems like the way to go.
You'd need to override value_from_datadict to match the values you want in the manner you want. The implementation there is fairly straight-forward:
    def value_from_datadict(self, data, files, name):
        value = data.get(name, None)
        return {'2': True,
                True: True,
                'True': True,
                '3': False,
                'False': False,
                False: False}.get(value, None)

... adjust the map for the behaviour you require.
I don't really see this as being in scope for Django-Filter; it's pretty easy to create your own widgets and if the behaviour of NullBooleanSelect is wrong then that's a Django issue, which should be taken up there.
If somebody comes up with a tested, documented pull request for a custom widget that covers all the bases I'm happy to consider it for Django Filter at that time.

Btw, #378 should fix this (allows all capitalizations of true/false, as well as mapping 1: true, 0: false)


IGNITE-11711 Check availability of link UI element by link in list of…

… available.

The ticket is resolved, closing PR.
Please close PRs for your resolved tickets and other non-needed PRs.
Alternatively, ask a committer

to use GitHub UI (committer can associate accounts here: https://gitbox.apache.org/setup/ )
or /scripts/apply_pull_request.sh from Apache Ignite source.
or mention in commit message 'Fixes #(a number of PR)'.

These methods will automatically close PR.
Feel free to reopen this PR if it is actual.


Remove gaps in the progress bar.

Summary
Since we changed the progress bar to improve accessibility we also added gaps in between the individual blocks. Adding a background color that is the same as the foreground color should get rid of those gaps.
Before:

After:

This may not work if people have different background and foreground colors but I'd recommend just shipping this and then seeing if people run into this.


TCP socket begins to use improper window size

During analysis of wireshark traffic, it was noted that one of our TCP connections began using a window size much smaller than what the peer reported as available. Specifically in this case, the peer has a window size of 64KB, but smoltcp segments TCP messages into 63 bytes.

Above, you can see that at the start of the connection, smoltcp fits messages of >100 bytes into a single packet, as it notes that the window size is ~64KB.
However, then shortly later, a different socket (on the same interface) that was present on the peer, but is not registered in smoltcp (laying around from previous boot) gets cleaned up by the peer by sending a FIN-ACK. This socket had a window size of 63. Smoltcp then sends a RST to that connection, but then all subsequent communications on the new connection use a window size of 63 bytes instead of the correct window of ~64KB.

Interesting! Can you reproduce this every time? Can you post the .pcap and smoltcp verbose logs, if possible?

I only noticed this during a review of pcap files sent to me - I have not encountered this personally, so I do not know what the reproduction steps would be.
Here's the relevant section of the PCAP
incorrect-window-size-adjustment.zip

I see! Just to confirm, the MQTT payload in the last packet is incomplete, and communication stalls after that?
I guess then smoltcp waits forever for the ACK for the window to open up more, and the PC waits forever for the packet to complete? Why doesn't the PC ACK it? the packet looks valid.
Are you using master or 0.7.5?
63 is the unscaled window length, so the bug is probably scaling not being applied correctly for whatever reason.

Maybe it doesn't ACK it because t

For clarity - this bug is not the connection stalling. This bug is purely that smoltcp began to segment up our TCP packets because it erroneously believed the window size was small.
The connection stalling"" issue I linked has a different root cause that is unrelated to smoltcp (the connection is fine, our scheduler is just wrong, so it wasn't sending anything out)

are you on commit 027f255f904b9b7c4226cfd8b2d31f272ffa5105? there's been a few window scaling fixes since then: #500

Yes, we're likely tracking behind master due to the lockfile - we don't regularly update smoltcp - I'll try doing a dependency update and see if that resolves things. Thanks for the feedback!

Ack. I think I'm seeing (in stabilizer-fls) that this is fixed in current smoltcp.

Closing as this seems fixed, feel free to open more issues if not.


landing page jitter on mobile view

When scrolling the homepage on a mobile device I have noticed that there is a jitter that happens as the page tries to show the back to top arrow on the header of the file.
https://github.com/robherley/snips.sh/assets/24482028/2af2c660-a970-481d-9b5e-aff3c2dc20d2

will look into it 🫡
the js scroll logic is kinda jank, maybe a better idea to use an IntersectionObserver


Section "Integrating hyperion into your system"

Hi! This section is just written "ToDo" and I believe it is one thing that is missing for me to conclude the installation. I am sorry to use this way here to ask it but no other places and forum can help on this...
I compiled Hyperion.ng on my OSMC Raspberry 3B+ and the service is not created to start on boot. Also I tried to run "install_hyperion.sh" but it says "Critical Error: CPU information does not match any known releases"
How can I make hyperion.ng start on boot as a service!?
1. Tell us something about your changes.
2. If this changes affect the .conf file. Please provide the changed section
3. Reference an issue (optional)
Note: For further discussions use our forum: forum.hyperion-project.org

@bajiomeke Please ask your questions in the forum and not here in the PR area. Thank you.
@WoLpH close?


Seeking not working in Firefox for some streams

I'm having issues with the following stream in Firefox. It plays fine, but if I try to seek ahead it will stop and I can't restart it. It buffers the video, just doesn't play it.
https://wowza.arclearn.com/ArcLearn/smil:I_ENT472.ism/manifest.mpd
This stream at the same server does not have the same problem:
https://wowza.arclearn.com/ArcLearn/smil:I_TESTVIDEO.ism/manifest.mpd

@mattcoz: which version of Firefox are you testing and on which OS? I can seek in the I_ENT472 mpd with both Firefox 42 and Nightly 45 on OS X. I do see a lot of buffering delays (and Shaka's "Pac-Man" spinner), but I think that is a problem with the video encoding because I see that with Chrome, too.

@cpeterso Tested in 42 and 45 Nightly on Windows 10 and 42 on Windows 7, can’t seek past around 20 seconds in and it freezes if I let it play that long. Tested in 42 on OSX 10.11, can seek and play fine. The buffering delays look to be a performance problem with our server, we’re looking into it.

I can now reproduce with Firefox 45 on Windows 8. I think this is a Firefox bug, not a Shaka Player bug, because I can reproduce the seek problem when playing this mpd in other DASH players, such as Bitdash and DASH-IF.
@joeyparrish: I think you can close this bug report as "not a Shaka bug". I filed Firefox bug 1229592 to track this issue (and CC'd @mattcoz).

@cpeterso Thanks, Chris!


Fixed publish script

Next attempt to fix the publish script
It looks like the travis container uses different version of grep
which didn't support the previous regex

Hahah.  :+1:


✖ Nuxt Fatal Error

Hi, getting fatal error using  create-nuxt-app
Version
create-nuxt-app:    4.0.0
nuxt:   2.15.8
node: v14.18.2
vue: 2.6.14
Steps to reproduce
create-nuxt-app v4.0.0
Running npm init nuxt-app  with below option:
✨  Generating Nuxt.js project in test
? Project name: test
? Programming language: JavaScript
? Package manager: Npm
? UI framework: Vuetify.js
? Nuxt.js modules: Axios - Promise based HTTP client
? Linting tools: ESLint, Prettier, StyleLint
? Testing framework: None
? Rendering mode: Single Page App
? Deployment target: Server (Node.js hosting)
? Development tools: jsconfig.json (Recommended for VS Code if you're not using typescript)
? Continuous integration: None
? Version control system: Git
What is Expected?
After running npm run dev command, get started.
What is actually happening?

Thanks for reporting issue @artmarydotir. It should be fixed please recreate lockfile (package-lock.json)

Thank you, actually i did.
rm -rf node_modules/
rm package-lock.json
still got the same error.

Can you please check jiti version in node_modules/jiti/package.json? 1.12.12+ should be fine.

Can you please check jiti version in node_modules/jiti/package.json? 1.12.12+ should be fine.

Yes, its working. thank you.


list of supported models

Where can I find the list of supported models?

Hi,
There's no official list (work-in-progress), but the card is now fully customizable so you can make it fit any charger of your liking. I even use it to show some weatherdata and for my car. The idea is that (if people contribute) to make what I have baptized as templates to make it easy for people to configure different chargers just to avoid the hassle of doing the customization.

Closing due to no update - card is now fully customizable and should be possible to adapt to different chargers with some yaml-tweaking.


repo key password not recognized in 0.6.0?

With release 0.6.0 installed locally, I set up content trust for my DTR (2.5.0-beta3) repo as follows:
notary init -p ${DTR_FQDN}:4443/demo/xyz

everything seemed to work perfectly; it asked me to generate key passphrases as usual. Then, when I pushed an image to DTR, it would not accept my passphrase for my repo key.
Everything worked correctly and as usual after installing release 0.4.3.
fyi:
[centos@ucp-manager-0 ~]$ uname -a
Linux ucp-manager-0 4.14.11-1.el7.elrepo.x86_64 #1 SMP Tue Jan 2 19:16:00 EST 2018 x86_64 x86_64 x86_64 GNU/Linux

@BillMills Which version of Docker are you using?

[centos@ucp-manager-0 ~]$ docker version
Client:
 Version:      17.06.2-ee-6
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   e75fdb8
 Built:        Mon Nov 27 22:43:51 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.06.2-ee-6
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   e75fdb8
 Built:        Mon Nov 27 22:45:16 2017
 OS/Arch:      linux/amd64
 Experimental: false

@BillMills Apologies, the key encryption format has changed as of 0.6.0, which is not forwards compatible with 0.4.3.  It should also have specified not forwards-compatible with Docker < 17.12.  So notary 0.6.0 can read keys generated using previous versions of notary and docker, but older versions of notary and docker cannot read keys generated by 0.6.0.
I'll update the changelog and release notes with the docker version.  Could you please continue to use 0.4.3 with 17.06.x docker?

Will do, thanks @cyli!


Explain graphically inputs needed for SBI

Show in a diagram the observation, simulator and prior, ideally indicating expected shapes.
Optional incorporate the density estimator (specifying it is a more advanced feature, the others are required).

yes-- we have tons of material on that from talks etc, @jan-matthis knows best.

We have a version in the sbi docs already:
https://www.mackelab.org/sbi/#motivation-and-approach

Awesome!

On 4. May 2020, at 22:40, jan-matthis<EMAIL_ADDRESS>wrote:
We have a version in the sbi docs already:
https://www.mackelab.org/sbi/#motivation-and-approach https://www.mackelab.org/sbi/#motivation-and-approach
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub https://github.com/mackelab/sbi/issues/151#issuecomment-623693548, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACB337Z2YQUVB73ZOD2XMFLRP4R4NANCNFSM4MYUIVEA.

@jan-matthis the discussion back then was that, for simplicity, we wanted something leaving the internals aside, that's why this issue exists.

I think this is simple enough, at least for now — of course we might want to have different explanations for different audiences later.
Sent from my phone

On 4. May 2020, at 23:45, meteore<EMAIL_ADDRESS>wrote:

@jan-matthis the discussion back then was that, for simplicity, we wanted something leaving the internals aside, that's why this issue exists.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.


[BUG]: Warnings Reported In the Console over Content Security Policy

What happened?
So, this is a really strange issue I can't figure out. It doesn't seem to be impacting the functionality of the components but it does seem to be preventing me from destroying the stripe elements in an on unmount or on destroy hook:
  beforeDestroy() { this.card?.destroy() },
The above code block is never reached by the application after this warning prints to the console. It appears to be affecting the thread of execution or initialization of all logic for the component. This is a Nuxt application (the error occurs in both v2 and v3 of Nuxt, in every rendering mode I've tested thus far).
I am working on a Windows computer which is the only difference between my last round of testing and today. What I am seeing that is different is what kinds of iframes stripe is mounting when I initialize it on this payment update page.

Previously, there was no "hcaptcha" component in my last round of testing and this new iframe appears to be associated with the following report warning:

When I manually remove the hcaptcha in devtools, and then navigate back to a component with a stripe input, I don't see the error. We don't use hcaptcha, we use recaptcha, and this component and error appears to be originating from the stripe initialization, it isn't there before we load stripe, it is there directly after. The error references the hcaptcha script when it prints to the console.
This is in the latest version of stripe-js, but I tried to move back the current version to see if that would make a difference and it does not. Can anyone tell me what might be going on here?
Environment
Windows 11 - both Edge and Chrome
Reproduction
No response

Would you be able to share a minimal repro of this on something like CodeSandbox or JSFiddle etc? Fine to hardcode test values for anything that would come from a server.
Its possible there's a CSP gap to investigate & resolve here.

+1

I will try to reproduce it!

Exact same console errors just popped up in my nuxt3 + stripe.js app last night. Using stripe address and payment elements from vue-stripe-js in my checkout page. FWIW, chrome just had a new release that contained several updates re: CSP.
Stackblitz repro below (likely need to open checkout page in new tab, 'connect to project' and then reload tab to see the  CSP console errors):
https://stackblitz.com/edit/github-rjxzbw-7zenhc?file=pages%2Fcheckout.vue&view=editor
https://githubrjxzbw7zenhc-1end--3000--a2aabdd9.local-credentialless.webcontainer.io/checkout

Hey folks, thanks for the reports here!
This should now be resolved after investigation and fix last week. Please let us know if you continue to see these!


CIDs must not be reused without rotating the stateless reset key

Quinn presently uses randomized connection IDs and a stateless reset key set at startup. Stateless reset tokens are no longer secret once used, so if an on-path attacker is able to observe two connections that reuse the same ID, they might be able to interrupt the second connection.
To prevent this, Quinn should remember previously issued CIDs, and generate a new stateless reset key for use with future connections whenever the set of previously issued CIDs grows large enough that storage or duplicate-avoidance becomes unreasonably expensive.
The odds of a CID ever being reused are low--astronomically low, if CIDs use the default 8-byte length rather than the minimum--so the threat is limited, even for long-running servers.

An encrypted counter, so the information is not leaked to every observer, is a possibility. Just rotating the stateless reset key every N connections shouldn't be unreasonably difficult, though.


[TS migration] Migrate 'WorkspaceBills' page to TypeScript

Details

[TS migration] Migrate 'WorkspaceBills' page to TypeScript
Fixed Issues

$ https://github.com/Expensify/App/issues/25204
PROPOSAL: N/A
Tests

[x] Verify that no errors appear in the JS console

Open the app and login
Go to Settings -> Workspaces -> open existing Workspace or create a new one
Tap on the Bills menu item
Make sure the Bills page looks and works the same way as before. Check that Manage your bills section have a correct domain in the email address and Bank Account section looks as expected.

Offline tests

N/A
QA Steps

[x] Verify that no errors appear in the JS console

Open the app and login
Go to Settings -> Workspaces -> open existing Workspace or create a new one
Tap on the Bills menu item
Make sure the Bills page looks and works the same way as before. Check that Manage your bills section have a correct domain in the email address and Bank Account section looks as expected.

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

@mountiny while working on this migration, I discovered a bug related to endless loading on the Workspace Bills page.
Steps to reproduce:

Open the app and log in
Go to Settings -> Workspaces -> open any Workspace without connected Bank Account
Open Bills page
Tap on the Connect bank account button
Tap back button on the Connect bank account page
You will be navigated to the Bills page, where endless loading will appear

Recording:
https://github.com/Expensify/App/assets/23176449/eb67ca06-058d-410a-9f59-5f853db6150c
Reason:
ReimbursementAccount is cleared out on ReimbursementAccountPage unmounting
https://github.com/Expensify/App/blob/cc64de9ff6cb556927821ab84c9ddf491be91437/src/pages/ReimbursementAccount/ReimbursementAccountPage.js#L281-L283
So isLoading in the WorkspacePageWithSections is turning into true by default
https://github.com/Expensify/App/blob/cc64de9ff6cb556927821ab84c9ddf491be91437/src/pages/workspace/WorkspacePageWithSections.tsx#L92

@VickyStash thank you! Would you like to report this in expensify-bugs and once issue is created if you already know how to fix it you can raise a fix too

The bug I mentioned got fixed after merging main by this PR 🎉

@VickyStash On Android, the Bills Page keeps loading. Is it working fine in your end?
https://github.com/Expensify/App/assets/25876548/dc93001f-4c21-4a2b-ae27-507f50d14beb

Oh yes. It's tested well with another account.
https://github.com/Expensify/App/assets/25876548/0559c3cd-a214-4258-b183-fc0f62f1b652

🚀 Deployed to staging by https://github.com/mountiny in version: 1.4.35-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/mountiny in version: 1.4.35-7 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅


Add option to style external links

This re-enables styling of external links if a new theme config option style_external_links is set to True (defaults to False for old, unstyled behavior)
Rendered result:

Fixes #427.
Implementation note: This PR adds a CSS class to a div that contains the main content depending on the theme option. It might have been cleaner to conditionally include the CSS style rule only if the theme option is set, but I couldn't get the templating to apply to CSS.

:+1: looks good.

So how can I make this option work for me?
I have python-sphinx 1.6.5 = stable
I have sphinx_rtd_theme = https://github.com/rtfd/sphinx_rtd_theme/tree/master/sphinx_rtd_theme
but when I run "make html" for python-sphinx, I get:
Theme error:
unsupported theme option 'style_external_links' given

Believe the CSS wasn't properly built, and the logic wasn't correct :)
This should fix it: v

still getting the same error. I am not an expert. I have done:
git clone https://github.com/rtfd/sphinx_rtd_theme.git -b fix-external-display
but using

this pull request as sphinx_rtd_theme
in conf.py:

html_theme_options = {
...
'style_external_links': True
...
}

$ make html

I get:

preparing documents...
Theme error:
unsupported theme option 'style_external_links' given
make: *** [html] Error 1

Any comment?

@kassbohm Should work with the latest changes in master if you clone and pip install in editable mode. Or you can wait until the next release.

@jessetan I downloaded the latest master just now. I do not know, what you mean bei "in editable mode".
I copied the latest master and pointed to it in the conf.py file by:
html_theme = "sphinx_rtd_theme"
html_theme_path = ["_themes", ]
but I still get the error message:
Theme error:
unsupported theme option 'style_external_links' given

You can clone and do pip install -e . in that directory

@jessetan Great. Thanks. All done.

@jessetan Hi once more. I am using 'style_external_links': True now, but I get unexspected results:

:target: produces the extra-styling.
.. figure:: ./1.8.A/1.8.A.png
:width: 199px
:target: 1.8.A/index_en.html

<EMAIL_ADDRESS>produces the extra-styling.

Both is not as intended, is it?

Sphinx treats all images and figures with a URL as target as an external link, even if that URL is internal. If you want to link the figure to an internal page or section, you should add a an internal target like so:
.. _my-header:

This is my header
=================

And then your image can link to it using:
.. figure:: ./1.8.A/1.8.A.png
    :width: 199px
    :target: my-header_

For email addresses, we can not suppress the external link icon, because docutils/Sphinx does not make a distinction between email addresses and regular urls. I would argue that you could see it as an external link, since clicking it will open a new window to compose the mail.

@jessetan thanks. Thanks a lot. But:This internal URL works only, if target and target reference is in the same file... I checked the Sphinx-documentation, but I cannot figure it out. Any help... I would like to have target and target reference in two different files...

I think this is a shortcoming of docutils. Sphinx could implement this, but it doesn't. I've filed sphinx-doc/sphinx#4351, but I don't think there is anything we can do in the theme apart from suppressing the external link icon for all image links.


Make local testing of the code base more reliable and reproducible (tox?)

Based on my experience trying to contribute some minor bugfixes to mkdocstrings, I faces a set of barriers which should be considered as they are likely to deter others from contributing.
Despite the fact that the project is a pure-python project, is not using tox for its testing. Instead it is using a combination of pdm and make. I installed pdb just to find out that the tool was crashing on my system due to a 2 months old bug https://github.com/pdm-project/pdm/issues/1510 - this required few more hours to engage with these projects to fix that part.
After that, I realised that even running make check (supposedly linting) was failing even on the clean cloned code:
ssbarnea@m1: ~/c/os/mkdocs/mkdocstrings master
$ make check
> Currently selected Python version: python
> pdm run duty check-quality check-types check-docs (python3.7)
✗ Checking code quality (1)
  > flake8 --config=config/flake8.ini src tests duties.py docs
  src/mkdocstrings/loggers.py:1:1: FA100 Missing from __future__ import annotations but imports: Optional, Tuple
  src/mkdocstrings/extension.py:1:1: FA100 Missing from __future__ import annotations but imports: Tuple
  src/mkdocstrings/plugin.py:1:1: FA100 Missing from __future__ import annotations but imports: List, Optional, Tuple
  src/mkdocstrings/inventory.py:1:1: FA100 Missing from __future__ import annotations but imports: List, Optional
  src/mkdocstrings/handlers/rendering.py:1:1: FA100 Missing from __future__ import annotations but imports: Dict, List, Optional
  duties.py:1:1: FA100 Missing from __future__ import annotations but imports: List, Optional

> Restored previous Python version: python
make: *** [check] Error 1
FAIL: 2

I happen to know that this is caused by the fact that I i have several plugin installed in the local copy of flake8.
$ flake8 --version
3.9.2 (flake8-darglint: 1.8.1, flake8-docstrings: 1.6.0, pydocstyle: 6.1.1, flake8-future-annotations: 1.0.0, mccabe: 0.6.1, pycodestyle: 2.7.0, pyflakes: 2.3.1)
CPython 3.11.0+ on Darwin

My expectation what that the use of make/pdm was to ensure a reliable local testing experience, but apparently they don't make any use of virtualenvs for runnings tests.
So, I would likely want to suggest consideration of using tools that produce reproducible results like pre-commit and tox as uploading changes to GHA to test code or even lint, makes contribution harder.
Basically in less than a day I found to notable technical barriers in contributing and I do not know if these are the only ones. At least the human interaction was very pleasant so far.
I know that in the end, each maintainer has the freedom to choose his own poison, but I raised this in order raise awareness. I am curious if I am alone with my view or others faces similar challenges trying to hack the code.

Apparently pdb problems are not done, initial fix was incomplete, still chokes with 3.11-dev

I'm sorry that you had a bad experience contributing to mkdocstrings :confused: I definitely don't want that for contributors. And I thank you for expressing what you experienced in a calm and constructive manner. This is really appreciated :slightly_smiling_face:
PDM does have issues, but they're most of the time fixed very quickly by the maintainer, @frostming. I'll throw :rose: flowers at him :rose: (hey @frostming :wink:), and say that I've never seen someone maintain a project at such a fast pace. 871 issues and 582 PRs (most from him) closed in less than 3 years, that's more than one issue/PR per day!
Concerning your particular issue, I'd go ahead and guess too few users voiced concern about it, preventing @frostming from prioritizing it accordingly.
It is true as well that CI sometimes break for mkdocstrings (and my other projects). Tools get updated and I don't set upper bounds so sometimes there are new code quality (flake8, mypy) warnings, etc. I prefer that than spending much more time setting barriers and lifting them one after the other. I do try to fix any CI issue as quick as possible though :slightly_smiling_face: Sometimes I just don't have enough time to answer the same day or even the same week.
About your flake8 plugins leaking into PDM runs, that's indeed problematic. I hope PDM could fix it (if that's a confirmed bug), or that you could isolate your flake8 installation, with pipx maybe:
pipx install flake8
pipx inject flake8 plugin1 plugin2 etc

I don't use virtualenvs myself indeed (except for quick one-off tests, or indirectly through other tools like pipx), but I think you can setup any PDM projects with virtualenvs instead of PEP 582's __pypackages__. From the top of my head:
pdm config python.use_venv true
pdm config venv.in_project false  # required to test on multiple Python versions I think

# then you can pdm install naturally and enjoy venvs
pdm install

About pre-commit and tox, I've used them in the past but... I don't like them :sweat_smile: Well, I did not try tox again in a long time so maybe I would like it again. But both tools as I know them really don't fit my workflow. I can expand if needed.

I'll test my workflow locally to see if there's anything to fix, and I'll keep you updated :slightly_smiling_face:

Just ran make lock setup format check test, no issues :confused:
So you really had bad luck with that Python 3.11 version and flake8 installation of yours :sweat_smile:

Just ran make lock setup format check test, no issues :confused:
So you really had bad luck with that Python 3.11 version and flake8 installation of yours :sweat_smile:

BTW, I think that it would be a good idea to convert this issue into a discussion. I missed to observe that the repo already had discussions enabled. Its is more of a open discussion than anything directly fixable.


Pages stop loading after a while

After a few hours of running (I'm not sure exactly how long) the site just stops loading any new requests and I don't have any idea why. The program is still running according to the system but no new requests are fulfilled.

Turns out it was the MySQL client timing out from inactivity haha


data-aos not working in second+ full height div

This is: Possible Bug?
Specifications

AOS version: 2.3.1
OS: Windows 10
Browser: Firefox, Chrome

Expected Behavior
"Div 1" takes up the entire screen (width & height). There are 3 sections in this div that animate.
"Div 2" takes up the entire screen, and is placed below Div 1. There are 3 seconds in this div that animate.
Actual Behavior
Everything in "Div1" animates properly.
Scroll down to "Div2" -> any section with "data-aos" is invisible. The content won't show up at all.
If I hide Div1, then Div2 works (since it's the only thing on the page), and visa versa.
Possible Issue
The problem seems to be with scrolling. Maybe the content in Div2, Div3, Div4, etc... isn't showing up, because somehow AOS isn't recognizing that the website is being scrolled to this section. So the content is invisible.
Before you ask:
Yes, AOS.init() is fine. As stated, the animations are working. They're just not working in multiple full-screen divs. I have also read through/tried multiple issues, and haven'tt found a solution
And window.addEventListener('load', AOS.refresh) is added at the very bottom of my footer file

SOLVED:
After digging through some older threads, I realized the problem was in my main CSS file.
I have
BODY, HTML ( overflow-x: hidden; }
This is a little bit of a problem, since I really need to have overflow-x: hidden. Removing this means that AOS works properly, but also means that I can't have some animations that fly in from the right side of the screen :\ That's a bit of a bummer, but I'll have to find a workaround

Well this is an old problem with this cool lib.
https://github.com/michalsnik/aos/issues?utf8=✓&q=overflow
I guess some simple projects can fixed this removing the overflow directive, but I work with angular-ionic, and ionic ship the styles with this directive in many places.
I like to see an more robust solution than don't depend on remove styles of vendor to test if is this work o.k.

The problem is basically relate to the scroll event, it never is triggered, I'am using ionic, material, and theses add a lot styles, and there you will find fixed visibility, high, overflow..., etc; attributes. Theses attributes don't let the observer work properly...
https://github.com/michalsnik/aos/blob/next/src/js/aos.js#L60
If you call explicit the refresh function, the elements start appear.
https://github.com/michalsnik/aos/blob/next/src/js/aos.js#L73

I might have had the same issue and do something like this in a debounced scroll-handler:
if (this.hasAnimateOnScrollElements && !this.aosRefreshed && AOS !== undefined) {
    this.aosRefreshed = true;
    AOS.refresh();
}

And in the constructor (it's a jQuery-widget base project) of course:
this.hasAnimateOnScrollElements = $('[data-aos]').length !== 0;
this.aosRefreshed = false;

SOLVED:
After digging through some older threads, I realized the problem was in my main CSS file.
I have
BODY, HTML ( overflow-x: hidden; }
This is a little bit of a problem, since I really need to have overflow-x: hidden. Removing this means that AOS works properly, but also means that I can't have some animations that fly in from the right side of the screen :\ That's a bit of a bummer, but I'll have to find a workaround

This fixed my problem. Overflow seems to mess with AOS.

SOLVED:
After digging through some older threads, I realized the problem was in my main CSS file.
I have
BODY, HTML ( overflow-x: hidden; }
This is a little bit of a problem, since I really need to have overflow-x: hidden. Removing this means that AOS works properly, but also means that I can't have some animations that fly in from the right side of the screen :\ That's a bit of a bummer, but I'll have to find a workaround

Solved my issue, much appreciated

In my css file I changed the html, body{ height:100%;} to min-height:100%. This worked for me and resolved the issue without changing the 'overflow-x: hidden'. Here's a link to the explanation I found,
Source:
https://stackoverflow.com/questions/35526252/scrolltop-animate-does-not-work-if-html-body-is-overflow-x-hidden

In my css file I changed the html, body{ height:100%;} to min-height:100%. This worked for me and resolved the issue without changing the 'overflow-x: hidden'. Here's a link to the explanation I found,
Source:
https://stackoverflow.com/questions/35526252/scrolltop-animate-does-not-work-if-html-body-is-overflow-x-hidden

SOLVED:
After digging through some older threads, I realized the problem was in my main CSS file.
I have
BODY, HTML ( overflow-x: hidden; }
This is a little bit of a problem, since I really need to have overflow-x: hidden. Removing this means that AOS works properly, but also means that I can't have some animations that fly in from the right side of the screen :\ That's a bit of a bummer, but I'll have to find a workaround

In my css file I changed the html, body{ height:100%;} to min-height:100%. This worked for me and resolved the issue without changing the 'overflow-x: hidden'. Here's a link to the explanation I found,
Source:
https://stackoverflow.com/questions/35526252/scrolltop-animate-does-not-work-if-html-body-is-overflow-x-hidden

SOLVED:
After digging through some older threads, I realized the problem was in my main CSS file.
I have
BODY, HTML ( overflow-x: hidden; }
This is a little bit of a problem, since I really need to have overflow-x: hidden. Removing this means that AOS works properly, but also means that I can't have some animations that fly in from the right side of the screen :\ That's a bit of a bummer, but I'll have to find a workaround

In my css file I changed the html, body{ height:100%;} to min-height:100%. This worked for me and resolved the issue without changing the 'overflow-x: hidden'. Here's a link to the explanation I found,
Source:
https://stackoverflow.com/questions/35526252/scrolltop-animate-does-not-work-if-html-body-is-overflow-x-hidden