diff --git a/ChangeLog.md b/ChangeLog.md
index b8aa5618..88719997 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -4,6 +4,7 @@
* Handle import of ships with incorrectly-sized slots
* Add 'Extreme' blueprint roll: best beneficial and worst detrimental outcome (in place of 'Average' roll)
* Display information about Microsoft browser issues when an import fails
+ * Add 'purchase this build' icon link to EDDB
#2.2.14
* Ensure that jitter is shown correctly when the result of a special effect
diff --git a/src/app/components/SvgIcons.jsx b/src/app/components/SvgIcons.jsx
index 34d84118..af119679 100644
--- a/src/app/components/SvgIcons.jsx
+++ b/src/app/components/SvgIcons.jsx
@@ -227,6 +227,26 @@ export class LinkIcon extends SvgIcon {
}
}
+/**
+ * Shopping icon (dollar sign)
+ */
+export class ShoppingIcon extends SvgIcon {
+ /**
+ * Overriden view box
+ * @return {String} view box
+ */
+ viewBox() { return '0 0 200 200'; }
+ /**
+ * Generate the SVG
+ * @return {React.Component} SVG Contents
+ */
+ svg() {
+ return
+
+ ;
+ }
+}
+
/**
* No Power - Lightning bolt + no entry
*/
diff --git a/src/app/i18n/en.js b/src/app/i18n/en.js
index e4979ff1..ce9d4436 100644
--- a/src/app/i18n/en.js
+++ b/src/app/i18n/en.js
@@ -37,6 +37,7 @@ export const terms = {
PHRASE_BLUEPRINT_RESET: 'Remove all modifications and blueprint',
PHRASE_SELECT_SPECIAL: 'Click to select an experimental effect',
PHRASE_NO_SPECIAL: 'No experimental effect',
+ PHRASE_SHOPPING_LIST: 'Stations that sell this build',
HELP_MODIFICATIONS_MENU: 'Click on a number to enter a new value, or drag along the bar for small changes',
diff --git a/src/app/pages/OutfittingPage.jsx b/src/app/pages/OutfittingPage.jsx
index 46401c6b..9fdd86cb 100644
--- a/src/app/pages/OutfittingPage.jsx
+++ b/src/app/pages/OutfittingPage.jsx
@@ -8,7 +8,7 @@ import Persist from '../stores/Persist';
import Ship from '../shipyard/Ship';
import { toDetailedBuild } from '../shipyard/Serializer';
import { outfitURL } from '../utils/UrlGenerators';
-import { FloppyDisk, Bin, Switch, Download, Reload, Fuel, LinkIcon } from '../components/SvgIcons';
+import { FloppyDisk, Bin, Switch, Download, Reload, Fuel, LinkIcon, ShoppingIcon } from '../components/SvgIcons';
import ShipSummaryTable from '../components/ShipSummaryTable';
import StandardSlotSection from '../components/StandardSlotSection';
import HardpointsSlotSection from '../components/HardpointsSlotSection';
@@ -284,6 +284,20 @@ export default class OutfittingPage extends Page {
this.context.showModal();
}
+ /**
+ * Open up a window for EDDB with a shopping list of our components
+ */
+ _eddbShoppingList() {
+ const ship = this.state.ship;
+
+ const shipId = Ships[ship.id].eddbID;
+ // Provide unique list of non-PP module EDDB IDs
+ const modIds = ship.internal.concat(ship.bulkheads, ship.standard, ship.hardpoints).filter(slot => slot !== null && slot.m !== null && !slot.m.pp).map(slot => slot.m.eddbID).filter((v, i, a) => a.indexOf(v) === i);
+
+ // Open up the relevant URL
+ window.open('https://eddb.io/station?s=' + shipId + '&m=' + modIds.join(','));
+ }
+
/**
* Handle Key Down
* @param {Event} e Keyboard Event
@@ -342,6 +356,9 @@ export default class OutfittingPage extends Page {
+