aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2018-05-30 17:10:00 +0200
committerChocobozzz <me@florianbigard.com>2018-05-30 17:10:00 +0200
commit960a11e89da4e4a6ad6fbad61c71625f89e267b6 (patch)
tree0cd370970c3166dd3715e46a5503a3da78f25e37
parente10c7d5125c47830bd23ecfed2f1b2d1048e6639 (diff)
downloadPeerTube-960a11e89da4e4a6ad6fbad61c71625f89e267b6.tar.gz
PeerTube-960a11e89da4e4a6ad6fbad61c71625f89e267b6.tar.zst
PeerTube-960a11e89da4e4a6ad6fbad61c71625f89e267b6.zip
Add context menu to player
-rw-r--r--.sass-lint.yml2
-rw-r--r--client/package.json4
-rw-r--r--client/src/app/videos/+video-watch/modal/video-share.component.ts6
-rw-r--r--client/src/app/videos/+video-watch/video-watch.component.ts1
-rw-r--r--client/src/assets/player/peertube-link-button.ts20
-rw-r--r--client/src/assets/player/peertube-player.ts27
-rw-r--r--client/src/assets/player/peertube-videojs-plugin.ts4
-rw-r--r--client/src/assets/player/utils.ts34
-rw-r--r--client/src/assets/player/video-renderer.ts6
-rw-r--r--client/src/sass/video-js-custom.scss30
-rw-r--r--client/src/standalone/videos/embed.ts1
-rw-r--r--client/yarn.lock15
-rw-r--r--package.json5
-rw-r--r--yarn.lock117
14 files changed, 145 insertions, 127 deletions
diff --git a/.sass-lint.yml b/.sass-lint.yml
index 55a487138..50b9e4f93 100644
--- a/.sass-lint.yml
+++ b/.sass-lint.yml
@@ -22,4 +22,4 @@ rules:
22 space-before-colon: 1 22 space-before-colon: 1
23 hex-length: 1 23 hex-length: 1
24 hex-notation: 0 24 hex-notation: 0
25 indentation: 1 25 indentation: 2
diff --git a/client/package.json b/client/package.json
index 0d5acf997..61f94758a 100644
--- a/client/package.json
+++ b/client/package.json
@@ -23,7 +23,7 @@
23 }, 23 },
24 "license": "GPLv3", 24 "license": "GPLv3",
25 "resolutions": { 25 "resolutions": {
26 "videojs-dock/video.js": "^7", 26 "video.js": "^7",
27 "webtorrent/create-torrent/junk": "^1", 27 "webtorrent/create-torrent/junk": "^1",
28 "simple-get": "^2.8.1" 28 "simple-get": "^2.8.1"
29 }, 29 },
@@ -99,6 +99,8 @@
99 "typescript": "2.7", 99 "typescript": "2.7",
100 "uglifyjs-webpack-plugin": "^1.1.2", 100 "uglifyjs-webpack-plugin": "^1.1.2",
101 "video.js": "^7.0.3", 101 "video.js": "^7.0.3",
102 "videojs-contextmenu": "^2.0.0",
103 "videojs-contextmenu-ui": "^4.0.0",
102 "videojs-dock": "^2.0.2", 104 "videojs-dock": "^2.0.2",
103 "videojs-hotkeys": "^0.2.21", 105 "videojs-hotkeys": "^0.2.21",
104 "webpack": "^4.5.0", 106 "webpack": "^4.5.0",
diff --git a/client/src/app/videos/+video-watch/modal/video-share.component.ts b/client/src/app/videos/+video-watch/modal/video-share.component.ts
index 678cccfb5..33998c5d8 100644
--- a/client/src/app/videos/+video-watch/modal/video-share.component.ts
+++ b/client/src/app/videos/+video-watch/modal/video-share.component.ts
@@ -4,6 +4,7 @@ import { NotificationsService } from 'angular2-notifications'
4 4
5import { ModalDirective } from 'ngx-bootstrap/modal' 5import { ModalDirective } from 'ngx-bootstrap/modal'
6import { VideoDetails } from '../../../shared/video/video-details.model' 6import { VideoDetails } from '../../../shared/video/video-details.model'
7import { buildVideoEmbed } from '../../../../assets/player/utils'
7 8
8@Component({ 9@Component({
9 selector: 'my-video-share', 10 selector: 'my-video-share',
@@ -28,10 +29,7 @@ export class VideoShareComponent {
28 } 29 }
29 30
30 getVideoIframeCode () { 31 getVideoIframeCode () {
31 return '<iframe width="560" height="315" ' + 32 return buildVideoEmbed(this.video.embedUrl)
32 'src="' + this.video.embedUrl + '" ' +
33 'frameborder="0" allowfullscreen>' +
34 '</iframe>'
35 } 33 }
36 34
37 getVideoUrl () { 35 getVideoUrl () {
diff --git a/client/src/app/videos/+video-watch/video-watch.component.ts b/client/src/app/videos/+video-watch/video-watch.component.ts
index 35a7c04cc..c71051649 100644
--- a/client/src/app/videos/+video-watch/video-watch.component.ts
+++ b/client/src/app/videos/+video-watch/video-watch.component.ts
@@ -348,6 +348,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
348 inactivityTimeout: 2500, 348 inactivityTimeout: 2500,
349 videoFiles: this.video.files, 349 videoFiles: this.video.files,
350 playerElement: this.playerElement, 350 playerElement: this.playerElement,
351 videoEmbedUrl: this.video.embedUrl,
351 videoViewUrl: this.videoService.getVideoViewUrl(this.video.uuid), 352 videoViewUrl: this.videoService.getVideoViewUrl(this.video.uuid),
352 videoDuration: this.video.duration, 353 videoDuration: this.video.duration,
353 enableHotkeys: true, 354 enableHotkeys: true,
diff --git a/client/src/assets/player/peertube-link-button.ts b/client/src/assets/player/peertube-link-button.ts
index 54d802732..a13815d61 100644
--- a/client/src/assets/player/peertube-link-button.ts
+++ b/client/src/assets/player/peertube-link-button.ts
@@ -1,15 +1,19 @@
1import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings' 1import { VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
2import { buildVideoLink } from './utils'
2 3
3const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button') 4const Button: VideoJSComponentInterface = videojsUntyped.getComponent('Button')
4class PeerTubeLinkButton extends Button { 5class PeerTubeLinkButton extends Button {
5 6
7 constructor (player: videojs.Player, options) {
8 super(player, options)
9 }
10
6 createEl () { 11 createEl () {
7 return this.buildElement() 12 return this.buildElement()
8 } 13 }
9 14
10 updateHref () { 15 updateHref () {
11 const currentTime = Math.floor(this.player().currentTime()) 16 this.el().setAttribute('href', buildVideoLink(this.player().currentTime()))
12 this.el().setAttribute('href', this.buildHref(currentTime))
13 } 17 }
14 18
15 handleClick () { 19 handleClick () {
@@ -18,7 +22,7 @@ class PeerTubeLinkButton extends Button {
18 22
19 private buildElement () { 23 private buildElement () {
20 const el = videojsUntyped.dom.createEl('a', { 24 const el = videojsUntyped.dom.createEl('a', {
21 href: this.buildHref(), 25 href: buildVideoLink(),
22 innerHTML: 'PeerTube', 26 innerHTML: 'PeerTube',
23 title: 'Go to the video page', 27 title: 'Go to the video page',
24 className: 'vjs-peertube-link', 28 className: 'vjs-peertube-link',
@@ -29,15 +33,5 @@ class PeerTubeLinkButton extends Button {
29 33
30 return el 34 return el
31 } 35 }
32
33 private buildHref (time?: number) {
34 let href = window.location.href.replace('embed', 'watch')
35 if (time) {
36 if (window.location.search) href += '&start=' + time
37 else href += '?start=' + time
38 }
39
40 return href
41 }
42} 36}
43Button.registerComponent('PeerTubeLinkButton', PeerTubeLinkButton) 37Button.registerComponent('PeerTubeLinkButton', PeerTubeLinkButton)
diff --git a/client/src/assets/player/peertube-player.ts b/client/src/assets/player/peertube-player.ts
index f419d58fc..9fe5af569 100644
--- a/client/src/assets/player/peertube-player.ts
+++ b/client/src/assets/player/peertube-player.ts
@@ -2,12 +2,15 @@ import { VideoFile } from '../../../../shared/models/videos'
2 2
3import 'videojs-hotkeys' 3import 'videojs-hotkeys'
4import 'videojs-dock' 4import 'videojs-dock'
5import 'videojs-contextmenu'
6import 'videojs-contextmenu-ui'
5import './peertube-link-button' 7import './peertube-link-button'
6import './resolution-menu-button' 8import './resolution-menu-button'
7import './settings-menu-button' 9import './settings-menu-button'
8import './webtorrent-info-button' 10import './webtorrent-info-button'
9import './peertube-videojs-plugin' 11import './peertube-videojs-plugin'
10import { videojsUntyped } from './peertube-videojs-typings' 12import { videojsUntyped } from './peertube-videojs-typings'
13import { buildVideoEmbed, buildVideoLink, copyToClipboard } from './utils'
11 14
12// Change 'Playback Rate' to 'Speed' (smaller for our settings menu) 15// Change 'Playback Rate' to 'Speed' (smaller for our settings menu)
13videojsUntyped.getComponent('PlaybackRateMenuButton').prototype.controlText_ = 'Speed' 16videojsUntyped.getComponent('PlaybackRateMenuButton').prototype.controlText_ = 'Speed'
@@ -16,6 +19,7 @@ function getVideojsOptions (options: {
16 autoplay: boolean, 19 autoplay: boolean,
17 playerElement: HTMLVideoElement, 20 playerElement: HTMLVideoElement,
18 videoViewUrl: string, 21 videoViewUrl: string,
22 videoEmbedUrl: string,
19 videoDuration: number, 23 videoDuration: number,
20 videoFiles: VideoFile[], 24 videoFiles: VideoFile[],
21 enableHotkeys: boolean, 25 enableHotkeys: boolean,
@@ -38,6 +42,29 @@ function getVideojsOptions (options: {
38 videoViewUrl: options.videoViewUrl, 42 videoViewUrl: options.videoViewUrl,
39 videoDuration: options.videoDuration, 43 videoDuration: options.videoDuration,
40 startTime: options.startTime 44 startTime: options.startTime
45 },
46 contextmenuUI: {
47 content: [
48 {
49 label: 'Copy the video URL',
50 listener: function () {
51 copyToClipboard(buildVideoLink())
52 }
53 },
54 {
55 label: 'Copy the video URL at the current time',
56 listener: function () {
57 const player = this
58 copyToClipboard(buildVideoLink(player.currentTime()))
59 }
60 },
61 {
62 label: 'Copy embed code',
63 listener: () => {
64 copyToClipboard(buildVideoEmbed(options.videoEmbedUrl))
65 }
66 }
67 ]
41 } 68 }
42 }, 69 },
43 controlBar: { 70 controlBar: {
diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts
index d9ded7a7e..65103f3ab 100644
--- a/client/src/assets/player/peertube-videojs-plugin.ts
+++ b/client/src/assets/player/peertube-videojs-plugin.ts
@@ -268,6 +268,10 @@ class PeerTubePlugin extends Plugin {
268 this.trigger('autoResolutionUpdate') 268 this.trigger('autoResolutionUpdate')
269 } 269 }
270 270
271 getCurrentVideoFile () {
272 return this.currentVideoFile
273 }
274
271 private tryToPlay (done?: Function) { 275 private tryToPlay (done?: Function) {
272 if (!done) done = function () { /* empty */ } 276 if (!done) done = function () { /* empty */ }
273 277
diff --git a/client/src/assets/player/utils.ts b/client/src/assets/player/utils.ts
index 1df39d4e4..487b3a1be 100644
--- a/client/src/assets/player/utils.ts
+++ b/client/src/assets/player/utils.ts
@@ -64,14 +64,48 @@ function isMobile () {
64 return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent) 64 return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent)
65} 65}
66 66
67function buildVideoLink (time?: number) {
68 let href = window.location.href.replace('/embed/', '/watch/')
69 if (time) {
70 const timeInt = Math.floor(time)
71
72 if (window.location.search) href += '&start=' + timeInt
73 else href += '?start=' + timeInt
74 }
75
76 return href
77}
78
79function buildVideoEmbed (embedUrl: string) {
80 return '<iframe width="560" height="315" ' +
81 'src="' + embedUrl + '" ' +
82 'frameborder="0" allowfullscreen>' +
83 '</iframe>'
84}
85
86function copyToClipboard (text: string) {
87 const el = document.createElement('textarea')
88 el.value = text
89 el.setAttribute('readonly', '')
90 el.style.position = 'absolute'
91 el.style.left = '-9999px'
92 document.body.appendChild(el)
93 el.select()
94 document.execCommand('copy')
95 document.body.removeChild(el)
96}
97
67export { 98export {
68 toTitleCase, 99 toTitleCase,
100 buildVideoLink,
69 getStoredVolume, 101 getStoredVolume,
70 saveVolumeInStore, 102 saveVolumeInStore,
71 saveAverageBandwidth, 103 saveAverageBandwidth,
72 getAverageBandwidth, 104 getAverageBandwidth,
73 saveMuteInStore, 105 saveMuteInStore,
106 buildVideoEmbed,
74 getStoredMute, 107 getStoredMute,
108 copyToClipboard,
75 isMobile, 109 isMobile,
76 bytes 110 bytes
77} 111}
diff --git a/client/src/assets/player/video-renderer.ts b/client/src/assets/player/video-renderer.ts
index 4b54b661a..4affb43cf 100644
--- a/client/src/assets/player/video-renderer.ts
+++ b/client/src/assets/player/video-renderer.ts
@@ -50,7 +50,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca
50 50
51 return fallbackToMediaSource() 51 return fallbackToMediaSource()
52 }) 52 })
53 preparedElem.addEventListener('canplay', onLoadStart) 53 preparedElem.addEventListener('loadstart', onLoadStart)
54 return videostream(file, preparedElem) 54 return videostream(file, preparedElem)
55 } 55 }
56 56
@@ -66,7 +66,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca
66 66
67 return callback(err) 67 return callback(err)
68 }) 68 })
69 preparedElem.addEventListener('canplay', onLoadStart) 69 preparedElem.addEventListener('loadstart', onLoadStart)
70 70
71 const wrapper = new MediaElementWrapper(preparedElem) 71 const wrapper = new MediaElementWrapper(preparedElem)
72 const writable = wrapper.createWriteStream(codecs) 72 const writable = wrapper.createWriteStream(codecs)
@@ -95,7 +95,7 @@ function renderMedia (file, elem: HTMLVideoElement, opts: RenderMediaOptions, ca
95 } 95 }
96 96
97 function onLoadStart () { 97 function onLoadStart () {
98 preparedElem.removeEventListener('canplay', onLoadStart) 98 preparedElem.removeEventListener('loadstart', onLoadStart)
99 if (opts.autoplay) preparedElem.play() 99 if (opts.autoplay) preparedElem.play()
100 100
101 callback(null, renderer) 101 callback(null, renderer)
diff --git a/client/src/sass/video-js-custom.scss b/client/src/sass/video-js-custom.scss
index 680958a9f..350e7cdd5 100644
--- a/client/src/sass/video-js-custom.scss
+++ b/client/src/sass/video-js-custom.scss
@@ -21,6 +21,8 @@ $slider-bg-color: lighten($primary-background-color, 33%);
21$setting-transition-duration: 0.15s; 21$setting-transition-duration: 0.15s;
22$setting-transition-easing: ease-out; 22$setting-transition-easing: ease-out;
23 23
24$context-menu-width: 350px;
25
24.video-js.vjs-peertube-skin { 26.video-js.vjs-peertube-skin {
25 font-size: $font-size; 27 font-size: $font-size;
26 color: $primary-foreground-color; 28 color: $primary-foreground-color;
@@ -787,4 +789,32 @@ $setting-transition-easing: ease-out;
787 } 789 }
788 } 790 }
789 } 791 }
792}
793
794/* Sass for videojs-contextmenu-ui */
795
796.video-js .vjs-contextmenu-ui-menu {
797 position: absolute;
798 background-color: rgba(0, 0, 0, 0.5);
799 padding: 5px 0;
800 width: $context-menu-width;
801
802 .vjs-menu-content {
803 opacity: $primary-foreground-opacity;
804 color: $primary-foreground-color;
805 font-size: $font-size !important;
806 font-weight: $font-semibold;
807 }
808
809 .vjs-menu-item {
810 cursor: pointer;
811 font-size: 1em;
812 padding: 8px 16px;
813 text-align: left;
814 text-transform: none;
815
816 &:hover {
817 background-color: rgba(255, 255, 255, 0.2);
818 }
819 }
790} \ No newline at end of file 820} \ No newline at end of file
diff --git a/client/src/standalone/videos/embed.ts b/client/src/standalone/videos/embed.ts
index ba906cc32..d603690ca 100644
--- a/client/src/standalone/videos/embed.ts
+++ b/client/src/standalone/videos/embed.ts
@@ -91,6 +91,7 @@ loadVideoInfo(videoId)
91 const videojsOptions = getVideojsOptions({ 91 const videojsOptions = getVideojsOptions({
92 autoplay, 92 autoplay,
93 inactivityTimeout: 1500, 93 inactivityTimeout: 1500,
94 videoEmbedUrl: window.location.origin + videoInfo.embedPath,
94 videoViewUrl: getVideoUrl(videoId) + '/views', 95 videoViewUrl: getVideoUrl(videoId) + '/views',
95 playerElement: videoElement, 96 playerElement: videoElement,
96 videoFiles: videoInfo.files, 97 videoFiles: videoInfo.files,
diff --git a/client/yarn.lock b/client/yarn.lock
index 7806611f2..fe2e040d8 100644
--- a/client/yarn.lock
+++ b/client/yarn.lock
@@ -10006,6 +10006,21 @@ video.js@^5.19.2, "video.js@^6.8.0 || ^7.0.0", video.js@^7, video.js@^7.0.3:
10006 videojs-vtt.js "0.14.1" 10006 videojs-vtt.js "0.14.1"
10007 xhr "2.4.0" 10007 xhr "2.4.0"
10008 10008
10009videojs-contextmenu-ui@^4.0.0:
10010 version "4.0.0"
10011 resolved "https://registry.yarnpkg.com/videojs-contextmenu-ui/-/videojs-contextmenu-ui-4.0.0.tgz#e7ffceacac95c5d2bc7f80db6f75675404de542a"
10012 dependencies:
10013 global "^4.3.2"
10014 video.js "^5.19.2"
10015 videojs-contextmenu "^2.0.0"
10016
10017videojs-contextmenu@^2.0.0:
10018 version "2.0.0"
10019 resolved "https://registry.yarnpkg.com/videojs-contextmenu/-/videojs-contextmenu-2.0.0.tgz#7213c8c420ecd2904d26f19c21085f7ebf496e9e"
10020 dependencies:
10021 global "^4.3.2"
10022 video.js "^5.19.2"
10023
10009videojs-dock@^2.0.2: 10024videojs-dock@^2.0.2:
10010 version "2.1.2" 10025 version "2.1.2"
10011 resolved "https://registry.yarnpkg.com/videojs-dock/-/videojs-dock-2.1.2.tgz#621c27c6f7dd131c541535300ac545377e515a0e" 10026 resolved "https://registry.yarnpkg.com/videojs-dock/-/videojs-dock-2.1.2.tgz#621c27c6f7dd131c541535300ac545377e515a0e"
diff --git a/package.json b/package.json
index 4e890d771..608646e7d 100644
--- a/package.json
+++ b/package.json
@@ -65,7 +65,7 @@
65 "lint-staged": { 65 "lint-staged": {
66 "*.{css,md}": "precise-commits", 66 "*.{css,md}": "precise-commits",
67 "*.scss": [ 67 "*.scss": [
68 "sass-lint-auto-fix -c .sass-lint.yml --verbose", 68 "sass-lint -c .sass-lint.yml",
69 "git add" 69 "git add"
70 ] 70 ]
71 }, 71 },
@@ -156,7 +156,7 @@
156 "chai-json-schema": "^1.5.0", 156 "chai-json-schema": "^1.5.0",
157 "chai-xml": "^0.3.2", 157 "chai-xml": "^0.3.2",
158 "husky": "^1.0.0-rc.4", 158 "husky": "^1.0.0-rc.4",
159 "libxmljs": "^0.18.9-pre0", 159 "libxmljs": "0.18.8",
160 "lint-staged": "^7.1.0", 160 "lint-staged": "^7.1.0",
161 "maildev": "^1.0.0-rc3", 161 "maildev": "^1.0.0-rc3",
162 "mocha": "^5.0.0", 162 "mocha": "^5.0.0",
@@ -165,7 +165,6 @@
165 "prettier": "1.13.2", 165 "prettier": "1.13.2",
166 "prompt": "^1.0.0", 166 "prompt": "^1.0.0",
167 "sass-lint": "^1.12.1", 167 "sass-lint": "^1.12.1",
168 "sass-lint-auto-fix": "^0.10.0",
169 "source-map-support": "^0.5.0", 168 "source-map-support": "^0.5.0",
170 "spectacle-docs": "^1.0.2", 169 "spectacle-docs": "^1.0.2",
171 "supertest": "^3.0.0", 170 "supertest": "^3.0.0",
diff --git a/yarn.lock b/yarn.lock
index 90219a9cd..c1fed9c60 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -398,7 +398,7 @@ ajv-keywords@^1.0.0:
398 version "1.5.1" 398 version "1.5.1"
399 resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 399 resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
400 400
401ajv@^4.7.0, ajv@^4.9.1: 401ajv@^4.7.0:
402 version "4.11.8" 402 version "4.11.8"
403 resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 403 resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
404 dependencies: 404 dependencies:
@@ -2849,15 +2849,7 @@ fsevents@^1.1.2:
2849 nan "^2.9.2" 2849 nan "^2.9.2"
2850 node-pre-gyp "^0.10.0" 2850 node-pre-gyp "^0.10.0"
2851 2851
2852fstream-ignore@^1.0.5: 2852fstream@^1.0.0, fstream@^1.0.2:
2853 version "1.0.5"
2854 resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
2855 dependencies:
2856 fstream "^1.0.0"
2857 inherits "2"
2858 minimatch "^3.0.0"
2859
2860fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
2861 version "1.0.11" 2853 version "1.0.11"
2862 resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 2854 resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
2863 dependencies: 2855 dependencies:
@@ -3308,10 +3300,6 @@ gzip-size@^3.0.0:
3308 optionalDependencies: 3300 optionalDependencies:
3309 uglify-js "^2.6" 3301 uglify-js "^2.6"
3310 3302
3311har-schema@^1.0.5:
3312 version "1.0.5"
3313 resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
3314
3315har-schema@^2.0.0: 3303har-schema@^2.0.0:
3316 version "2.0.0" 3304 version "2.0.0"
3317 resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 3305 resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
@@ -3325,13 +3313,6 @@ har-validator@~2.0.6:
3325 is-my-json-valid "^2.12.4" 3313 is-my-json-valid "^2.12.4"
3326 pinkie-promise "^2.0.0" 3314 pinkie-promise "^2.0.0"
3327 3315
3328har-validator@~4.2.1:
3329 version "4.2.1"
3330 resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
3331 dependencies:
3332 ajv "^4.9.1"
3333 har-schema "^1.0.5"
3334
3335har-validator@~5.0.3: 3316har-validator@~5.0.3:
3336 version "5.0.3" 3317 version "5.0.3"
3337 resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" 3318 resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
@@ -3419,7 +3400,7 @@ hashish@~0.0.4:
3419 dependencies: 3400 dependencies:
3420 traverse ">=0.2.4" 3401 traverse ">=0.2.4"
3421 3402
3422hawk@3.1.3, hawk@~3.1.3: 3403hawk@~3.1.3:
3423 version "3.1.3" 3404 version "3.1.3"
3424 resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 3405 resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
3425 dependencies: 3406 dependencies:
@@ -4451,13 +4432,13 @@ levn@^0.3.0, levn@~0.3.0:
4451 prelude-ls "~1.1.2" 4432 prelude-ls "~1.1.2"
4452 type-check "~0.3.2" 4433 type-check "~0.3.2"
4453 4434
4454libxmljs@^0.18.9-pre0: 4435libxmljs@0.18.8:
4455 version "0.18.9-pre0" 4436 version "0.18.8"
4456 resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.9-pre0.tgz#2e607aae228d856777bab1205d54e0dcefe825ba" 4437 resolved "https://registry.yarnpkg.com/libxmljs/-/libxmljs-0.18.8.tgz#b0a07512a01290b6240600d6c2bc33a3c70976d6"
4457 dependencies: 4438 dependencies:
4458 bindings "~1.3.0" 4439 bindings "^1.3.0"
4459 nan "~2.10.0" 4440 nan "~2.10.0"
4460 node-pre-gyp "~0.6.37" 4441 node-pre-gyp "^0.9.1"
4461 4442
4462lint-staged@^7.1.0: 4443lint-staged@^7.1.0:
4463 version "7.1.2" 4444 version "7.1.2"
@@ -5013,7 +4994,7 @@ minimatch@0.3:
5013 lru-cache "2" 4994 lru-cache "2"
5014 sigmund "~1.0.0" 4995 sigmund "~1.0.0"
5015 4996
5016"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2: 4997"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2:
5017 version "3.0.4" 4998 version "3.0.4"
5018 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 4999 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
5019 dependencies: 5000 dependencies:
@@ -5283,7 +5264,7 @@ node-gyp@^3.3.1:
5283 tar "^2.0.0" 5264 tar "^2.0.0"
5284 which "1" 5265 which "1"
5285 5266
5286node-pre-gyp@0.9.1: 5267node-pre-gyp@0.9.1, node-pre-gyp@^0.9.1:
5287 version "0.9.1" 5268 version "0.9.1"
5288 resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" 5269 resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0"
5289 dependencies: 5270 dependencies:
@@ -5313,22 +5294,6 @@ node-pre-gyp@^0.10.0:
5313 semver "^5.3.0" 5294 semver "^5.3.0"
5314 tar "^4" 5295 tar "^4"
5315 5296
5316node-pre-gyp@~0.6.37:
5317 version "0.6.39"
5318 resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
5319 dependencies:
5320 detect-libc "^1.0.2"
5321 hawk "3.1.3"
5322 mkdirp "^0.5.1"
5323 nopt "^4.0.1"
5324 npmlog "^4.0.2"
5325 rc "^1.1.7"
5326 request "2.81.0"
5327 rimraf "^2.6.1"
5328 semver "^5.3.0"
5329 tar "^2.2.1"
5330 tar-pack "^3.4.0"
5331
5332node-redis-scripty@0.0.5: 5297node-redis-scripty@0.0.5:
5333 version "0.0.5" 5298 version "0.0.5"
5334 resolved "https://registry.yarnpkg.com/node-redis-scripty/-/node-redis-scripty-0.0.5.tgz#4bf2d365ab6dab202cc08b7ac63f8f55aadc9625" 5299 resolved "https://registry.yarnpkg.com/node-redis-scripty/-/node-redis-scripty-0.0.5.tgz#4bf2d365ab6dab202cc08b7ac63f8f55aadc9625"
@@ -5866,10 +5831,6 @@ pem@^1.12.3:
5866 safe-buffer "^5.1.1" 5831 safe-buffer "^5.1.1"
5867 which "^1.2.4" 5832 which "^1.2.4"
5868 5833
5869performance-now@^0.2.0:
5870 version "0.2.0"
5871 resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
5872
5873performance-now@^2.1.0: 5834performance-now@^2.1.0:
5874 version "2.1.0" 5835 version "2.1.0"
5875 resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 5836 resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -6289,10 +6250,6 @@ qs@~6.3.0:
6289 version "6.3.2" 6250 version "6.3.2"
6290 resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" 6251 resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
6291 6252
6292qs@~6.4.0:
6293 version "6.4.0"
6294 resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
6295
6296random-access-file@^2.0.1: 6253random-access-file@^2.0.1:
6297 version "2.0.1" 6254 version "2.0.1"
6298 resolved "https://registry.yarnpkg.com/random-access-file/-/random-access-file-2.0.1.tgz#dc22de79270e9a84cb36a2419b759725930dcaeb" 6255 resolved "https://registry.yarnpkg.com/random-access-file/-/random-access-file-2.0.1.tgz#dc22de79270e9a84cb36a2419b759725930dcaeb"
@@ -6604,33 +6561,6 @@ request@2, request@^2.81.0, request@^2.83.0:
6604 tunnel-agent "^0.6.0" 6561 tunnel-agent "^0.6.0"
6605 uuid "^3.1.0" 6562 uuid "^3.1.0"
6606 6563
6607request@2.81.0:
6608 version "2.81.0"
6609 resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
6610 dependencies:
6611 aws-sign2 "~0.6.0"
6612 aws4 "^1.2.1"
6613 caseless "~0.12.0"
6614 combined-stream "~1.0.5"
6615 extend "~3.0.0"
6616 forever-agent "~0.6.1"
6617 form-data "~2.1.1"
6618 har-validator "~4.2.1"
6619 hawk "~3.1.3"
6620 http-signature "~1.1.0"
6621 is-typedarray "~1.0.0"
6622 isstream "~0.1.2"
6623 json-stringify-safe "~5.0.1"
6624 mime-types "~2.1.7"
6625 oauth-sign "~0.8.1"
6626 performance-now "^0.2.0"
6627 qs "~6.4.0"
6628 safe-buffer "^5.0.1"
6629 stringstream "~0.0.4"
6630 tough-cookie "~2.3.0"
6631 tunnel-agent "^0.6.0"
6632 uuid "^3.0.0"
6633
6634request@~2.79.0: 6564request@~2.79.0:
6635 version "2.79.0" 6565 version "2.79.0"
6636 resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" 6566 resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
@@ -6734,7 +6664,7 @@ right-align@^0.1.1:
6734 dependencies: 6664 dependencies:
6735 align-text "^0.1.1" 6665 align-text "^0.1.1"
6736 6666
6737rimraf@2, rimraf@2.x.x, rimraf@^2.2.1, rimraf@^2.2.8, rimraf@^2.4.2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: 6667rimraf@2, rimraf@2.x.x, rimraf@^2.2.1, rimraf@^2.2.8, rimraf@^2.4.2, rimraf@^2.5.4, rimraf@^2.6.1:
6738 version "2.6.2" 6668 version "2.6.2"
6739 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 6669 resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
6740 dependencies: 6670 dependencies:
@@ -6811,9 +6741,9 @@ sass-graph@^2.2.4:
6811 scss-tokenizer "^0.2.3" 6741 scss-tokenizer "^0.2.3"
6812 yargs "^7.0.0" 6742 yargs "^7.0.0"
6813 6743
6814sass-lint-auto-fix@^0.10.0: 6744sass-lint-auto-fix@^0.9.0:
6815 version "0.10.0" 6745 version "0.9.2"
6816 resolved "https://registry.yarnpkg.com/sass-lint-auto-fix/-/sass-lint-auto-fix-0.10.0.tgz#89fd3cfd29fae30ddb7bbefa488053553ef0f10e" 6746 resolved "https://registry.yarnpkg.com/sass-lint-auto-fix/-/sass-lint-auto-fix-0.9.2.tgz#b8b6eb95644f7919dfea33d04c1fc19ae8f07a11"
6817 dependencies: 6747 dependencies:
6818 chalk "^2.3.2" 6748 chalk "^2.3.2"
6819 commander "^2.15.1" 6749 commander "^2.15.1"
@@ -7693,19 +7623,6 @@ tar-fs@^1.13.0:
7693 pump "^1.0.0" 7623 pump "^1.0.0"
7694 tar-stream "^1.1.2" 7624 tar-stream "^1.1.2"
7695 7625
7696tar-pack@^3.4.0:
7697 version "3.4.1"
7698 resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
7699 dependencies:
7700 debug "^2.2.0"
7701 fstream "^1.0.10"
7702 fstream-ignore "^1.0.5"
7703 once "^1.3.3"
7704 readable-stream "^2.1.4"
7705 rimraf "^2.5.1"
7706 tar "^2.2.1"
7707 uid-number "^0.0.6"
7708
7709tar-stream@^1.1.2: 7626tar-stream@^1.1.2:
7710 version "1.6.1" 7627 version "1.6.1"
7711 resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395" 7628 resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.1.tgz#f84ef1696269d6223ca48f6e1eeede3f7e81f395"
@@ -7718,7 +7635,7 @@ tar-stream@^1.1.2:
7718 to-buffer "^1.1.0" 7635 to-buffer "^1.1.0"
7719 xtend "^4.0.0" 7636 xtend "^4.0.0"
7720 7637
7721tar@^2.0.0, tar@^2.2.1: 7638tar@^2.0.0:
7722 version "2.2.1" 7639 version "2.2.1"
7723 resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 7640 resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
7724 dependencies: 7641 dependencies:
@@ -8054,10 +7971,6 @@ uglify-to-browserify@~1.0.0:
8054 version "1.0.2" 7971 version "1.0.2"
8055 resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 7972 resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
8056 7973
8057uid-number@^0.0.6:
8058 version "0.0.6"
8059 resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
8060
8061uint64be@^1.0.1: 7974uint64be@^1.0.1:
8062 version "1.0.1" 7975 version "1.0.1"
8063 resolved "https://registry.yarnpkg.com/uint64be/-/uint64be-1.0.1.tgz#1f7154202f2a1b8af353871dda651bf34ce93e95" 7976 resolved "https://registry.yarnpkg.com/uint64be/-/uint64be-1.0.1.tgz#1f7154202f2a1b8af353871dda651bf34ce93e95"