Skip to content

Commit 16d038a

Browse files
committed
Implement a share build link
1 parent 998c7f0 commit 16d038a

File tree

5 files changed

+69
-2
lines changed

5 files changed

+69
-2
lines changed

dist/js/bundle.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,7 @@ class GunplaCalculator {
691691
this.searchPart = "";
692692
this.sort = "";
693693
this.currentPart = "";
694+
this.shareLinkDisplay = document.querySelector(".share-link-display");
694695
}
695696
init() {
696697
Sorters.filter(s => s.isParam !== false).forEach(sorter => {
@@ -709,6 +710,7 @@ class GunplaCalculator {
709710
this._initApplyMapBonus();
710711
this._initSearchPart();
711712
this._initRemove();
713+
this._initSharedData();
712714
}
713715
_generateSkillIcon(exData) {
714716
return `<span class='ex-cat-icon gbgw-skill-${exData.category.toLowerCase().replace(/\s/g, "-")}'></span>`;
@@ -841,6 +843,31 @@ class GunplaCalculator {
841843
}
842844
return true;
843845
}
846+
_showShareLink() {
847+
var selected = {};
848+
const inputs = this.inputs;
849+
for (let input in inputs) {
850+
if (inputs.hasOwnProperty(input) && inputs[input]) {
851+
selected[inputs[input].dataset.part] = inputs[input].dataset.partname;
852+
}
853+
}
854+
var result = JSON.stringify(selected);
855+
var curLink = new URL(window.location.href);
856+
var genLink = curLink.protocol + "//" + curLink.host + curLink.pathname + "?d=" + window.btoa(result);
857+
this.shareLinkDisplay.innerHTML = '<a href="' + genLink + '">' + genLink + "</a>";
858+
}
859+
_initSharedData() {
860+
var curLink = new URL(window.location.href);
861+
var selected = {};
862+
var nextUrlParam = curLink.searchParams.entries().next();
863+
if (!nextUrlParam.done) {
864+
selected = JSON.parse(window.atob(nextUrlParam.value[1]));
865+
for (let key in selected) {
866+
this._handleInputClick(document.querySelector(".js-input-" + key));
867+
this._handlePartSelection(document.querySelector('div[data-partname="' + selected[key] + '"]'));
868+
}
869+
}
870+
}
844871
_showPartList(partToShow) {
845872
let Collections = this.dataStoreManager.getStoreData("Collections");
846873
if (this.partList && Collections && Array.isArray(Collections)) {
@@ -922,6 +949,7 @@ class GunplaCalculator {
922949
}
923950
}
924951
this._calculate(partData);
952+
this._showShareLink();
925953
}
926954
_getPartSlotClass(dataset, forcePart) {
927955
let partClass = "gbgw-";

dist/js/bundle.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/js/bundle.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ <h1>GBGW Calculator v1.2.4</h1>
6969
</div>
7070
</div>
7171
</header>
72+
<div style="width: calc(1380px + 1em); margin: auto">
73+
<h3>Share selected parts and gear</h3>
74+
<div class="share-link-display" style="overflow-wrap:anywhere;"></div>
75+
</div>
7276
<div class="container js-container"></div>
7377
<footer>
7478
<div class="notice">

src/js/gunpla-calculator.class.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class GunplaCalculator {
3030
this.searchPart = '';
3131
this.sort = '';
3232
this.currentPart = '';
33+
this.shareLinkDisplay = document.querySelector('.share-link-display');
3334
}
3435

3536
init() {
@@ -49,6 +50,7 @@ class GunplaCalculator {
4950
this._initApplyMapBonus();
5051
this._initSearchPart();
5152
this._initRemove();
53+
this._initSharedData();
5254
}
5355

5456
_generateSkillIcon(exData) {
@@ -190,6 +192,38 @@ class GunplaCalculator {
190192
return true;
191193
}
192194

195+
_showShareLink(){
196+
var selected = {};
197+
198+
const inputs = this.inputs;
199+
for (let input in inputs) {
200+
if (inputs.hasOwnProperty(input) && inputs[input]) {
201+
selected[inputs[input].dataset.part]=inputs[input].dataset.partname;
202+
}
203+
}
204+
205+
var result = JSON.stringify(selected);
206+
var curLink = new URL(window.location.href);
207+
var genLink = curLink.protocol + "//" + curLink.host + curLink.pathname + "?d=" + window.btoa(result);
208+
209+
this.shareLinkDisplay.innerHTML = '<a href="' + genLink + '">' + genLink + '</a>';
210+
}
211+
212+
_initSharedData(){
213+
var curLink = new URL(window.location.href);
214+
var selected = {};
215+
216+
var nextUrlParam = curLink.searchParams.entries().next();
217+
if(!nextUrlParam.done){
218+
selected = JSON.parse(window.atob(nextUrlParam.value[1]));
219+
220+
for(let key in selected){
221+
this._handleInputClick(document.querySelector(".js-input-"+key));
222+
this._handlePartSelection(document.querySelector('div[data-partname="' + selected[key] + '"]'));
223+
}
224+
}
225+
}
226+
193227
_showPartList(partToShow) {
194228
let Collections = this.dataStoreManager.getStoreData('Collections');
195229
if (this.partList && Collections && Array.isArray(Collections)) {
@@ -278,6 +312,7 @@ class GunplaCalculator {
278312
}
279313
}
280314
this._calculate(partData);
315+
this._showShareLink();
281316
}
282317

283318
_getPartSlotClass(dataset, forcePart) {

0 commit comments

Comments
 (0)