entcore 4.6.0-dev.1 → 4.6.0-dev.202211041719

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/bundle/ng-app.js +13 -13
  2. package/bundle/ng-app.js.map +1 -1
  3. package/dist/ng-app.js +456 -0
  4. package/dist/ng-app.js.map +1 -0
  5. package/{src → dist}/template/attachments.html +0 -0
  6. package/{src → dist}/template/calendar-default-display-options-template.html +0 -0
  7. package/{src → dist}/template/calendar.html +0 -0
  8. package/{src → dist}/template/carousel.html +0 -0
  9. package/{src → dist}/template/cgu-lightbox.html +0 -0
  10. package/{src → dist}/template/compression.html +0 -0
  11. package/{src → dist}/template/embedder.html +0 -0
  12. package/{src → dist}/template/file-picker-list/list.html +0 -0
  13. package/{src → dist}/template/file-picker-list/pick.html +0 -0
  14. package/{src → dist}/template/image-editor/blur.html +0 -0
  15. package/{src → dist}/template/image-editor/crop.html +0 -0
  16. package/{src → dist}/template/image-editor/main.html +0 -0
  17. package/{src → dist}/template/image-editor/properties.html +0 -0
  18. package/{src → dist}/template/image-editor/resize.html +0 -0
  19. package/{src → dist}/template/image-editor/rotate.html +0 -0
  20. package/{src → dist}/template/linker.html +0 -0
  21. package/{src → dist}/template/media-library/browse.html +0 -0
  22. package/{src → dist}/template/media-library/icons.html +0 -0
  23. package/{src → dist}/template/media-library/list.html +0 -0
  24. package/{src → dist}/template/media-library/loading.html +0 -0
  25. package/{src → dist}/template/media-library/main.html +0 -0
  26. package/{src → dist}/template/media-library/record.html +0 -0
  27. package/{src → dist}/template/media-library/upload.html +0 -0
  28. package/{src → dist}/template/media-library/virtual-media-library/virtual-media-content.html +0 -0
  29. package/{src → dist}/template/media-library/virtual-media-library/virtual-media-folder.html +0 -0
  30. package/{src → dist}/template/multi-combo.html +0 -0
  31. package/{src → dist}/template/recorder.html +0 -0
  32. package/{src → dist}/template/share-panel-table-mobile.html +0 -0
  33. package/{src → dist}/template/share-panel-table.html +0 -0
  34. package/{src → dist}/template/share-panel.html +0 -0
  35. package/{src → dist}/template/video/browse.html +0 -0
  36. package/{src → dist}/template/video/integration.html +0 -0
  37. package/{src → dist}/template/video/main.html +0 -0
  38. package/{src → dist}/template/video/onboarding.html +0 -0
  39. package/{src → dist}/template/video/record.html +0 -0
  40. package/{src → dist}/template/video/upload.html +0 -0
  41. package/{src → dist}/template/widgets.html +0 -0
  42. package/{src → dist}/template/wizard.html +0 -0
  43. package/gulpfile.js +51 -28
  44. package/package.json +27 -24
  45. package/types/src/ts/entcore.d.ts +1 -0
  46. package/types/src/ts/video/VideoController.d.ts +6 -0
  47. package/types/src/ts/video/index.d.ts +4 -0
  48. package/CHANGELOG.md +0 -185
  49. package/CONTRIBUTING.md +0 -53
  50. package/Jenkinsfile +0 -27
  51. package/bower.json +0 -30
  52. package/browsers.json +0 -40
  53. package/build.sh +0 -70
  54. package/docker-compose.yml +0 -16
  55. package/karma-base.conf.json +0 -49
  56. package/karma-compatibility.conf.js +0 -25
  57. package/karma.conf.js +0 -5
  58. package/src/ts/deps.d.ts +0 -52
  59. package/src/ts/directives/virtual-folder/README.md +0 -209
  60. package/src/ts/editor/matchers.d.ts +0 -6
  61. package/src/ts/libs/angular/angular.js +0 -11
  62. package/src/ts/libs/angular/angular.js.map +0 -1
  63. package/src/ts/libs/underscore/underscore.js +0 -8
  64. package/src/ts/libs/underscore/underscore.js.map +0 -1
  65. package/tsconfig.spec.json +0 -11
  66. package/wdio.conf.js +0 -44
  67. package/webpack-dev.config.js +0 -25
  68. package/webpack.config.js +0 -31
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
package/gulpfile.js CHANGED
@@ -12,25 +12,28 @@ if (argv.springboard) {
12
12
  springboardPath = argv.springboard;
13
13
  console.log('Using springboard at ' + springboardPath);
14
14
  }
