MCPcopy Create free account
hub / github.com/codecombat/codecombat / applyDelta

Method applyDelta

app/models/Poll.js:23–82  ·  view source on GitHub ↗
(delta)

Source from the content-addressed store, hash-verified

21 }
22
23 applyDelta (delta) {
24 // Hackiest hacks ever, just manually mauling the delta (whose format I don't understand) to not overwrite votes and other languages' nested translations.
25 // One still must be careful about patches that accidentally delete keys from the top-level i18n object.
26 const i18nDelta = {}
27 if (delta.i18n) {
28 i18nDelta.i18n = $.extend(true, {}, delta.i18n)
29 }
30 const object = delta.answers != null ? delta.answers : {}
31 for (const answerIndex in object) {
32 const answerChanges = object[answerIndex]
33 if (i18nDelta.answers == null) { i18nDelta.answers = {} }
34 if (_.isArray(answerChanges)) {
35 if (i18nDelta.answers[answerIndex] == null) { i18nDelta.answers[answerIndex] = [] }
36 for (const change of Array.from(answerChanges)) {
37 let pickedChange
38 if (_.isNumber(change)) {
39 pickedChange = change
40 } else {
41 pickedChange = $.extend(true, {}, change)
42 for (const key in pickedChange) {
43 const answerIndexNum = parseInt(answerIndex.replace('_', ''), 10)
44 if (!_.isNaN(answerIndexNum)) {
45 let value
46 const oldValue = this.get('answers')[answerIndexNum][key]
47 const isDeletion = _.string.startsWith(answerIndex, '_')
48 const isI18N = key === 'i18n'
49 if (isI18N && !isDeletion) {
50 // Use the new change, but make sure we're not deleting any other languages' translations.
51 value = pickedChange[key]
52 const object1 = oldValue != null ? oldValue : {}
53 for (const language in object1) {
54 const oldTranslations = object1[language]
55 const object2 = oldTranslations != null ? oldTranslations : {}
56 for (const translationKey in object2) {
57 const translationValue = object2[translationKey]
58 if (value[language] == null) { value[language] = {} }
59 if (value[language][translationKey] == null) { value[language][translationKey] = translationValue }
60 }
61 }
62 } else {
63 value = oldValue
64 }
65 pickedChange[key] = value
66 }
67 }
68 }
69 i18nDelta.answers[answerIndex].push(pickedChange)
70 }
71 } else {
72 i18nDelta.answers[answerIndex] = answerChanges
73 if (answerChanges != null ? answerChanges.votes : undefined) {
74 i18nDelta.answers[answerIndex] = _.omit(answerChanges, 'votes')
75 }
76 }
77 }
78
79 // console.log 'got delta', delta
80 // console.log 'got i18nDelta', i18nDelta

Callers

nothing calls this directly

Calls 1

getMethod · 0.45

Tested by

no test coverage detected