function suggestionsToPresets()

in build_data.js [259:360]


function suggestionsToPresets(presets) {
  const brands = nsi.brands.brands;
  const wikidata = nsi.wikidata.wikidata;

  Object.keys(brands).forEach(kvnd => {
    const suggestion = brands[kvnd];
    const qid = suggestion.tags['brand:wikidata'];
    if (!qid || !/^Q\d+$/.test(qid)) return;   // wikidata tag missing or looks wrong..

    const parts = kvnd.split('|', 2);
    const kv = parts[0];
    const name = parts[1].replace('~', ' ');

    let presetID, preset;

    // sometimes we can choose a more specific preset then key/value..
    if (suggestion.tags.cuisine) {
      // cuisine can contain multiple values, so try them all in order
      let cuisines = suggestion.tags.cuisine.split(';');
      for (let i = 0; i < cuisines.length; i++) {
        presetID = kv + '/' + cuisines[i].trim();
        preset = presets[presetID];
        if (preset) break;  // we matched one
      }

    } else if (suggestion.tags.vending) {
      if (suggestion.tags.vending === 'parcel_pickup;parcel_mail_in') {
        presetID = kv + '/parcel_pickup_dropoff';
      } else {
        presetID = kv + '/' + suggestion.tags.vending;
      }
      preset = presets[presetID];
    }

    // A few exceptions where the NSI tagging doesn't exactly match iD tagging..
    if (kv === 'healthcare/clinic') {
      presetID = 'amenity/clinic';
      preset = presets[presetID];
    } else if (kv === 'leisure/tanning_salon') {
      presetID = 'shop/beauty/tanning';
      preset = presets[presetID];
    }

    // fallback to key/value
    if (!preset) {
      presetID = kv;
      preset = presets[presetID];
    }

    // still no match?
    if (!preset) {
      console.log('Warning:  No preset "' + presetID + '" for name-suggestion "' + name + '"');
      return;
    }

    let suggestionID = presetID + '/' + name.replace('/', '');

    let tags = { 'brand:wikidata': qid };
    for (let k in preset.tags) {
      // prioritize suggestion tags over preset tags (for `vending`,`cuisine`, etc)
      tags[k] = suggestion.tags[k] || preset.tags[k];
    }

    // Prefer a wiki commons logo sometimes.. #6361
    const preferCommons = {
      Q177054: true,    // Burger King
      Q524757: true,    // KFC
      Q779845: true,    // CBA
      Q1205312: true    // In-N-Out
    };

    let logoURL;
    let logoURLs = wikidata[qid] && wikidata[qid].logos;
    if (logoURLs) {
      if (logoURLs.wikidata && preferCommons[qid]) {
        logoURL = logoURLs.wikidata;
      } else if (logoURLs.facebook) {
        logoURL = logoURLs.facebook;
      } else if (logoURLs.twitter) {
        logoURL = logoURLs.twitter;
      } else {
        logoURL = logoURLs.wikidata;
      }
    }

    presets[suggestionID] = {
      name: name,
      icon: preset.icon,
      imageURL: logoURL,
      geometry: preset.geometry,
      tags: tags,
      addTags: suggestion.tags,
      reference: preset.reference,
      countryCodes: suggestion.countryCodes,
      terms: (suggestion.matchNames || []),
      matchScore: 2,
      suggestion: true
    };
  });

  return presets;
}