15
- gulp.task('clean:types', function (cb) {
15
+
16
+ function cleanTypes(cb) {
16
17
  rimraf('./types/src', cb);
17
- });
18
- gulp.task("do-build", ["clean:types"], function () {
18
+ }
19
+
20
+ function doBuild() {
19
21
  return gulp.src('./')
20
22
  .pipe(webpack(require('./webpack.config.js')))
21
23
  .on('error', function handleError() {
22
24
  this.emit('end');
23
25
  })
24
26
  .pipe(gulp.dest('./'));
25
- });
26
- gulp.task("build", ["do-build"], function () {
27
+ }
28
+
29
+ function build() {
27
30
  return gulp.src('./bundle/ng-app.js')
28
31
  .pipe(gap.prependText('window.springboardBuildDate="'+new Date().toISOString()+'";\n'))
29
32
  .pipe(gap.prependText('window.infrafrontVersion="'+pjson.version+'";\n'))
30
33
  .pipe(gulp.dest("./bundle/"));
31
- });
34
+ }
32
35
 
33
- gulp.task("build-dev", ["clean:types"], () => {
36
+ function buildDev() {
34
37
  webpack.plugins = [];
35
38
  return gulp.src('./')
36
39
  .pipe(webpack(require('./webpack-dev.config.js')))
@@ -38,11 +41,10 @@ gulp.task("build-dev", ["clean:types"], () => {
38
41
  this.emit('end');
39
42
  })
40
43
  .pipe(gulp.dest('./'));
41
- });
44
+ }
42
45
 
