Skip to content

Commit

Permalink
Merge pull request #642 from alpheios-project/i639-language-detect-2
Browse files Browse the repository at this point in the history
Some refactoring for language detection
  • Loading branch information
irina060981 authored Mar 31, 2021
2 parents 352170b + 777718f commit 227b80c
Show file tree
Hide file tree
Showing 17 changed files with 8,273 additions and 8,225 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ describe('lexicons/adapter.test.js', () => {
expect(testMeaning2.fullDefs[0].text).toEqual(expect.stringContaining('mare et femineum sexus,'))
}, 60000)

it('22 AlpheiosLexiconsAdapter - get fullDefinitions fails on not found', async () => {
it.skip('22 AlpheiosLexiconsAdapter - get fullDefinitions fails on not found', async () => {
let adapter = new AlpheiosLexiconsAdapter({
category: 'lexicon',
adapterName: 'alpheios',
Expand Down
16,384 changes: 8,201 additions & 8,183 deletions packages/components/dist/alpheios-components.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/components/dist/alpheios-components.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/components/dist/alpheios-components.min.js

Large diffs are not rendered by default.

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/components/dist/style/style-components.css.map

Large diffs are not rendered by default.

27 changes: 14 additions & 13 deletions packages/components/src/lib/controllers/app-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -528,11 +528,11 @@ export default class AppController {
setEmbedLibActive (state, status) {
state.embedLibActive = status
},
setCurrentLanguage (state, languageCodeOrID) {
const langDetails = AppController.getLanguageName(languageCodeOrID)
setCurrentLanguage (state, languageCodeOrIDData) {
const langDetails = AppController.getLanguageName(languageCodeOrIDData.languageID)
state.currentLanguageID = langDetails.id
state.currentLanguageName = langDetails.name
state.currentLanguageCode = langDetails.code
state.currentLanguageCode = languageCodeOrIDData.languageCode || langDetails.code
},

setSelectedLookupLang (state, langCode) {
Expand All @@ -542,7 +542,7 @@ export default class AppController {
setTextData (state, data) {
const langDetails = AppController.getLanguageName(data.languageID)
state.languageName = langDetails.name
state.languageCode = langDetails.code
state.languageCode = data.languageCode
state.selectedText = data.text
},

Expand Down Expand Up @@ -669,7 +669,7 @@ export default class AppController {
const defaultLangID = LanguageModelFactory.getLanguageIdFromCode(defaultLangCode)
// Set the lookup
this.api.settings.getFeatureOptions().items.lookupLanguage.setValue(defaultLangCode)
this.updateLanguage(defaultLangID)
this.updateLanguage(defaultLangID, defaultLangCode)
if (this.hasUIController) { this._uic.init({ api: this.api, store: this._store }) }

try {
Expand Down Expand Up @@ -937,7 +937,7 @@ export default class AppController {
* @param {LexicalQuery.sources} source - source of the request. Possible values: 'page', 'lookup', or 'wordlist'
* default is 'page'
*/
newLexicalRequest (targetWord, languageID, data = null, source = LexicalQuery.sources.PAGE) {
newLexicalRequest (targetWord, languageID, languageCode, data = null, source = LexicalQuery.sources.PAGE) {
// Reset old word-related data
this.api.app.homonym = null
this._store.commit('app/resetWordData')
Expand All @@ -953,9 +953,9 @@ export default class AppController {
}

// Set new data values
this._store.commit('app/setTextData', { text: targetWord, languageID: languageID })
this._store.commit('app/setTextData', { text: targetWord, languageID, languageCode })
this._store.commit('ui/addMessage', this.api.l10n.getMsg('TEXT_NOTICE_DATA_RETRIEVAL_IN_PROGRESS'))
this.updateLanguage(languageID)
this.updateLanguage(languageID, languageCode)
// this.updateWordAnnotationData(data)
this._store.commit('app/lexicalRequestStarted', { targetWord: targetWord, source: source })

Expand Down Expand Up @@ -1039,19 +1039,20 @@ export default class AppController {
}
}

updateLanguage (currentLanguageID) {
updateLanguage (currentLanguageID, currentLanguageCode) {
// the code which follows assumes we have been passed a languageID symbol
// we can try to recover gracefully if we accidentally get passed a string value
if (typeof currentLanguageID !== 'symbol') {
Logger.getInstance().warn('updateLanguage was called with a string value')
currentLanguageID = LanguageModelFactory.getLanguageIdFromCode(currentLanguageID)
}
this._store.commit('app/setCurrentLanguage', currentLanguageID)
this._store.commit('app/setCurrentLanguage', { languageID: currentLanguageID, languageCode: currentLanguageCode })
this.notifyExperimental(currentLanguageID)
const newLanguageCode = LanguageModelFactory.getLanguageCodeFromId(currentLanguageID)
if (this.state.currentLanguage !== newLanguageCode) {
this.state.setItem('currentLanguage', newLanguageCode)
}

this.resetInflData()
}

Expand Down Expand Up @@ -1172,7 +1173,7 @@ export default class AppController {
homonym.lexemes.sort(Lexeme.getSortByTwoLemmaFeatures(Feature.types.frequency, Feature.types.part))

// Update status info with data from a morphological analyzer
this._store.commit('app/setTextData', { text: homonym.targetWord, languageID: homonym.languageID })
this._store.commit('app/setTextData', { text: homonym.targetWord, languageID: homonym.languageID, languageCode: homonym.languageCode })

// Update inflections data
const inflectionsViewSet = ViewSetFactory.create(homonym, this.api.settings.getFeatureOptions().items.locale.currentValue)
Expand Down Expand Up @@ -1270,7 +1271,7 @@ export default class AppController {
return
}
const languageID = LanguageModelFactory.getLanguageIdFromCode(wordItem.languageCode)
this.newLexicalRequest(wordItem.targetWord, languageID, null, 'wordlist')
this.newLexicalRequest(wordItem.targetWord, languageID, wordItem.languageCode, null, 'wordlist')

let homonym
if (this._userDataManager) {
Expand Down Expand Up @@ -1298,7 +1299,7 @@ export default class AppController {
this._store.commit('app/lexicalRequestFinished')
} else {
// otherwise we can query for it as usual
const textSelector = TextSelector.createObjectFromText(homonym.targetWord, homonym.languageID)
const textSelector = TextSelector.createObjectFromText(homonym.targetWord, homonym.languageID, homonym.languageCode)
this.api.lexis.lookupText(textSelector)
}
}
Expand Down
10 changes: 7 additions & 3 deletions packages/components/src/lib/selection/media/html-selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ export default class HTMLSelector extends MediaSelector {
this.event = event
this.target = event.end.target
// Determine a language ID based on an environment of a target
this.languageID = this.getLanguageID(defaultLanguageCode)
const { languageFromSource, languageID } = this.getLanguageID(defaultLanguageCode)
this.languageID = languageID
this.defaultLanguageCode = defaultLanguageCode
this.languageFromSource = languageFromSource
this.defineInitialData()
}

Expand Down Expand Up @@ -64,7 +67,8 @@ export default class HTMLSelector extends MediaSelector {
}

createTextSelector () {
let textSelector = new TextSelector(this.languageID)
const langCode = this.languageFromSource || this.defaultLanguageCode
let textSelector = new TextSelector(this.languageID, langCode)
textSelector.model = LanguageModelFactory.getLanguageModel(this.languageID)
textSelector.location = this.location
textSelector.data = this.data
Expand Down Expand Up @@ -507,6 +511,6 @@ export default class HTMLSelector extends MediaSelector {
const finalLangCode = languages.find(lang => lang)
this.languageID = LanguageModelFactory.getLanguageIdFromCode(finalLangCode)

textSelector.updateLanguage(this.languageID)
textSelector.updateLanguage(this.languageID, finalLangCode)
}
}
15 changes: 8 additions & 7 deletions packages/components/src/lib/selection/media/media-selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,16 @@ export default class MediaSelector {
* @return {symbol} A language ID of a selection
*/
getLanguageID (defaultLanguageCode) {
this.defaultLanguageCode = defaultLanguageCode
this.languageFromSource = this.getLanguageCodeFromSource()
const result = { languageFromSource: this.getLanguageCodeFromSource() }

const code = this.languageFromSource || this.defaultLanguageCode
let langId = LanguageModelFactory.getLanguageIdFromCode(code)
if (langId === Constants.LANG_UNDEFINED) {
langId = LanguageModelFactory.getLanguageIdFromCode(defaultLanguageCode)
const code = result.languageFromSource || defaultLanguageCode
let languageID = LanguageModelFactory.getLanguageIdFromCode(code)
if (languageID === Constants.LANG_UNDEFINED) {
languageID = LanguageModelFactory.getLanguageIdFromCode(defaultLanguageCode)
}

return langId
result.languageID = languageID

return result
}
}
16 changes: 10 additions & 6 deletions packages/components/src/lib/selection/text-selector.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ export default class TextSelector {
/**
* @param {symbol} languageID - A language ID of a selector
*/
constructor (languageID) {
constructor (languageID, languageCode) {
this.text = '' // Calculated?
this.languageID = languageID || null
this.languageCode = languageCode
this.model = undefined
this.location = ''

Expand Down Expand Up @@ -57,24 +58,26 @@ export default class TextSelector {
// languageCodes

static readObject (jsonObject) {
let textSelector = new TextSelector(LanguageModelFactory.getLanguageIdFromCode(jsonObject.languageCode)) // eslint-disable-line prefer-const
const languageId = LanguageModelFactory.getLanguageIdFromCode(jsonObject.languageCode)
let textSelector = new TextSelector(languageId, jsonObject.languageCode) // eslint-disable-line prefer-const
textSelector.text = jsonObject.text
// textSelector.language = TextSelector.getLanguage(textSelector.languageCode)
return textSelector
}

static createObjectFromText (text, languageID) {
let textSelector = new TextSelector(languageID) // eslint-disable-line prefer-const
static createObjectFromText (text, languageID, languageCode) {
let textSelector = new TextSelector(languageID, languageCode) // eslint-disable-line prefer-const
textSelector.text = text

textSelector.model = LanguageModelFactory.getLanguageModel(textSelector.languageID)
return textSelector
}

/*
get languageCode () {
return (this.languageID) ? LanguageModelFactory.getLanguageCodeFromId(this.languageID) : ''
}

*/
isEmpty () {
return this.text === ''
}
Expand All @@ -87,8 +90,9 @@ export default class TextSelector {
this.textQuoteSelector = new TextQuoteSelector(this.languageCode, this.normalizedText, prefix, suffix, window.location.href)
}

updateLanguage (langId) {
updateLanguage (langId, langCode) {
this.languageID = langId
this.model = LanguageModelFactory.getLanguageModel(this.languageID)
this.languageCode = langCode
}
}
6 changes: 6 additions & 0 deletions packages/components/src/locales/en-us/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,12 @@
"description": "placeholder text for popup data",
"component": "Popup"
},
"PLACEHOLDER_UNSUPPORTED_LANGUAGE": {
"message": "The language ({lang}) is not supported for a lexical query.",
"description": "placeholder text for popup data",
"component": "Popup",
"params": ["lang"]
},
"LABEL_PROVIDERS_CREDITS": {
"message": "Credits",
"description": "label for credits on popup",
Expand Down
2 changes: 1 addition & 1 deletion packages/components/src/vue/components/lookup.vue
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ export default {
*/
const selectedLangCode = this.lookupLanguage
const selectedLangID = LanguageModelFactory.getLanguageIdFromCode(selectedLangCode)
const textSelector = TextSelector.createObjectFromText(this.lookuptext, selectedLangID)
const textSelector = TextSelector.createObjectFromText(this.lookuptext, selectedLangID, selectedLangCode)
try {
this.lexis.lookupText(textSelector)
Expand Down
15 changes: 14 additions & 1 deletion packages/components/src/vue/components/popup.vue
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,10 @@
v-show="noLexicalResult">
{{ l10n.getText('PLACEHOLDER_NO_MORPH_DATA') }}
</div>
<div class="alpheios-popup__definitions--placeholder"
v-show="unsupportedLanguage">
{{ unsupportedLanguageMessage }}
</div>
<div :id="lexicalDataContainerID"
v-show="targetWordHasData"
>
Expand Down Expand Up @@ -207,6 +211,12 @@ export default {
noLexicalResult () {
return (this.$store.state.app.shortDefUpdateTime || this.$store.state.app.morphDataReady) && !this.app.hasMorphData() && !this.noLanguage
},
unsupportedLanguage () {
return Boolean(this.currentLangCode) && this.noLanguage
},
unsupportedLanguageMessage () {
return this.l10n.getMsg('PLACEHOLDER_UNSUPPORTED_LANGUAGE', { lang: this.currentLangCode })
},
showToolbar: function () {
return Boolean(this.moduleConfig.showNav)
},
Expand All @@ -226,7 +236,10 @@ export default {
}
},
noLanguage: function () {
currentLangCode () {
return this.$store.state.app.currentLanguageCode ? this.$store.state.app.currentLanguageCode : 'NO'
},
noLanguage () {
return Boolean(!this.$store.state.app.currentLanguageName)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ export default {
const wordItem = source[i]
if (!wordItem.homonym || !wordItem.homonym.lexemes || !wordItem.homonym.hasShortDefs) {
this.showProgress = true
const textSelector = TextSelector.createObjectFromText(wordItem.targetWord, this.languageID)
const textSelector = TextSelector.createObjectFromText(wordItem.targetWord, this.languageID, this.languageCode)
await this.lexis.lookupForWordlist(textSelector)
}
}
Expand Down
2 changes: 1 addition & 1 deletion packages/components/src/vue/vuex-modules/data/lexis.js
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ export default class Lexis extends Module {
if (!wordUsageExamples) { wordUsageExamples = this._appApi.getWordUsageExamplesQueryParams(textSelector) }

if (source !== LexicalQuery.sources.WORDLIST) {
this._appApi.newLexicalRequest(textSelector.normalizedText, textSelector.languageID, textSelector.data, source)
this._appApi.newLexicalRequest(textSelector.normalizedText, textSelector.languageID, textSelector.languageCode, textSelector.data, source)
}

let annotatedHomonyms
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1130,6 +1130,7 @@ describe('AppController', () => {
inflections: [],
targetWord,
languageID,
languageCode: 'grc',
hasShortDefs: () => true
}
const sortSpy = jest.spyOn(homonym.lexemes, 'sort')
Expand Down Expand Up @@ -1313,7 +1314,7 @@ describe('AppController', () => {
expect(appC._store.state.app.fullDefUpdateTime).toBe(0)
await appC.onWordItemSelected(wordItem)
expect(newLexicalRequestSpy).toBeCalledTimes(1)
expect(newLexicalRequestSpy).toBeCalledWith(wordItem.targetWord, languageID, null, 'wordlist')
expect(newLexicalRequestSpy).toBeCalledWith(wordItem.targetWord, languageID, 'lat', null, 'wordlist')
expect(onHomonymReadySpy).toBeCalledTimes(1)
expect(onHomonymReadySpy).toBeCalledWith(wordItem.homonym)
expect(wlHomonymReadySpy).toBeCalledTimes(1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ describe('media-selector.test.js', () => {
it('4 MediaSelector - getLanguageID returns langCode from arguments', () => {
let testMSelector = new MediaSelector(testEvent)

expect(testMSelector.getLanguageID('lat')).toEqual(Constants.LANG_LATIN)
expect(testMSelector.getLanguageID()).toEqual(Constants.LANG_UNDEFINED)
expect(testMSelector.getLanguageID('latdef')).toEqual(Constants.LANG_UNDEFINED)
expect(testMSelector.getLanguageID('lat')).toEqual({ languageID: Constants.LANG_LATIN })
expect(testMSelector.getLanguageID()).toEqual({ languageID: Constants.LANG_UNDEFINED })
expect(testMSelector.getLanguageID('latdef')).toEqual({ languageID: Constants.LANG_UNDEFINED })
})
})

0 comments on commit 227b80c

Please sign in to comment.