diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 00000000..949fb3c7
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,4 @@
+{
+ "extends": "airbnb",
+ "parser": "babel-eslint"
+}
diff --git a/Examples/VideoPlayer/VideoPlayer.xcodeproj/project.pbxproj b/Examples/VideoPlayer/VideoPlayer.xcodeproj/project.pbxproj
index 2a8de0fc..f40c2d81 100644
--- a/Examples/VideoPlayer/VideoPlayer.xcodeproj/project.pbxproj
+++ b/Examples/VideoPlayer/VideoPlayer.xcodeproj/project.pbxproj
@@ -302,7 +302,7 @@
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0610;
+ LastUpgradeCheck = 0720;
ORGANIZATIONNAME = Facebook;
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "VideoPlayer" */;
@@ -487,8 +487,10 @@
"$(SRCROOT)/node_modules/react-native/React/**",
);
INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = "-ObjC";
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = VideoPlayer;
};
name = Debug;
@@ -503,8 +505,10 @@
"$(SRCROOT)/node_modules/react-native/React/**",
);
INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = "-ObjC";
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = VideoPlayer;
};
name = Release;
@@ -529,6 +533,7 @@
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
diff --git a/Examples/VideoPlayer/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer.xcscheme b/Examples/VideoPlayer/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer.xcscheme
new file mode 100644
index 00000000..a328632b
--- /dev/null
+++ b/Examples/VideoPlayer/VideoPlayer.xcodeproj/xcshareddata/xcschemes/VideoPlayer.xcscheme
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Examples/VideoPlayer/iOS/Info.plist b/Examples/VideoPlayer/iOS/Info.plist
index e4b8e7c8..45532a3a 100644
--- a/Examples/VideoPlayer/iOS/Info.plist
+++ b/Examples/VideoPlayer/iOS/Info.plist
@@ -7,7 +7,7 @@
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
- org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
+ $(PRODUCT_BUNDLE_IDENTIFIER)
CFBundleInfoDictionaryVersion
6.0
CFBundleName
@@ -15,11 +15,11 @@
CFBundlePackageType
APPL
CFBundleShortVersionString
- 1.0
+ 1.0.0
CFBundleSignature
????
CFBundleVersion
- 1
+ 2
LSApplicationCategoryType
LSRequiresIPhoneOS
diff --git a/Examples/VideoPlayer/package.json b/Examples/VideoPlayer/package.json
index 6be7c953..dbdedb9f 100644
--- a/Examples/VideoPlayer/package.json
+++ b/Examples/VideoPlayer/package.json
@@ -1,15 +1,12 @@
{
"name": "VideoPlayer",
- "version": "0.0.1",
+ "version": "1.0.0",
"private": true,
"scripts": {
"start": "node_modules/react-native/packager/packager.sh"
},
- "scripts": {
- "postinstall" : "cp ../../*.js ../../*.m ../../*.h ../../README.md ../../package.json ./node_modules/react-native-video && cp ../../RCTVideo.xcodeproj/project.pbxproj ./node_modules/react-native-video/RCTVideo.xcodeproj/project.pbxproj"
- },
"dependencies": {
- "react-native": "^0.16.0",
- "react-native-video": "brentvatne/react-native-video"
+ "react-native": "0.18.1",
+ "react-native-video": "../../"
}
}
diff --git a/RCTVideo.xcodeproj/project.pbxproj b/RCTVideo.xcodeproj/project.pbxproj
index 8eda4458..9a65aa45 100644
--- a/RCTVideo.xcodeproj/project.pbxproj
+++ b/RCTVideo.xcodeproj/project.pbxproj
@@ -87,7 +87,7 @@
58B511D31A9E6C8500147676 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0610;
+ LastUpgradeCheck = 0720;
ORGANIZATIONNAME = Facebook;
TargetAttributes = {
58B511DA1A9E6C8500147676 = {
@@ -144,6 +144,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_OPTIMIZATION_LEVEL = 0;
diff --git a/Video.js b/Video.js
index 67978988..7e6f2840 100644
--- a/Video.js
+++ b/Video.js
@@ -1,4 +1,6 @@
-const React = require('react-native');
+import React from 'react-native';
+import VideoResizeMode from './VideoResizeMode.js';
+
const {
Component,
StyleSheet,
@@ -8,19 +10,18 @@ const {
View,
} = React;
-const VideoResizeMode = require('./VideoResizeMode');
-
const styles = StyleSheet.create({
base: {
overflow: 'hidden',
},
});
-class Video extends Component {
+export default class Video extends Component {
constructor(props, context) {
super(props, context);
this.seek = this.seek.bind(this);
+ this._assignRoot = this._assignRoot.bind(this);
this._onLoadStart = this._onLoadStart.bind(this);
this._onLoad = this._onLoad.bind(this);
this._onError = this._onError.bind(this);
@@ -34,44 +35,58 @@ class Video extends Component {
}
seek(time) {
- this.setNativeProps({ seek: parseFloat(time) });
+ this.setNativeProps({ seek: time });
+ }
+
+ _assignRoot(component) {
+ this._root = component;
}
_onLoadStart(event) {
- this.props.onLoadStart && this.props.onLoadStart(event.nativeEvent);
+ if (this.props.onLoadStart) {
+ this.props.onLoadStart(event.nativeEvent);
+ }
}
_onLoad(event) {
- this.props.onLoad && this.props.onLoad(event.nativeEvent);
+ if (this.props.onLoad) {
+ this.props.onLoad(event.nativeEvent);
+ }
}
_onError(event) {
- this.props.onError && this.props.onError(event.nativeEvent);
+ if (this.props.onError) {
+ this.props.onError(event.nativeEvent);
+ }
}
_onProgress(event) {
- this.props.onProgress && this.props.onProgress(event.nativeEvent);
+ if (this.props.onProgress) {
+ this.props.onProgress(event.nativeEvent);
+ }
}
_onSeek(event) {
- this.props.onSeek && this.props.onSeek(event.nativeEvent);
+ if (this.props.onSeek) {
+ this.props.onSeek(event.nativeEvent);
+ }
}
_onEnd(event) {
- this.props.onEnd && this.props.onEnd(event.nativeEvent);
+ if (this.props.onEnd) {
+ this.props.onEnd(event.nativeEvent);
+ }
}
render() {
const {
- style,
source,
- ref,
resizeMode,
} = this.props;
let uri = source.uri;
if (uri && uri.match(/^\//)) {
- uri = 'file://' + uri;
+ uri = `file://${uri}`;
}
const isNetwork = !!(uri && uri.match(/^https?:/));
@@ -90,10 +105,10 @@ class Video extends Component {
const nativeProps = Object.assign({}, this.props);
Object.assign(nativeProps, {
- style: [styles.base, style],
+ style: [styles.base, nativeProps.style],
resizeMode: nativeResizeMode,
src: {
- uri: uri,
+ uri,
isNetwork,
isAsset,
type: source.type || 'mp4',
@@ -108,8 +123,9 @@ class Video extends Component {
return (
this._root = component }
- {...nativeProps} />
+ ref={this._assignRoot}
+ {...nativeProps}
+ />
);
}
}
@@ -135,7 +151,7 @@ Video.propTypes = {
onProgress: PropTypes.func,
onSeek: PropTypes.func,
onEnd: PropTypes.func,
-
+
/* Required by react-native */
scaleX: React.PropTypes.number,
scaleY: React.PropTypes.number,
@@ -148,8 +164,6 @@ Video.propTypes = {
const RCTVideo = requireNativeComponent('RCTVideo', Video, {
nativeOnly: {
src: true,
- seek: true
+ seek: true,
},
});
-
-module.exports = Video;
diff --git a/VideoResizeMode.js b/VideoResizeMode.js
index 9d563fc5..15a89773 100644
--- a/VideoResizeMode.js
+++ b/VideoResizeMode.js
@@ -1,11 +1,7 @@
-'use strict';
+import keyMirror from 'keymirror';
-var keyMirror = require('keymirror');
-
-var VideoResizeMode = keyMirror({
+export default keyMirror({
contain: null,
cover: null,
stretch: null,
});
-
-module.exports = VideoResizeMode;
diff --git a/package.json b/package.json
index c9592151..cb13474f 100644
--- a/package.json
+++ b/package.json
@@ -36,9 +36,16 @@
"url": "git@github.com:brentvatne/react-native-video.git"
},
"devDependencies": {
- "jest-cli": "0.2.1"
+ "jest-cli": "0.2.1",
+ "eslint": "1.10.3",
+ "babel-eslint": "5.0.0-beta8",
+ "eslint-plugin-react": "3.16.1",
+ "eslint-config-airbnb": "4.0.0"
},
"dependencies": {
- "keymirror": "^0.1.1"
+ "keymirror": "0.1.1"
+ },
+ "scripts": {
+ "test": "node_modules/.bin/eslint *.js"
}
}