43
- gulp.task('update', ['build-dev'], () => {
46
+ function update(cb) {
44
47
  GlobManager.js().then(f => {
45
- //console.log("founded js: ",f.length,f.join(","))
46
48
  f.forEach((file) => {
47
49
  const split = file.split('/');
48
50
  const fileName = split[split.length - 1];
@@ -61,25 +63,42 @@ gulp.task('update', ['build-dev'], () => {
61
63
  .pipe(gulp.dest(split.slice(0, split.length - 1).join('/')));
62
64
  });
63
65
  });
64
- })
66
+ cb();
67
+ }
65
68
 
66
- gulp.task("watch", ["clean:types"], () => {
67
- gulp.watch('**/*.ts', () => gulp.start('update'));
68
- gulp.watch('**/*.html', () => {
69
- const apps = [];
70
- GlobManager.html().then(f => {
71
- f.forEach((file) => {
72
- const app = file.split('/public/template/entcore')[0];
73
- if (apps.indexOf(app) === -1) {
74
- apps.push(app);
75
- console.log('copy to ' + app + '/public/template/entcore')
76
- gulp.src('./src/template/**/*')
77
- .pipe(gulp.dest(app + '/public/template/entcore'));
78
- }
79
- });
80
- })
81
- });
82
- });
69
+ function copyHtml(cb) {
70
+ const apps = [];
71
+ GlobManager.html().then(f => {
72
+ f.forEach((file) => {
73
+ const app = file.split('/public/template/entcore')[0];
74
+ if (apps.indexOf(app) === -1) {
75
+ apps.push(app);
76
+ console.log('copy to ' + app + '/public/template/entcore')
77
+ gulp.src('./src/template/**/*')
78
+ .pipe(gulp.dest(app + '/public/template/entcore'));
79
+ }
80
+ });
81
+ })
82
+ cb();
83
+ }
84
+
85
+ gulp.task('clean:types', cleanTypes);
86
+ gulp.task("do-build", doBuild);
87
+ gulp.task("build", build);
88
+ gulp.task("build-dev", buildDev);
89
+ gulp.task('update', update);
90
+ gulp.task('copy-html', copyHtml);
91
+
92
+ function watchTs() {
93
+ return gulp.watch('./src/ts/**/*.ts', gulp.series('clean:types','build-dev','update'));
94
+ }
95
+
96
+ function watchHtml() {
97
+ return gulp.watch('./src/template/**/*.html', gulp.series('clean:types', 'copy-html'));
98
+ }
99
+
100
+ gulp.task('watch-ts', watchTs);
101
+ gulp.task('watch-html', watchHtml);
83
102
 
84
103
  const GlobManager = {
85
104
  _js: null,
@@ -116,3 +135,7 @@ const GlobManager = {
116
135
  return GlobManager._html;
117
136
  }
118
137
  }
138
+
139
+ // Exports Tasks
140
+ exports.watch = gulp.parallel('watch-ts', 'watch-html');
141
+ exports.build = gulp.series('clean:types','do-build', 'build');
package/package.json CHANGED
@@ -1,7 +1,24 @@
1
1
  {
2
2
  "name": "entcore",
3
- "version": "4.6.0-dev.1",
3
+ "version": "4.6.0-dev.202211041719",
4
4
  "description": "",
5
+ "scripts": {
6
+ "dev:watch": "npx gulp watch --springboard=../${SPRINGBOARD} 2>/dev/null",
7
+ "release:build": "node_modules/gulp/bin/gulp.js build ${EXTRAS}",
8
+ "test": "karma start",
9
+ "test:compatibility": "karma start karma-compatibility.conf.js",
10
+ "test:end-to-end": "npx wdio"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/opendigitaleducation/infra-front.git"
15
+ },
16
+ "author": "",
17
+ "license": "AGPL-3.0",
18
+ "bugs": {
19
+ "url": "https://github.com/opendigitaleducation/infra-front/issues"
20
+ },
21
+ "homepage": "https://github.com/opendigitaleducation/infra-front",
5
22
  "main": "gulpfile.js",
6
23
  "types": "./types/src/ts/entcore.d.ts",
7
24
  "dependencies": {
@@ -14,9 +31,9 @@
14
31
  "conventional-changelog": "3.0.6",
15
32
  "core-js": "^2.4.1",
16
33
  "entcore-toolkit": "^1.0.0",
17
- "gulp": "^3.9.1",
18
- "gulp-rename": "^1.2.2",
19
- "gulp-watch": "^4.3.5",
34
+ "gulp": "^4.0.2",
35
+ "gulp-rename": "^2.0.0",
36
+ "gulp-watch": "^5.0.1",
20
37
  "humane-js": "^3.2.2",
21
38
  "jquery": "^3.5.1",
22
39
  "meow": "8.0.0",
@@ -36,12 +53,15 @@
36
53
  },
37
54
  "devDependencies": {
38
55
  "@types/angular": "1.7.4",
39
- "@types/ua-parser-js": "^0.7.35",
40
56
  "@types/core-js": "0.9.46",
41
57
  "@types/jasmine": "2.8.8",
42
58
  "@types/jquery": "^3.3.32",
43
59
  "@types/pixi.js": "4.5.7",
60
+ "@types/ua-parser-js": "^0.7.35",
44
61
  "@types/webdriverio": "4.13.0",
62
+ "@wdio/browserstack-service": "^7.20.7",
63
+ "@wdio/jasmine-framework": "^7.20.7",
64
+ "@wdio/selenium-standalone-service": "^7.20.7",
45
65
  "angular-mocks": "1.3.20",
46
66
  "gulp-append-prepend": "^1.0.6",
47
67
  "jasmine": "2.8.0",
@@ -54,24 +74,7 @@
54
74
  "mathjax": "2.7.5",
55
75
  "rimraf": "2.6.2",
56
76
  "ts-node": "7.0.1",
57
- "wdio-browserstack-service": "0.1.18",
58
- "wdio-jasmine-framework": "0.3.8",
59
- "wdio-selenium-standalone-service": "0.0.11",
60
- "webdriverio": "4.14.1"
61
- },
62
- "scripts": {
63
- "test": "karma start",
64
- "test:compatibility": "karma start karma-compatibility.conf.js",
65
- "test:end-to-end": "npx wdio"
66
- },
67
- "repository": {
68
- "type": "git",
69
- "url": "https://github.com/opendigitaleducation/infra-front.git"
70
- },
71
- "author": "",
72
- "license": "AGPL-3.0",
73
- "bugs": {
74
- "url": "https://github.com/opendigitaleducation/infra-front/issues"
77
+ "webdriverio": "7.20.7"
75
78
  },
76
- "homepage": "https://github.com/opendigitaleducation/infra-front"
79
+ "files": ["bundle", "types", "dist"]
77
80
  }
@@ -22,6 +22,7 @@ export * from './toasts';
22
22
  export * from "./embedder";
23
23
  export * from "./stringutils/index";
24
24
  export * from "./tracking";
25
+ export * from "./video";
25
26
  export { Embedder } from "./embedder";
26
27
  export { DatepickerDelegate } from "./ng-app";
27
28
  export { FolderTreeProps } from "./directives/folderTree";
@@ -0,0 +1,6 @@
1
+ import { IObjectGuardDelegate } from "../navigationGuard";
2
+ export declare class VideoRecordGuardModel implements IObjectGuardDelegate {
3
+ hasRecorded: boolean;
4
+ guardObjectIsDirty(): boolean;
5
+ guardObjectReset(): void;
6
+ }
@@ -0,0 +1,4 @@
1
+ export * from './VideoController';
2
+ export * from './VideoEventTrackerService';
3
+ export * from './VideoRecorder';
4
+ export * from './VideoUploadService';
package/CHANGELOG.md DELETED
@@ -1,185 +0,0 @@
1
-
2
- # [3.5.0](https://github.com/opendigitaleducation/infra-front/compare/3.4.3...3.5.0) (2019-04-29)
3
-
4
-
5
- ### Bug Fixes
6
-
7
- * Directory:
8
- * fix performance issue when retrieving filtered classes
9
- * Workspace:
10
- * enable downloading trashed documents
11
-
12
-
13
- ### Features
14
-
15
- * enable forcing a user to revalidate terms and conditions
16
-
17
-
18
- ## [3.4.3](https://github.com/opendigitaleducation/infra-front/compare/3.4.2...3.4.3) (2019-04-16)
19
-
20
-
21
- ### Bug Fixes
22
-
23
- * Smart banner:
24
- * enable i18n for smart banner and overrides per theme. Also adds profile exclusion per theme.
25
-
26
-
27
- ## [3.4.2](https://github.com/opendigitaleducation/infra-front/compare/3.4.1...3.4.2) (2019-04-09)
28
-
29
-
30
- ### Bug Fixes
31
-
32
- * Editor:
33
- * fix a bug with a plain text pasting. Now it converts the text to editor model.
34
- * Miscellaneous:
35
- * chrome 73+ handles differently click target when selecting, fix the target detection on checkTool
36
-
37
-
38
- ## [3.4.1](https://github.com/opendigitaleducation/infra-front/compare/3.4.0...3.4.1) (2019-03-25)
39
-
40
-
41
- ### Features
42
-
43
- * Calendar:
44
- * hide week switcher on month display
45
-
46
-
47
- # [3.4.0](https://github.com/opendigitaleducation/infra-front/compare/3.3.6...3.4.0) (2019-03-04)
48
-
49
-
50
- ### Bug Fixes
51
-
52
- * Behaviours:
53
- * fix workflow and behaviours for unavailable applications
54
- * Editor:
55
- * fix the bug where the inline editor was moving on resize
56
- * avoid clipping image when changing size to small or medium
57
- * add upload visibility on base 64 import
58
- * Image editor:
59
- * add a spinner when saving image
60
- * display settings according to rights
61
- * Share panel:
62
- * Display the 'show more' button on inherited shares
63
- * Workspace:
64
- * Avoid undefined shared array in folders
65
- * Miscellaneous:
66
- * remove the style 'user-select: none' when touching a resizable element
67
-
68
-
69
- ### Features
70
-
71
- * Workspace:
72
- * pre-3.4 Revisions of document compatible with the restoration mechanism
73
- * CI:
74
- * use `Jenkinsfile` to build infra-front
75
-
76
-
77
-
78
- ## [3.3.6](https://github.com/opendigitaleducation/infra-front/compare/3.3.5...3.3.6) (2019-02-18)
79
-
80
-
81
- ### Bug Fixes
82
-
83
-
84
- * Workspace:
85
- * fix cycle in the document hierarchy (document should not be able to move (or copy) into self or descendant)
86
-
87
-
88
- ## [3.3.5](https://github.com/opendigitaleducation/infra-front/compare/3.3.4...3.3.5) (2019-02-12)
89
-
90
-
91
- ### Bug Fixes
92
-
93
- * Smart banner:
94
- * remove the store name
95
-
96
-
97
-
98
- ## [3.3.4](https://github.com/opendigitaleducation/infra-front/compare/3.3.2...3.3.4) (2019-01-22)
99
-
100
-
101
- ### Bug Fixes
102
-
103
- * Editor:
104
- * fix pasted font-size (use the correct scaling)
105
- * use "font[size]" attribute to style font-size on copy/paste
106
-
107
-
108
-
109
- ## [3.3.2](https://github.com/opendigitaleducation/infra-front/compare/3.3.1...3.3.2) (2019-01-10)
110
-
111
-
112
- ### Bug Fixes
113
-
114
- * Share panel:
115
- * renamed button class
116
-
117
-
118
- ## [3.3.1](https://github.com/opendigitaleducation/infra-front/compare/3.3.0...3.3.1) (2019-01-07)
119
-
120
-
121
- ### Bug Fixes
122
-
123
- * Miscellaneous:
124
- * include hash's theme when building ts
125
-
126
-
127
- # [3.3.0](https://github.com/opendigitaleducation/infra-front/compare/2.3.3...3.3.0) (2018-12-26)
128
-
129
-
130
- ### Bug Fixes
131
-
132
- * Editor:
133
- * delete zws char at the beginning of the line when press delete
134
- * fix editor when pressing enter in a text which contains a <br>
135
- * fix line deletion
136
- * fix pressing enter at the start of a line
137
- * fix span merging, respect order while merging
138
- * fix the siblings tree position after pressing enter
139
- * rewrite css applying functionalities
140
- * catch and clean the clipboard
141
- * fix new line when in styled list
142
- * create a new line with zero-width space after list
143
- * selection fixes on delete and empty editor
144
- * detect CMD key on mac os x
145
- * apply selected color and selected background to multicolor lines
146
- * fix apply style to a block node
147
- * fix IE compatibility issue
148
- * fix selection issue with safari
149
- * whitelist possible tags for new line
150
- * let browser handle the paste event when non-html content
151
- * fix some style issue when pasting image from editor
152
- * let ie11 handles the pasting event
153
- * remove editor content when pressing enter while selecting the editor
154
- * removes condition when applying colors
155
- * fix workspace path
156
- * Workspace:
157
- * updated class for spinner
158
- * changed spinner class when copying
159
- * issues with searching when copying or moving
160
- * adding tooltip for ellipsis
161
- * add feedback on 403 error
162
- * fix javascript exception when notifying contrib
163
- * prefetch loading screen to avoid locked screen
164
- * Share panel:
165
- * wait users filtering before displaying 'No results'
166
- * Media library:
167
- * fix wrong feedback color for dictaphone
168
-
169
-
170
- ### Features
171
-
172
-
173
- * Workspace:
174
- * issues with searching when copying or moving
175
- * adding tooltip for ellipsis
176
- * Media library:
177
- * multiple URL patterns for embed videos
178
- * adding image class to make icons in media lib uniform
179
- * documents ordered by created date in media library
180
- * Share panel:
181
- * Hide input placeholder if no results
182
- * Smart banner:
183
- * adds smart banner
184
- * Miscellaneous:
185
- * adding auto-size class on lightboxes h2
package/CONTRIBUTING.md DELETED
@@ -1,53 +0,0 @@
1
- Contributing
2
- ---
3
-
4
- ## Running unit tests
5
-
6
- ```shell
7
- # install dependencies:
8
- npm install
9
-
10
- # run unit tests on local firefox and chrome:
11
- npm run test
12
-
13
- # override the default browsers, e.g. run unit tests only on local firefox:
14
- npm run test -- --browsers=Firefox
15
-
16
- # /!\ needs env. variables BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESSKEY
17
- # run unit tests on browserStack:
18
- npm run test:compatibility
19
- # only on ie11:
20
- npm run test:compatibility -- --browsers=bs_ie_11_windows10
21
- ```
22
-
23
- ## Running end-to-end tests
24
-
25
- ```shell
26
- # /!\ needs env. variables E2E_USERNAME and E2E_PASSWORD
27
- # which are the credentials to connect to the entcore platform
28
- E2E_USERNAME=myUsername E2E_PASSWORD=myPassword npm run test:end-to-end
29
-
30
- # On BrowserStack browsers
31
- BROWSERSTACK=true E2E_USERNAME=myUsername E2E_PASSWORD=myPassword npm run test:end-to-end
32
-
33
- # With a different base URL (default is http://localhost:8090/)
34
- E2E_BASE_URL=http://my-example.com E2E_USERNAME=myUsername E2E_PASSWORD=myPassword npm run test:end-to-end
35
- ```
36
-
37
-
38
- ## choices
39
-
40
- - why karma?
41
-
42
- Karma is a javascript test runner that runs unit tests in browser environments.
43
- Most alternative test runners run tests in the node.js environment.
44
-
45
- - why jasmine?
46
-
47
- Jasmine is a full-featured (assertions, mocks, etc.) test framework.
48
- A lot of resources can be found in the web about Jasmine.
49
-
50
- - why webdriver.io?
51
-
52
- Webdriver.io is a low level API to write functional tests using the standard web driver api.
53
-
package/Jenkinsfile DELETED
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env groovy
2
-
3
- pipeline {
4
- agent any
5
- stages {
6
- stage('Init') {
7
- steps {
8
- checkout scm
9
- sh './build.sh deps'
10
- }
11
- }
12
- stage('Build') {
13
- steps {
14
- sh './build.sh build'
15
- }
16
- }
17
- stage('Publish') {
18
- steps {
19
- configFileProvider([configFile(fileId: '.npmrc-infra-front', variable: 'NPMRC')]) {
20
- sh 'cp $NPMRC .npmrc'
21
- sh './build.sh publish'
22
- }
23
- }
24
- }
25
- }
26
- }
27
-
package/bower.json DELETED
@@ -1,30 +0,0 @@
1
- {
2
- "name": "js-infra",
3
- "homepage": "https://github.com/entcore/js-infra",
4
- "authors": [
5
- "WSE <tech@web-education.net>"
6
- ],
7
- "description": "",
8
- "main": "",
9
- "moduleType": [],
10
- "license": "AGPL",
11
- "ignore": [
12
- "**/.*",
13
- "node_modules",
14
- "bower_components",
15
- "test",
16
- "tests"
17
- ],
18
- "dependencies": {
19
- "lodash": "~4.8.2",
20
- "jquery": "~2.2.3",
21
- "moment": "^2.12.0",
22
- "humane-js": "^3.2.2",
23
- "angular": "1.2.0-rc.2",
24
- "angular-sanitize": "1.2.0-rc.2",
25
- "angular-route": "1.2.0-rc.2",
26
- "underscore": "^1.8.3",
27
- "core.js": "^2.4.1",
28
- "ua-parser-js": "^0.7.23"
29
- }
30
- }
package/browsers.json DELETED
@@ -1,40 +0,0 @@
1
- [
2
- {
3
- "name": "bs_chrome_latest_windows10",
4
- "browser": "Chrome",
5
- "os": "Windows",
6
- "os_version": "10"
7
- },
8
- {
9
- "name": "bs_edge_latest_windows10",
10
- "browser": "Edge",
11
- "os": "Windows",
12
- "os_version": "10"
13
- },
14
- {
15
- "name": "bs_ie_11_windows10",
16
- "browser": "IE",
17
- "browser_version": "11",
18
- "os": "Windows",
19
- "os_version": "10"
20
- },
21
- {
22
- "name": "bs_ie_11_windows8",
23
- "browser": "IE",
24
- "browser_version": "11",
25
- "os": "Windows",
26
- "os_version": "8.1"
27
- },
28
- {
29
- "name": "bs_firefox_latest_windows10",
30
- "browser": "Firefox",
31
- "os": "Windows",
32
- "os_version": "10"
33
- },
34
- {
35
- "name": "bs_safari_latest_macOS_HS",
36
- "browser": "Safari",
37
- "os": "OS X",
38
- "os_version": "High Sierra"
39
- }
40
- ]