Dev #3
|
@ -179,6 +179,7 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation project(':@react-native-community_async-storage')
|
||||
implementation fileTree(dir: "libs", include: ["*.jar"])
|
||||
implementation "com.facebook.react:react-native:+" // From node_modules
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import android.app.Application;
|
|||
import android.content.Context;
|
||||
import com.facebook.react.PackageList;
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.reactnativecommunity.asyncstorage.AsyncStoragePackage;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
rootProject.name = 'ankilan'
|
||||
include ':@react-native-community_async-storage'
|
||||
project(':@react-native-community_async-storage').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/async-storage/android')
|
||||
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
|
||||
include ':app'
|
||||
|
|
|
@ -34,6 +34,8 @@ target 'ankilan' do
|
|||
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
|
||||
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
|
||||
|
||||
pod 'RNCAsyncStorage', :path => '../node_modules/@react-native-community/async-storage'
|
||||
|
||||
target 'ankilanTests' do
|
||||
inherit! :search_paths
|
||||
# Pods for testing
|
||||
|
|
|
@ -10,8 +10,10 @@
|
|||
"lint": "eslint ."
|
||||
},
|
||||
"dependencies": {
|
||||
"@react-native-community/async-storage": "^1.8.1",
|
||||
"axios": "^0.19.2",
|
||||
"babel-preset-react-native": "^4.0.1",
|
||||
"jsonfn": "^0.31.0",
|
||||
"native-base": "^2.13.8",
|
||||
"node-fetch": "^2.6.0",
|
||||
"react": "16.13.0",
|
||||
|
|
|
@ -69,7 +69,6 @@ export const getModelList = () => async dispatch => {
|
|||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
console.log(res);
|
||||
await dispatch(setModelList(res));
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import {AnkiDroid} from 'react-native-ankidroid/dist/ankidroid';
|
||||
import {
|
||||
SET_ANKI_NOTE_CREATOR,
|
||||
SET_CREATOR_TEMPLATE,
|
||||
SET_DECK,
|
||||
SET_FIELDS,
|
||||
} from '../constants/anki-constants';
|
||||
|
||||
export const selectDeck = id => ({
|
||||
|
@ -19,3 +19,41 @@ export const setCreatorTemplate = template => ({
|
|||
type: SET_CREATOR_TEMPLATE,
|
||||
payload: template,
|
||||
});
|
||||
|
||||
const parseToAnkiFormat = dict => {
|
||||
/*
|
||||
*** TEMPLATE ***
|
||||
const modelFields = [
|
||||
'Word or sentence',
|
||||
'Part of speech 1',
|
||||
'Translation 1',
|
||||
'Definition 1',
|
||||
'Part of speech 2',
|
||||
'Translation 2',
|
||||
'Definition 2',
|
||||
'Usage example',
|
||||
'Transcription',
|
||||
'Sound',
|
||||
]
|
||||
*/
|
||||
|
||||
const tr1 = dict.compounded[0];
|
||||
const tr2 = dict.compounded[1] || {};
|
||||
return [
|
||||
dict.word,
|
||||
tr1.pos,
|
||||
tr1.tr,
|
||||
tr1.definition,
|
||||
tr2.pos || '',
|
||||
tr2.tr || '',
|
||||
tr2.definition || '',
|
||||
`${tr1.example || ''} \n ${tr2.example || ''}`,
|
||||
dict.pronunciation,
|
||||
`[sound:${dict.sound}]`,
|
||||
];
|
||||
};
|
||||
|
||||
export const setFields = dict => ({
|
||||
type: SET_FIELDS,
|
||||
payload: parseToAnkiFormat(dict),
|
||||
});
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import {search} from 'urban-dictionary-client';
|
||||
import {
|
||||
SET_AVAILABLE_API,
|
||||
SET_PARSED_DICTIONARY,
|
||||
URBAN_DICTIONARY_API,
|
||||
WORDS_API,
|
||||
} from '../../constants/api-constants';
|
||||
|
@ -11,6 +12,8 @@ import {
|
|||
parseUrbanDictionaryApi,
|
||||
} from './urban-dictionary';
|
||||
import {createDictionary} from '../dictionary/create-dictionary';
|
||||
import {setFields} from '../anki-set-actions';
|
||||
import {sendWord, submit} from '../form-actions';
|
||||
|
||||
const getAvailableApi = (apiArray = []) => {
|
||||
for (const api of apiArray) {
|
||||
|
@ -25,6 +28,10 @@ const setAvailableApi = api => ({
|
|||
type: SET_AVAILABLE_API,
|
||||
payload: api,
|
||||
});
|
||||
const setDictioanry = dictioanry => ({
|
||||
type: SET_PARSED_DICTIONARY,
|
||||
payload: dictioanry,
|
||||
});
|
||||
|
||||
export const wordInfo = word => async dispatch => {
|
||||
try {
|
||||
|
@ -40,7 +47,9 @@ export const wordInfo = word => async dispatch => {
|
|||
//function which return universal template for more simple interaction with api
|
||||
//TODO available dictionary instead api1
|
||||
await dispatch(setAvailableApi(api1));
|
||||
await createDictionary(api1);
|
||||
const wordDictionary = await createDictionary(api1);
|
||||
dispatch(setDictioanry(wordDictionary));
|
||||
sendWord(setFields(wordDictionary));
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
}
|
||||
|
|
27
src/actions/api/f-json.js
Normal file
27
src/actions/api/f-json.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
// The object
|
||||
// the string version of a function with /Function(
|
||||
// in front and )/ at the end.
|
||||
export const fJsonStingify = obj => {
|
||||
return JSON.stringify(obj, function(key, value) {
|
||||
if (typeof value === 'function') {
|
||||
return '/Function(' + value.toString() + ')/';
|
||||
}
|
||||
return value;
|
||||
});
|
||||
};
|
||||
// Convert to an object using a reviver function that
|
||||
// recognizes the /Function(...)/ value and converts it
|
||||
// into a function via -shudder- `eval`.
|
||||
export const fJsonParse = json => {
|
||||
return JSON.parse(json, function(key, value) {
|
||||
if (
|
||||
typeof value === 'string' &&
|
||||
value.startsWith('/Function(') &&
|
||||
value.endsWith(')/')
|
||||
) {
|
||||
value = value.substring(10, value.length - 2);
|
||||
return eval('(' + value + ')');
|
||||
}
|
||||
return value;
|
||||
});
|
||||
};
|
|
@ -1,12 +1,11 @@
|
|||
const getAudio = async word => {
|
||||
const site = await fetch(word, {
|
||||
const site = await fetch(`https://www.lexico.com/definition/${word}`, {
|
||||
method: 'GET',
|
||||
headers: {'Content-Type': 'text/html'},
|
||||
});
|
||||
const html = await site.text();
|
||||
const getSrc = new RegExp('<audio.+?src="(.+?)".+?/?>');
|
||||
const src = html.match(getSrc)[1];
|
||||
console.log(src);
|
||||
|
||||
return src;
|
||||
};
|
||||
|
|
|
@ -13,7 +13,6 @@ const yDictionary = async (
|
|||
{method: 'GET'},
|
||||
);
|
||||
const json = await res.json();
|
||||
// console.log(word, json.def);
|
||||
return findPartofSpeech(json.def);
|
||||
} catch (e) {
|
||||
console.log('err in yandex-dictionary.js: ', e);
|
||||
|
|
|
@ -1,177 +1,35 @@
|
|||
import {AnkiDroid} from 'react-native-ankidroid/dist/ankidroid';
|
||||
import {setAnkiNoteCreator, setCreatorTemplate} from './anki-set-actions';
|
||||
import sendDataToLocaleStorage from './filesystem';
|
||||
import setSettings, {
|
||||
modelFields,
|
||||
valueFields,
|
||||
} from '../constants/anki-model-values';
|
||||
import {
|
||||
checkAnkiLanModelForExisting,
|
||||
getFieldList,
|
||||
getModelList,
|
||||
} from './anki-get-actions';
|
||||
|
||||
import JSONfn from 'jsonfn';
|
||||
import store from '../store';
|
||||
export const createAnkiLanModel = model => async dispatch => {
|
||||
try {
|
||||
const deckName = model.deck.name;
|
||||
const modelName = model.name;
|
||||
const dbDeckReference = 'com.anki.decks';
|
||||
const dbModelReference = 'com.anki.models';
|
||||
const tags = ['AnkiLan'];
|
||||
const modelFields = [
|
||||
'Word or sentence',
|
||||
'Part of speech 1',
|
||||
'Translation 1',
|
||||
'Definition 1',
|
||||
'Part of speech 2',
|
||||
'Translation 2',
|
||||
'Definition 2',
|
||||
'Usage example',
|
||||
'Transcription',
|
||||
'Sound',
|
||||
];
|
||||
const cardNames = ['Russian>English', 'English>Russian'];
|
||||
const css = `.card {
|
||||
font-family: 'Roboto', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
|
||||
font-size: 24px;
|
||||
text-align: center;
|
||||
color: black;
|
||||
background-color: white;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
const settings = setSettings(model);
|
||||
|
||||
.big {
|
||||
font-size: 48px;
|
||||
}
|
||||
|
||||
.small {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.sound--container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 0px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sound {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.transcription {
|
||||
color: #1e7efc;
|
||||
font-weight: bold;
|
||||
}
|
||||
.list{
|
||||
list-style: none;
|
||||
display: flex;
|
||||
flex-direction:column;
|
||||
align-items:center;
|
||||
padding: 0;
|
||||
}
|
||||
.definition{
|
||||
font-size: 20px;
|
||||
font-famyli: sans-serif;
|
||||
font-style: italic;
|
||||
display: block;
|
||||
margin: 7px ;
|
||||
padding: 0 20px ;
|
||||
white-space: normal;
|
||||
width: 70vw;
|
||||
}
|
||||
.usage{
|
||||
background-color: rgba(100,100,100,0.1);
|
||||
padding: 10px;
|
||||
font-size: 20px;
|
||||
white-space: normal;
|
||||
width: 70vw;
|
||||
margin: 0 auto;
|
||||
border-radius: 5px;
|
||||
}`;
|
||||
|
||||
const questionFmt1 = `
|
||||
<div class="big">{{Word or sentence}}</div>
|
||||
<ul class="list">
|
||||
<li>
|
||||
<div class="small">{{Part of speech 1}}</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="small">{{Part of speech 2}}</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="sound--container">
|
||||
<div class="transcription">{{Transcription}}</div>
|
||||
<span class="sound">{{Sound}}</span>
|
||||
`;
|
||||
|
||||
const questionFmt2 = '<div class="big">{{Translation 1}}</div>';
|
||||
|
||||
const questionFormat = [questionFmt1, questionFmt2];
|
||||
|
||||
const answerFmt1 = `
|
||||
<div class="big">{{Word or sentence}}</div>
|
||||
<div class="sound--container">
|
||||
<div class="transcription">{{Transcription}}</div>
|
||||
<span class="sound">{{Sound}}</span>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="usage">{{Usage example}}</div>
|
||||
<hr />
|
||||
<ul class="list">
|
||||
<li>
|
||||
<div>
|
||||
<div class="small">{{Part of speech 1}}</div>
|
||||
<pre class="definition">{{Definition 1}}</pre>
|
||||
<div>{{Translation 1}}</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<div class="small">{{Part of speech 2}}</div>
|
||||
<pre class="definition">{{Definition 2}}</pre>
|
||||
<div>{{Translation 2}}</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`;
|
||||
const answerFormat = [answerFmt1, answerFmt1];
|
||||
|
||||
// ADDING NOTES //
|
||||
|
||||
const deckProperties = {
|
||||
name: deckName,
|
||||
reference: dbDeckReference,
|
||||
};
|
||||
const modelProperties = {
|
||||
name: modelName,
|
||||
reference: dbModelReference,
|
||||
fields: modelFields,
|
||||
tags,
|
||||
cardNames,
|
||||
questionFormat,
|
||||
answerFormat,
|
||||
css,
|
||||
};
|
||||
|
||||
const valueFields = [
|
||||
'AnkiLan',
|
||||
'Translate by typing the word',
|
||||
'',
|
||||
'You can type the word in input field and get translate, sound and definition of this word',
|
||||
'Translate via sharing',
|
||||
'',
|
||||
'You can mark the word in you phone and share it with AnkiLan',
|
||||
'IMAGE WILL BE HERE',
|
||||
'guide',
|
||||
'',
|
||||
];
|
||||
|
||||
const settings = {
|
||||
modelId: undefined,
|
||||
modelProperties: modelProperties,
|
||||
deckId: model.deck.id,
|
||||
deckProperties: deckProperties,
|
||||
};
|
||||
const selectedDeck = new AnkiDroid(settings);
|
||||
await dispatch(setAnkiNoteCreator(selectedDeck));
|
||||
await dispatch(setCreatorTemplate(modelFields));
|
||||
// const sd = JSON.parse(JSON.stringify(selectedDeck));
|
||||
// console.log(sd === selectedDeck);
|
||||
// ****************
|
||||
alert('oh shit');
|
||||
addNote(selectedDeck, valueFields, modelFields);
|
||||
// ****************
|
||||
// sendDataToLocaleStorage(
|
||||
// setAnkiNoteCreator(sd), //send creator to locale storage
|
||||
// setCreatorTemplate(modelFields),
|
||||
// );
|
||||
checkAnkiLanModelForExisting(model.name, model.list);
|
||||
await dispatch(getModelList());
|
||||
await dispatch(getFieldList(model.name));
|
||||
|
@ -180,6 +38,15 @@ export const createAnkiLanModel = model => async dispatch => {
|
|||
}
|
||||
};
|
||||
|
||||
export const addNote = (creator, words, template) => {
|
||||
creator.addNote(words, template);
|
||||
//creator is an object what have to store in locale storage.
|
||||
export const addNote = words => {
|
||||
const template = store.getState().anki.noteTemplate;
|
||||
const settings = {
|
||||
deckId: '1',
|
||||
modelId: '1585139654585',
|
||||
};
|
||||
const creator = new AnkiDroid(settings);
|
||||
|
||||
creator.addNote(words, template);
|
||||
alert('sucssess');
|
||||
};
|
||||
|
|
|
@ -5,6 +5,7 @@ import {compoundWithYDictionary} from './get-translate';
|
|||
export const createDictionary = async apiRes => {
|
||||
const word = apiRes.word;
|
||||
const parsedDictionary = parseDictionary(apiRes);
|
||||
// const audio = await getAudio(word);
|
||||
await compoundWithYDictionary(parsedDictionary, word);
|
||||
const audio = await getAudio(word);
|
||||
const compounded = await compoundWithYDictionary(parsedDictionary, word);
|
||||
return {...compounded, sound: audio};
|
||||
};
|
||||
|
|
|
@ -5,7 +5,6 @@ export const compoundWithYDictionary = async (definitionList, word) => {
|
|||
let compounded = [];
|
||||
// console.log('YANDEX ', translations);
|
||||
// console.log('WORDS', definitionList);
|
||||
|
||||
translations.forEach(translate => {
|
||||
definitionList.words.forEach(definition => {
|
||||
if (definition.pos === translate.pos) {
|
||||
|
@ -17,7 +16,12 @@ export const compoundWithYDictionary = async (definitionList, word) => {
|
|||
compounded.push(translate);
|
||||
}
|
||||
});
|
||||
console.log(`RESPONSE FOR: ${word}`, compounded);
|
||||
// console.log(`RESPONSE FOR: ${word}`, {word, compounded});
|
||||
return {
|
||||
word,
|
||||
pronunciation: `/${definitionList.pronunciation}/`,
|
||||
compounded,
|
||||
};
|
||||
} catch (e) {
|
||||
console.log('erris HERE', e);
|
||||
}
|
||||
|
@ -35,6 +39,5 @@ export const compoundWithYDictionary = async (definitionList, word) => {
|
|||
});
|
||||
})();
|
||||
const yDictionaryRes = smallStore.res.payload;
|
||||
alert('foo');
|
||||
console.log(yDictionaryRes, definitionList);
|
||||
};*/
|
||||
|
|
48
src/actions/filesystem.js
Normal file
48
src/actions/filesystem.js
Normal file
|
@ -0,0 +1,48 @@
|
|||
import AsyncStorage from '@react-native-community/async-storage';
|
||||
import {
|
||||
ANKILAN_NOTE_CREATOR,
|
||||
ANKILAN_NOTE_TEMPLATE,
|
||||
} from '../constants/anki-constants';
|
||||
import JSONfn from 'jsonfn';
|
||||
|
||||
const sendDataToLocaleStorage = async (creator, template) => {
|
||||
try {
|
||||
await AsyncStorage.clear();
|
||||
|
||||
await AsyncStorage.setItem(ANKILAN_NOTE_CREATOR, JSONfn.stringify(creator));
|
||||
await AsyncStorage.setItem(
|
||||
ANKILAN_NOTE_TEMPLATE,
|
||||
JSONfn.stringify(template),
|
||||
);
|
||||
} catch (e) {
|
||||
// saving error
|
||||
alert('Error while syncing with filesystem');
|
||||
console.log(e);
|
||||
}
|
||||
};
|
||||
export default sendDataToLocaleStorage;
|
||||
|
||||
export const getTemplate = async () => {
|
||||
try {
|
||||
const value = await AsyncStorage.getItem(ANKILAN_NOTE_TEMPLATE);
|
||||
console.log(value);
|
||||
if (value !== null) {
|
||||
// value previously stored
|
||||
return JSONfn.parse(value);
|
||||
}
|
||||
} catch (e) {
|
||||
// error reading value
|
||||
}
|
||||
};
|
||||
|
||||
export const getCreator = async () => {
|
||||
try {
|
||||
const value = await AsyncStorage.getItem(ANKILAN_NOTE_CREATOR);
|
||||
if (value !== null) {
|
||||
// value previously stored
|
||||
return JSONfn.parse(value);
|
||||
}
|
||||
} catch (e) {
|
||||
// error reading value
|
||||
}
|
||||
};
|
12
src/actions/form-actions.js
Normal file
12
src/actions/form-actions.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
import {getCreator, getTemplate} from './filesystem';
|
||||
import {addNote} from './createAnkiLanModel';
|
||||
|
||||
export const submit = () => ({});
|
||||
export const sendWord = async fields => {
|
||||
// const creator = await getCreator();
|
||||
// const template = JSON.parse(await getTemplate()).payload;
|
||||
// console.log(creator);
|
||||
// console.log(template);
|
||||
console.log(fields);
|
||||
addNote(fields.payload);
|
||||
};
|
|
@ -1,4 +1,4 @@
|
|||
import React, {useEffect} from 'react';
|
||||
import React, {useEffect, useState} from 'react';
|
||||
import {connect} from 'react-redux';
|
||||
import DeckPicker from './view/deck-picker';
|
||||
import {Form, Container, Item} from 'native-base';
|
||||
|
@ -8,22 +8,30 @@ import SubmitButton from './view/submit-button';
|
|||
import {wordInfo} from "../actions/api/dictionary";
|
||||
|
||||
const AnkiForm = props => {
|
||||
const [target, setTarget] = useState('')
|
||||
useEffect(() => {
|
||||
props.wordInfo('Urge');
|
||||
props.wordInfo('Maze');
|
||||
props.wordInfo('Ramification');
|
||||
props.wordInfo('Dare');
|
||||
props.wordInfo('Entrepreneurship');
|
||||
props.wordInfo('meagre');
|
||||
props.wordInfo('meager');
|
||||
// props.wordInfo('Urge');
|
||||
// props.wordInfo('Maze');
|
||||
// props.wordInfo('Ramification');
|
||||
// props.wordInfo('Dare');
|
||||
// props.wordInfo('Entrepreneurship');
|
||||
// props.wordInfo('meagre');
|
||||
// props.wordInfo('meager');
|
||||
|
||||
}, []);
|
||||
const getWord = (word) => {
|
||||
setTarget(word)
|
||||
};
|
||||
const submit = () => {
|
||||
props.wordInfo(target);
|
||||
};
|
||||
|
||||
return (
|
||||
<Container style={{padding: 20}}>
|
||||
<Form onSubmit={() => alert('hell')}>
|
||||
<Form >
|
||||
<DeckPicker />
|
||||
<InputWord />
|
||||
<SubmitButton />
|
||||
<InputWord word={getWord} onSubmit={submit}/>
|
||||
<SubmitButton onSubmit={submit} />
|
||||
</Form>
|
||||
</Container>
|
||||
);
|
||||
|
|
|
@ -4,9 +4,10 @@ import {Button, Text} from 'native-base';
|
|||
|
||||
const SubmitButton = props => {
|
||||
return (
|
||||
<Button type="submit">
|
||||
<Button onPress={props.onSubmit}>
|
||||
<Text>Submit</Text>
|
||||
</Button>
|
||||
);
|
||||
};
|
||||
export default connect()(SubmitButton);
|
||||
export default SubmitButton
|
||||
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import React from 'react';
|
||||
import React, {useRef} from 'react';
|
||||
import {connect} from 'react-redux';
|
||||
import {TextField} from 'react-native-material-textfield';
|
||||
|
||||
const InputWord = props => {
|
||||
const submit = () => {};
|
||||
return <TextField label={'Your word'} onChange={submit} />;
|
||||
const sendWord = (word) => {
|
||||
props.word(word)
|
||||
};
|
||||
return <TextField label={'Your word'} onChangeText={word => sendWord(word)} onSubmitEditing={props.onSubmit}/>;
|
||||
};
|
||||
export default connect(state => ({}), {})(InputWord);
|
||||
|
|
|
@ -17,7 +17,12 @@ export const SET_WORD_SOUND = 'SET_WORD_SOUND';
|
|||
export const SET_WORD_TRANSLATE = 'SET_WORD_TRANSLATE';
|
||||
export const SET_ANKI_NOTE_CREATOR = 'SET_ANKI_NOTE_CREATOR';
|
||||
export const SET_CREATOR_TEMPLATE = 'SET_CREATOR_TEMPLATE';
|
||||
export const SET_FIELDS = 'SET_FIELDS';
|
||||
//Anki ui actions
|
||||
export const SHOW_FIELDS = 'SHOW_FIELDS';
|
||||
// Anki check actions
|
||||
export const SET_EXISTING_OF_ANKI_LAN_MODEL = 'SET_EXISTING_OF_ANKI_LAN_MODEL';
|
||||
|
||||
//rn-async-storage kesy
|
||||
export const ANKILAN_NOTE_CREATOR = '@ANKILAN_NOTE_CREATOR';
|
||||
export const ANKILAN_NOTE_TEMPLATE = '@ANKILAN_NOTE_TEMPLATE';
|
||||
|
|
165
src/constants/anki-model-values.js
Normal file
165
src/constants/anki-model-values.js
Normal file
|
@ -0,0 +1,165 @@
|
|||
export const modelFields = [
|
||||
'Word or sentence',
|
||||
'Part of speech 1',
|
||||
'Translation 1',
|
||||
'Definition 1',
|
||||
'Part of speech 2',
|
||||
'Translation 2',
|
||||
'Definition 2',
|
||||
'Usage example',
|
||||
'Transcription',
|
||||
'Sound',
|
||||
];
|
||||
|
||||
export const valueFields = [
|
||||
'AnkiLan',
|
||||
'Translate by typing the word',
|
||||
'',
|
||||
'You can type the word in input field and get translate, sound and definition of this word',
|
||||
'Translate via sharing',
|
||||
'',
|
||||
'You can mark the word in you phone and share it with AnkiLan',
|
||||
'IMAGE WILL BE HERE',
|
||||
'guide',
|
||||
'',
|
||||
];
|
||||
|
||||
const setSettings = model => {
|
||||
const deckName = model.deck.name;
|
||||
const modelName = model.name;
|
||||
const dbDeckReference = 'com.anki.decks';
|
||||
const dbModelReference = 'com.anki.models';
|
||||
const tags = ['AnkiLan'];
|
||||
|
||||
const cardNames = ['Russian>English', 'English>Russian'];
|
||||
const css = `.card {
|
||||
font-family: 'Roboto', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif;
|
||||
font-size: 24px;
|
||||
text-align: center;
|
||||
color: black;
|
||||
background-color: white;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.big {
|
||||
font-size: 48px;
|
||||
}
|
||||
|
||||
.small {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.sound--container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
padding: 0px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.sound {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.transcription {
|
||||
color: #1e7efc;
|
||||
font-weight: bold;
|
||||
}
|
||||
.list{
|
||||
list-style: none;
|
||||
display: flex;
|
||||
flex-direction:column;
|
||||
align-items:center;
|
||||
padding: 0;
|
||||
}
|
||||
.definition{
|
||||
font-size: 20px;
|
||||
font-famyli: sans-serif;
|
||||
font-style: italic;
|
||||
display: block;
|
||||
margin: 7px ;
|
||||
padding: 0 20px ;
|
||||
white-space: normal;
|
||||
width: 70vw;
|
||||
}
|
||||
.usage{
|
||||
background-color: rgba(100,100,100,0.1);
|
||||
padding: 10px;
|
||||
font-size: 20px;
|
||||
white-space: normal;
|
||||
width: 70vw;
|
||||
margin: 0 auto;
|
||||
border-radius: 5px;
|
||||
}`;
|
||||
|
||||
const questionFmt1 = `
|
||||
<div class="big">{{Word or sentence}}</div>
|
||||
<ul class="list">
|
||||
<li>
|
||||
<div class="small">{{Part of speech 1}}</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="small">{{Part of speech 2}}</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="sound--container">
|
||||
<div class="transcription">{{Transcription}}</div>
|
||||
<span class="sound">{{Sound}}</span>
|
||||
`;
|
||||
|
||||
const questionFmt2 = '<div class="big">{{Translation 1}}</div>';
|
||||
|
||||
const questionFormat = [questionFmt1, questionFmt2];
|
||||
|
||||
const answerFmt1 = `
|
||||
<div class="big">{{Word or sentence}}</div>
|
||||
<div class="sound--container">
|
||||
<div class="transcription">{{Transcription}}</div>
|
||||
<span class="sound">{{Sound}}</span>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="usage">{{Usage example}}</div>
|
||||
<hr />
|
||||
<ul class="list">
|
||||
<li>
|
||||
<div>
|
||||
<div class="small">{{Part of speech 1}}</div>
|
||||
<pre class="definition">{{Definition 1}}</pre>
|
||||
<div>{{Translation 1}}</div>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div>
|
||||
<div class="small">{{Part of speech 2}}</div>
|
||||
<pre class="definition">{{Definition 2}}</pre>
|
||||
<div>{{Translation 2}}</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>`;
|
||||
const answerFormat = [answerFmt1, answerFmt1];
|
||||
|
||||
// ADDING NOTES //
|
||||
|
||||
const deckProperties = {
|
||||
name: deckName,
|
||||
reference: dbDeckReference,
|
||||
};
|
||||
const modelProperties = {
|
||||
name: modelName,
|
||||
reference: dbModelReference,
|
||||
fields: modelFields,
|
||||
tags,
|
||||
cardNames,
|
||||
questionFormat,
|
||||
answerFormat,
|
||||
css,
|
||||
};
|
||||
|
||||
return {
|
||||
modelId: undefined,
|
||||
modelProperties: modelProperties,
|
||||
deckId: model.deck.id,
|
||||
deckProperties: deckProperties,
|
||||
};
|
||||
};
|
||||
export default setSettings;
|
|
@ -20,7 +20,7 @@ const initialState = {
|
|||
mainFieldIsAvailable: false,
|
||||
fieldList: [],
|
||||
ankiLanModelIsAlreadyExists: false,
|
||||
ankiLanModelName: 'AnkiLan3',
|
||||
ankiLanModelName: '1AnkiLan1111',
|
||||
noteCreator: {},
|
||||
noteTemplate: [],
|
||||
};
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import {
|
||||
SET_AVAILABLE_API,
|
||||
SET_PARSED_DICTIONARY,
|
||||
SET_YANDEX_DICTIONARY_RESPONSE,
|
||||
} from '../constants/api-constants';
|
||||
|
||||
|
@ -26,6 +27,11 @@ const apiReducer = (state = initialState, action) => {
|
|||
availableApi: action.payload,
|
||||
availableApiName: action.payload.source,
|
||||
};
|
||||
case SET_PARSED_DICTIONARY:
|
||||
return {
|
||||
...state,
|
||||
parsedDictionary: action.payload,
|
||||
};
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
|
|
113
yarn.lock
113
yarn.lock
|
@ -928,6 +928,11 @@
|
|||
"@types/yargs" "^15.0.0"
|
||||
chalk "^3.0.0"
|
||||
|
||||
"@react-native-community/async-storage@^1.8.1":
|
||||
version "1.8.1"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.8.1.tgz#c93e69dcf948667b207e409b8039b7edf199159b"
|
||||
integrity sha512-MA1fTp4SB7OOtDmNAwds6jIpiwwty1NIoFboWjEWkoyWW35zIuxlhHxD4joSy21aWEzUVwvv6JJ2hSsP/HTb7A==
|
||||
|
||||
"@react-native-community/cli-debugger-ui@^3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-3.0.0.tgz#d01d08d1e5ddc1633d82c7d84d48fff07bd39416"
|
||||
|
@ -2744,9 +2749,9 @@ data-urls@^1.1.0:
|
|||
whatwg-url "^7.0.0"
|
||||
|
||||
dayjs@^1.8.15:
|
||||
version "1.8.22"
|
||||
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.22.tgz#5e835d776b373e216678be8d12c336da71a25a9c"
|
||||
integrity sha512-N8IXfxBD62Y9cKTuuuSoOlCXRnnzaTj1vu91r855iq6FbY5cZqOZnW/95nUn6kJiR+W9PHHrLykEoQOe6fUKxQ==
|
||||
version "1.8.23"
|
||||
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.23.tgz#07b5a8e759c4d75ae07bdd0ad6977f851c01e510"
|
||||
integrity sha512-NmYHMFONftoZbeOhVz6jfiXI4zSiPN6NoVWJgC0aZQfYVwzy/ZpESPHuCcI0B8BUMpSJQ08zenHDbofOLKq8hQ==
|
||||
|
||||
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8:
|
||||
version "2.6.9"
|
||||
|
@ -3049,9 +3054,9 @@ eslint-plugin-prettier@2.6.2:
|
|||
jest-docblock "^21.0.0"
|
||||
|
||||
eslint-plugin-react-hooks@^2.0.1:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.0.tgz#c50ab7ca5945ce6d1cf8248d9e185c80b54171b6"
|
||||
integrity sha512-bzvdX47Jx847bgAYf0FPX3u1oxU+mKU8tqrpj4UX9A96SbAmj/HVEefEy6rJUog5u8QIlOPTKZcBpGn5kkKfAQ==
|
||||
version "2.5.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0"
|
||||
integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==
|
||||
|
||||
eslint-plugin-react-native-globals@^0.1.1:
|
||||
version "0.1.2"
|
||||
|
@ -3696,9 +3701,9 @@ fs.realpath@^1.0.0:
|
|||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||
|
||||
fsevents@^1.2.7:
|
||||
version "1.2.11"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3"
|
||||
integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==
|
||||
version "1.2.12"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c"
|
||||
integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==
|
||||
dependencies:
|
||||
bindings "^1.5.0"
|
||||
nan "^2.12.1"
|
||||
|
@ -5001,11 +5006,11 @@ json-stringify-safe@~5.0.1:
|
|||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||
|
||||
json5@^2.1.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.1.tgz#81b6cb04e9ba496f1c7005d07b4368a2638f90b6"
|
||||
integrity sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e"
|
||||
integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ==
|
||||
dependencies:
|
||||
minimist "^1.2.0"
|
||||
minimist "^1.2.5"
|
||||
|
||||
jsonfile@^2.1.0:
|
||||
version "2.4.0"
|
||||
|
@ -5021,6 +5026,11 @@ jsonfile@^4.0.0:
|
|||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
jsonfn@^0.31.0:
|
||||
version "0.31.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonfn/-/jsonfn-0.31.0.tgz#8cd09ee376d46df75c2c0de3c548a95dbb81dc8b"
|
||||
integrity sha1-jNCe43bUbfdcLA3jxUipXbuB3Is=
|
||||
|
||||
jsonify@~0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
|
||||
|
@ -5675,17 +5685,12 @@ minimatch@^3.0.4:
|
|||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimist@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
||||
|
||||
minimist@1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.0.tgz#cdf225e8898f840a258ded44fc91776770afdc93"
|
||||
integrity sha1-zfIl6ImPhAolje1E/JF3Z3Cv3JM=
|
||||
|
||||
minimist@^1.1.1, minimist@^1.2.0:
|
||||
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
|
@ -5699,11 +5704,11 @@ mixin-deep@^1.2.0:
|
|||
is-extendable "^1.0.1"
|
||||
|
||||
mkdirp@^0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c"
|
||||
integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==
|
||||
dependencies:
|
||||
minimist "0.0.8"
|
||||
minimist "^1.2.5"
|
||||
|
||||
moment@2.x.x:
|
||||
version "2.24.0"
|
||||
|
@ -6435,9 +6440,9 @@ promise@^7.1.1:
|
|||
asap "~2.0.3"
|
||||
|
||||
prompts@^2.0.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.1.tgz#b63a9ce2809f106fa9ae1277c275b167af46ea05"
|
||||
integrity sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==
|
||||
version "2.3.2"
|
||||
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
|
||||
integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==
|
||||
dependencies:
|
||||
kleur "^3.0.3"
|
||||
sisteransi "^1.0.4"
|
||||
|
@ -6533,9 +6538,9 @@ react-devtools-core@^3.6.3:
|
|||
ws "^3.3.1"
|
||||
|
||||
react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6, react-is@^16.9.0:
|
||||
version "16.13.0"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.0.tgz#0f37c3613c34fe6b37cd7f763a0d6293ab15c527"
|
||||
integrity sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA==
|
||||
version "16.13.1"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
|
||||
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
|
||||
|
||||
react-native-ankidroid@^0.4.0:
|
||||
version "0.4.0"
|
||||
|
@ -6791,9 +6796,9 @@ regenerator-transform@^0.10.0:
|
|||
private "^0.1.6"
|
||||
|
||||
regenerator-transform@^0.14.2:
|
||||
version "0.14.3"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.3.tgz#54aebff2ef58c0ae61e695ad1b9a9d65995fff78"
|
||||
integrity sha512-zXHNKJspmONxBViAb3ZUmFoFPnTBs3zFhCEZJiwp/gkNzxVbTqNJVjYKx6Qk1tQ1P4XLf4TbH9+KBB7wGoAaUw==
|
||||
version "0.14.4"
|
||||
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7"
|
||||
integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.8.4"
|
||||
private "^0.1.8"
|
||||
|
@ -7243,9 +7248,9 @@ scheduler@0.15.0:
|
|||
object-assign "^4.1.1"
|
||||
|
||||
scheduler@^0.19.0:
|
||||
version "0.19.0"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.0.tgz#a715d56302de403df742f4a9be11975b32f5698d"
|
||||
integrity sha512-xowbVaTPe9r7y7RUejcK73/j8tt2jfiyTednOvHbA8JoClvMYCp+r8QegLwK/n8zWQAtZb1fFnER4XLBZXrCxA==
|
||||
version "0.19.1"
|
||||
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196"
|
||||
integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
|
@ -7395,9 +7400,9 @@ simple-swizzle@^0.2.2:
|
|||
is-arrayish "^0.3.1"
|
||||
|
||||
sisteransi@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3"
|
||||
integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
|
||||
integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
|
||||
|
||||
slash@^2.0.0:
|
||||
version "2.0.0"
|
||||
|
@ -8502,18 +8507,18 @@ yargs-parser@^11.1.1:
|
|||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^13.1.1:
|
||||
version "13.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
|
||||
integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
|
||||
yargs-parser@^13.1.2:
|
||||
version "13.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
|
||||
integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
||||
yargs-parser@^18.1.0:
|
||||
version "18.1.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.0.tgz#1b0ab1118ebd41f68bb30e729f4c83df36ae84c3"
|
||||
integrity sha512-o/Jr6JBOv6Yx3pL+5naWSoIA2jJ+ZkMYQG/ie9qFbukBe4uzmBatlXFOiu/tNKRWEtyf+n5w7jc/O16ufqOTdQ==
|
||||
yargs-parser@^18.1.1:
|
||||
version "18.1.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.1.tgz#bf7407b915427fc760fcbbccc6c82b4f0ffcbd37"
|
||||
integrity sha512-KRHEsOM16IX7XuLnMOqImcPNbLVXMNHYAoFc3BKR8Ortl5gzDbtXvvEoGx9imk5E+X1VeNKNlcHr8B8vi+7ipA==
|
||||
dependencies:
|
||||
camelcase "^5.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
@ -8544,9 +8549,9 @@ yargs@^12.0.5:
|
|||
yargs-parser "^11.1.1"
|
||||
|
||||
yargs@^13.2.2:
|
||||
version "13.3.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83"
|
||||
integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==
|
||||
version "13.3.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
|
||||
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
|
||||
dependencies:
|
||||
cliui "^5.0.0"
|
||||
find-up "^3.0.0"
|
||||
|
@ -8557,12 +8562,12 @@ yargs@^13.2.2:
|
|||
string-width "^3.0.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^13.1.1"
|
||||
yargs-parser "^13.1.2"
|
||||
|
||||
yargs@^15.0.0:
|
||||
version "15.3.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976"
|
||||
integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA==
|
||||
version "15.3.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"
|
||||
integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==
|
||||
dependencies:
|
||||
cliui "^6.0.0"
|
||||
decamelize "^1.2.0"
|
||||
|
@ -8574,7 +8579,7 @@ yargs@^15.0.0:
|
|||
string-width "^4.2.0"
|
||||
which-module "^2.0.0"
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^18.1.0"
|
||||
yargs-parser "^18.1.1"
|
||||
|
||||
yargs@^9.0.0:
|
||||
version "9.0.1"
|
||||
|
|
Loading…
Reference in a new issue