axyseo 2.0.0-alpha.0.0.43 → 2.0.0-alpha.0.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/scoring/assessments/readability/TransitionWordsAssessment.js +3 -6
- package/build/scoring/assessments/readability/TransitionWordsAssessment.js.map +1 -1
- package/build/scoring/assessments/seo/UrlKeywordAssessment.js +1 -4
- package/build/scoring/assessments/seo/UrlKeywordAssessment.js.map +1 -1
- package/build/scoring/assessors/avadaAssessor.js +0 -1
- package/build/scoring/assessors/avadaAssessor.js.map +1 -1
- package/package.json +1 -1
|
@@ -63,11 +63,11 @@ export default class TransitionWordsAssessment extends Assessment {
|
|
|
63
63
|
* @returns {number} The score.
|
|
64
64
|
*/
|
|
65
65
|
calculateScoreFromPercentage(percentage) {
|
|
66
|
-
if (percentage <
|
|
66
|
+
if (percentage < 10) {
|
|
67
67
|
// Red indicator.
|
|
68
68
|
return 3;
|
|
69
69
|
}
|
|
70
|
-
if (inRange(percentage,
|
|
70
|
+
if (inRange(percentage, 10, 20)) {
|
|
71
71
|
// Orange indicator.
|
|
72
72
|
return 6;
|
|
73
73
|
}
|
|
@@ -86,10 +86,7 @@ export default class TransitionWordsAssessment extends Assessment {
|
|
|
86
86
|
const percentage = this.calculateTransitionWordPercentage(transitionWordSentences);
|
|
87
87
|
const score = this.calculateScoreFromPercentage(percentage);
|
|
88
88
|
let status = 'good';
|
|
89
|
-
if (score <
|
|
90
|
-
status = 'bad';
|
|
91
|
-
}
|
|
92
|
-
if (score < 7) {
|
|
89
|
+
if (score < 6 || percentage === 0) {
|
|
93
90
|
status = 'bad';
|
|
94
91
|
}
|
|
95
92
|
const customScore = this.getScore(this._config.priority, status);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransitionWordsAssessment.js","names":["merge","React","Text","formatNumber","inRangeStartInclusive","inRange","AssessmentResult","Assessment","removeHtmlBlocks","getWords","filterShortcodesFromHTML","TransitionWordsAssessment","constructor","config","defaultConfig","id","fixPosition","ctaType","docUrl","priority","applicableIfTextLongerThan","title","content","good","bad","improve","identifier","_config","calculateTransitionWordPercentage","sentences","transitionWordSentences","totalSentences","calculateScoreFromPercentage","percentage","calculateTransitionWordResult","i18n","score","status","customScore","getScore","body","createElement","as","href","target","rel","translate","getResult","paper","researcher","getResearch","transitionWordResult","assessmentResult","setScore","setStatus","setBody","isApplicable","customCountLength","getHelper","customApplicabilityConfig","getConfig","transitionWords","text","getText","_attributes","shortcodes","textLength","length","hasResearch"],"sources":["../../../../src/scoring/assessments/readability/TransitionWordsAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport React from 'react';\nimport {Text} from '@shopify/polaris';\n\nimport formatNumber from '../../../helpers/formatNumber';\nimport {inRangeStartInclusive as inRange} from '../../helpers/assessments/inRange';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport Assessment from '../assessment';\nimport removeHtmlBlocks from '@axyseo/languageProcessing/helpers/html/htmlParser';\nimport getWords from '@axyseo/languageProcessing/helpers/word/getWords';\nimport {filterShortcodesFromHTML} from '@axyseo/languageProcessing/helpers';\n\n/**\n * Represents the assessment that checks whether there are enough transition words in the text.\n */\nexport default class TransitionWordsAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: 'textTransitionWords',\n fixPosition: 'longestParagraph',\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#use-of-transition-words',\n priority: 'low',\n applicableIfTextLongerThan: 200,\n title: 'Use of transition words',\n content: {\n good: 'Transition words are used effectively.',\n bad:\n 'Lack of transition words. Improve readability and flow by adding words like \"however,\" \"also,\" etc.',\n improve: ''\n }\n };\n\n this.identifier = 'textTransitionWords';\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Calculates the actual percentage of transition words in the sentences.\n *\n * @param {object} sentences The object containing the total number of sentences and the number of sentences containing\n * a transition word.\n *\n * @returns {number} The percentage of sentences containing a transition word.\n */\n calculateTransitionWordPercentage(sentences) {\n if (sentences.transitionWordSentences === 0 || sentences.totalSentences === 0) {\n return 0;\n }\n\n return formatNumber((sentences.transitionWordSentences / sentences.totalSentences) * 100);\n }\n\n /**\n * Calculates the score for the assessment based on the percentage of sentences containing transition words.\n *\n * @param {number} percentage The percentage of sentences containing transition words.\n *\n * @returns {number} The score.\n */\n calculateScoreFromPercentage(percentage) {\n if (percentage < 20) {\n // Red indicator.\n return 3;\n }\n\n if (inRange(percentage, 20, 30)) {\n // Orange indicator.\n return 6;\n }\n\n // Green indicator.\n return 9;\n }\n\n /**\n *\n * @param transitionWordSentences\n * @param i18n\n * @returns {{score: number, body: React.JSX.Element, status: string}}\n */\n calculateTransitionWordResult(transitionWordSentences, i18n) {\n const percentage = this.calculateTransitionWordPercentage(transitionWordSentences);\n const score = this.calculateScoreFromPercentage(percentage);\n\n let status = 'good';\n if (score < 7 && percentage === 0) {\n status = 'bad';\n }\n\n if (score < 7) {\n status = 'bad';\n }\n const customScore = this.getScore(this._config.priority, status);\n\n return {\n score: customScore,\n status,\n body: (\n <Text as={'span'}>\n {this._config.content[status]}{' '}\n {this._config.docUrl && (\n <a href={this._config.docUrl} target=\"_blank\" rel=\"noreferrer\">\n {i18n ? i18n.translate(`Axyseo.Button.learnMore`) : 'Learn more'}\n </a>\n )}\n </Text>\n )\n };\n }\n\n /**\n *\n * @param paper\n * @param researcher\n * @param i18n\n * @returns {AssessmentResult}\n */\n getResult({paper, researcher, i18n}) {\n const transitionWordSentences = researcher.getResearch('findTransitionWords');\n const transitionWordResult = this.calculateTransitionWordResult(transitionWordSentences, i18n);\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(transitionWordResult.score);\n assessmentResult.setStatus(transitionWordResult.status);\n assessmentResult.setBody(transitionWordResult.body);\n\n return assessmentResult;\n }\n\n /**\n * Checks if the transition words assessment is applicable to the paper. Language-specific length requirements and methods of counting text length\n * may apply (e.g. for Japanese, the text should be counted in characters instead of words, which also makes the minimum required length higher).\n *\n * @param {Paper} paper The paper to check.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} Returns true if the language is available, the paper is not empty and the text is longer than the minimum required length.\n */\n isApplicable(paper, researcher) {\n const customCountLength = researcher.getHelper('customCountLength');\n const customApplicabilityConfig = researcher.getConfig('assessmentApplicability')\n .transitionWords;\n if (customApplicabilityConfig) {\n this._config.applicableIfTextLongerThan = customApplicabilityConfig;\n }\n let text = paper.getText();\n text = removeHtmlBlocks(text);\n text = filterShortcodesFromHTML(text, paper._attributes && paper._attributes.shortcodes);\n const textLength = customCountLength ? customCountLength(text) : getWords(text).length;\n\n // Do not use hasEnoughContent in this assessment as it is mostly redundant with `textLength >= this._config.applicableIfTextLongerThan`\n return (\n textLength >= this._config.applicableIfTextLongerThan &&\n researcher.hasResearch('findTransitionWords')\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"TransitionWordsAssessment.js","names":["merge","React","Text","formatNumber","inRangeStartInclusive","inRange","AssessmentResult","Assessment","removeHtmlBlocks","getWords","filterShortcodesFromHTML","TransitionWordsAssessment","constructor","config","defaultConfig","id","fixPosition","ctaType","docUrl","priority","applicableIfTextLongerThan","title","content","good","bad","improve","identifier","_config","calculateTransitionWordPercentage","sentences","transitionWordSentences","totalSentences","calculateScoreFromPercentage","percentage","calculateTransitionWordResult","i18n","score","status","customScore","getScore","body","createElement","as","href","target","rel","translate","getResult","paper","researcher","getResearch","transitionWordResult","assessmentResult","setScore","setStatus","setBody","isApplicable","customCountLength","getHelper","customApplicabilityConfig","getConfig","transitionWords","text","getText","_attributes","shortcodes","textLength","length","hasResearch"],"sources":["../../../../src/scoring/assessments/readability/TransitionWordsAssessment.js"],"sourcesContent":["import {merge} from 'lodash';\nimport React from 'react';\nimport {Text} from '@shopify/polaris';\n\nimport formatNumber from '../../../helpers/formatNumber';\nimport {inRangeStartInclusive as inRange} from '../../helpers/assessments/inRange';\nimport AssessmentResult from '../../../values/AssessmentResult';\nimport Assessment from '../assessment';\nimport removeHtmlBlocks from '@axyseo/languageProcessing/helpers/html/htmlParser';\nimport getWords from '@axyseo/languageProcessing/helpers/word/getWords';\nimport {filterShortcodesFromHTML} from '@axyseo/languageProcessing/helpers';\n\n/**\n * Represents the assessment that checks whether there are enough transition words in the text.\n */\nexport default class TransitionWordsAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {object} config The configuration to use.\n *\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: 'textTransitionWords',\n fixPosition: 'longestParagraph',\n ctaType: 'fix',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#use-of-transition-words',\n priority: 'low',\n applicableIfTextLongerThan: 200,\n title: 'Use of transition words',\n content: {\n good: 'Transition words are used effectively.',\n bad:\n 'Lack of transition words. Improve readability and flow by adding words like \"however,\" \"also,\" etc.',\n improve: ''\n }\n };\n\n this.identifier = 'textTransitionWords';\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Calculates the actual percentage of transition words in the sentences.\n *\n * @param {object} sentences The object containing the total number of sentences and the number of sentences containing\n * a transition word.\n *\n * @returns {number} The percentage of sentences containing a transition word.\n */\n calculateTransitionWordPercentage(sentences) {\n if (sentences.transitionWordSentences === 0 || sentences.totalSentences === 0) {\n return 0;\n }\n\n return formatNumber((sentences.transitionWordSentences / sentences.totalSentences) * 100);\n }\n\n /**\n * Calculates the score for the assessment based on the percentage of sentences containing transition words.\n *\n * @param {number} percentage The percentage of sentences containing transition words.\n *\n * @returns {number} The score.\n */\n calculateScoreFromPercentage(percentage) {\n if (percentage < 10) {\n // Red indicator.\n return 3;\n }\n\n if (inRange(percentage, 10, 20)) {\n // Orange indicator.\n return 6;\n }\n\n // Green indicator.\n return 9;\n }\n\n /**\n *\n * @param transitionWordSentences\n * @param i18n\n * @returns {{score: number, body: React.JSX.Element, status: string}}\n */\n calculateTransitionWordResult(transitionWordSentences, i18n) {\n const percentage = this.calculateTransitionWordPercentage(transitionWordSentences);\n const score = this.calculateScoreFromPercentage(percentage);\n\n let status = 'good';\n if (score < 6 || percentage === 0) {\n status = 'bad';\n }\n\n const customScore = this.getScore(this._config.priority, status);\n\n return {\n score: customScore,\n status,\n body: (\n <Text as={'span'}>\n {this._config.content[status]}{' '}\n {this._config.docUrl && (\n <a href={this._config.docUrl} target=\"_blank\" rel=\"noreferrer\">\n {i18n ? i18n.translate(`Axyseo.Button.learnMore`) : 'Learn more'}\n </a>\n )}\n </Text>\n )\n };\n }\n\n /**\n *\n * @param paper\n * @param researcher\n * @param i18n\n * @returns {AssessmentResult}\n */\n getResult({paper, researcher, i18n}) {\n const transitionWordSentences = researcher.getResearch('findTransitionWords');\n const transitionWordResult = this.calculateTransitionWordResult(transitionWordSentences, i18n);\n const assessmentResult = new AssessmentResult({config: this._config});\n\n assessmentResult.setScore(transitionWordResult.score);\n assessmentResult.setStatus(transitionWordResult.status);\n assessmentResult.setBody(transitionWordResult.body);\n\n return assessmentResult;\n }\n\n /**\n * Checks if the transition words assessment is applicable to the paper. Language-specific length requirements and methods of counting text length\n * may apply (e.g. for Japanese, the text should be counted in characters instead of words, which also makes the minimum required length higher).\n *\n * @param {Paper} paper The paper to check.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} Returns true if the language is available, the paper is not empty and the text is longer than the minimum required length.\n */\n isApplicable(paper, researcher) {\n const customCountLength = researcher.getHelper('customCountLength');\n const customApplicabilityConfig = researcher.getConfig('assessmentApplicability')\n .transitionWords;\n if (customApplicabilityConfig) {\n this._config.applicableIfTextLongerThan = customApplicabilityConfig;\n }\n let text = paper.getText();\n text = removeHtmlBlocks(text);\n text = filterShortcodesFromHTML(text, paper._attributes && paper._attributes.shortcodes);\n const textLength = customCountLength ? customCountLength(text) : getWords(text).length;\n\n // Do not use hasEnoughContent in this assessment as it is mostly redundant with `textLength >= this._config.applicableIfTextLongerThan`\n return (\n textLength >= this._config.applicableIfTextLongerThan &&\n researcher.hasResearch('findTransitionWords')\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -77,10 +77,7 @@ class SlugKeywordAssessment extends Assessment {
|
|
|
77
77
|
*/
|
|
78
78
|
calculateResult(i18n) {
|
|
79
79
|
const status = (() => {
|
|
80
|
-
|
|
81
|
-
return this._keywordInSlug.percentWordMatches === 100 ? 'good' : 'bad';
|
|
82
|
-
}
|
|
83
|
-
return this._keywordInSlug.percentWordMatches > 50 ? 'good' : 'bad';
|
|
80
|
+
return this._keywordInSlug.percentWordMatches >= 50 ? 'good' : 'bad';
|
|
84
81
|
})();
|
|
85
82
|
const score = this.getScore(this._config.priority, status);
|
|
86
83
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UrlKeywordAssessment.js","names":["React","Text","merge","Assessment","AssessmentResult","SlugKeywordAssessment","constructor","config","defaultConfig","id","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","i18n","_keywordInSlug","getResearch","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","setBody","body","isApplicable","isFrontPage","hasKeyword","hasSlug","hasResearch","
|
|
1
|
+
{"version":3,"file":"UrlKeywordAssessment.js","names":["React","Text","merge","Assessment","AssessmentResult","SlugKeywordAssessment","constructor","config","defaultConfig","id","docUrl","fixPosition","ctaType","priority","title","content","good","improve","bad","identifier","_config","getResult","paper","researcher","i18n","_keywordInSlug","getResearch","assessmentResult","calculatedResult","calculateResult","setScore","score","setStatus","status","setBody","body","isApplicable","isFrontPage","hasKeyword","hasSlug","hasResearch","percentWordMatches","getScore","createElement","as","href","target","rel","translate"],"sources":["../../../../src/scoring/assessments/seo/UrlKeywordAssessment.js"],"sourcesContent":["import React from 'react';\nimport {Text} from '@shopify/polaris';\nimport {merge} from 'lodash';\n\nimport Assessment from '../assessment';\nimport AssessmentResult from '../../../values/AssessmentResult';\n\n/**\n * Represents the Slug keyword assessment. This assessment checks if the keyword is present in the slug.\n */\nclass SlugKeywordAssessment extends Assessment {\n /**\n * Sets the identifier and the config.\n *\n * @param {Object} config The configuration to use.\n * @returns {void}\n */\n constructor(config = {}) {\n super();\n\n const defaultConfig = {\n id: 'slugKeyword',\n docUrl:\n 'https://docs.avada.io/seo-suite-help-center/seo-audit/on-page-seo/checklist#keyword-in-url',\n fixPosition: 'url handle',\n ctaType: 'fix',\n priority: 'medium',\n title: 'Keyword in URL',\n content: {\n good: 'Keyword is included in URL.',\n improve: '',\n bad: 'Missing keyword in URL. Include it for relevance and better SEO.'\n }\n };\n\n this.identifier = 'slugKeyword';\n this._config = merge(defaultConfig, config);\n }\n\n /**\n * Executes the Assessment and returns a result.\n *\n * @param {Paper} paper The Paper object to assess.\n * @param {Researcher} researcher The Researcher object containing all available researches.\n *\n * @param i18n\n * @returns {AssessmentResult} The result of the assessment, containing both a score and a descriptive text.\n */\n getResult({paper, researcher, i18n}) {\n this._keywordInSlug = researcher.getResearch('keywordCountInSlug');\n\n const assessmentResult = new AssessmentResult({config: this._config});\n\n const calculatedResult = this.calculateResult(i18n);\n\n assessmentResult.setScore(calculatedResult.score);\n assessmentResult.setStatus(calculatedResult.status);\n assessmentResult.setBody(calculatedResult.body);\n return assessmentResult;\n }\n\n /**\n * Checks whether the paper has a keyword and a slug.\n *\n * @param {Paper} paper The paper to use for the assessment.\n * @param {Researcher} researcher The researcher object.\n *\n * @returns {boolean} True if the paper contains a keyword and a slug, and if the keywordCountInSlug research is available on the researcher.\n */\n isApplicable(paper, researcher) {\n return (\n !paper.isFrontPage() &&\n paper.hasKeyword() &&\n paper.hasSlug() &&\n researcher.hasResearch('keywordCountInSlug')\n );\n }\n\n /**\n *\n * @param i18n\n * @returns {{score: number, body: React.JSX.Element, status: string}}\n */\n calculateResult(i18n) {\n const status = (() => {\n return this._keywordInSlug.percentWordMatches >= 50 ? 'good' : 'bad';\n })();\n\n const score = this.getScore(this._config.priority, status);\n\n return {\n score,\n status,\n body: (\n <Text as={'span'}>\n {this._config.content[status]}{' '}\n {this._config.docUrl && (\n <a href={this._config.docUrl} target=\"_blank\" rel=\"noreferrer\">\n {i18n ? i18n.translate(`Axyseo.Button.learnMore`) : 'Learn more'}\n </a>\n )}\n </Text>\n )\n };\n }\n}\n\nexport default SlugKeywordAssessment;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAQC,IAAI,QAAO,kBAAkB;AACrC,SAAQC,KAAK,QAAO,QAAQ;AAE5B,OAAOC,UAAU;AACjB,OAAOC,gBAAgB;;AAEvB;AACA;AACA;AACA,MAAMC,qBAAqB,SAASF,UAAU,CAAC;EAC7C;AACF;AACA;AACA;AACA;AACA;EACEG,WAAWA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;IACvB,KAAK,CAAC,CAAC;IAEP,MAAMC,aAAa,GAAG;MACpBC,EAAE,EAAE,aAAa;MACjBC,MAAM,EACJ,4FAA4F;MAC9FC,WAAW,EAAE,YAAY;MACzBC,OAAO,EAAE,KAAK;MACdC,QAAQ,EAAE,QAAQ;MAClBC,KAAK,EAAE,gBAAgB;MACvBC,OAAO,EAAE;QACPC,IAAI,EAAE,6BAA6B;QACnCC,OAAO,EAAE,EAAE;QACXC,GAAG,EAAE;MACP;IACF,CAAC;IAED,IAAI,CAACC,UAAU,GAAG,aAAa;IAC/B,IAAI,CAACC,OAAO,GAAGlB,KAAK,CAACM,aAAa,EAAED,MAAM,CAAC;EAC7C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEc,SAASA,CAAC;IAACC,KAAK;IAAEC,UAAU;IAAEC;EAAI,CAAC,EAAE;IACnC,IAAI,CAACC,cAAc,GAAGF,UAAU,CAACG,WAAW,CAAC,oBAAoB,CAAC;IAElE,MAAMC,gBAAgB,GAAG,IAAIvB,gBAAgB,CAAC;MAACG,MAAM,EAAE,IAAI,CAACa;IAAO,CAAC,CAAC;IAErE,MAAMQ,gBAAgB,GAAG,IAAI,CAACC,eAAe,CAACL,IAAI,CAAC;IAEnDG,gBAAgB,CAACG,QAAQ,CAACF,gBAAgB,CAACG,KAAK,CAAC;IACjDJ,gBAAgB,CAACK,SAAS,CAACJ,gBAAgB,CAACK,MAAM,CAAC;IACnDN,gBAAgB,CAACO,OAAO,CAACN,gBAAgB,CAACO,IAAI,CAAC;IAC/C,OAAOR,gBAAgB;EACzB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACES,YAAYA,CAACd,KAAK,EAAEC,UAAU,EAAE;IAC9B,OACE,CAACD,KAAK,CAACe,WAAW,CAAC,CAAC,IACpBf,KAAK,CAACgB,UAAU,CAAC,CAAC,IAClBhB,KAAK,CAACiB,OAAO,CAAC,CAAC,IACfhB,UAAU,CAACiB,WAAW,CAAC,oBAAoB,CAAC;EAEhD;;EAEA;AACF;AACA;AACA;AACA;EACEX,eAAeA,CAACL,IAAI,EAAE;IACpB,MAAMS,MAAM,GAAG,CAAC,MAAM;MACpB,OAAO,IAAI,CAACR,cAAc,CAACgB,kBAAkB,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK;IACtE,CAAC,EAAE,CAAC;IAEJ,MAAMV,KAAK,GAAG,IAAI,CAACW,QAAQ,CAAC,IAAI,CAACtB,OAAO,CAACP,QAAQ,EAAEoB,MAAM,CAAC;IAE1D,OAAO;MACLF,KAAK;MACLE,MAAM;MACNE,IAAI,eACFnC,KAAA,CAAA2C,aAAA,CAAC1C,IAAI;QAAC2C,EAAE,EAAE;MAAO,GACd,IAAI,CAACxB,OAAO,CAACL,OAAO,CAACkB,MAAM,CAAC,EAAE,GAAG,EACjC,IAAI,CAACb,OAAO,CAACV,MAAM,iBAClBV,KAAA,CAAA2C,aAAA;QAAGE,IAAI,EAAE,IAAI,CAACzB,OAAO,CAACV,MAAO;QAACoC,MAAM,EAAC,QAAQ;QAACC,GAAG,EAAC;MAAY,GAC3DvB,IAAI,GAAGA,IAAI,CAACwB,SAAS,CAAC,yBAAyB,CAAC,GAAG,YACnD,CAED;IAEV,CAAC;EACH;AACF;AAEA,eAAe3C,qBAAqB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avadaAssessor.js","names":["ContentAssessor","SEOAssessor","getMaxPoint","groupAssessmentsByCategory","groupAssessmentsByStatus","AvadaAssessor","constructor","researcher","config","seoAssessor","contentAssessor","assess","paper","i18n","assessments","results","map","assessment","body","status","score","title","getResult","groupBy","getScore","point","
|
|
1
|
+
{"version":3,"file":"avadaAssessor.js","names":["ContentAssessor","SEOAssessor","getMaxPoint","groupAssessmentsByCategory","groupAssessmentsByStatus","AvadaAssessor","constructor","researcher","config","seoAssessor","contentAssessor","assess","paper","i18n","assessments","results","map","assessment","body","status","score","title","getResult","groupBy","getScore","point","forEach","maxPoint","Math","round"],"sources":["../../../src/scoring/assessors/avadaAssessor.js"],"sourcesContent":["import {ContentAssessor, SEOAssessor} from '@axyseo/scoring/assessors/index';\nimport {getMaxPoint, groupAssessmentsByCategory, groupAssessmentsByStatus} from '../helpers';\n\n/**\n * The AvadaAssessor class is used for the general SEO analysis.\n */\nexport default class AvadaAssessor {\n /**\n * Creates a new AvadaAssessor instance.\n * @param {Researcher} researcher The researcher to use.\n * @param {Object} [config] The assessor config.\n * @param {Object} [config.textParagraphTooLong]\n * @param {Object} [config.textSentenceLength]\n * @param {Object} [config.textTransitionWords]\n * @param {Object} [config.sentenceBeginnings]\n * @param {Object} [config.relatedKeywords]\n * @param {Object} [config.titleKeyword]\n * @param {Object} [config.textImages]\n * @param {Object} [config.numberTitle]\n * @param {Object} [config.introductionKeyword]\n * @param {Object} [config.keyphraseLength]\n * @param {Object} [config.metaDescriptionKeyword]\n * @param {Object} [config.metaDescriptionLength]\n * @param {Object} [config.subheadingsKeyword]\n * @param {Object} [config.externalLinks]\n * @param {Object} [config.keyphraseDensity]\n * @param {Object} [config.media]\n * @param {Object} [config.urlLength]\n * @param {Object} [config.textLength]\n * @param {Object} [config.singleTitle]\n * @param {Object} [config.keyphrase]\n * @param {Object} [config.internalLinks]\n * @param {Object} [config.titleWidth]\n * @param {Object} [config.slugKeyword]\n * @param {Object} [config.singleH1]\n * @param {Object} [config.schema]\n */\n constructor(researcher, config = {}) {\n const seoAssessor = new SEOAssessor(researcher, config);\n const contentAssessor = new ContentAssessor(researcher, config);\n this.seoAssessor = seoAssessor;\n this.contentAssessor = contentAssessor;\n this.researcher = researcher;\n this.config = config;\n }\n\n assess(paper, i18n) {\n this.seoAssessor.assess(paper, i18n);\n this.contentAssessor.assess(paper, i18n);\n\n let assessments = [...this.seoAssessor.results, ...this.contentAssessor.results];\n assessments = assessments.map(assessment => ({\n ...assessment.config,\n body: assessment.body,\n status: assessment.status,\n score: assessment.score,\n title: assessment.title || assessment.config.title\n }));\n this.assessments = assessments;\n }\n\n getResult(groupBy = 'category', getScore = true) {\n let assessments = [];\n switch (groupBy) {\n case 'category':\n assessments = groupAssessmentsByCategory(this.assessments);\n break;\n case 'status':\n assessments = groupAssessmentsByStatus(this.assessments);\n break;\n }\n\n return {\n assessments,\n ...(getScore ? {score: this.getScore()} : {})\n };\n }\n\n getScore() {\n let point = 0;\n this.assessments.forEach(assessment => {\n point += assessment.score;\n });\n\n const maxPoint = getMaxPoint(this.assessments);\n return Math.round((point * 100) / maxPoint);\n }\n}\n"],"mappings":"AAAA,SAAQA,eAAe,EAAEC,WAAW;AACpC,SAAQC,WAAW,EAAEC,0BAA0B,EAAEC,wBAAwB;;AAEzE;AACA;AACA;AACA,eAAe,MAAMC,aAAa,CAAC;EACjC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,UAAU,EAAEC,MAAM,GAAG,CAAC,CAAC,EAAE;IACnC,MAAMC,WAAW,GAAG,IAAIR,WAAW,CAACM,UAAU,EAAEC,MAAM,CAAC;IACvD,MAAME,eAAe,GAAG,IAAIV,eAAe,CAACO,UAAU,EAAEC,MAAM,CAAC;IAC/D,IAAI,CAACC,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACC,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACH,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACC,MAAM,GAAGA,MAAM;EACtB;EAEAG,MAAMA,CAACC,KAAK,EAAEC,IAAI,EAAE;IAClB,IAAI,CAACJ,WAAW,CAACE,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC;IACpC,IAAI,CAACH,eAAe,CAACC,MAAM,CAACC,KAAK,EAAEC,IAAI,CAAC;IAExC,IAAIC,WAAW,GAAG,CAAC,GAAG,IAAI,CAACL,WAAW,CAACM,OAAO,EAAE,GAAG,IAAI,CAACL,eAAe,CAACK,OAAO,CAAC;IAChFD,WAAW,GAAGA,WAAW,CAACE,GAAG,CAACC,UAAU,KAAK;MAC3C,GAAGA,UAAU,CAACT,MAAM;MACpBU,IAAI,EAAED,UAAU,CAACC,IAAI;MACrBC,MAAM,EAAEF,UAAU,CAACE,MAAM;MACzBC,KAAK,EAAEH,UAAU,CAACG,KAAK;MACvBC,KAAK,EAAEJ,UAAU,CAACI,KAAK,IAAIJ,UAAU,CAACT,MAAM,CAACa;IAC/C,CAAC,CAAC,CAAC;IACH,IAAI,CAACP,WAAW,GAAGA,WAAW;EAChC;EAEAQ,SAASA,CAACC,OAAO,GAAG,UAAU,EAAEC,QAAQ,GAAG,IAAI,EAAE;IAC/C,IAAIV,WAAW,GAAG,EAAE;IACpB,QAAQS,OAAO;MACb,KAAK,UAAU;QACbT,WAAW,GAAGX,0BAA0B,CAAC,IAAI,CAACW,WAAW,CAAC;QAC1D;MACF,KAAK,QAAQ;QACXA,WAAW,GAAGV,wBAAwB,CAAC,IAAI,CAACU,WAAW,CAAC;QACxD;IACJ;IAEA,OAAO;MACLA,WAAW;MACX,IAAIU,QAAQ,GAAG;QAACJ,KAAK,EAAE,IAAI,CAACI,QAAQ,CAAC;MAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;EACH;EAEAA,QAAQA,CAAA,EAAG;IACT,IAAIC,KAAK,GAAG,CAAC;IACb,IAAI,CAACX,WAAW,CAACY,OAAO,CAACT,UAAU,IAAI;MACrCQ,KAAK,IAAIR,UAAU,CAACG,KAAK;IAC3B,CAAC,CAAC;IAEF,MAAMO,QAAQ,GAAGzB,WAAW,CAAC,IAAI,CAACY,WAAW,CAAC;IAC9C,OAAOc,IAAI,CAACC,KAAK,CAAEJ,KAAK,GAAG,GAAG,GAAIE,QAAQ,CAAC;EAC7C;AACF","ignoreList":[]}
|