better imports
@@ -220,11 +220,10 @@ include('../globalHTML/header-1.php');
|
|||||||
<input type='url' placeholder='Via URL' class='input' onchange='imageURL(this.value, uploadArt, "autoFit");'>
|
<input type='url' placeholder='Via URL' class='input' onchange='imageURL(this.value, uploadArt, "autoFit");'>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<h5 class='margin-bottom padding input-description'>Or enter a card name (and index)</h5>
|
<h5 class='margin-bottom padding input-description'>Or enter a card name</h5>
|
||||||
<div class='input-grid margin-bottom'>
|
<input id='art-name' type='text' placeholder='Enter Card Name' class='input margin-bottom' onchange='fetchScryfallData(this.value, artFromScryfall, true);'>
|
||||||
<input id='art-name' type='text' placeholder='Enter Card Name' class='input' onchange='fetchScryfallData(this.value, artFromScryfall, true);'>
|
<h5 class='padding margin-bottom input-description'>Select a specific card art to load</h5>
|
||||||
<input id='art-index' type='number' value=1 max=1 min=1 class='input' onchange='changeArtIndex();'>
|
<select class='input margin-bottom' id='art-index' onchange='changeArtIndex();'></select>
|
||||||
</div>
|
|
||||||
<h5 class='margin-bottom padding input-description'>And credit the artist</h5>
|
<h5 class='margin-bottom padding input-description'>And credit the artist</h5>
|
||||||
<div class='input-grid'>
|
<div class='input-grid'>
|
||||||
<input id='art-artist' type='text' class='input' oninput='artistEdited(this.value);' placeholder='Artist'>
|
<input id='art-artist' type='text' class='input' oninput='artistEdited(this.value);' placeholder='Artist'>
|
||||||
@@ -387,11 +386,10 @@ include('../globalHTML/header-1.php');
|
|||||||
</div>
|
</div>
|
||||||
<div id='creator-menu-import' class='hidden'>
|
<div id='creator-menu-import' class='hidden'>
|
||||||
<div class='readable-background margin-bottom padding'>
|
<div class='readable-background margin-bottom padding'>
|
||||||
<h5 class='padding margin-bottom input-description'>Import a real card by name (and index)</h5>
|
<h5 class='padding margin-bottom input-description'>Import a real card by name</h5>
|
||||||
<div class='input-grid margin-bottom'>
|
<input id='import-name' class='input margin-bottom' type='text' onchange='fetchScryfallData(this.value, importCard);' placeholder='Enter Card Name'>
|
||||||
<input id='import-name' class='input' type='text' onchange='fetchScryfallData(this.value, importCard);' placeholder='Enter Card Name'>
|
<h5 class='padding margin-bottom input-description'>Select a specific card to import</h5>
|
||||||
<input id='import-index' class='input' type='number' onchange='changeCardIndex();' value=1 max=1 min=1>
|
<select class='input margin-bottom' id='import-index' onchange='changeCardIndex();'></select>
|
||||||
</div>
|
|
||||||
<h5 class='padding input-description'>Select a language for card imports (not all languages will always be available)</h5>
|
<h5 class='padding input-description'>Select a language for card imports (not all languages will always be available)</h5>
|
||||||
<select class='input' id='import-language' onchange='fetchScryfallData(document.querySelector("#import-name").value, importCard);'>
|
<select class='input' id='import-language' onchange='fetchScryfallData(document.querySelector("#import-name").value, importCard);'>
|
||||||
<option value="en">English</option>
|
<option value="en">English</option>
|
||||||
|
BIN
img/frames/invocation/a.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
img/frames/invocation/aThumb.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
img/frames/invocation/b.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
img/frames/invocation/bThumb.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
img/frames/invocation/g.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
img/frames/invocation/gThumb.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
img/frames/invocation/m.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
img/frames/invocation/mThumb.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
img/frames/invocation/oreo.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
img/frames/invocation/oreoThumb.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
img/frames/invocation/pt.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
img/frames/invocation/ptThumb.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
img/frames/invocation/r.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
img/frames/invocation/rThumb.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
img/frames/invocation/u.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
img/frames/invocation/uThumb.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
img/frames/invocation/w.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
img/frames/invocation/wThumb.png
Normal file
After Width: | Height: | Size: 16 KiB |
@@ -964,20 +964,24 @@ function autoFitArt() {
|
|||||||
artEdited();
|
artEdited();
|
||||||
}
|
}
|
||||||
function artFromScryfall(scryfallResponse) {
|
function artFromScryfall(scryfallResponse) {
|
||||||
// importedData = scryfallResponse.data;
|
|
||||||
// importedData.forEach(card => {
|
|
||||||
|
|
||||||
// });
|
|
||||||
// scryfallArt = scryfallResponse.data;
|
|
||||||
scryfallArt = scryfallResponse;
|
scryfallArt = scryfallResponse;
|
||||||
document.querySelector('#art-index').value = 1;
|
const artIndex = document.querySelector('#art-index');
|
||||||
document.querySelector('#art-index').max = scryfallArt.length;
|
artIndex.innerHTML = null;
|
||||||
|
var optionIndex = 0;
|
||||||
|
scryfallResponse.forEach(card => {
|
||||||
|
var option = document.createElement('option');
|
||||||
|
option.innerHTML = `${card.name} (${card.set_name})`;
|
||||||
|
option.value = optionIndex;
|
||||||
|
artIndex.appendChild(option);
|
||||||
|
optionIndex ++;
|
||||||
|
});
|
||||||
changeArtIndex();
|
changeArtIndex();
|
||||||
}
|
}
|
||||||
function changeArtIndex() {
|
function changeArtIndex() {
|
||||||
if (scryfallArt[document.querySelector('#art-index').value - 1].image_uris) {
|
const artIndexValue = document.querySelector('#art-index').value;
|
||||||
uploadArt(scryfallArt[document.querySelector('#art-index').value - 1].image_uris.art_crop, "autoFit");
|
if (scryfallArt[artIndexValue].image_uris) {
|
||||||
artistEdited(scryfallArt[document.querySelector('#art-index').value - 1].artist);
|
uploadArt(scryfallArt[artIndexValue].image_uris.art_crop, 'autoFit');
|
||||||
|
artistEdited(scryfallArt[artIndexValue].artist);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function initDraggableArt() {
|
function initDraggableArt() {
|
||||||
@@ -1238,12 +1242,20 @@ async function downloadCard() {
|
|||||||
//IMPORT/SAVE TAB
|
//IMPORT/SAVE TAB
|
||||||
function importCard(cardObject) {
|
function importCard(cardObject) {
|
||||||
scryfallCard = cardObject;
|
scryfallCard = cardObject;
|
||||||
document.querySelector('#import-index').value = 1;
|
const importIndex = document.querySelector('#import-index');
|
||||||
document.querySelector('#import-index').max = scryfallCard.length;
|
importIndex.innerHTML = null;
|
||||||
|
var optionIndex = 0;
|
||||||
|
cardObject.forEach(card => {
|
||||||
|
var option = document.createElement('option');
|
||||||
|
option.innerHTML = `${card.name} (${card.type_line})`;
|
||||||
|
option.value = optionIndex;
|
||||||
|
importIndex.appendChild(option);
|
||||||
|
optionIndex ++;
|
||||||
|
});
|
||||||
changeCardIndex();
|
changeCardIndex();
|
||||||
}
|
}
|
||||||
function changeCardIndex() {
|
function changeCardIndex() {
|
||||||
var cardToImport = scryfallCard[document.querySelector('#import-index').value - 1];
|
var cardToImport = scryfallCard[document.querySelector('#import-index').value];
|
||||||
//text
|
//text
|
||||||
if (card.text.title) {card.text.title.text = curlyQuotes(cardToImport.name || '');}
|
if (card.text.title) {card.text.title.text = curlyQuotes(cardToImport.name || '');}
|
||||||
if (card.text.nickname) {card.text.nickname.text = cardToImport.flavor_name || '';}
|
if (card.text.nickname) {card.text.nickname.text = cardToImport.flavor_name || '';}
|
||||||
@@ -1567,16 +1579,17 @@ function fetchScryfallData(cardName, callback = console.log, searchUniqueArt = '
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
callback(responseCards);
|
callback(responseCards);
|
||||||
} else if (this.readyState == 4 && this.status == 404) {
|
} else if (this.readyState == 4 && this.status == 404 && !searchUniqueArt && cardName != '') {
|
||||||
notify(`No cards found for "${cardName}" in "${cardLanguageSelect.options[cardLanguageSelect.selectedIndex].text}" language.`, 5);
|
notify(`No cards found for "${cardName}" in ${cardLanguageSelect.options[cardLanguageSelect.selectedIndex].text}.`, 5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cardLanguageSelect = document.querySelector('#import-language');
|
||||||
|
var cardLanguage = `lang%3D${cardLanguageSelect.value}`;
|
||||||
var uniqueArt = '';
|
var uniqueArt = '';
|
||||||
if (searchUniqueArt) {
|
if (searchUniqueArt) {
|
||||||
uniqueArt = '&unique=art';
|
uniqueArt = '&unique=art';
|
||||||
}
|
}
|
||||||
cardLanguageSelect = document.querySelector('#import-language');
|
xhttp.open('GET', `https://api.scryfall.com/cards/search?order=released&include_extras=true${uniqueArt}&q=name%3D${cardName.replace(/ /g, '_')}%20${cardLanguage}`, true);
|
||||||
xhttp.open('GET', `https://api.scryfall.com/cards/search?order=released&include_extras=true${uniqueArt}&q=lang%3D${cardLanguageSelect.value}%20name%3D${cardName.replace(/ /g, '_')}`, true);
|
|
||||||
try {
|
try {
|
||||||
xhttp.send();
|
xhttp.send();
|
||||||
} catch {
|
} catch {
|
||||||
|
42
js/frames/packInvocation.js
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
//Create objects for common properties across available frames
|
||||||
|
// var masks = [{src:'/img/frames/m15/regular/m15MaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/m15/regular/m15MaskType.png', name:'Type'}, {src:'/img/frames/m15/regular/m15MaskRules.png', name:'Rules'}, {src:'/img/frames/m15/regular/m15MaskFrame.png', name:'Frame'}, {src:'/img/frames/m15/regular/m15MaskBorder.png', name:'Border'}];
|
||||||
|
var bounds = {x:0.7573, y:0.8848, width:0.188, height:0.0733};
|
||||||
|
//defines available frames
|
||||||
|
availableFrames = [
|
||||||
|
{name:'White Frame', src:'/img/frames/invocation/W.png'},
|
||||||
|
{name:'Blue Frame', src:'/img/frames/invocation/U.png'},
|
||||||
|
{name:'Black Frame', src:'/img/frames/invocation/B.png'},
|
||||||
|
{name:'Red Frame', src:'/img/frames/invocation/R.png'},
|
||||||
|
{name:'Green Frame', src:'/img/frames/invocation/G.png'},
|
||||||
|
{name:'Multicolored Frame', src:'/img/frames/invocation/M.png'},
|
||||||
|
{name:'Artifact Frame', src:'/img/frames/invocation/A.png'},
|
||||||
|
{name:'Power/Toughness', src:'/img/frames/m15/regular/m15PTW.png', bounds:bounds},
|
||||||
|
];
|
||||||
|
//disables/enables the "Load Frame Version" button
|
||||||
|
document.querySelector('#loadFrameVersion').disabled = false;
|
||||||
|
//defines process for loading this version, if applicable
|
||||||
|
document.querySelector('#loadFrameVersion').onclick = async function() {
|
||||||
|
//resets things so that every frame doesn't have to
|
||||||
|
await resetCardIrregularities();
|
||||||
|
//sets card version
|
||||||
|
card.version = 'invocation';
|
||||||
|
//art bounds
|
||||||
|
card.artBounds = {x:0.0767, y:0.1129, width:0.8476, height:0.4429};
|
||||||
|
autoFitArt();
|
||||||
|
//set symbol bounds
|
||||||
|
card.setSymbolBounds = {x:0.9213, y:0.5910, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'};
|
||||||
|
resetSetSymbol();
|
||||||
|
//watermark bounds
|
||||||
|
card.watermarkBounds = {x:0.5, y:0.7762, width:0.75, height:0.2305};
|
||||||
|
resetWatermark();
|
||||||
|
//text
|
||||||
|
loadTextOptions({
|
||||||
|
mana: {name:'Mana Cost', text:'', y:0.0613, width:0.9292, height:71/2100, oneLine:true, size:71/1638, align:'right', shadowX:-0.001, shadowY:0.0029, manaCost:true, manaSpacing:0},
|
||||||
|
title: {name:'Title', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381},
|
||||||
|
type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324},
|
||||||
|
rules: {name:'Rules Text', text:'', x:0.086, y:0.6303, width:0.828, height:0.2875, size:0.0362},
|
||||||
|
pt: {name:'Power/Toughness', text:'', x:0.7928, y:0.902, width:0.1367, height:0.0372, size:0.0372, font:'belerenbsc', oneLine:true, align:'center'}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//loads available frames
|
||||||
|
loadFramePack();
|