diff --git a/static/images/shop/graphic-03_VHDCI_carrier.svg b/static/images/shop/graphic-03_VHDCI_carrier.svg new file mode 100644 index 0000000..3cd6a4d --- /dev/null +++ b/static/images/shop/graphic-03_VHDCI_carrier.svg @@ -0,0 +1,533 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/js/shop.jsx b/static/js/shop.jsx index 2406e83..6ca3d64 100644 --- a/static/js/shop.jsx +++ b/static/js/shop.jsx @@ -627,6 +627,14 @@ class ProductCartItem extends React.PureComponent { ); break; + case 'vhdcicarrier': + render_progress = ( +
+

{`${data.nbrCurrentSlot}/${model.nbrSlotMax} EEM connectors used`}

+
+ ); + break; + case 'zotino': case 'hd68': render_progress = ( @@ -2006,7 +2014,7 @@ class Shop extends React.PureComponent { // check the number of EEM connectors available for all Kasli const idxK = itemsCloned.reduce((prev, next, i) => { - if (next.type === 'kasli') { + if (next.type === 'kasli' || next.type === 'vhdcicarrier') { prev.push(i); } return prev; @@ -2080,7 +2088,7 @@ class Shop extends React.PureComponent { if (itemsCloned.length > (idx + 1)) { const ddkali = itemsCloned[idx + 1]; - if (ddkali.type === 'kasli') { + if (ddkali.type === 'kasli' || ddkali.type === 'vhdcicarrier') { rules[ddkali.rules.follow.type] = {...ddkali.rules.follow}; } } diff --git a/static/js/shop.min.js b/static/js/shop.min.js index 6a97b03..753cbcb 100644 --- a/static/js/shop.min.js +++ b/static/js/shop.min.js @@ -385,7 +385,7 @@ var Layout = /*#__PURE__*/function (_React$PureComponent) { className: "small" }, "Input the JSON description below. Should be something like:", /*#__PURE__*/React.createElement("br", null), JSON.stringify({ "items": [{ - "pn": "1123" + "pn": "1124" }, { "pn": "2118" }, { @@ -687,6 +687,12 @@ var ProductCartItem = /*#__PURE__*/function (_React$PureComponent3) { }, /*#__PURE__*/React.createElement("p", null, "".concat(data.nbrCurrentSlot, "/").concat(model.nbrSlotMax, " EEM connectors used")), /*#__PURE__*/React.createElement("p", null, "".concat(data.nbrCurrentClock, "/").concat(model.nbrClockMax, " Clock connectors used"))); break; + case 'vhdcicarrier': + render_progress = /*#__PURE__*/React.createElement("div", { + className: "k-popup-connectors" + }, /*#__PURE__*/React.createElement("p", null, "".concat(data.nbrCurrentSlot, "/").concat(model.nbrSlotMax, " EEM connectors used"))); + break; + case 'zotino': case 'hd68': render_progress = /*#__PURE__*/React.createElement("div", { @@ -2016,7 +2022,7 @@ var Shop = /*#__PURE__*/function (_React$PureComponent12) { var idxK = itemsCloned.reduce(function (prev, next, i) { - if (next.type === 'kasli') { + if (next.type === 'kasli' || next.type === 'vhdcicarrier') { prev.push(i); } @@ -2096,7 +2102,7 @@ var Shop = /*#__PURE__*/function (_React$PureComponent12) { if (itemsCloned.length > idx + 1) { var ddkali = itemsCloned[idx + 1]; - if (ddkali.type === 'kasli') { + if (ddkali.type === 'kasli' || ddkali.type === 'vhdcicarrier') { rules[ddkali.rules.follow.type] = _objectSpread({}, ddkali.rules.follow); } } diff --git a/static/js/shop_data.js b/static/js/shop_data.js index a131337..74b8a80 100644 --- a/static/js/shop_data.js +++ b/static/js/shop_data.js @@ -93,7 +93,51 @@ const shop_data = { type: 'kasli-follow', icon: '/shop/icon-reminder.svg', name: 'Kasli', - message: 'Due to wiring constraints, a Kasli can only connect to EEM cards immediately at its right, without crossing another Kasli.', + message: 'Due to wiring constraints, a Kasli can only connect to EEM cards immediately at its right, without crossing another carrier.', + }, + }, + }, + 'vhdcicarrier': { + id: 'vhdcicarrier', + name: 'VHDCI Carrier', + name_number: '1008', + name_codename: '', + price: 400, + image: '/shop/graphic-03_VHDCI_carrier.svg', + specs: [ + 'Passive adapter between VHDCI and EEMs.', + 'VHDCI (SCSI-3) cables can carry EEM signals over short distances between crates.', + 'Bidirectional: can be driven by Kasli (contact us), or can drive other cards.', + 'A pair of VHDCI carriers is a simple, low-latency and low-cost alternative to DRTIO for some applications.', + ], + size: 'big', + type: 'vhdcicarrier', + hp: 8, + nbrSlotMin: 0, + nbrSlotMax: 8, + nbrCurrentSlot: 0, + nbrClockMax: 0, + nbrCurrentClock: 0, + slotOccupied: 1, + clockOccupied: 0, + rules: { + maxSlot: { + type: 'vhdcicarrier-max-slot', + icon: '/shop/icon-reminder.svg', + name: 'VHDCI carrier', + message: 'Insufficient EEM connectors.', + }, + maxSlotWarning: { + type: 'vhdcicarrier-max-slot-warning', + icon: '/shop/icon-warning.svg', + name: 'VHDCI carrier', + message: 'Insufficient EEM connectors', + }, + follow: { + type: 'vhdcicarrier-follow', + icon: '/shop/icon-reminder.svg', + name: 'VHDCI carrier', + message: 'Due to wiring constraints, a VHDCI carrier can only connect to EEM cards immediately at its right, without crossing another carrier.', }, }, }, @@ -589,6 +633,7 @@ const shop_data = { /* itemIds define items order - change order to suit your need */ itemIds: [ 'kasli', + 'vhdcicarrier', 'bnc-dio', 'sma-dio', 'rj45-dio',