| LEFT | RIGHT | 
|---|
| 1 Shared Adblock Plus UI code | 1 Shared Adblock Plus UI code | 
| 2 =========================== | 2 =========================== | 
| 3 | 3 | 
| 4 The user interface elements defined in this repository will be used by various | 4 The user interface elements defined in this repository will be used by various | 
| 5 Adblock Plus products like Adblock Plus for Firefox. Their functionality can be | 5 Adblock Plus products like Adblock Plus for Firefox. Their functionality can be | 
| 6 tested within this repository, even though they might not work exactly the same | 6 tested within this repository, even though they might not work exactly the same | 
| 7 as they will do in the final product. | 7 as they will do in the final product. | 
| 8 | 8 | 
| 9 Installing dependencies | 9 Installing dependencies | 
| 10 ----------------------- | 10 ----------------------- | 
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 76 | 76 | 
| 77 Remember, both `eslint` and `stylelint` can help fixing issues via `--fix` flag. | 77 Remember, both `eslint` and `stylelint` can help fixing issues via `--fix` flag. | 
| 78 | 78 | 
| 79 You can try as example via [npx](https://medium.com/@maybekatz/introducing-npx-a
     n-npm-package-runner-55f7d4bd282b) | 79 You can try as example via [npx](https://medium.com/@maybekatz/introducing-npx-a
     n-npm-package-runner-55f7d4bd282b) | 
| 80 which should be provided automatically when you install `npm`. | 80 which should be provided automatically when you install `npm`. | 
| 81 | 81 | 
| 82 ```sh | 82 ```sh | 
| 83 npx stylelint --fix skin/real-file-name.css | 83 npx stylelint --fix skin/real-file-name.css | 
| 84 ``` | 84 ``` | 
| 85 | 85 | 
|  | 86 Bundling | 
|  | 87 -------- | 
|  | 88 | 
|  | 89 As it is for the `desktop-options.js` case, bundling is done via `package.json` | 
|  | 90 script entries. | 
|  | 91 | 
|  | 92 A dedicated script entry, such `bundle:desktop-options`, | 
|  | 93 should perform the following operations: | 
|  | 94 | 
|  | 95   * ensure source code passes linting | 
|  | 96   * ensure the bundle won't affect future linting operations | 
|  | 97   * ensure `browserify` uses `--node` and `--no-bundle-external` flags | 
|  | 98   * point at the entry point, and output in the top level folder | 
|  | 99 | 
|  | 100 Accordingly, this is what happens with the `bundle:desktop-options`: | 
|  | 101 | 
|  | 102 ```sh | 
|  | 103 # the && operator ensure each step is executed only | 
|  | 104 # if the previous one didn't produce an error | 
|  | 105 eslint ./js/**/*.js && | 
|  | 106 # browserify doesn't offer a way to prefix with text | 
|  | 107 # the file is hence created with eslint disabled and a warning | 
|  | 108 echo '/* eslint-disable */// BUNDLED FILE' > ./desktop-options.js && | 
|  | 109 # browserify take an entry point and bundle all its required files | 
|  | 110 # outputting the result into ./desktop-options.js | 
|  | 111 browserify --node --no-bundle-external js/desktop-options.js >> ./desktop-option
     s.js | 
|  | 112 ``` | 
|  | 113 | 
|  | 114 For a new bundle, i.e. `mobile-options.js`, simply use the same procedure | 
|  | 115 but swap the `desktop-options` file/script name with `mobile-options`. | 
|  | 116 | 
|  | 117 The main `bundle` script should include each sub-bundle operation. | 
|  | 118 | 
|  | 119 Watching | 
|  | 120 -------- | 
|  | 121 | 
|  | 122 While developing, it is convenient to bundle automatically | 
|  | 123 each time a source file is changed. | 
|  | 124 | 
|  | 125 As a team, we agreed on restructuring JS code inside the js folder, | 
|  | 126 so that is watched, and each bundled created, every time there is a changes. | 
|  | 127 | 
|  | 128 Similarly done for bundles, watches follow the following convention: | 
|  | 129 | 
|  | 130 a named script entry such `watch:desktop-option` that | 
|  | 131 points at the following command: | 
|  | 132 | 
|  | 133 ```sh | 
|  | 134 watch 'npm run bundle:desktop-options' ./js | 
|  | 135 ``` | 
|  | 136 | 
|  | 137 The main `watch` script should include each sub-watch operation. | 
|  | 138 | 
|  | 139 | 
| 86 Translations | 140 Translations | 
| 87 ------------ | 141 ------------ | 
| 88 | 142 | 
| 89 Translations for the strings in this project are managed using the online | 143 Translations for the strings in this project are managed using the online | 
| 90 [Crowdin platform][crowdin]. To synchronise with Crowdin you can use the build | 144 [Crowdin platform][crowdin]. To synchronise with Crowdin you can use the build | 
| 91 script. To get a list of the possible commands type `./build.py help` at | 145 script. To get a list of the possible commands type `./build.py help` at | 
| 92 the command line. (You will also need the Crowdin API key for the project.) | 146 the command line. (You will also need the Crowdin API key for the project.) | 
| 93 | 147 | 
| 94 firstRun.html | 148 firstRun.html | 
| 95 ------------- | 149 ------------- | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 139   errors when adding new filters on the options page | 193   errors when adding new filters on the options page | 
| 140 * `blockedURLs`: a comma-separated list of URLs that should be considered | 194 * `blockedURLs`: a comma-separated list of URLs that should be considered | 
| 141   blocked (necessary to test the check for blocked scripts in sharing buttons). | 195   blocked (necessary to test the check for blocked scripts in sharing buttons). | 
| 142 * `downloadStatus`: sets downloadStatus parameter for filter lists, can be used | 196 * `downloadStatus`: sets downloadStatus parameter for filter lists, can be used | 
| 143   to trigger various filter list download errors | 197   to trigger various filter list download errors | 
| 144 * `platform=chromium`: shows the opt-out for the developer tools panel | 198 * `platform=chromium`: shows the opt-out for the developer tools panel | 
| 145 * `showNotificationUI=true`: simulates user having opted-out of notifications | 199 * `showNotificationUI=true`: simulates user having opted-out of notifications | 
| 146 | 200 | 
| 147 | 201 | 
| 148 [crowdin]: https://crowdin.com | 202 [crowdin]: https://crowdin.com | 
| LEFT | RIGHT | 
|---|