diff --git a/.babelrc b/.babelrc deleted file mode 100644 index a9ce1369e..000000000 --- a/.babelrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["react-native"] -} diff --git a/.gitignore b/.gitignore index 10be19751..1ab270441 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ local.properties node_modules/ npm-debug.log yarn-error.log +.yarn/ # BUCK buck-out/ @@ -51,3 +52,9 @@ buck-out/ fastlane/report.xml fastlane/Preview.html fastlane/screenshots + +/dist +/data/audio/*/*.mp3 +/data/audio/index.json +/data/torah/labels/*.json +/data/torah/json/*.json diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..bedfd47ef --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "MAM-parsed"] + path = MAM-parsed + url = git@github.com:bdenckla/MAM-parsed.git diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000..c4b43364b --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "printWidth": 100, + "trailingComma": "all" +} diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 000000000..91b1101f5 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,5 @@ +compressionLevel: mixed + +enableGlobalCache: false + +nodeLinker: node-modules diff --git a/App.js b/App.js deleted file mode 100644 index d20d6d281..000000000 --- a/App.js +++ /dev/null @@ -1,800 +0,0 @@ -/** - * Sample React Native App - * https://github.com/facebook/react-native - * - * @format - * @flow strict-local - */ - -import React from 'react'; -import type {Node} from 'react'; -import { - AppRegistry, - StyleSheet, - Text, - View, - TouchableOpacity, - ScrollView, - ActivityIndicator, - Button, - Modal, - Slider, - SafeAreaView, -} from 'react-native'; - -const RNFS = require('react-native-fs'); - -import { createAppContainer } from 'react-navigation'; -import { createStackNavigator } from 'react-navigation-stack'; - -let timeChecker = ""; - -var reactMixin = require('react-mixin'); -var TimerMixin = require('react-timer-mixin'); - - - -import calendar from './data/calendar.json'; -import aliyahData from './data/aliyah.json'; - - - -// Import Texts -import Amos from './data/torah/json/Amos.json'; -import Deuteronomy from './data/torah/json/Deuteronomy.json'; -import Exodus from './data/torah/json/Exodus.json'; -import Ezekiel from './data/torah/json/Ezekiel.json'; -import Genesis from './data/torah/json/Genesis.json'; -import Hosea from './data/torah/json/Hosea.json'; -import Isaiah from './data/torah/json/Isaiah.json'; -import Jeremiah from './data/torah/json/Jeremiah.json'; -import Joel from './data/torah/json/Joel.json'; -import Joshua from './data/torah/json/Joshua.json'; -import Judges from './data/torah/json/Judges.json'; -import Kings_1 from './data/torah/json/Kings_1.json'; -import Kings_2 from './data/torah/json/Kings_2.json'; -import Leviticus from './data/torah/json/Leviticus.json'; -import Malachi from './data/torah/json/Malachi.json'; -import Micah from './data/torah/json/Micah.json'; -import Numbers from './data/torah/json/Numbers.json'; -import Obadiah from './data/torah/json/Obadiah.json'; -import Samuel_1 from './data/torah/json/Samuel_1.json'; -import Samuel_2 from './data/torah/json/Samuel_2.json'; -import Zechariah from './data/torah/json/Zechariah.json'; - -// Import Translations -import GenesisTrans from './data/torah/translation/Genesis.json'; -import ExodusTrans from './data/torah/translation/Exodus.json'; -import DeuteronomyTrans from './data/torah/translation/Deuteronomy.json'; -import LeviticusTrans from './data/torah/translation/Leviticus.json'; -import NumbersTrans from './data/torah/translation/Numbers.json'; -import IsaiahTrans from './data/torah/translation/Isaiah.json'; -import JoshuaTrans from './data/torah/translation/Joshua.json'; -import JudgesTrans from './data/torah/translation/Judges.json'; -import MalachiTrans from './data/torah/translation/Malachi.json'; -import ObadiahTrans from './data/torah/translation/Obadiah.json'; -import Samuel_1Trans from './data/torah/translation/Samuel_1.json'; -import Samuel_2Trans from './data/torah/translation/Samuel_2.json'; -import ZechariahTrans from './data/torah/translation/Zechariah.json'; -import JoelTrans from './data/torah/translation/Joel.json'; -import JeremiahTrans from './data/torah/translation/Jeremiah.json'; -import HoseaTrans from './data/torah/translation/Hosea.json'; -import EzekielTrans from './data/torah/translation/Ezekiel.json'; -import AmosTrans from './data/torah/translation/Amos.json'; -import Kings_2Trans from './data/torah/translation/Kings_2.json'; -import Kings_1Trans from './data/torah/translation/Kings_1.json'; - -// Import the react-native-sound module -var Sound = require('react-native-sound'); - -// Enable playback in silence mode (iOS only) -Sound.setCategory('Playback'); - - - -class CustomButton extends React.Component { - render() { - return ( - - - {this.props.buttonTitle} - - - ); - } -} - -class FooterButton extends React.Component { - render() { - return ( - - - {this.props.buttonTitle} - - - ); - } -} - - - -class HomeScreen extends React.Component { - static navigationOptions = { - title: "Home", - }; - render() { - const { navigate } = this.props.navigation; - - //figure out current parshah - let parashah; - let weekOffset = 1; - - - while (!parashah) { - let date = new Date(); - date.setDate(date.getDate() + (6 - 1 - date.getDay() + 7) % 7 + weekOffset); - var day = date.getDate(); - var month = date.getMonth()+1; //January is 0! - var year = date.getFullYear(); - dateString = month + '/' + day + '/' + year; - console.log(dateString) - parashah = calendar[dateString]; - console.log(parashah) - weekOffset += 1; - } - - let parshahLookup; - - for (q = 0; q < aliyahData.parshiot.parsha.length; q++) { - - if (aliyahData.parshiot.parsha[q]._id.replace(/[ ’]/g, '\'') == parashah.name ) { - parshahLookup = aliyahData.parshiot.parsha[q]; - break; - } - - } - // - - return ( - - navigate('TorahReadingsScreen')} buttonTitle="List of Torah Readings" /> - navigate('AliyahSelectScreen',{ parshah: parshahLookup._id, haftara: parshahLookup._haftara, haftaraLength: parshahLookup._haftaraLength, haftaraLength2: parshahLookup._haftaraLength2, maftirOffset: parshahLookup.maftirOffset, aliyot: parshahLookup.fullkriyah.aliyah, originatingBook: parshahLookup._verse.split(" ")[0] })} buttonTitle="This Week's Torah Readings" /> - navigate('About')} buttonTitle="About this App" /> - - ); - } -} - -class AboutScreen extends React.Component { - static navigationOptions = { - title: 'About', - }; - render() { - return ( - - PocketTorah is a labor of love maintained by Russel Neiss & Charlie Schwartz. - Initially funded by the Jewish New Media Innovation Fund, PocketTorah is designed to help you learn the weekly Torah and Haftarah portions anywhere, at any time, for free. - If you like it, or find it useful, please consider making a donation to the Jewish charity of your choice. - Torah Readers: - - Etta Abramson - Joshua Foster - Eitan Konigsberg - Eytan Kurshan - Ari Lucas - Rabbi Ita Paskind - Rebecca Russo - Joshua Schwartz - Abigail Teller - - - ); - } -} - -class TorahReadingsScreen extends React.Component { - static navigationOptions = { - title: 'Torah Readings', - }; - render() { - //convert parshah json to array - var parshahArray = aliyahData.parshiot.parsha.map(x => x); - - //create button for each parsha - var content = parshahArray.map((obj) => ( navigate('AliyahSelectScreen', { parshah: obj._id, haftara: obj._haftara, haftaraLength: obj._haftaraLength, haftaraLength2: obj._haftaraLength2, maftirOffset: obj.maftirOffset, aliyot: obj.fullkriyah.aliyah, originatingBook: obj._verse.split(" ")[0] })} buttonTitle={obj._id} />) ); - - const { params } = this.props.navigation.state; - const { navigate } = this.props.navigation; - return ( - - - {content} - - - ); - } -} - -class AliyahSelectScreen extends React.Component { - static navigationOptions = ({ navigation }) => ({ - title: `${navigation.state.params.parshah}`, - }); - render() { - const { params } = this.props.navigation.state; - const { navigate } = this.props.navigation; - var content = params.aliyot.map((obj) => ( navigate('PlayViewScreen', { parshah: obj._id, aliyotStart: obj._begin, aliyotEnd: obj._end, length: obj._numverses, maftirOffset: params.maftirOffset, title: params.parshah, originatingBook: params.originatingBook, aliyahNum: obj._num })} buttonTitle={obj._num !="M" ? "Aliyah "+obj._num+": "+obj._begin+"-"+obj._end : "Maftir Aliyah"+": "+obj._begin+"-"+obj._end} />) ); - if (params.haftara) { - var hafTitle = params.haftara.split(' ')[0]; - var hafStart = params.haftara.split(' ')[1]; - var hafEnd = params.haftara.split(' ')[3]; - if (params.haftaraLength2) { - var hafStart2 = params.haftara.split(';')[1].split(' ')[1]; - var hafEnd2 = params.haftara.split(';')[1].split(' ')[3]; - } - - content.push( - navigate('PlayViewScreen', {parshah: hafTitle, hafStart2: hafStart2, hafEnd2: hafEnd2, aliyotStart: hafStart, aliyotEnd: hafEnd, length: params.haftaraLength, length2: params.haftaraLength2, title: params.parshah, originatingBook: hafTitle, aliyahNum: "H" })} buttonTitle={"Haftarah"+": "+hafTitle.replace(/_/g, ' ')+" "+hafStart+"-"+hafEnd} /> - ); - } - return ( - - {content} - - ); - } -} - - -class PlayViewScreen extends React.Component { - static navigationOptions = ({ navigation }) => { - const { state } = navigation; - const { renderHeaderRight } = state.params; - return { - title: `${navigation.state.params.title}`, - headerRight: renderHeaderRight && renderHeaderRight() - } - }; - - componentWillMount() { - this.props.navigation.setParams({ - renderHeaderRight: () =>