| 41 | } |
| 42 | |
| 43 | onLoaded () { |
| 44 | let campaign |
| 45 | const orderedCampaignSlugs = ['junior', 'dungeon', 'campaign-game-dev-1', 'campaign-web-dev-1', 'forest', 'campaign-game-dev-2', 'campaign-web-dev-2', 'desert', 'mountain', 'glacier'] |
| 46 | const courseCampaignIds = [] |
| 47 | for (var course of Array.from(utils.sortCourses(this.courses.models).reverse())) { |
| 48 | if (course.get('releasePhase') === 'released') { |
| 49 | campaign = _.find(this.campaigns.models, c => c.id === course.get('campaignID')) |
| 50 | if (campaign) { |
| 51 | orderedCampaignSlugs.splice(0, 0, campaign.get('slug')) |
| 52 | } |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | const batchSize = 1000 |
| 57 | var fetchLevelSessions = (skip, results) => { |
| 58 | const levelPromises = [] |
| 59 | for (let i = 0; i <= 4; i++) { |
| 60 | const levelPromise = Promise.resolve($.get(`/db/level?skip=${skip}&project=slug,documentation,original`)) |
| 61 | levelPromises.push(levelPromise) |
| 62 | skip += batchSize |
| 63 | } |
| 64 | return new Promise(resolve => setTimeout(resolve.bind(null, Promise.all(levelPromises)), 100)) |
| 65 | .then(resultsMatrix => { |
| 66 | for (const newResults of Array.from(resultsMatrix)) { |
| 67 | results = results.concat(newResults) |
| 68 | } |
| 69 | if ((results % batchSize) === 0) { |
| 70 | return fetchLevelSessions(skip, results) |
| 71 | } else { |
| 72 | return Promise.resolve(results) |
| 73 | } |
| 74 | }) |
| 75 | } |
| 76 | return fetchLevelSessions(0, []) |
| 77 | .then(levels => { |
| 78 | let hints, level |
| 79 | let doc |
| 80 | const levelHintsMap = {} |
| 81 | for (level of Array.from(levels)) { |
| 82 | var docs = level.documentation != null ? level.documentation : {} |
| 83 | const general = _.filter(((() => { |
| 84 | const result = [] |
| 85 | for (doc of Array.from(docs.generalArticles || [])) { |
| 86 | result.push(__guard__(_.find(this.articles.models, article => article.get('original') === doc.original), x => x.attributes)) |
| 87 | } |
| 88 | return result |
| 89 | })())) |
| 90 | const specific = _.filter(docs.specificArticles || [], a => (a != null)) |
| 91 | hints = (docs.hintsB || docs.hints || []).concat(specific).concat(general) |
| 92 | hints = _.sortBy(hints, function (doc) { |
| 93 | if ((doc != null ? doc.name : undefined) === 'Intro') { return -1 } |
| 94 | return 0 |
| 95 | }) |
| 96 | levelHintsMap[level.slug] = hints |
| 97 | } |
| 98 | this.campaignHints = [] |
| 99 | for (campaign of Array.from(this.campaigns.models)) { |
| 100 | var needle |