diff --git a/.gitignore b/.gitignore index 8dabf313..2bf1ef8c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1 @@ - -.DS_Store -data/.DS_Store -data/borders/.DS_Store -data/borders/m15/.DS_Store -gallery/buildImageList.bat -gallery/buildImageList.py -debug.log +debug.log \ No newline at end of file diff --git a/404.html b/404.html index 40b9217d..fb2b0c22 100644 --- a/404.html +++ b/404.html @@ -1,5 +1,30 @@ - - - -
Page not found. Redirecting to home page momentarily...
+ + + + + + + + + + + + + +
+
+
+ + 404 - Card Conjurer +
+

404

+

Page Not Found

+
+
+

The page you seek is as lost as Fblthp.

+
+ + + + \ No newline at end of file diff --git a/about/index.html b/about/index.html deleted file mode 100644 index d6b9267c..00000000 --- a/about/index.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - CC - About -
About Me
-
-
- Hello! My name is Kyle Burton, and I'm the creator of Card Conjurer. I started playing Magic with the M14 deckbuilder's toolkit. I played 60-card casual games with several close friends, and when Khans of Tarkir was released we attended our first prerelease. As the years passed I got more and more into Magic and ultimately discovered Commander, which is the format I currently play. -

-
- During middle school I did some light programming with Processing and Lego's NXT, and halfway through high school I taught myself Javascript, HTML, and CSS (the languages that compose websites). Then, in the summer of 2018, I combined my love for Magic and curiosity for programming by creating Card Conjurer. -

-
- I initially wanted to make some Commander Achievement cards that looked like real Magic cards, so I decided to make a small web-based application to fill blank magic card images with text and mana symbols. It worked surprisingly well, and I soon began to expand on the original idea by adding more customization and more frames. By the end of summer break I decided to purchase the domain CardConjurer.com so I could share my program with the world. Since then I've remade the entire website from the ground-up three times, and am very pleased with its current state. While I don't plan on any major revisions, I will continue adding new frames and features. -

-
- I "graduated" (no ceremony 😭) high school in 2020, and because I had such a great time learning to code and discovering how much it could accomplish I decided to pursue programming. As of Fall of 2020, I've been attending CalPoly SLO majoring in Software Engineering. -

-
- Whether you'd like to see what I'm up to in the Magic world or take a look at some of the cards I've made with Card Conjurer, please consider taking a moment to check out my Twitter @ImKyle4815! -
-
- - - diff --git a/ads.txt b/ads.txt deleted file mode 100644 index 58f4534b..00000000 --- a/ads.txt +++ /dev/null @@ -1 +0,0 @@ -google.com, pub-8226515140557560, DIRECT, f08c47fec0942fa0 \ No newline at end of file diff --git a/askurza/index.html b/askurza/index.html deleted file mode 100644 index 3f8c18c4..00000000 --- a/askurza/index.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - CC - Ask Urza 2.0 - -
-
- Ask Urza 2.0 -
-
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
-
-
-
-
- Ask Urza 2.0 is a replacement for AskUrza.com that periodically compiles all planeswalker abilities and sorts them into three categories for use with Urza, Academy Headmaster. This allows for much more unpredictability and, in my opinion, much more fun. To use Ask Urza, simply click on the +1, -1, or -6, and let the gods of chaos decide your fate! -
-
-
-
- - - -
-
- - - -
-
-
- - - - diff --git a/boxGenerator.html b/boxGenerator.html deleted file mode 100644 index c16d00f9..00000000 --- a/boxGenerator.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - CC - Box Generator - -
-
- Box Generator -
-
- Pixels Per Inch: - - Material thickness: - - - Row length (interior): - - Card width (sleeved): - - Card height (sleeved): - - Wiggle room: - - Vertical Tab Count: - - Horizontal Tab Count (down the rows): - - Horizontal Tab Count (across the rows): -

- -
-
-
- Currently this box generator only supports odd numbers of tabs and single-row boxes with sliding lids. Hopefully in the future I'll add more options! -
-
-
-
- Before laser cutting, you'll have to adjust the stroke width and color, as well as scale SVG correctly. Note down the PPI (default is 72) when you download the SVGs. In case you forget which PPI you used, the margins on the SVG files are one inch. -
-
-
- - - - diff --git a/css/reset.css b/css/reset.css new file mode 100644 index 00000000..bc37bae8 --- /dev/null +++ b/css/reset.css @@ -0,0 +1,48 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: normal; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/css/style.css b/css/style.css new file mode 100644 index 00000000..dd05793b --- /dev/null +++ b/css/style.css @@ -0,0 +1,593 @@ +/*fonts*/ +@font-face { + font-family: gothammedium; + src: url("/fonts/gotham-medium.ttf"); +} +@font-face { + font-family: belerenb; + src: url("/fonts/beleren-b.ttf"); +} +@font-face { + font-family: belerenbsc; + src: url("/fonts/beleren-bsc.ttf"); +} +@font-face { + font-family: matrix; + src: url("/fonts/matrix.ttf"); +} +@font-face { + font-family: matrixb; + src: url("/fonts/matrix-b.ttf"); +} +@font-face { + font-family: mplantin; + src: url("/fonts/mplantin.ttf"); +} +@font-face { + font-family: mplantini; + src: url("/fonts/mplantin-i.ttf"); +} +@font-face { + font-family: plantinsemibold; + src: url("/fonts/plantin-semibold.otf"); +} +@font-face { + font-family: goudymedieval; + src: url("/fonts/goudy-medieval.ttf"); +} +@font-face { + font-family: phyrexian; + src: url("/fonts/phyrexian.ttf"); +} +@font-face { + font-family: Montserrat-SemiBold; + src: url("/fonts/Montserrat-SemiBold.ttf"); +} +@font-face { + font-family: Montserrat-Medium; + src: url("/fonts/Montserrat-Medium.ttf"); +} +/*Variables*/ +:root { + --darkened-backdrop-filter: grayscale(1) brightness(0.3); + --regular-backdrop-filter: none; + --window-diagonal-size: 400px; +} +/*Main Site Elements*/ +.background { + position: fixed; + z-index: -1; + width: 100vw; + height: 100vh; + background: url('/img/lowpolyBackground.svg'); + background-repeat: no-repeat; + background-attachment: fixed; + background-size: cover; + background-position: center; + filter: var(--regular-backdrop-filter); +} +html { + font-size: 12pt; + overflow-x: hidden; + background: none; + color: white; +} +body { + width: 100vw; +} +header, footer, .main-content { + /*width: 100%;*/ +} +header, footer { + backdrop-filter: var(--darkened-backdrop-filter); +} +header { + padding: 2rem 0; +} +.header-extension { + padding-bottom: 2rem; +} +footer { + padding: 2rem; + /*background: #427A36;*/ + display: grid; + grid-template-columns: calc(1fr - 4rem); + grid-gap: 1rem; +} +@media only screen and (min-width: 750px) { + footer { + grid-template-columns: repeat(3, 1fr); + } +} +footer > div > * { + margin: 1rem 0; +} +/*Viewport*/ +img { + max-width: 100%; +} +/*Scrollbar Mod*/ +::-webkit-scrollbar { + width: 0.5rem; + height: 0; + background: #222; +} +::-webkit-scrollbar-thumb { + background: #888; + border-radius: 0.25rem; +} +/*Fonts*/ +.title { + font-family: belerenbsc; + text-shadow: 0.2rem 0.2rem 0.5rem black; +} +h1 { + font-size: 4rem; + font-family: Montserrat-SemiBold, Helvetica, Tahoma, Verdana, Geneva, sans-serif; + +} +h2 { + font-size: 2.5rem; + font-family: Montserrat-SemiBold, Helvetica, Tahoma, Verdana, Geneva, sans-serif; +} +h3 { + font-size: 2rem; + font-family: Montserrat-SemiBold, Helvetica, Tahoma, Verdana, Geneva, sans-serif; +} +h4 { + font-size: 1.5rem; + font-family: Montserrat-SemiBold, Helvetica, Tahoma, Verdana, Geneva, sans-serif; +} +h5 { + font-size: 1.25rem; + font-family: Montserrat-SemiBold, Helvetica, Tahoma, Verdana, Geneva, sans-serif; +} +p { + font-size: 1rem; + font-family: Montserrat-Medium, Helvetica, Tahoma, Verdana, Geneva, sans-serif; +} +a { + color: inherit; + text-decoration: inherit; +} +a:hover { + text-decoration: underline; +} +::selection { + color: white; + background: #8f8; +} +::moz-selection { + color: white; + background: #8f8; +} +/*General styles*/ +.hidden { + display: none; +} +.margin-bottom { + margin-bottom: 0.5rem; +} +.margin-large { + margin: 4rem 0; +} +.margin-top { + margin-top: 0.5rem; +} +.padding { + padding: 0.5rem; +} +.readable-background { + backdrop-filter: var(--darkened-backdrop-filter); +} +.box-shadow { + box-shadow: 0 2px 8px #0008; +} +.split-grid { + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: 0.5rem; +} +.center { + text-align: center; +} +.layer { + padding: 4rem; +} +/*Hamburger*/ +.hamburger { + position: fixed; + right: 2rem; + top: 2rem; + width: 4rem; + height: 4rem; + fill-rule: evenodd; + clip-rule: evenodd; + stroke-linejoin: round; + stroke-miterlimit: 1.5; + cursor: pointer; + z-index: 100; + background: #35603E; + border-radius: 0.5rem; +} +.hamburger > path { + fill: none; + stroke: white; + stroke-width: 8px; + transition: 0.5s; +} +.line1, .line3 { + stroke-dasharray: 80 183; + stroke-dashoffset: 0; +} +.line2 { + stroke-dasharray: 80 80; + stroke-dashoffset: 0; +} +.opened > .line1, .opened > .line3 { + stroke-dasharray: 103 183; + stroke-dashoffset: -80; +} +.opened > .line2 { + stroke-dasharray: 0 60; + stroke-dashoffset: -40; +} +.circle { + z-index: 5; + position: fixed; + right: 4rem; + top: 4rem; + padding: 0; + background: #35603E; + border-radius: 100%; + transition: 0.333s ease; +} +.hamburger:hover + .circle { + padding: 3rem; + right: 1rem; + top: 1rem; +} +.hamburger.opened + .circle { + padding: var(--window-diagonal-size); + right: calc(4rem - var(--window-diagonal-size)); + top: calc(4rem - var(--window-diagonal-size)); + transition: 0.75s cubic-bezier(.53,.47,.76,-0.52); +} +/*Menus*/ +.menu { + position: fixed; + z-index: 10; + bottom: 100vh; + left: 0; + width: 100vw; + height: 100vh; + overflow-y: scroll; + transition: 0.5s; + text-align: center; +} +.menu.menu-visible { + bottom: 0; + transition-delay: 0.667s; +} +.menu > div { + display: inline-block; + margin: 0 auto; + text-align: left; +} +/*Main (Nav) Menu*/ +.main-menu { + padding: 2rem; + line-height: 3rem; +} +.main-menu > h2 { + margin-top: 4rem; +} +/*Inputs*/ +.input { + box-sizing: border-box; + width: 100%; + background: #333; + color: inherit; + font-size: 1.25rem; + font-family: Montserrat-Medium, Helvetica, Tahoma, Verdana, Geneva, sans-serif; + font-weight: 100; + border-width: 0.25rem 0 0 0; + border-style: solid; + border-color: #0000; + padding: 0 0.25rem 0.25rem 0.25rem; + transition: 0.5s; +} +.input:hover { + box-shadow: 0 0px 16px black; + transition: 0.05s; +} +.input:focus { + outline: none; +} +.input:active { + border-color: #ae9; +} +.input:disabled { + opacity: 0.5; +} +.input:disabled:hover { + box-shadow: none; +} +.input-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + grid-gap: 0.5rem; +} +.input-description { + color: #bbb; + font-style: italic; +} +input[type=checkbox].input { + /*nothing for now*/ +} +.input:not([type=text]):not([type=number]) { + cursor: pointer; +} +textarea.input { + cursor: text !important; + resize: vertical; + box-sizing: border-box; + min-height: 10rem; + max-height: 20rem; + transition: height 0s; +} +/*Collapsible*/ +.collapsible { + cursor: pointer; + user-select: none; +} +.collapsible:after { + content: ''; + border: solid white; + border-width: 0 0.15em 0.15em 0; + display: inline-block; + padding: 0.15em; + transform: rotate(-135deg) translate(-0.2em, 0.2em); + -webkit-transform: rotate(-135deg) translate(-0.2em, 0.2em); +} +.collapsible.collapsed:after { + transform: rotate(45deg) translate(0, -0.3em); + -webkit-transform: rotate(45deg) translate(0, -0.3em); +} +.collapsed + div { + display: none; +} +/*Videos*/ +.video { + position: relative; + padding-bottom: 56.25%; + padding-top: 30px; + height: 0; + overflow: hidden; +} +.video iframe, .video object, .video embed, .video video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + + + + + + +/*Creator related only*/ +/*Creator Grid/Canvas/Menu*/ +.creator-grid { + width: 100%; + display: grid; + grid-template-columns: 1fr; + justify-items: center; + grid-gap: 1rem; + padding: 1rem 0; +} +.creator-canvas { + max-width: 750px; + width: 100vw; + height: auto; + /*backdrop-filter: hue-rotate(80deg);*/ +} +.creator-menu { + width: 100%; +} +@media only screen and (min-width: 1250px) { + .creator-grid { + grid-template-columns: 750px auto; + padding: 1rem; + justify-items: left; + } + .creator-menu { + width: calc(100% - 2rem); + } + .creator-canvas { + border-radius: 37.5px; + } +} +/*Creator Menu Tabs*/ +.creator-menu-tabs { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); + grid-gap: 0.5rem; + margin-bottom: 0.5rem; +} +/*Selectables*/ +.selectable { + text-align: center; + user-select: none; + padding: 1rem; + padding-top: 0.9rem; + border-top: 0.1rem; + border-style: solid; + border-color: #0000; + transition: 0.5s; + cursor: pointer; +} +.selectable.selected { + padding-top: 0.5rem; + border-top: 0.5rem; + border-style: solid; + border-color: #ae9; + transition: 0.5s !important; +} +.selectable:hover { + box-shadow: 0 0px 16px black; + transition: 0.05s; +} +/*Draggables*/ +.draggable { + background: #333; +} +.dragging { + box-shadow: 0 0px 16px black; + background: #555; + cursor: move; +} +.frame-list{ + display: grid; + grid-template-columns: 1fr; + grid-gap: 0.25rem; + user-select: none; +} +/*Frame/Mask-Pickers*/ +.frame-picker, .mask-picker { + display: grid; + grid-gap: 0.5rem; + height: 20rem; + overflow-y: scroll; + grid-auto-rows: 6.5rem; +} +.frame-picker { + grid-template-columns: repeat(auto-fit, minmax(6rem, 1fr)); + justify-items: left; + align-items: left; +} +.mask-picker { + grid-template-columns: 1fr; +} +.frame-option, .mask-option { + cursor: pointer; + background: #333; + width: 100%; + height: 6rem; + padding: 0.25rem 0; + text-align: center; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -o-user-select: none; + user-select: none; + transition: 0.25s; +} +.frame-option.selected, .mask-option.selected { + background: #555; +} +.frame-option > img, .mask-option > img { + width: 100%; + height: 100%; + object-fit: contain; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -o-user-select: none; + user-select: none; +} +.mask-option { + display: grid; + grid-template-columns: 6rem auto; + text-align: left; + grid-gap: 0.5rem; + align-items: center; + height: 6rem; +} +/*Frame Elements*/ +.frame-element { + display: grid; + grid-template-columns: 4rem 4rem 1fr 4rem; + grid-gap: 0.5rem; + padding: 0.25rem; + align-items: center; + cursor: grab; +} +.frame-element > h4 { + overflow-x: scroll; +} +.frame-element > img { + width: 4rem; + height: 4rem; + object-fit: contain; + padding: none; +} +.frame-element:hover { + box-shadow: 0 0px 16px black; + transition: 0.05s; +} +.frame-element-close { + font-size: 2rem; + cursor: pointer; + text-align: center; + padding: 0.5rem 0; +} +.frame-element-editor { + display: none; + position: fixed; + max-width: calc(100vw - 6rem); + width: 64rem; /*multiple of 16?*/ + height: auto; + -webkit-transform: translateX(-50%) translateY(-50%); + -moz-transform: translateX(-50%) translateY(-50%); + -ms-transform: translateX(-50%) translateY(-50%); + -o-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + top: 50%; + left: 50%; + background: #35603E; + border: 0.5rem solid #333; + border-radius: 1rem; + box-shadow: 0.5rem 0.5rem 1rem 0.5rem black; + z-index: 10; + padding: 2rem; + grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); + grid-gap: 1rem; +} +.frame-element-editor.opened { + display: grid; +} +.frame-element-editor > .frame-element-editor-title { + grid-column: 1 / -2; +} +.frame-element-editor > .frame-element-editor-close { + cursor: pointer; + width: auto; + height: auto; + grid-column: -1 span 1; + user-select: none; + justify-self: right; +} +/*Text tab*/ +.text-option { + background: #333; +} +.text-codes { + display: grid; + grid-template-columns: 11rem auto; +} +.text-codes > * { + border: 1px solid black; + padding: 0.5rem; +} +/*download button*/ +.download { + text-align: center; + user-select: none; + cursor: pointer; +} +.download:hover { + text-decoration: underline; +} \ No newline at end of file diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index 692317a4..00000000 Binary files a/favicon.ico and /dev/null differ diff --git a/fonts/Montserrat-Medium.ttf b/fonts/Montserrat-Medium.ttf new file mode 100644 index 00000000..6e079f69 Binary files /dev/null and b/fonts/Montserrat-Medium.ttf differ diff --git a/fonts/Montserrat-SemiBold.ttf b/fonts/Montserrat-SemiBold.ttf new file mode 100644 index 00000000..f8a43f2b Binary files /dev/null and b/fonts/Montserrat-SemiBold.ttf differ diff --git a/fonts/beleren-b.ttf b/fonts/beleren-b.ttf new file mode 100644 index 00000000..979b66c6 Binary files /dev/null and b/fonts/beleren-b.ttf differ diff --git a/fonts/beleren-bsc.ttf b/fonts/beleren-bsc.ttf new file mode 100644 index 00000000..4cbe6344 Binary files /dev/null and b/fonts/beleren-bsc.ttf differ diff --git a/fonts/brush.svg b/fonts/brush.svg new file mode 100644 index 00000000..a52564f8 --- /dev/null +++ b/fonts/brush.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/fonts/gotham-medium.ttf b/fonts/gotham-medium.ttf new file mode 100644 index 00000000..7817d91d Binary files /dev/null and b/fonts/gotham-medium.ttf differ diff --git a/fonts/goudy-medieval.ttf b/fonts/goudy-medieval.ttf new file mode 100644 index 00000000..3f0c59e3 Binary files /dev/null and b/fonts/goudy-medieval.ttf differ diff --git a/fonts/matrix-b - Copy.ttf b/fonts/matrix-b - Copy.ttf new file mode 100644 index 00000000..855e51f9 Binary files /dev/null and b/fonts/matrix-b - Copy.ttf differ diff --git a/fonts/matrix-b.ttf b/fonts/matrix-b.ttf new file mode 100644 index 00000000..6f64ea23 Binary files /dev/null and b/fonts/matrix-b.ttf differ diff --git a/fonts/matrix.ttf b/fonts/matrix.ttf new file mode 100644 index 00000000..c9b5e105 Binary files /dev/null and b/fonts/matrix.ttf differ diff --git a/fonts/mplantin-i.ttf b/fonts/mplantin-i.ttf new file mode 100644 index 00000000..5755831c Binary files /dev/null and b/fonts/mplantin-i.ttf differ diff --git a/fonts/mplantin.ttf b/fonts/mplantin.ttf new file mode 100644 index 00000000..116529ef Binary files /dev/null and b/fonts/mplantin.ttf differ diff --git a/fonts/phyrexian.ttf b/fonts/phyrexian.ttf new file mode 100644 index 00000000..30fd6d79 Binary files /dev/null and b/fonts/phyrexian.ttf differ diff --git a/fonts/plantin-semibold.otf b/fonts/plantin-semibold.otf new file mode 100644 index 00000000..c11e7033 Binary files /dev/null and b/fonts/plantin-semibold.otf differ diff --git a/gallery/gallery.css b/gallery/gallery.css deleted file mode 100644 index 089c8225..00000000 --- a/gallery/gallery.css +++ /dev/null @@ -1,93 +0,0 @@ -#imageGallery { - margin-top: 2rem; - width: 100%; - display: grid; - grid-template-columns: repeat(auto-fit, minmax(375px, 1fr)); - grid-auto-rows: min-content; - grid-gap: 1rem; - justify-items: center; - align-items: center; -} - - - -.galleryCard { - /*margin: 1rem;*/ - cursor: pointer; - width: 375px; - height: 525px; - transition: 2s; - text-align: center; -} -.galleryCard > img { - z-index: 1; - width: 100%; - height: auto; -} -.galleryCard > div { - opacity: 0; - position: relative; - top: -2rem; - left: 0; - z-index: -1; -} - - - -.galleryHidden { - opacity: 0; -} -.galleryVisible { - opacity: 1; -} - - - -.filterHidden { - display: none; -} - - - -#fullImageViewbox { - display: none; - position: fixed; - top: 0; - left: 0; - width: 100vw; - height: 100vh; - backdrop-filter: brightness(40%) blur(8px); - -webkit-backdrop-filter: brightness(40%) blur(8px); - text-align: center; - cursor: pointer; -} -#fullImageViewbox.visible { - display: block; -} -#fullImageViewbox > img { - position: fixed; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - object-fit: contain; - width: calc(100vw - 2rem); - height: calc(100vh - 2rem); - animation-duration: 0.5s; -} -#fullImageViewbox.visible > img.visible { - animation-name: previewIn; -} -#fullImageViewbox.visible > img:not(.visible) { - animation-name: previewOut; - animation-duration: 0.3s; - transform: translate(-50%, calc(50% + 1rem)); -} - -@keyframes previewIn { - from {transform: translate(-50%, calc(50% + 1rem));} - to {transform: translate(-50%, -50%);} -} -@keyframes previewOut { - from {transform: translate(-50%, -50%);} - to {transform: translate(-50%, calc(50% + 1rem));} -} \ No newline at end of file diff --git a/gallery/gallery.js b/gallery/gallery.js deleted file mode 100644 index 0e8d3c05..00000000 --- a/gallery/gallery.js +++ /dev/null @@ -1,80 +0,0 @@ -var imageElementList = [] -const imageHeight = 525 -var windowY - -function readGalleryImageList() { - var xhttp = new XMLHttpRequest() - xhttp.onreadystatechange = function() { - if (this.readyState == 4 && this.status == 200) { - buildHTML(this.responseText.split('\n')) - } - } - xhttp.open('GET', '/gallery/galleryImageNameList.txt', true) - xhttp.send() -} - -readGalleryImageList() - -function buildHTML(imageNameList) { - imageNameList.forEach(function(item) { - var element = document.createElement('div') - var label = document.createElement('div') - var image = document.createElement('img') - element.classList = 'galleryCard galleryHidden' - if (item.includes('Wasteland.png')) { - element.classList += ' filterHidden' - } - image.imageName = item - image.addEventListener('click', zoomImage) - label.innerHTML = item.replace('.png', '').replace('_', ' ') - element.appendChild(image) - element.appendChild(label) - document.getElementById('imageGallery').appendChild(element) - imageElementList.push(element) - }) - scrollEvent() -} - -function zoomImage(event) { - document.getElementById('fullImage').src = '/gallery/images/fullres/' + event.target.imageName - document.getElementById('fullImage').classList = 'visible' - document.getElementById('fullImagePreview').src = '/gallery/images/preview/' + event.target.imageName - document.getElementById('fullImagePreview').classList = 'visible' - document.getElementById('fullImageViewbox').classList = 'visible' - windowY = window.scrollY -} - -function unzoomImage() { - document.getElementById('fullImage').classList = '' - document.getElementById('fullImagePreview').classList = '' - setTimeout(function(){document.getElementById('fullImageViewbox').classList = ''; document.getElementById('fullImage').src = ''}, 300) -} - -window.addEventListener('scroll', scrollEvent, false) - -function scrollEvent() { - if (document.getElementById('fullImageViewbox').classList == 'visible') { - window.scrollTo(0, windowY) - return - } - windowInnerHeight = window.innerHeight - imageElementList.forEach(function(element) { - boundingRect = element.getBoundingClientRect() - if (element.classList.contains('galleryHidden') && boundingRect.bottom >= 0 && boundingRect.top - windowInnerHeight <= 0) { - element.children[0].src = '/gallery/images/preview/' + element.children[0].imageName - element.classList.replace('galleryHidden', 'galleryVisible') - } - }) -} - -function sort(word) { - imageElementList.forEach(function(element) { - if (!element.classList.contains('filterHidden')) { - element.classList.add('filterHidden') - } - if (element.children[1].innerHTML.toLowerCase().includes(word.toLowerCase())) { - element.classList.remove('filterHidden') - } - }) - scrollEvent() -} \ No newline at end of file diff --git a/gallery/galleryImageNameList.txt b/gallery/galleryImageNameList.txt deleted file mode 100644 index 7fb8c694..00000000 --- a/gallery/galleryImageNameList.txt +++ /dev/null @@ -1,252 +0,0 @@ -Opposition Agent.png -Sol Ring.png -Omnath, Locus of Mana.png -Valakut Stoneforge (Mustufar Forges).png -Valakut Awakening (Mustufar's Meltdown).png -Expedition Map.png -Craterhoof Behemoth.png -Wasteland.png -Turntimber Symbiosis.png -Shatterskull Smashing.png -Agadeem's Awakening.png -Emeria's Call.png -sea_gate,_reborn.png -rick, steadfast leader (odric, steadfast leader) (1).png -sea_gate_restoration.png -rick, steadfast leader (thalia, steadfast leader).png -rick, steadfast leader (odric, steadfast leader).png -child of alara (creeper, child of notch).png -merciless eviction (not the impostor...).png -polluted_delta.png -rogue's passage (the vent).png -darksteel reactor (the reactor).png -council's judgment (who is the impostor).png -teferi's protection (emergency meeting).png -murder.png -negan,_the_cold_blooded (aurra_sing,_bounty_hunter).png -negan,_the_cold_blooded (dryden_vos,_crime_lord).png -breeding_pool (2).png -sacred_foundry (2).png -overgrown_tomb (2).png -steam_vents (2).png -godless_shrine (2).png -windswept_heath (2).png -fellwar stone.png -kozilek,_the_great_distortion.png -ulamog,_the_ceaseless_hunger.png -emrakul,_the_promised_end (2).png -darksteel plate (aang's_epic_armor).png -sram, senior edificer (sokka,_veteran_combatant).png -stoneforge mystic (piandao,_master_swordsman).png -animar,_soul_of_elements.png -emrakul,_the_aeons_torn.png -ulamog,_the_infinite_gyre.png -kozilek,_butcher_of_truth (2).png -emeria_angel.png -temple_garden (2).png -wooded_foothills (1).png -stomping_ground (2).png -bloodstained_mire (2).png -blood_crypt (2).png -watery_grave (2).png -flooded_strand (3).png -hallowed_fountain (2).png -command_tower (2).png -helm_of_the_host.png -vanquisher's_banner.png -dryad_of_the_ilysian_grove (2).png -deadeye_navigator .png -talisman_of_curiosity.png -talisman_of_hierarchy.png -panharmonicon.png -yarok,_the_desecrated.png -brago,_king_eternal.png -wooded_foothills (2).png -flooded_strand (2).png -mountain.png -forest.png -island.png -swamp.png -mana_confluence (2).png -valakut,_the_molten_pinnacle.png -jace, mirror mage (double_identity).png -karn's_bastion.png -nesting_grounds.png -mana_confluence.png -metallic_mimic.png -the_ozolith.png -lightning_greaves.png -blood_artist.png -manascape_refractor.png -dimir_signet (1).png -rakdos_signet.png -arcane_signet.png -chromatic_lantern.png -phyrexian_metamorph.png -phyrexian_altar (1).png -sol_ring (2).png -zurzoth,_chaos_rider.png -maze_of_ith.png -hammer_of_nazahn.png -sword_of_feast_and_famine (2).png -gaea's_cradle (3).png -gaea's_cradle (2).png -gaea's_cradle (1).png -gaea's_cradle.png -revel_in_riches.png -skullclamp.png -ashnod's_altar.png -jhoira,_weatherlight_captain.png -avenger_of_zendikar.png -doubling_season.png -solemn_simulacrum.png -mox_opal.png -the_storm_crow.png -sword_of_feast_and_famine.png -academy_ruins (3).png -academy_ruins (2).png -academy_ruins (1).png -academy_ruins.png -blood_moon.png -sword_of_fire_and_ice.png -cyclonic_rift.png -thriving_heath.png -thriving_grove.png -thriving_moor.png -thriving_bluff.png -demonic_tutor.png -aven_mindcensor.png -opt.png -return_of_the_wildspeaker.png -buried_ruin.png -whispersilk_cloak.png -mystic_remora.png -force_of_vigor.png -generous_gift.png -farseek (1).png -farseek.png -orzhov_signet.png -liliana's_caress.png -hall_of_heliod's_generosity.png -nykthos,_shrine_to_nyx (1).png -inventors'_fair.png -steelshaper's_gift.png -sword_of_light_and_shadow.png -sword_of_sinew_and_steel.png -sword_of_truth_and_justice.png -chandra's_ignition.png -ash_barrens (1).png -true_conviction.png -coalition_relic.png -talisman_of_conviction.png -boros_signet.png -azorius_signet.png -phyrexian_altar.png -craterhoof_behemoth.png -beastmaster_ascension.png -goblin_bombardment.png -bloodstained_mire.png -growing_rites_of_itlimoc.png -rogue's_passage.png -zacama,_primal_calamity.png -solemn_simulacrum (1).png -solemn_simulacrum (2).png -thassa's_oracle.png -eladamri's_call.png -intruder_alarm.png -idyllic_tutor.png -cryptolith_rite.png -eternal_witness.png -vizier_of_the_menagerie.png -rhystic_study.png -emrakul,_the_promised_end.png -breeding_pool.png -temple_garden.png -sacred_foundry.png -stomping_ground.png -blood_crypt.png -steam_vents.png -godless_shrine.png -hallowed_fountain.png -darksteel_plate.png -blade_of_selves.png -return_to_dust.png -smothering_tithe.png -ren and seri, inseperable (catdog,_inseperable).png -kalamax,_the_stormsire.png -helm_of_awakening.png -reflecting_pool.png -seedborn_muse.png -dryad_of_the_ilysian_grove.png -emerald_medallion.png -ruby_medallion.png -fire_diamond.png -moss_diamond.png -gruul_signet.png -simic_signet.png -izzet_signet.png -oona,_queen_of_the_fae.png -vilis,_broker_of_blood.png -thryx, the sudden storm (aquaman).png -sol_ring.png -show_and_tell.png -enlightened_tutor.png -zirda, the dawnwaker (flareon).png -reliquary_tower (1).png -reliquary_tower.png -nykthos,_shrine_to_nyx.png -watery_grave.png -flooded_strand.png -dolmen_gate.png -sensei's_divining_top.png -rune-scarred_demon.png -rhystic_study (2).png -propaganda.png -evacuation.png -spark_double.png -gilded_lotus.png -dimir_signet.png -thran_dynamo.png -solemn simulacrum (c-3po).png -keruga, the macrosage (jabba_the_hutt,_crime_lord).png -ramos, dragon engine (super_mechagodzilla,_kaiju_engine).png -ramos, dragon engine (mechagodzilla,_kaiju_engine).png -zirda,_the_dawnwaker.png -fertilid.png -ash_barrens.png -the-gitrog-monster.png -life_from_the_loam.png -songs-of-the-damned.png -band_of_brushwaggs.png -niv-mizzet, parun (nivvy_m).png -kaheera, the orphanguard (katniss, friend to all).png -arahbo, roar of the world (griffin, rambunctious boyo).png -golgari_signet (1).png -golgari_signet.png -lotus_petal (1).png -kozilek,_butcher_of_truth.png -culling_the_weak.png -fabricate (1).png -fabricate.png -talisman_of_resilience.png -talisman_of_creativity.png -command_tower (1).png -command_tower.png -lotus_petal.png -overgrown_tomb.png -windswept_heath.png -wooded_foothills.png -worldly_tutor.png -demonic_tutor (2).png -squee's_embrace (smeagol's final embrace).png -squee's_revenge (gollum's betrayal).png -squee's_toy (gollum's precious).png -squee,_goblin_nabob (smeagol, unlikely ally).png -maze_of_ith (the mines of moria).png -gavi_nest_warden (gavin verhey).png -sakura_tribe_elder (baby yoda, the innocent).png -tiana_ship's_caretaker (kaylee frye).png -gerrard,_weatherlight_hero (malcolm reynolds).png -predator,_flagship (reaver cutter).png -weatherlight (serenity).png -kozilek,_the_great_distortion (saitama).png \ No newline at end of file diff --git a/gallery/images/fullres/Agadeem's Awakening.png b/gallery/images/fullres/Agadeem's Awakening.png deleted file mode 100644 index be9412c3..00000000 Binary files a/gallery/images/fullres/Agadeem's Awakening.png and /dev/null differ diff --git a/gallery/images/fullres/Craterhoof Behemoth.png b/gallery/images/fullres/Craterhoof Behemoth.png deleted file mode 100644 index 59fafd00..00000000 Binary files a/gallery/images/fullres/Craterhoof Behemoth.png and /dev/null differ diff --git a/gallery/images/fullres/Emeria's Call.png b/gallery/images/fullres/Emeria's Call.png deleted file mode 100644 index 777f858c..00000000 Binary files a/gallery/images/fullres/Emeria's Call.png and /dev/null differ diff --git a/gallery/images/fullres/Expedition Map.png b/gallery/images/fullres/Expedition Map.png deleted file mode 100644 index 8fd48399..00000000 Binary files a/gallery/images/fullres/Expedition Map.png and /dev/null differ diff --git a/gallery/images/fullres/Omnath, Locus of Mana.png b/gallery/images/fullres/Omnath, Locus of Mana.png deleted file mode 100644 index a66ebc46..00000000 Binary files a/gallery/images/fullres/Omnath, Locus of Mana.png and /dev/null differ diff --git a/gallery/images/fullres/Opposition Agent.png b/gallery/images/fullres/Opposition Agent.png deleted file mode 100644 index 46c72bcc..00000000 Binary files a/gallery/images/fullres/Opposition Agent.png and /dev/null differ diff --git a/gallery/images/fullres/Shatterskull Smashing.png b/gallery/images/fullres/Shatterskull Smashing.png deleted file mode 100644 index b5bebab6..00000000 Binary files a/gallery/images/fullres/Shatterskull Smashing.png and /dev/null differ diff --git a/gallery/images/fullres/Sol Ring.png b/gallery/images/fullres/Sol Ring.png deleted file mode 100644 index 8252ea1a..00000000 Binary files a/gallery/images/fullres/Sol Ring.png and /dev/null differ diff --git a/gallery/images/fullres/Turntimber Symbiosis.png b/gallery/images/fullres/Turntimber Symbiosis.png deleted file mode 100644 index fec7c066..00000000 Binary files a/gallery/images/fullres/Turntimber Symbiosis.png and /dev/null differ diff --git a/gallery/images/fullres/Valakut Awakening (Mustufar's Meltdown).png b/gallery/images/fullres/Valakut Awakening (Mustufar's Meltdown).png deleted file mode 100644 index 80b7c148..00000000 Binary files a/gallery/images/fullres/Valakut Awakening (Mustufar's Meltdown).png and /dev/null differ diff --git a/gallery/images/fullres/Valakut Stoneforge (Mustufar Forges).png b/gallery/images/fullres/Valakut Stoneforge (Mustufar Forges).png deleted file mode 100644 index e4b9f629..00000000 Binary files a/gallery/images/fullres/Valakut Stoneforge (Mustufar Forges).png and /dev/null differ diff --git a/gallery/images/fullres/Wasteland.png b/gallery/images/fullres/Wasteland.png deleted file mode 100644 index d81ce916..00000000 Binary files a/gallery/images/fullres/Wasteland.png and /dev/null differ diff --git a/gallery/images/fullres/academy_ruins (1).png b/gallery/images/fullres/academy_ruins (1).png deleted file mode 100644 index 363fd418..00000000 Binary files a/gallery/images/fullres/academy_ruins (1).png and /dev/null differ diff --git a/gallery/images/fullres/academy_ruins (2).png b/gallery/images/fullres/academy_ruins (2).png deleted file mode 100644 index 186e25f3..00000000 Binary files a/gallery/images/fullres/academy_ruins (2).png and /dev/null differ diff --git a/gallery/images/fullres/academy_ruins (3).png b/gallery/images/fullres/academy_ruins (3).png deleted file mode 100644 index 0daf9975..00000000 Binary files a/gallery/images/fullres/academy_ruins (3).png and /dev/null differ diff --git a/gallery/images/fullres/academy_ruins.png b/gallery/images/fullres/academy_ruins.png deleted file mode 100644 index 6052160e..00000000 Binary files a/gallery/images/fullres/academy_ruins.png and /dev/null differ diff --git a/gallery/images/fullres/animar,_soul_of_elements.png b/gallery/images/fullres/animar,_soul_of_elements.png deleted file mode 100644 index 70903d46..00000000 Binary files a/gallery/images/fullres/animar,_soul_of_elements.png and /dev/null differ diff --git a/gallery/images/fullres/arahbo, roar of the world (griffin, rambunctious boyo).png b/gallery/images/fullres/arahbo, roar of the world (griffin, rambunctious boyo).png deleted file mode 100644 index 49a3d7df..00000000 Binary files a/gallery/images/fullres/arahbo, roar of the world (griffin, rambunctious boyo).png and /dev/null differ diff --git a/gallery/images/fullres/arcane_signet.png b/gallery/images/fullres/arcane_signet.png deleted file mode 100644 index 22026aac..00000000 Binary files a/gallery/images/fullres/arcane_signet.png and /dev/null differ diff --git a/gallery/images/fullres/ash_barrens (1).png b/gallery/images/fullres/ash_barrens (1).png deleted file mode 100644 index 6f627123..00000000 Binary files a/gallery/images/fullres/ash_barrens (1).png and /dev/null differ diff --git a/gallery/images/fullres/ash_barrens.png b/gallery/images/fullres/ash_barrens.png deleted file mode 100644 index fcf039b7..00000000 Binary files a/gallery/images/fullres/ash_barrens.png and /dev/null differ diff --git a/gallery/images/fullres/ashnod's_altar.png b/gallery/images/fullres/ashnod's_altar.png deleted file mode 100644 index a8183459..00000000 Binary files a/gallery/images/fullres/ashnod's_altar.png and /dev/null differ diff --git a/gallery/images/fullres/aven_mindcensor.png b/gallery/images/fullres/aven_mindcensor.png deleted file mode 100644 index fd5cf785..00000000 Binary files a/gallery/images/fullres/aven_mindcensor.png and /dev/null differ diff --git a/gallery/images/fullres/avenger_of_zendikar.png b/gallery/images/fullres/avenger_of_zendikar.png deleted file mode 100644 index bb1584e4..00000000 Binary files a/gallery/images/fullres/avenger_of_zendikar.png and /dev/null differ diff --git a/gallery/images/fullres/azorius_signet.png b/gallery/images/fullres/azorius_signet.png deleted file mode 100644 index 3f2ec0d1..00000000 Binary files a/gallery/images/fullres/azorius_signet.png and /dev/null differ diff --git a/gallery/images/fullres/band_of_brushwaggs.png b/gallery/images/fullres/band_of_brushwaggs.png deleted file mode 100644 index 72b29cfc..00000000 Binary files a/gallery/images/fullres/band_of_brushwaggs.png and /dev/null differ diff --git a/gallery/images/fullres/beastmaster_ascension.png b/gallery/images/fullres/beastmaster_ascension.png deleted file mode 100644 index d33ea503..00000000 Binary files a/gallery/images/fullres/beastmaster_ascension.png and /dev/null differ diff --git a/gallery/images/fullres/blade_of_selves.png b/gallery/images/fullres/blade_of_selves.png deleted file mode 100644 index b3bc6a87..00000000 Binary files a/gallery/images/fullres/blade_of_selves.png and /dev/null differ diff --git a/gallery/images/fullres/blood_artist.png b/gallery/images/fullres/blood_artist.png deleted file mode 100644 index d5a3bd87..00000000 Binary files a/gallery/images/fullres/blood_artist.png and /dev/null differ diff --git a/gallery/images/fullres/blood_crypt (2).png b/gallery/images/fullres/blood_crypt (2).png deleted file mode 100644 index 9b8935d6..00000000 Binary files a/gallery/images/fullres/blood_crypt (2).png and /dev/null differ diff --git a/gallery/images/fullres/blood_crypt.png b/gallery/images/fullres/blood_crypt.png deleted file mode 100644 index 71b5bf64..00000000 Binary files a/gallery/images/fullres/blood_crypt.png and /dev/null differ diff --git a/gallery/images/fullres/blood_moon.png b/gallery/images/fullres/blood_moon.png deleted file mode 100644 index 64fe83ff..00000000 Binary files a/gallery/images/fullres/blood_moon.png and /dev/null differ diff --git a/gallery/images/fullres/bloodstained_mire (2).png b/gallery/images/fullres/bloodstained_mire (2).png deleted file mode 100644 index 9775206a..00000000 Binary files a/gallery/images/fullres/bloodstained_mire (2).png and /dev/null differ diff --git a/gallery/images/fullres/bloodstained_mire.png b/gallery/images/fullres/bloodstained_mire.png deleted file mode 100644 index 325158f5..00000000 Binary files a/gallery/images/fullres/bloodstained_mire.png and /dev/null differ diff --git a/gallery/images/fullres/boros_signet.png b/gallery/images/fullres/boros_signet.png deleted file mode 100644 index 2eaaac0e..00000000 Binary files a/gallery/images/fullres/boros_signet.png and /dev/null differ diff --git a/gallery/images/fullres/brago,_king_eternal.png b/gallery/images/fullres/brago,_king_eternal.png deleted file mode 100644 index b8b24958..00000000 Binary files a/gallery/images/fullres/brago,_king_eternal.png and /dev/null differ diff --git a/gallery/images/fullres/breeding_pool (2).png b/gallery/images/fullres/breeding_pool (2).png deleted file mode 100644 index b9896012..00000000 Binary files a/gallery/images/fullres/breeding_pool (2).png and /dev/null differ diff --git a/gallery/images/fullres/breeding_pool.png b/gallery/images/fullres/breeding_pool.png deleted file mode 100644 index dc06f796..00000000 Binary files a/gallery/images/fullres/breeding_pool.png and /dev/null differ diff --git a/gallery/images/fullres/buried_ruin.png b/gallery/images/fullres/buried_ruin.png deleted file mode 100644 index 91a8bab3..00000000 Binary files a/gallery/images/fullres/buried_ruin.png and /dev/null differ diff --git a/gallery/images/fullres/chandra's_ignition.png b/gallery/images/fullres/chandra's_ignition.png deleted file mode 100644 index 8c05f541..00000000 Binary files a/gallery/images/fullres/chandra's_ignition.png and /dev/null differ diff --git a/gallery/images/fullres/child of alara (creeper, child of notch).png b/gallery/images/fullres/child of alara (creeper, child of notch).png deleted file mode 100644 index 62dba97d..00000000 Binary files a/gallery/images/fullres/child of alara (creeper, child of notch).png and /dev/null differ diff --git a/gallery/images/fullres/chromatic_lantern.png b/gallery/images/fullres/chromatic_lantern.png deleted file mode 100644 index f82bef6b..00000000 Binary files a/gallery/images/fullres/chromatic_lantern.png and /dev/null differ diff --git a/gallery/images/fullres/coalition_relic.png b/gallery/images/fullres/coalition_relic.png deleted file mode 100644 index da65d538..00000000 Binary files a/gallery/images/fullres/coalition_relic.png and /dev/null differ diff --git a/gallery/images/fullres/command_tower (1).png b/gallery/images/fullres/command_tower (1).png deleted file mode 100644 index 738367b8..00000000 Binary files a/gallery/images/fullres/command_tower (1).png and /dev/null differ diff --git a/gallery/images/fullres/command_tower (2).png b/gallery/images/fullres/command_tower (2).png deleted file mode 100644 index 0dd03769..00000000 Binary files a/gallery/images/fullres/command_tower (2).png and /dev/null differ diff --git a/gallery/images/fullres/command_tower.png b/gallery/images/fullres/command_tower.png deleted file mode 100644 index 697388df..00000000 Binary files a/gallery/images/fullres/command_tower.png and /dev/null differ diff --git a/gallery/images/fullres/council's judgment (who is the impostor).png b/gallery/images/fullres/council's judgment (who is the impostor).png deleted file mode 100644 index 83186c25..00000000 Binary files a/gallery/images/fullres/council's judgment (who is the impostor).png and /dev/null differ diff --git a/gallery/images/fullres/craterhoof_behemoth.png b/gallery/images/fullres/craterhoof_behemoth.png deleted file mode 100644 index d245106d..00000000 Binary files a/gallery/images/fullres/craterhoof_behemoth.png and /dev/null differ diff --git a/gallery/images/fullres/cryptolith_rite.png b/gallery/images/fullres/cryptolith_rite.png deleted file mode 100644 index 106ab16b..00000000 Binary files a/gallery/images/fullres/cryptolith_rite.png and /dev/null differ diff --git a/gallery/images/fullres/culling_the_weak.png b/gallery/images/fullres/culling_the_weak.png deleted file mode 100644 index 89d4e363..00000000 Binary files a/gallery/images/fullres/culling_the_weak.png and /dev/null differ diff --git a/gallery/images/fullres/cyclonic_rift.png b/gallery/images/fullres/cyclonic_rift.png deleted file mode 100644 index 9573dbaf..00000000 Binary files a/gallery/images/fullres/cyclonic_rift.png and /dev/null differ diff --git a/gallery/images/fullres/darksteel plate (aang's_epic_armor).png b/gallery/images/fullres/darksteel plate (aang's_epic_armor).png deleted file mode 100644 index 73f30ffe..00000000 Binary files a/gallery/images/fullres/darksteel plate (aang's_epic_armor).png and /dev/null differ diff --git a/gallery/images/fullres/darksteel reactor (the reactor).png b/gallery/images/fullres/darksteel reactor (the reactor).png deleted file mode 100644 index c961121b..00000000 Binary files a/gallery/images/fullres/darksteel reactor (the reactor).png and /dev/null differ diff --git a/gallery/images/fullres/darksteel_plate.png b/gallery/images/fullres/darksteel_plate.png deleted file mode 100644 index 4aed3efe..00000000 Binary files a/gallery/images/fullres/darksteel_plate.png and /dev/null differ diff --git a/gallery/images/fullres/deadeye_navigator .png b/gallery/images/fullres/deadeye_navigator .png deleted file mode 100644 index e10664a3..00000000 Binary files a/gallery/images/fullres/deadeye_navigator .png and /dev/null differ diff --git a/gallery/images/fullres/demonic_tutor (2).png b/gallery/images/fullres/demonic_tutor (2).png deleted file mode 100644 index 92ef49de..00000000 Binary files a/gallery/images/fullres/demonic_tutor (2).png and /dev/null differ diff --git a/gallery/images/fullres/demonic_tutor.png b/gallery/images/fullres/demonic_tutor.png deleted file mode 100644 index 9142aca1..00000000 Binary files a/gallery/images/fullres/demonic_tutor.png and /dev/null differ diff --git a/gallery/images/fullres/dimir_signet (1).png b/gallery/images/fullres/dimir_signet (1).png deleted file mode 100644 index 8444e5bc..00000000 Binary files a/gallery/images/fullres/dimir_signet (1).png and /dev/null differ diff --git a/gallery/images/fullres/dimir_signet.png b/gallery/images/fullres/dimir_signet.png deleted file mode 100644 index ac813827..00000000 Binary files a/gallery/images/fullres/dimir_signet.png and /dev/null differ diff --git a/gallery/images/fullres/dolmen_gate.png b/gallery/images/fullres/dolmen_gate.png deleted file mode 100644 index 0e14927a..00000000 Binary files a/gallery/images/fullres/dolmen_gate.png and /dev/null differ diff --git a/gallery/images/fullres/doubling_season.png b/gallery/images/fullres/doubling_season.png deleted file mode 100644 index 5a8eb3c8..00000000 Binary files a/gallery/images/fullres/doubling_season.png and /dev/null differ diff --git a/gallery/images/fullres/dryad_of_the_ilysian_grove (2).png b/gallery/images/fullres/dryad_of_the_ilysian_grove (2).png deleted file mode 100644 index 285b133d..00000000 Binary files a/gallery/images/fullres/dryad_of_the_ilysian_grove (2).png and /dev/null differ diff --git a/gallery/images/fullres/dryad_of_the_ilysian_grove.png b/gallery/images/fullres/dryad_of_the_ilysian_grove.png deleted file mode 100644 index 73279700..00000000 Binary files a/gallery/images/fullres/dryad_of_the_ilysian_grove.png and /dev/null differ diff --git a/gallery/images/fullres/eladamri's_call.png b/gallery/images/fullres/eladamri's_call.png deleted file mode 100644 index 353222ce..00000000 Binary files a/gallery/images/fullres/eladamri's_call.png and /dev/null differ diff --git a/gallery/images/fullres/emerald_medallion.png b/gallery/images/fullres/emerald_medallion.png deleted file mode 100644 index beca8d6f..00000000 Binary files a/gallery/images/fullres/emerald_medallion.png and /dev/null differ diff --git a/gallery/images/fullres/emeria_angel.png b/gallery/images/fullres/emeria_angel.png deleted file mode 100644 index 6bddbc0e..00000000 Binary files a/gallery/images/fullres/emeria_angel.png and /dev/null differ diff --git a/gallery/images/fullres/emrakul,_the_aeons_torn.png b/gallery/images/fullres/emrakul,_the_aeons_torn.png deleted file mode 100644 index 8bfc3d4d..00000000 Binary files a/gallery/images/fullres/emrakul,_the_aeons_torn.png and /dev/null differ diff --git a/gallery/images/fullres/emrakul,_the_promised_end (2).png b/gallery/images/fullres/emrakul,_the_promised_end (2).png deleted file mode 100644 index d921e2c3..00000000 Binary files a/gallery/images/fullres/emrakul,_the_promised_end (2).png and /dev/null differ diff --git a/gallery/images/fullres/emrakul,_the_promised_end.png b/gallery/images/fullres/emrakul,_the_promised_end.png deleted file mode 100644 index e91aba68..00000000 Binary files a/gallery/images/fullres/emrakul,_the_promised_end.png and /dev/null differ diff --git a/gallery/images/fullres/enlightened_tutor.png b/gallery/images/fullres/enlightened_tutor.png deleted file mode 100644 index ec303bac..00000000 Binary files a/gallery/images/fullres/enlightened_tutor.png and /dev/null differ diff --git a/gallery/images/fullres/eternal_witness.png b/gallery/images/fullres/eternal_witness.png deleted file mode 100644 index 7f61edda..00000000 Binary files a/gallery/images/fullres/eternal_witness.png and /dev/null differ diff --git a/gallery/images/fullres/evacuation.png b/gallery/images/fullres/evacuation.png deleted file mode 100644 index b2cb7ac4..00000000 Binary files a/gallery/images/fullres/evacuation.png and /dev/null differ diff --git a/gallery/images/fullres/fabricate (1).png b/gallery/images/fullres/fabricate (1).png deleted file mode 100644 index 178504fd..00000000 Binary files a/gallery/images/fullres/fabricate (1).png and /dev/null differ diff --git a/gallery/images/fullres/fabricate.png b/gallery/images/fullres/fabricate.png deleted file mode 100644 index b76fec41..00000000 Binary files a/gallery/images/fullres/fabricate.png and /dev/null differ diff --git a/gallery/images/fullres/farseek (1).png b/gallery/images/fullres/farseek (1).png deleted file mode 100644 index 991934cf..00000000 Binary files a/gallery/images/fullres/farseek (1).png and /dev/null differ diff --git a/gallery/images/fullres/farseek.png b/gallery/images/fullres/farseek.png deleted file mode 100644 index 3bccce3f..00000000 Binary files a/gallery/images/fullres/farseek.png and /dev/null differ diff --git a/gallery/images/fullres/fellwar stone.png b/gallery/images/fullres/fellwar stone.png deleted file mode 100644 index cb898949..00000000 Binary files a/gallery/images/fullres/fellwar stone.png and /dev/null differ diff --git a/gallery/images/fullres/fertilid.png b/gallery/images/fullres/fertilid.png deleted file mode 100644 index 8a6ce9d0..00000000 Binary files a/gallery/images/fullres/fertilid.png and /dev/null differ diff --git a/gallery/images/fullres/fire_diamond.png b/gallery/images/fullres/fire_diamond.png deleted file mode 100644 index 0228faec..00000000 Binary files a/gallery/images/fullres/fire_diamond.png and /dev/null differ diff --git a/gallery/images/fullres/flooded_strand (2).png b/gallery/images/fullres/flooded_strand (2).png deleted file mode 100644 index d109450b..00000000 Binary files a/gallery/images/fullres/flooded_strand (2).png and /dev/null differ diff --git a/gallery/images/fullres/flooded_strand (3).png b/gallery/images/fullres/flooded_strand (3).png deleted file mode 100644 index 0e314917..00000000 Binary files a/gallery/images/fullres/flooded_strand (3).png and /dev/null differ diff --git a/gallery/images/fullres/flooded_strand.png b/gallery/images/fullres/flooded_strand.png deleted file mode 100644 index d62e6023..00000000 Binary files a/gallery/images/fullres/flooded_strand.png and /dev/null differ diff --git a/gallery/images/fullres/force_of_vigor.png b/gallery/images/fullres/force_of_vigor.png deleted file mode 100644 index f20137cf..00000000 Binary files a/gallery/images/fullres/force_of_vigor.png and /dev/null differ diff --git a/gallery/images/fullres/forest.png b/gallery/images/fullres/forest.png deleted file mode 100644 index a965cef9..00000000 Binary files a/gallery/images/fullres/forest.png and /dev/null differ diff --git a/gallery/images/fullres/gaea's_cradle (1).png b/gallery/images/fullres/gaea's_cradle (1).png deleted file mode 100644 index 77053cd6..00000000 Binary files a/gallery/images/fullres/gaea's_cradle (1).png and /dev/null differ diff --git a/gallery/images/fullres/gaea's_cradle (2).png b/gallery/images/fullres/gaea's_cradle (2).png deleted file mode 100644 index 51dab1d0..00000000 Binary files a/gallery/images/fullres/gaea's_cradle (2).png and /dev/null differ diff --git a/gallery/images/fullres/gaea's_cradle (3).png b/gallery/images/fullres/gaea's_cradle (3).png deleted file mode 100644 index e7f24836..00000000 Binary files a/gallery/images/fullres/gaea's_cradle (3).png and /dev/null differ diff --git a/gallery/images/fullres/gaea's_cradle.png b/gallery/images/fullres/gaea's_cradle.png deleted file mode 100644 index ff65ee2d..00000000 Binary files a/gallery/images/fullres/gaea's_cradle.png and /dev/null differ diff --git a/gallery/images/fullres/gavi_nest_warden (gavin verhey).png b/gallery/images/fullres/gavi_nest_warden (gavin verhey).png deleted file mode 100644 index 91689da4..00000000 Binary files a/gallery/images/fullres/gavi_nest_warden (gavin verhey).png and /dev/null differ diff --git a/gallery/images/fullres/generous_gift.png b/gallery/images/fullres/generous_gift.png deleted file mode 100644 index 9334207d..00000000 Binary files a/gallery/images/fullres/generous_gift.png and /dev/null differ diff --git a/gallery/images/fullres/gerrard,_weatherlight_hero (malcolm reynolds).png b/gallery/images/fullres/gerrard,_weatherlight_hero (malcolm reynolds).png deleted file mode 100644 index d7c757cf..00000000 Binary files a/gallery/images/fullres/gerrard,_weatherlight_hero (malcolm reynolds).png and /dev/null differ diff --git a/gallery/images/fullres/gilded_lotus.png b/gallery/images/fullres/gilded_lotus.png deleted file mode 100644 index e1d8e6cd..00000000 Binary files a/gallery/images/fullres/gilded_lotus.png and /dev/null differ diff --git a/gallery/images/fullres/goblin_bombardment.png b/gallery/images/fullres/goblin_bombardment.png deleted file mode 100644 index 461129fb..00000000 Binary files a/gallery/images/fullres/goblin_bombardment.png and /dev/null differ diff --git a/gallery/images/fullres/godless_shrine (2).png b/gallery/images/fullres/godless_shrine (2).png deleted file mode 100644 index f725a90c..00000000 Binary files a/gallery/images/fullres/godless_shrine (2).png and /dev/null differ diff --git a/gallery/images/fullres/godless_shrine.png b/gallery/images/fullres/godless_shrine.png deleted file mode 100644 index 56abab22..00000000 Binary files a/gallery/images/fullres/godless_shrine.png and /dev/null differ diff --git a/gallery/images/fullres/golgari_signet (1).png b/gallery/images/fullres/golgari_signet (1).png deleted file mode 100644 index fd1250c5..00000000 Binary files a/gallery/images/fullres/golgari_signet (1).png and /dev/null differ diff --git a/gallery/images/fullres/golgari_signet.png b/gallery/images/fullres/golgari_signet.png deleted file mode 100644 index a096c328..00000000 Binary files a/gallery/images/fullres/golgari_signet.png and /dev/null differ diff --git a/gallery/images/fullres/growing_rites_of_itlimoc.png b/gallery/images/fullres/growing_rites_of_itlimoc.png deleted file mode 100644 index bb8bd661..00000000 Binary files a/gallery/images/fullres/growing_rites_of_itlimoc.png and /dev/null differ diff --git a/gallery/images/fullres/gruul_signet.png b/gallery/images/fullres/gruul_signet.png deleted file mode 100644 index d2408951..00000000 Binary files a/gallery/images/fullres/gruul_signet.png and /dev/null differ diff --git a/gallery/images/fullres/hall_of_heliod's_generosity.png b/gallery/images/fullres/hall_of_heliod's_generosity.png deleted file mode 100644 index 4a45a552..00000000 Binary files a/gallery/images/fullres/hall_of_heliod's_generosity.png and /dev/null differ diff --git a/gallery/images/fullres/hallowed_fountain (2).png b/gallery/images/fullres/hallowed_fountain (2).png deleted file mode 100644 index 378ac71f..00000000 Binary files a/gallery/images/fullres/hallowed_fountain (2).png and /dev/null differ diff --git a/gallery/images/fullres/hallowed_fountain.png b/gallery/images/fullres/hallowed_fountain.png deleted file mode 100644 index 1b47118e..00000000 Binary files a/gallery/images/fullres/hallowed_fountain.png and /dev/null differ diff --git a/gallery/images/fullres/hammer_of_nazahn.png b/gallery/images/fullres/hammer_of_nazahn.png deleted file mode 100644 index 803aafc6..00000000 Binary files a/gallery/images/fullres/hammer_of_nazahn.png and /dev/null differ diff --git a/gallery/images/fullres/helm_of_awakening.png b/gallery/images/fullres/helm_of_awakening.png deleted file mode 100644 index a92f4e6a..00000000 Binary files a/gallery/images/fullres/helm_of_awakening.png and /dev/null differ diff --git a/gallery/images/fullres/helm_of_the_host.png b/gallery/images/fullres/helm_of_the_host.png deleted file mode 100644 index f06e52b9..00000000 Binary files a/gallery/images/fullres/helm_of_the_host.png and /dev/null differ diff --git a/gallery/images/fullres/idyllic_tutor.png b/gallery/images/fullres/idyllic_tutor.png deleted file mode 100644 index 2f98f53e..00000000 Binary files a/gallery/images/fullres/idyllic_tutor.png and /dev/null differ diff --git a/gallery/images/fullres/intruder_alarm.png b/gallery/images/fullres/intruder_alarm.png deleted file mode 100644 index 2314e19a..00000000 Binary files a/gallery/images/fullres/intruder_alarm.png and /dev/null differ diff --git a/gallery/images/fullres/inventors'_fair.png b/gallery/images/fullres/inventors'_fair.png deleted file mode 100644 index 8cdc9136..00000000 Binary files a/gallery/images/fullres/inventors'_fair.png and /dev/null differ diff --git a/gallery/images/fullres/island.png b/gallery/images/fullres/island.png deleted file mode 100644 index e231a59d..00000000 Binary files a/gallery/images/fullres/island.png and /dev/null differ diff --git a/gallery/images/fullres/izzet_signet.png b/gallery/images/fullres/izzet_signet.png deleted file mode 100644 index 8841cac5..00000000 Binary files a/gallery/images/fullres/izzet_signet.png and /dev/null differ diff --git a/gallery/images/fullres/jace, mirror mage (double_identity).png b/gallery/images/fullres/jace, mirror mage (double_identity).png deleted file mode 100644 index cc4d5bce..00000000 Binary files a/gallery/images/fullres/jace, mirror mage (double_identity).png and /dev/null differ diff --git a/gallery/images/fullres/jhoira,_weatherlight_captain.png b/gallery/images/fullres/jhoira,_weatherlight_captain.png deleted file mode 100644 index 67808086..00000000 Binary files a/gallery/images/fullres/jhoira,_weatherlight_captain.png and /dev/null differ diff --git a/gallery/images/fullres/kaheera, the orphanguard (katniss, friend to all).png b/gallery/images/fullres/kaheera, the orphanguard (katniss, friend to all).png deleted file mode 100644 index 8da9be8a..00000000 Binary files a/gallery/images/fullres/kaheera, the orphanguard (katniss, friend to all).png and /dev/null differ diff --git a/gallery/images/fullres/kalamax,_the_stormsire.png b/gallery/images/fullres/kalamax,_the_stormsire.png deleted file mode 100644 index 735d2a9d..00000000 Binary files a/gallery/images/fullres/kalamax,_the_stormsire.png and /dev/null differ diff --git a/gallery/images/fullres/karn's_bastion.png b/gallery/images/fullres/karn's_bastion.png deleted file mode 100644 index 2eb47beb..00000000 Binary files a/gallery/images/fullres/karn's_bastion.png and /dev/null differ diff --git a/gallery/images/fullres/keruga, the macrosage (jabba_the_hutt,_crime_lord).png b/gallery/images/fullres/keruga, the macrosage (jabba_the_hutt,_crime_lord).png deleted file mode 100644 index 0d62acab..00000000 Binary files a/gallery/images/fullres/keruga, the macrosage (jabba_the_hutt,_crime_lord).png and /dev/null differ diff --git a/gallery/images/fullres/kozilek,_butcher_of_truth (2).png b/gallery/images/fullres/kozilek,_butcher_of_truth (2).png deleted file mode 100644 index 6e168cf2..00000000 Binary files a/gallery/images/fullres/kozilek,_butcher_of_truth (2).png and /dev/null differ diff --git a/gallery/images/fullres/kozilek,_butcher_of_truth.png b/gallery/images/fullres/kozilek,_butcher_of_truth.png deleted file mode 100644 index e41206d7..00000000 Binary files a/gallery/images/fullres/kozilek,_butcher_of_truth.png and /dev/null differ diff --git a/gallery/images/fullres/kozilek,_the_great_distortion (saitama).png b/gallery/images/fullres/kozilek,_the_great_distortion (saitama).png deleted file mode 100644 index dd386636..00000000 Binary files a/gallery/images/fullres/kozilek,_the_great_distortion (saitama).png and /dev/null differ diff --git a/gallery/images/fullres/kozilek,_the_great_distortion.png b/gallery/images/fullres/kozilek,_the_great_distortion.png deleted file mode 100644 index 71b75db8..00000000 Binary files a/gallery/images/fullres/kozilek,_the_great_distortion.png and /dev/null differ diff --git a/gallery/images/fullres/life_from_the_loam.png b/gallery/images/fullres/life_from_the_loam.png deleted file mode 100644 index 86345959..00000000 Binary files a/gallery/images/fullres/life_from_the_loam.png and /dev/null differ diff --git a/gallery/images/fullres/lightning_greaves.png b/gallery/images/fullres/lightning_greaves.png deleted file mode 100644 index b7a62dab..00000000 Binary files a/gallery/images/fullres/lightning_greaves.png and /dev/null differ diff --git a/gallery/images/fullres/liliana's_caress.png b/gallery/images/fullres/liliana's_caress.png deleted file mode 100644 index c725bf38..00000000 Binary files a/gallery/images/fullres/liliana's_caress.png and /dev/null differ diff --git a/gallery/images/fullres/lotus_petal (1).png b/gallery/images/fullres/lotus_petal (1).png deleted file mode 100644 index ac4af3e9..00000000 Binary files a/gallery/images/fullres/lotus_petal (1).png and /dev/null differ diff --git a/gallery/images/fullres/lotus_petal.png b/gallery/images/fullres/lotus_petal.png deleted file mode 100644 index c3eda65f..00000000 Binary files a/gallery/images/fullres/lotus_petal.png and /dev/null differ diff --git a/gallery/images/fullres/mana_confluence (2).png b/gallery/images/fullres/mana_confluence (2).png deleted file mode 100644 index 6d650c9e..00000000 Binary files a/gallery/images/fullres/mana_confluence (2).png and /dev/null differ diff --git a/gallery/images/fullres/mana_confluence.png b/gallery/images/fullres/mana_confluence.png deleted file mode 100644 index 820f0ddc..00000000 Binary files a/gallery/images/fullres/mana_confluence.png and /dev/null differ diff --git a/gallery/images/fullres/manascape_refractor.png b/gallery/images/fullres/manascape_refractor.png deleted file mode 100644 index b0e09645..00000000 Binary files a/gallery/images/fullres/manascape_refractor.png and /dev/null differ diff --git a/gallery/images/fullres/maze_of_ith (the mines of moria).png b/gallery/images/fullres/maze_of_ith (the mines of moria).png deleted file mode 100644 index b799f15a..00000000 Binary files a/gallery/images/fullres/maze_of_ith (the mines of moria).png and /dev/null differ diff --git a/gallery/images/fullres/maze_of_ith.png b/gallery/images/fullres/maze_of_ith.png deleted file mode 100644 index 9a9babbc..00000000 Binary files a/gallery/images/fullres/maze_of_ith.png and /dev/null differ diff --git a/gallery/images/fullres/merciless eviction (not the impostor...).png b/gallery/images/fullres/merciless eviction (not the impostor...).png deleted file mode 100644 index feaedae3..00000000 Binary files a/gallery/images/fullres/merciless eviction (not the impostor...).png and /dev/null differ diff --git a/gallery/images/fullres/metallic_mimic.png b/gallery/images/fullres/metallic_mimic.png deleted file mode 100644 index 142fc0da..00000000 Binary files a/gallery/images/fullres/metallic_mimic.png and /dev/null differ diff --git a/gallery/images/fullres/moss_diamond.png b/gallery/images/fullres/moss_diamond.png deleted file mode 100644 index 17286fc9..00000000 Binary files a/gallery/images/fullres/moss_diamond.png and /dev/null differ diff --git a/gallery/images/fullres/mountain.png b/gallery/images/fullres/mountain.png deleted file mode 100644 index 26208db6..00000000 Binary files a/gallery/images/fullres/mountain.png and /dev/null differ diff --git a/gallery/images/fullres/mox_opal.png b/gallery/images/fullres/mox_opal.png deleted file mode 100644 index 9030b62d..00000000 Binary files a/gallery/images/fullres/mox_opal.png and /dev/null differ diff --git a/gallery/images/fullres/murder.png b/gallery/images/fullres/murder.png deleted file mode 100644 index 5fe543a3..00000000 Binary files a/gallery/images/fullres/murder.png and /dev/null differ diff --git a/gallery/images/fullres/mystic_remora.png b/gallery/images/fullres/mystic_remora.png deleted file mode 100644 index 36fffdda..00000000 Binary files a/gallery/images/fullres/mystic_remora.png and /dev/null differ diff --git a/gallery/images/fullres/negan,_the_cold_blooded (aurra_sing,_bounty_hunter).png b/gallery/images/fullres/negan,_the_cold_blooded (aurra_sing,_bounty_hunter).png deleted file mode 100644 index c2be83d9..00000000 Binary files a/gallery/images/fullres/negan,_the_cold_blooded (aurra_sing,_bounty_hunter).png and /dev/null differ diff --git a/gallery/images/fullres/negan,_the_cold_blooded (dryden_vos,_crime_lord).png b/gallery/images/fullres/negan,_the_cold_blooded (dryden_vos,_crime_lord).png deleted file mode 100644 index b997b3df..00000000 Binary files a/gallery/images/fullres/negan,_the_cold_blooded (dryden_vos,_crime_lord).png and /dev/null differ diff --git a/gallery/images/fullres/nesting_grounds.png b/gallery/images/fullres/nesting_grounds.png deleted file mode 100644 index 34fbfdd1..00000000 Binary files a/gallery/images/fullres/nesting_grounds.png and /dev/null differ diff --git a/gallery/images/fullres/niv-mizzet, parun (nivvy_m).png b/gallery/images/fullres/niv-mizzet, parun (nivvy_m).png deleted file mode 100644 index ad244a5f..00000000 Binary files a/gallery/images/fullres/niv-mizzet, parun (nivvy_m).png and /dev/null differ diff --git a/gallery/images/fullres/nykthos,_shrine_to_nyx (1).png b/gallery/images/fullres/nykthos,_shrine_to_nyx (1).png deleted file mode 100644 index cb8bc2a1..00000000 Binary files a/gallery/images/fullres/nykthos,_shrine_to_nyx (1).png and /dev/null differ diff --git a/gallery/images/fullres/nykthos,_shrine_to_nyx.png b/gallery/images/fullres/nykthos,_shrine_to_nyx.png deleted file mode 100644 index 35e973f7..00000000 Binary files a/gallery/images/fullres/nykthos,_shrine_to_nyx.png and /dev/null differ diff --git a/gallery/images/fullres/oona,_queen_of_the_fae.png b/gallery/images/fullres/oona,_queen_of_the_fae.png deleted file mode 100644 index b71e9aea..00000000 Binary files a/gallery/images/fullres/oona,_queen_of_the_fae.png and /dev/null differ diff --git a/gallery/images/fullres/opt.png b/gallery/images/fullres/opt.png deleted file mode 100644 index 38986680..00000000 Binary files a/gallery/images/fullres/opt.png and /dev/null differ diff --git a/gallery/images/fullres/orzhov_signet.png b/gallery/images/fullres/orzhov_signet.png deleted file mode 100644 index 811f0576..00000000 Binary files a/gallery/images/fullres/orzhov_signet.png and /dev/null differ diff --git a/gallery/images/fullres/overgrown_tomb (2).png b/gallery/images/fullres/overgrown_tomb (2).png deleted file mode 100644 index 1ebfa912..00000000 Binary files a/gallery/images/fullres/overgrown_tomb (2).png and /dev/null differ diff --git a/gallery/images/fullres/overgrown_tomb.png b/gallery/images/fullres/overgrown_tomb.png deleted file mode 100644 index 079f2695..00000000 Binary files a/gallery/images/fullres/overgrown_tomb.png and /dev/null differ diff --git a/gallery/images/fullres/panharmonicon.png b/gallery/images/fullres/panharmonicon.png deleted file mode 100644 index 6e291a76..00000000 Binary files a/gallery/images/fullres/panharmonicon.png and /dev/null differ diff --git a/gallery/images/fullres/phyrexian_altar (1).png b/gallery/images/fullres/phyrexian_altar (1).png deleted file mode 100644 index 73d2c87e..00000000 Binary files a/gallery/images/fullres/phyrexian_altar (1).png and /dev/null differ diff --git a/gallery/images/fullres/phyrexian_altar.png b/gallery/images/fullres/phyrexian_altar.png deleted file mode 100644 index b1d52236..00000000 Binary files a/gallery/images/fullres/phyrexian_altar.png and /dev/null differ diff --git a/gallery/images/fullres/phyrexian_metamorph.png b/gallery/images/fullres/phyrexian_metamorph.png deleted file mode 100644 index 865d0334..00000000 Binary files a/gallery/images/fullres/phyrexian_metamorph.png and /dev/null differ diff --git a/gallery/images/fullres/polluted_delta.png b/gallery/images/fullres/polluted_delta.png deleted file mode 100644 index a6a73c14..00000000 Binary files a/gallery/images/fullres/polluted_delta.png and /dev/null differ diff --git a/gallery/images/fullres/predator,_flagship (reaver cutter).png b/gallery/images/fullres/predator,_flagship (reaver cutter).png deleted file mode 100644 index e5a3b5e9..00000000 Binary files a/gallery/images/fullres/predator,_flagship (reaver cutter).png and /dev/null differ diff --git a/gallery/images/fullres/propaganda.png b/gallery/images/fullres/propaganda.png deleted file mode 100644 index dbc246e7..00000000 Binary files a/gallery/images/fullres/propaganda.png and /dev/null differ diff --git a/gallery/images/fullres/rakdos_signet.png b/gallery/images/fullres/rakdos_signet.png deleted file mode 100644 index 7c367f6a..00000000 Binary files a/gallery/images/fullres/rakdos_signet.png and /dev/null differ diff --git a/gallery/images/fullres/ramos, dragon engine (mechagodzilla,_kaiju_engine).png b/gallery/images/fullres/ramos, dragon engine (mechagodzilla,_kaiju_engine).png deleted file mode 100644 index 07304645..00000000 Binary files a/gallery/images/fullres/ramos, dragon engine (mechagodzilla,_kaiju_engine).png and /dev/null differ diff --git a/gallery/images/fullres/ramos, dragon engine (super_mechagodzilla,_kaiju_engine).png b/gallery/images/fullres/ramos, dragon engine (super_mechagodzilla,_kaiju_engine).png deleted file mode 100644 index d0cce67b..00000000 Binary files a/gallery/images/fullres/ramos, dragon engine (super_mechagodzilla,_kaiju_engine).png and /dev/null differ diff --git a/gallery/images/fullres/reflecting_pool.png b/gallery/images/fullres/reflecting_pool.png deleted file mode 100644 index e312037d..00000000 Binary files a/gallery/images/fullres/reflecting_pool.png and /dev/null differ diff --git a/gallery/images/fullres/reliquary_tower (1).png b/gallery/images/fullres/reliquary_tower (1).png deleted file mode 100644 index 656abdf6..00000000 Binary files a/gallery/images/fullres/reliquary_tower (1).png and /dev/null differ diff --git a/gallery/images/fullres/reliquary_tower.png b/gallery/images/fullres/reliquary_tower.png deleted file mode 100644 index a375c5fd..00000000 Binary files a/gallery/images/fullres/reliquary_tower.png and /dev/null differ diff --git a/gallery/images/fullres/ren and seri, inseperable (catdog,_inseperable).png b/gallery/images/fullres/ren and seri, inseperable (catdog,_inseperable).png deleted file mode 100644 index a80bec70..00000000 Binary files a/gallery/images/fullres/ren and seri, inseperable (catdog,_inseperable).png and /dev/null differ diff --git a/gallery/images/fullres/return_of_the_wildspeaker.png b/gallery/images/fullres/return_of_the_wildspeaker.png deleted file mode 100644 index 88f7a902..00000000 Binary files a/gallery/images/fullres/return_of_the_wildspeaker.png and /dev/null differ diff --git a/gallery/images/fullres/return_to_dust.png b/gallery/images/fullres/return_to_dust.png deleted file mode 100644 index 59d695e4..00000000 Binary files a/gallery/images/fullres/return_to_dust.png and /dev/null differ diff --git a/gallery/images/fullres/revel_in_riches.png b/gallery/images/fullres/revel_in_riches.png deleted file mode 100644 index edc0204c..00000000 Binary files a/gallery/images/fullres/revel_in_riches.png and /dev/null differ diff --git a/gallery/images/fullres/rhystic_study (2).png b/gallery/images/fullres/rhystic_study (2).png deleted file mode 100644 index 4e4c7be8..00000000 Binary files a/gallery/images/fullres/rhystic_study (2).png and /dev/null differ diff --git a/gallery/images/fullres/rhystic_study.png b/gallery/images/fullres/rhystic_study.png deleted file mode 100644 index dd240aad..00000000 Binary files a/gallery/images/fullres/rhystic_study.png and /dev/null differ diff --git a/gallery/images/fullres/rick, steadfast leader (odric, steadfast leader) (1).png b/gallery/images/fullres/rick, steadfast leader (odric, steadfast leader) (1).png deleted file mode 100644 index 25df717f..00000000 Binary files a/gallery/images/fullres/rick, steadfast leader (odric, steadfast leader) (1).png and /dev/null differ diff --git a/gallery/images/fullres/rick, steadfast leader (odric, steadfast leader).png b/gallery/images/fullres/rick, steadfast leader (odric, steadfast leader).png deleted file mode 100644 index c679c97e..00000000 Binary files a/gallery/images/fullres/rick, steadfast leader (odric, steadfast leader).png and /dev/null differ diff --git a/gallery/images/fullres/rick, steadfast leader (thalia, steadfast leader).png b/gallery/images/fullres/rick, steadfast leader (thalia, steadfast leader).png deleted file mode 100644 index fb19b159..00000000 Binary files a/gallery/images/fullres/rick, steadfast leader (thalia, steadfast leader).png and /dev/null differ diff --git a/gallery/images/fullres/rogue's passage (the vent).png b/gallery/images/fullres/rogue's passage (the vent).png deleted file mode 100644 index c199648d..00000000 Binary files a/gallery/images/fullres/rogue's passage (the vent).png and /dev/null differ diff --git a/gallery/images/fullres/rogue's_passage.png b/gallery/images/fullres/rogue's_passage.png deleted file mode 100644 index cc04b3e1..00000000 Binary files a/gallery/images/fullres/rogue's_passage.png and /dev/null differ diff --git a/gallery/images/fullres/ruby_medallion.png b/gallery/images/fullres/ruby_medallion.png deleted file mode 100644 index 4ccb3f09..00000000 Binary files a/gallery/images/fullres/ruby_medallion.png and /dev/null differ diff --git a/gallery/images/fullres/rune-scarred_demon.png b/gallery/images/fullres/rune-scarred_demon.png deleted file mode 100644 index 5c6d1b09..00000000 Binary files a/gallery/images/fullres/rune-scarred_demon.png and /dev/null differ diff --git a/gallery/images/fullres/sacred_foundry (2).png b/gallery/images/fullres/sacred_foundry (2).png deleted file mode 100644 index 4c909605..00000000 Binary files a/gallery/images/fullres/sacred_foundry (2).png and /dev/null differ diff --git a/gallery/images/fullres/sacred_foundry.png b/gallery/images/fullres/sacred_foundry.png deleted file mode 100644 index 081bfd9c..00000000 Binary files a/gallery/images/fullres/sacred_foundry.png and /dev/null differ diff --git a/gallery/images/fullres/sakura_tribe_elder (baby yoda, the innocent).png b/gallery/images/fullres/sakura_tribe_elder (baby yoda, the innocent).png deleted file mode 100644 index 248cf2a1..00000000 Binary files a/gallery/images/fullres/sakura_tribe_elder (baby yoda, the innocent).png and /dev/null differ diff --git a/gallery/images/fullres/sea_gate,_reborn.png b/gallery/images/fullres/sea_gate,_reborn.png deleted file mode 100644 index 9d2e0906..00000000 Binary files a/gallery/images/fullres/sea_gate,_reborn.png and /dev/null differ diff --git a/gallery/images/fullres/sea_gate_restoration.png b/gallery/images/fullres/sea_gate_restoration.png deleted file mode 100644 index 5e5c1ae3..00000000 Binary files a/gallery/images/fullres/sea_gate_restoration.png and /dev/null differ diff --git a/gallery/images/fullres/seedborn_muse.png b/gallery/images/fullres/seedborn_muse.png deleted file mode 100644 index 63d97cde..00000000 Binary files a/gallery/images/fullres/seedborn_muse.png and /dev/null differ diff --git a/gallery/images/fullres/sensei's_divining_top.png b/gallery/images/fullres/sensei's_divining_top.png deleted file mode 100644 index 03acb01e..00000000 Binary files a/gallery/images/fullres/sensei's_divining_top.png and /dev/null differ diff --git a/gallery/images/fullres/show_and_tell.png b/gallery/images/fullres/show_and_tell.png deleted file mode 100644 index 604886f3..00000000 Binary files a/gallery/images/fullres/show_and_tell.png and /dev/null differ diff --git a/gallery/images/fullres/simic_signet.png b/gallery/images/fullres/simic_signet.png deleted file mode 100644 index e7a43a61..00000000 Binary files a/gallery/images/fullres/simic_signet.png and /dev/null differ diff --git a/gallery/images/fullres/skullclamp.png b/gallery/images/fullres/skullclamp.png deleted file mode 100644 index d6923b3d..00000000 Binary files a/gallery/images/fullres/skullclamp.png and /dev/null differ diff --git a/gallery/images/fullres/smothering_tithe.png b/gallery/images/fullres/smothering_tithe.png deleted file mode 100644 index e66e927b..00000000 Binary files a/gallery/images/fullres/smothering_tithe.png and /dev/null differ diff --git a/gallery/images/fullres/sol_ring (2).png b/gallery/images/fullres/sol_ring (2).png deleted file mode 100644 index 4b0a6ac4..00000000 Binary files a/gallery/images/fullres/sol_ring (2).png and /dev/null differ diff --git a/gallery/images/fullres/sol_ring.png b/gallery/images/fullres/sol_ring.png deleted file mode 100644 index 3a1d866a..00000000 Binary files a/gallery/images/fullres/sol_ring.png and /dev/null differ diff --git a/gallery/images/fullres/solemn simulacrum (c-3po).png b/gallery/images/fullres/solemn simulacrum (c-3po).png deleted file mode 100644 index d8e467cf..00000000 Binary files a/gallery/images/fullres/solemn simulacrum (c-3po).png and /dev/null differ diff --git a/gallery/images/fullres/solemn_simulacrum (1).png b/gallery/images/fullres/solemn_simulacrum (1).png deleted file mode 100644 index b0eae832..00000000 Binary files a/gallery/images/fullres/solemn_simulacrum (1).png and /dev/null differ diff --git a/gallery/images/fullres/solemn_simulacrum (2).png b/gallery/images/fullres/solemn_simulacrum (2).png deleted file mode 100644 index 933476d5..00000000 Binary files a/gallery/images/fullres/solemn_simulacrum (2).png and /dev/null differ diff --git a/gallery/images/fullres/solemn_simulacrum.png b/gallery/images/fullres/solemn_simulacrum.png deleted file mode 100644 index 1c6cf042..00000000 Binary files a/gallery/images/fullres/solemn_simulacrum.png and /dev/null differ diff --git a/gallery/images/fullres/songs-of-the-damned.png b/gallery/images/fullres/songs-of-the-damned.png deleted file mode 100644 index 9910c034..00000000 Binary files a/gallery/images/fullres/songs-of-the-damned.png and /dev/null differ diff --git a/gallery/images/fullres/spark_double.png b/gallery/images/fullres/spark_double.png deleted file mode 100644 index 235118b2..00000000 Binary files a/gallery/images/fullres/spark_double.png and /dev/null differ diff --git a/gallery/images/fullres/squee's_embrace (smeagol's final embrace).png b/gallery/images/fullres/squee's_embrace (smeagol's final embrace).png deleted file mode 100644 index 6639f439..00000000 Binary files a/gallery/images/fullres/squee's_embrace (smeagol's final embrace).png and /dev/null differ diff --git a/gallery/images/fullres/squee's_revenge (gollum's betrayal).png b/gallery/images/fullres/squee's_revenge (gollum's betrayal).png deleted file mode 100644 index 927ba314..00000000 Binary files a/gallery/images/fullres/squee's_revenge (gollum's betrayal).png and /dev/null differ diff --git a/gallery/images/fullres/squee's_toy (gollum's precious).png b/gallery/images/fullres/squee's_toy (gollum's precious).png deleted file mode 100644 index 2e59b7fa..00000000 Binary files a/gallery/images/fullres/squee's_toy (gollum's precious).png and /dev/null differ diff --git a/gallery/images/fullres/squee,_goblin_nabob (smeagol, unlikely ally).png b/gallery/images/fullres/squee,_goblin_nabob (smeagol, unlikely ally).png deleted file mode 100644 index 45417f41..00000000 Binary files a/gallery/images/fullres/squee,_goblin_nabob (smeagol, unlikely ally).png and /dev/null differ diff --git a/gallery/images/fullres/sram, senior edificer (sokka,_veteran_combatant).png b/gallery/images/fullres/sram, senior edificer (sokka,_veteran_combatant).png deleted file mode 100644 index 22deb49d..00000000 Binary files a/gallery/images/fullres/sram, senior edificer (sokka,_veteran_combatant).png and /dev/null differ diff --git a/gallery/images/fullres/steam_vents (2).png b/gallery/images/fullres/steam_vents (2).png deleted file mode 100644 index 05dde3c0..00000000 Binary files a/gallery/images/fullres/steam_vents (2).png and /dev/null differ diff --git a/gallery/images/fullres/steam_vents.png b/gallery/images/fullres/steam_vents.png deleted file mode 100644 index e8411626..00000000 Binary files a/gallery/images/fullres/steam_vents.png and /dev/null differ diff --git a/gallery/images/fullres/steelshaper's_gift.png b/gallery/images/fullres/steelshaper's_gift.png deleted file mode 100644 index e15c17d4..00000000 Binary files a/gallery/images/fullres/steelshaper's_gift.png and /dev/null differ diff --git a/gallery/images/fullres/stomping_ground (2).png b/gallery/images/fullres/stomping_ground (2).png deleted file mode 100644 index b1e9352d..00000000 Binary files a/gallery/images/fullres/stomping_ground (2).png and /dev/null differ diff --git a/gallery/images/fullres/stomping_ground.png b/gallery/images/fullres/stomping_ground.png deleted file mode 100644 index 8da0074b..00000000 Binary files a/gallery/images/fullres/stomping_ground.png and /dev/null differ diff --git a/gallery/images/fullres/stoneforge mystic (piandao,_master_swordsman).png b/gallery/images/fullres/stoneforge mystic (piandao,_master_swordsman).png deleted file mode 100644 index 43a63c74..00000000 Binary files a/gallery/images/fullres/stoneforge mystic (piandao,_master_swordsman).png and /dev/null differ diff --git a/gallery/images/fullres/swamp.png b/gallery/images/fullres/swamp.png deleted file mode 100644 index d9fd107c..00000000 Binary files a/gallery/images/fullres/swamp.png and /dev/null differ diff --git a/gallery/images/fullres/sword_of_feast_and_famine (2).png b/gallery/images/fullres/sword_of_feast_and_famine (2).png deleted file mode 100644 index 0986f9e3..00000000 Binary files a/gallery/images/fullres/sword_of_feast_and_famine (2).png and /dev/null differ diff --git a/gallery/images/fullres/sword_of_feast_and_famine.png b/gallery/images/fullres/sword_of_feast_and_famine.png deleted file mode 100644 index aba8f21e..00000000 Binary files a/gallery/images/fullres/sword_of_feast_and_famine.png and /dev/null differ diff --git a/gallery/images/fullres/sword_of_fire_and_ice.png b/gallery/images/fullres/sword_of_fire_and_ice.png deleted file mode 100644 index 1c07f6b0..00000000 Binary files a/gallery/images/fullres/sword_of_fire_and_ice.png and /dev/null differ diff --git a/gallery/images/fullres/sword_of_light_and_shadow.png b/gallery/images/fullres/sword_of_light_and_shadow.png deleted file mode 100644 index 33fea050..00000000 Binary files a/gallery/images/fullres/sword_of_light_and_shadow.png and /dev/null differ diff --git a/gallery/images/fullres/sword_of_sinew_and_steel.png b/gallery/images/fullres/sword_of_sinew_and_steel.png deleted file mode 100644 index d822606c..00000000 Binary files a/gallery/images/fullres/sword_of_sinew_and_steel.png and /dev/null differ diff --git a/gallery/images/fullres/sword_of_truth_and_justice.png b/gallery/images/fullres/sword_of_truth_and_justice.png deleted file mode 100644 index b1592b5b..00000000 Binary files a/gallery/images/fullres/sword_of_truth_and_justice.png and /dev/null differ diff --git a/gallery/images/fullres/talisman_of_conviction.png b/gallery/images/fullres/talisman_of_conviction.png deleted file mode 100644 index a345d2b0..00000000 Binary files a/gallery/images/fullres/talisman_of_conviction.png and /dev/null differ diff --git a/gallery/images/fullres/talisman_of_creativity.png b/gallery/images/fullres/talisman_of_creativity.png deleted file mode 100644 index 8956b1a5..00000000 Binary files a/gallery/images/fullres/talisman_of_creativity.png and /dev/null differ diff --git a/gallery/images/fullres/talisman_of_curiosity.png b/gallery/images/fullres/talisman_of_curiosity.png deleted file mode 100644 index 849a2ce3..00000000 Binary files a/gallery/images/fullres/talisman_of_curiosity.png and /dev/null differ diff --git a/gallery/images/fullres/talisman_of_hierarchy.png b/gallery/images/fullres/talisman_of_hierarchy.png deleted file mode 100644 index 1d970c11..00000000 Binary files a/gallery/images/fullres/talisman_of_hierarchy.png and /dev/null differ diff --git a/gallery/images/fullres/talisman_of_resilience.png b/gallery/images/fullres/talisman_of_resilience.png deleted file mode 100644 index d6aba0b0..00000000 Binary files a/gallery/images/fullres/talisman_of_resilience.png and /dev/null differ diff --git a/gallery/images/fullres/teferi's protection (emergency meeting).png b/gallery/images/fullres/teferi's protection (emergency meeting).png deleted file mode 100644 index 65daf71c..00000000 Binary files a/gallery/images/fullres/teferi's protection (emergency meeting).png and /dev/null differ diff --git a/gallery/images/fullres/temple_garden (2).png b/gallery/images/fullres/temple_garden (2).png deleted file mode 100644 index 356e8147..00000000 Binary files a/gallery/images/fullres/temple_garden (2).png and /dev/null differ diff --git a/gallery/images/fullres/temple_garden.png b/gallery/images/fullres/temple_garden.png deleted file mode 100644 index 0c9b04a7..00000000 Binary files a/gallery/images/fullres/temple_garden.png and /dev/null differ diff --git a/gallery/images/fullres/thassa's_oracle.png b/gallery/images/fullres/thassa's_oracle.png deleted file mode 100644 index 17748a3b..00000000 Binary files a/gallery/images/fullres/thassa's_oracle.png and /dev/null differ diff --git a/gallery/images/fullres/the-gitrog-monster.png b/gallery/images/fullres/the-gitrog-monster.png deleted file mode 100644 index 7b58cabd..00000000 Binary files a/gallery/images/fullres/the-gitrog-monster.png and /dev/null differ diff --git a/gallery/images/fullres/the_ozolith.png b/gallery/images/fullres/the_ozolith.png deleted file mode 100644 index 252275b0..00000000 Binary files a/gallery/images/fullres/the_ozolith.png and /dev/null differ diff --git a/gallery/images/fullres/the_storm_crow.png b/gallery/images/fullres/the_storm_crow.png deleted file mode 100644 index fc763fe0..00000000 Binary files a/gallery/images/fullres/the_storm_crow.png and /dev/null differ diff --git a/gallery/images/fullres/thran_dynamo.png b/gallery/images/fullres/thran_dynamo.png deleted file mode 100644 index 39855ed5..00000000 Binary files a/gallery/images/fullres/thran_dynamo.png and /dev/null differ diff --git a/gallery/images/fullres/thriving_bluff.png b/gallery/images/fullres/thriving_bluff.png deleted file mode 100644 index 9ca4a8d2..00000000 Binary files a/gallery/images/fullres/thriving_bluff.png and /dev/null differ diff --git a/gallery/images/fullres/thriving_grove.png b/gallery/images/fullres/thriving_grove.png deleted file mode 100644 index 707ed9ae..00000000 Binary files a/gallery/images/fullres/thriving_grove.png and /dev/null differ diff --git a/gallery/images/fullres/thriving_heath.png b/gallery/images/fullres/thriving_heath.png deleted file mode 100644 index 188f127e..00000000 Binary files a/gallery/images/fullres/thriving_heath.png and /dev/null differ diff --git a/gallery/images/fullres/thriving_moor.png b/gallery/images/fullres/thriving_moor.png deleted file mode 100644 index 0e5fd6e2..00000000 Binary files a/gallery/images/fullres/thriving_moor.png and /dev/null differ diff --git a/gallery/images/fullres/thryx, the sudden storm (aquaman).png b/gallery/images/fullres/thryx, the sudden storm (aquaman).png deleted file mode 100644 index 579ba906..00000000 Binary files a/gallery/images/fullres/thryx, the sudden storm (aquaman).png and /dev/null differ diff --git a/gallery/images/fullres/tiana_ship's_caretaker (kaylee frye).png b/gallery/images/fullres/tiana_ship's_caretaker (kaylee frye).png deleted file mode 100644 index e31c9e6a..00000000 Binary files a/gallery/images/fullres/tiana_ship's_caretaker (kaylee frye).png and /dev/null differ diff --git a/gallery/images/fullres/true_conviction.png b/gallery/images/fullres/true_conviction.png deleted file mode 100644 index 79f915c5..00000000 Binary files a/gallery/images/fullres/true_conviction.png and /dev/null differ diff --git a/gallery/images/fullres/ulamog,_the_ceaseless_hunger.png b/gallery/images/fullres/ulamog,_the_ceaseless_hunger.png deleted file mode 100644 index fc5c112a..00000000 Binary files a/gallery/images/fullres/ulamog,_the_ceaseless_hunger.png and /dev/null differ diff --git a/gallery/images/fullres/ulamog,_the_infinite_gyre.png b/gallery/images/fullres/ulamog,_the_infinite_gyre.png deleted file mode 100644 index 1f4689ce..00000000 Binary files a/gallery/images/fullres/ulamog,_the_infinite_gyre.png and /dev/null differ diff --git a/gallery/images/fullres/valakut,_the_molten_pinnacle.png b/gallery/images/fullres/valakut,_the_molten_pinnacle.png deleted file mode 100644 index b7d0e1d0..00000000 Binary files a/gallery/images/fullres/valakut,_the_molten_pinnacle.png and /dev/null differ diff --git a/gallery/images/fullres/vanquisher's_banner.png b/gallery/images/fullres/vanquisher's_banner.png deleted file mode 100644 index b4cd443d..00000000 Binary files a/gallery/images/fullres/vanquisher's_banner.png and /dev/null differ diff --git a/gallery/images/fullres/vilis,_broker_of_blood.png b/gallery/images/fullres/vilis,_broker_of_blood.png deleted file mode 100644 index 1f93ca42..00000000 Binary files a/gallery/images/fullres/vilis,_broker_of_blood.png and /dev/null differ diff --git a/gallery/images/fullres/vizier_of_the_menagerie.png b/gallery/images/fullres/vizier_of_the_menagerie.png deleted file mode 100644 index 98620b26..00000000 Binary files a/gallery/images/fullres/vizier_of_the_menagerie.png and /dev/null differ diff --git a/gallery/images/fullres/watery_grave (2).png b/gallery/images/fullres/watery_grave (2).png deleted file mode 100644 index 9d4833d6..00000000 Binary files a/gallery/images/fullres/watery_grave (2).png and /dev/null differ diff --git a/gallery/images/fullres/watery_grave.png b/gallery/images/fullres/watery_grave.png deleted file mode 100644 index 64713e7c..00000000 Binary files a/gallery/images/fullres/watery_grave.png and /dev/null differ diff --git a/gallery/images/fullres/weatherlight (serenity).png b/gallery/images/fullres/weatherlight (serenity).png deleted file mode 100644 index 71786cdc..00000000 Binary files a/gallery/images/fullres/weatherlight (serenity).png and /dev/null differ diff --git a/gallery/images/fullres/whispersilk_cloak.png b/gallery/images/fullres/whispersilk_cloak.png deleted file mode 100644 index ee0ffee3..00000000 Binary files a/gallery/images/fullres/whispersilk_cloak.png and /dev/null differ diff --git a/gallery/images/fullres/windswept_heath (2).png b/gallery/images/fullres/windswept_heath (2).png deleted file mode 100644 index 5add0ba3..00000000 Binary files a/gallery/images/fullres/windswept_heath (2).png and /dev/null differ diff --git a/gallery/images/fullres/windswept_heath.png b/gallery/images/fullres/windswept_heath.png deleted file mode 100644 index 180f3341..00000000 Binary files a/gallery/images/fullres/windswept_heath.png and /dev/null differ diff --git a/gallery/images/fullres/wooded_foothills (1).png b/gallery/images/fullres/wooded_foothills (1).png deleted file mode 100644 index 0a7e01dd..00000000 Binary files a/gallery/images/fullres/wooded_foothills (1).png and /dev/null differ diff --git a/gallery/images/fullres/wooded_foothills (2).png b/gallery/images/fullres/wooded_foothills (2).png deleted file mode 100644 index 4c28395d..00000000 Binary files a/gallery/images/fullres/wooded_foothills (2).png and /dev/null differ diff --git a/gallery/images/fullres/wooded_foothills.png b/gallery/images/fullres/wooded_foothills.png deleted file mode 100644 index 3a54bbf9..00000000 Binary files a/gallery/images/fullres/wooded_foothills.png and /dev/null differ diff --git a/gallery/images/fullres/worldly_tutor.png b/gallery/images/fullres/worldly_tutor.png deleted file mode 100644 index 7ed2aaf7..00000000 Binary files a/gallery/images/fullres/worldly_tutor.png and /dev/null differ diff --git a/gallery/images/fullres/yarok,_the_desecrated.png b/gallery/images/fullres/yarok,_the_desecrated.png deleted file mode 100644 index 482e77e0..00000000 Binary files a/gallery/images/fullres/yarok,_the_desecrated.png and /dev/null differ diff --git a/gallery/images/fullres/zacama,_primal_calamity.png b/gallery/images/fullres/zacama,_primal_calamity.png deleted file mode 100644 index 7f80089b..00000000 Binary files a/gallery/images/fullres/zacama,_primal_calamity.png and /dev/null differ diff --git a/gallery/images/fullres/zirda, the dawnwaker (flareon).png b/gallery/images/fullres/zirda, the dawnwaker (flareon).png deleted file mode 100644 index 3b98b9f2..00000000 Binary files a/gallery/images/fullres/zirda, the dawnwaker (flareon).png and /dev/null differ diff --git a/gallery/images/fullres/zirda,_the_dawnwaker.png b/gallery/images/fullres/zirda,_the_dawnwaker.png deleted file mode 100644 index 3417e70c..00000000 Binary files a/gallery/images/fullres/zirda,_the_dawnwaker.png and /dev/null differ diff --git a/gallery/images/fullres/zurzoth,_chaos_rider.png b/gallery/images/fullres/zurzoth,_chaos_rider.png deleted file mode 100644 index 98aa460e..00000000 Binary files a/gallery/images/fullres/zurzoth,_chaos_rider.png and /dev/null differ diff --git a/gallery/images/preview/Agadeem's Awakening.png b/gallery/images/preview/Agadeem's Awakening.png deleted file mode 100644 index 85287f0a..00000000 Binary files a/gallery/images/preview/Agadeem's Awakening.png and /dev/null differ diff --git a/gallery/images/preview/Craterhoof Behemoth.png b/gallery/images/preview/Craterhoof Behemoth.png deleted file mode 100644 index 45e82f30..00000000 Binary files a/gallery/images/preview/Craterhoof Behemoth.png and /dev/null differ diff --git a/gallery/images/preview/Emeria's Call.png b/gallery/images/preview/Emeria's Call.png deleted file mode 100644 index 675399c6..00000000 Binary files a/gallery/images/preview/Emeria's Call.png and /dev/null differ diff --git a/gallery/images/preview/Expedition Map.png b/gallery/images/preview/Expedition Map.png deleted file mode 100644 index 33bc002c..00000000 Binary files a/gallery/images/preview/Expedition Map.png and /dev/null differ diff --git a/gallery/images/preview/Omnath, Locus of Mana.png b/gallery/images/preview/Omnath, Locus of Mana.png deleted file mode 100644 index d0bc700a..00000000 Binary files a/gallery/images/preview/Omnath, Locus of Mana.png and /dev/null differ diff --git a/gallery/images/preview/Opposition Agent.png b/gallery/images/preview/Opposition Agent.png deleted file mode 100644 index 732e5371..00000000 Binary files a/gallery/images/preview/Opposition Agent.png and /dev/null differ diff --git a/gallery/images/preview/Shatterskull Smashing.png b/gallery/images/preview/Shatterskull Smashing.png deleted file mode 100644 index 8fc7dccd..00000000 Binary files a/gallery/images/preview/Shatterskull Smashing.png and /dev/null differ diff --git a/gallery/images/preview/Sol Ring.png b/gallery/images/preview/Sol Ring.png deleted file mode 100644 index ccdeb62b..00000000 Binary files a/gallery/images/preview/Sol Ring.png and /dev/null differ diff --git a/gallery/images/preview/Turntimber Symbiosis.png b/gallery/images/preview/Turntimber Symbiosis.png deleted file mode 100644 index 2a0d0a7f..00000000 Binary files a/gallery/images/preview/Turntimber Symbiosis.png and /dev/null differ diff --git a/gallery/images/preview/Valakut Awakening (Mustufar's Meltdown).png b/gallery/images/preview/Valakut Awakening (Mustufar's Meltdown).png deleted file mode 100644 index f97655a0..00000000 Binary files a/gallery/images/preview/Valakut Awakening (Mustufar's Meltdown).png and /dev/null differ diff --git a/gallery/images/preview/Valakut Stoneforge (Mustufar Forges).png b/gallery/images/preview/Valakut Stoneforge (Mustufar Forges).png deleted file mode 100644 index 7f47cbe9..00000000 Binary files a/gallery/images/preview/Valakut Stoneforge (Mustufar Forges).png and /dev/null differ diff --git a/gallery/images/preview/Wasteland.png b/gallery/images/preview/Wasteland.png deleted file mode 100644 index 0356e652..00000000 Binary files a/gallery/images/preview/Wasteland.png and /dev/null differ diff --git a/gallery/images/preview/academy_ruins (1).png b/gallery/images/preview/academy_ruins (1).png deleted file mode 100644 index e67502b3..00000000 Binary files a/gallery/images/preview/academy_ruins (1).png and /dev/null differ diff --git a/gallery/images/preview/academy_ruins (2).png b/gallery/images/preview/academy_ruins (2).png deleted file mode 100644 index fc5c6b81..00000000 Binary files a/gallery/images/preview/academy_ruins (2).png and /dev/null differ diff --git a/gallery/images/preview/academy_ruins (3).png b/gallery/images/preview/academy_ruins (3).png deleted file mode 100644 index b653c822..00000000 Binary files a/gallery/images/preview/academy_ruins (3).png and /dev/null differ diff --git a/gallery/images/preview/academy_ruins.png b/gallery/images/preview/academy_ruins.png deleted file mode 100644 index 5617fd44..00000000 Binary files a/gallery/images/preview/academy_ruins.png and /dev/null differ diff --git a/gallery/images/preview/animar,_soul_of_elements.png b/gallery/images/preview/animar,_soul_of_elements.png deleted file mode 100644 index 80907482..00000000 Binary files a/gallery/images/preview/animar,_soul_of_elements.png and /dev/null differ diff --git a/gallery/images/preview/arahbo, roar of the world (griffin, rambunctious boyo).png b/gallery/images/preview/arahbo, roar of the world (griffin, rambunctious boyo).png deleted file mode 100644 index f3f046a8..00000000 Binary files a/gallery/images/preview/arahbo, roar of the world (griffin, rambunctious boyo).png and /dev/null differ diff --git a/gallery/images/preview/arcane_signet.png b/gallery/images/preview/arcane_signet.png deleted file mode 100644 index 85f58a15..00000000 Binary files a/gallery/images/preview/arcane_signet.png and /dev/null differ diff --git a/gallery/images/preview/ash_barrens (1).png b/gallery/images/preview/ash_barrens (1).png deleted file mode 100644 index 8b05fe0f..00000000 Binary files a/gallery/images/preview/ash_barrens (1).png and /dev/null differ diff --git a/gallery/images/preview/ash_barrens.png b/gallery/images/preview/ash_barrens.png deleted file mode 100644 index 9631bd58..00000000 Binary files a/gallery/images/preview/ash_barrens.png and /dev/null differ diff --git a/gallery/images/preview/ashnod's_altar.png b/gallery/images/preview/ashnod's_altar.png deleted file mode 100644 index d645832b..00000000 Binary files a/gallery/images/preview/ashnod's_altar.png and /dev/null differ diff --git a/gallery/images/preview/aven_mindcensor.png b/gallery/images/preview/aven_mindcensor.png deleted file mode 100644 index 0f8c6381..00000000 Binary files a/gallery/images/preview/aven_mindcensor.png and /dev/null differ diff --git a/gallery/images/preview/avenger_of_zendikar.png b/gallery/images/preview/avenger_of_zendikar.png deleted file mode 100644 index 9eb6eef8..00000000 Binary files a/gallery/images/preview/avenger_of_zendikar.png and /dev/null differ diff --git a/gallery/images/preview/azorius_signet.png b/gallery/images/preview/azorius_signet.png deleted file mode 100644 index 1bde9056..00000000 Binary files a/gallery/images/preview/azorius_signet.png and /dev/null differ diff --git a/gallery/images/preview/band_of_brushwaggs.png b/gallery/images/preview/band_of_brushwaggs.png deleted file mode 100644 index 74fb5e38..00000000 Binary files a/gallery/images/preview/band_of_brushwaggs.png and /dev/null differ diff --git a/gallery/images/preview/beastmaster_ascension.png b/gallery/images/preview/beastmaster_ascension.png deleted file mode 100644 index 6d087a2a..00000000 Binary files a/gallery/images/preview/beastmaster_ascension.png and /dev/null differ diff --git a/gallery/images/preview/blade_of_selves.png b/gallery/images/preview/blade_of_selves.png deleted file mode 100644 index 36489abe..00000000 Binary files a/gallery/images/preview/blade_of_selves.png and /dev/null differ diff --git a/gallery/images/preview/blood_artist.png b/gallery/images/preview/blood_artist.png deleted file mode 100644 index d129c3a3..00000000 Binary files a/gallery/images/preview/blood_artist.png and /dev/null differ diff --git a/gallery/images/preview/blood_crypt (2).png b/gallery/images/preview/blood_crypt (2).png deleted file mode 100644 index 3de669eb..00000000 Binary files a/gallery/images/preview/blood_crypt (2).png and /dev/null differ diff --git a/gallery/images/preview/blood_crypt.png b/gallery/images/preview/blood_crypt.png deleted file mode 100644 index c8bb4dfa..00000000 Binary files a/gallery/images/preview/blood_crypt.png and /dev/null differ diff --git a/gallery/images/preview/blood_moon.png b/gallery/images/preview/blood_moon.png deleted file mode 100644 index 0323bd2c..00000000 Binary files a/gallery/images/preview/blood_moon.png and /dev/null differ diff --git a/gallery/images/preview/bloodstained_mire (2).png b/gallery/images/preview/bloodstained_mire (2).png deleted file mode 100644 index 2fedb700..00000000 Binary files a/gallery/images/preview/bloodstained_mire (2).png and /dev/null differ diff --git a/gallery/images/preview/bloodstained_mire.png b/gallery/images/preview/bloodstained_mire.png deleted file mode 100644 index 654de575..00000000 Binary files a/gallery/images/preview/bloodstained_mire.png and /dev/null differ diff --git a/gallery/images/preview/boros_signet.png b/gallery/images/preview/boros_signet.png deleted file mode 100644 index ec07b6a6..00000000 Binary files a/gallery/images/preview/boros_signet.png and /dev/null differ diff --git a/gallery/images/preview/brago,_king_eternal.png b/gallery/images/preview/brago,_king_eternal.png deleted file mode 100644 index 81d56d46..00000000 Binary files a/gallery/images/preview/brago,_king_eternal.png and /dev/null differ diff --git a/gallery/images/preview/breeding_pool (2).png b/gallery/images/preview/breeding_pool (2).png deleted file mode 100644 index 5c4e6af2..00000000 Binary files a/gallery/images/preview/breeding_pool (2).png and /dev/null differ diff --git a/gallery/images/preview/breeding_pool.png b/gallery/images/preview/breeding_pool.png deleted file mode 100644 index e988c8e9..00000000 Binary files a/gallery/images/preview/breeding_pool.png and /dev/null differ diff --git a/gallery/images/preview/buried_ruin.png b/gallery/images/preview/buried_ruin.png deleted file mode 100644 index 4a067110..00000000 Binary files a/gallery/images/preview/buried_ruin.png and /dev/null differ diff --git a/gallery/images/preview/chandra's_ignition.png b/gallery/images/preview/chandra's_ignition.png deleted file mode 100644 index c27bb969..00000000 Binary files a/gallery/images/preview/chandra's_ignition.png and /dev/null differ diff --git a/gallery/images/preview/child of alara (creeper, child of notch).png b/gallery/images/preview/child of alara (creeper, child of notch).png deleted file mode 100644 index 5c24a515..00000000 Binary files a/gallery/images/preview/child of alara (creeper, child of notch).png and /dev/null differ diff --git a/gallery/images/preview/chromatic_lantern.png b/gallery/images/preview/chromatic_lantern.png deleted file mode 100644 index dd1415c4..00000000 Binary files a/gallery/images/preview/chromatic_lantern.png and /dev/null differ diff --git a/gallery/images/preview/coalition_relic.png b/gallery/images/preview/coalition_relic.png deleted file mode 100644 index 8e4549be..00000000 Binary files a/gallery/images/preview/coalition_relic.png and /dev/null differ diff --git a/gallery/images/preview/command_tower (1).png b/gallery/images/preview/command_tower (1).png deleted file mode 100644 index 498b6b6a..00000000 Binary files a/gallery/images/preview/command_tower (1).png and /dev/null differ diff --git a/gallery/images/preview/command_tower (2).png b/gallery/images/preview/command_tower (2).png deleted file mode 100644 index 8dad71a2..00000000 Binary files a/gallery/images/preview/command_tower (2).png and /dev/null differ diff --git a/gallery/images/preview/command_tower.png b/gallery/images/preview/command_tower.png deleted file mode 100644 index 7553f4b3..00000000 Binary files a/gallery/images/preview/command_tower.png and /dev/null differ diff --git a/gallery/images/preview/council's judgment (who is the impostor).png b/gallery/images/preview/council's judgment (who is the impostor).png deleted file mode 100644 index 2a09f344..00000000 Binary files a/gallery/images/preview/council's judgment (who is the impostor).png and /dev/null differ diff --git a/gallery/images/preview/craterhoof_behemoth.png b/gallery/images/preview/craterhoof_behemoth.png deleted file mode 100644 index 9e792b82..00000000 Binary files a/gallery/images/preview/craterhoof_behemoth.png and /dev/null differ diff --git a/gallery/images/preview/cryptolith_rite.png b/gallery/images/preview/cryptolith_rite.png deleted file mode 100644 index 6a8748fe..00000000 Binary files a/gallery/images/preview/cryptolith_rite.png and /dev/null differ diff --git a/gallery/images/preview/culling_the_weak.png b/gallery/images/preview/culling_the_weak.png deleted file mode 100644 index 06d7feb0..00000000 Binary files a/gallery/images/preview/culling_the_weak.png and /dev/null differ diff --git a/gallery/images/preview/cyclonic_rift.png b/gallery/images/preview/cyclonic_rift.png deleted file mode 100644 index 16052f2d..00000000 Binary files a/gallery/images/preview/cyclonic_rift.png and /dev/null differ diff --git a/gallery/images/preview/darksteel plate (aang's_epic_armor).png b/gallery/images/preview/darksteel plate (aang's_epic_armor).png deleted file mode 100644 index c8aa6536..00000000 Binary files a/gallery/images/preview/darksteel plate (aang's_epic_armor).png and /dev/null differ diff --git a/gallery/images/preview/darksteel reactor (the reactor).png b/gallery/images/preview/darksteel reactor (the reactor).png deleted file mode 100644 index 0419d910..00000000 Binary files a/gallery/images/preview/darksteel reactor (the reactor).png and /dev/null differ diff --git a/gallery/images/preview/darksteel_plate.png b/gallery/images/preview/darksteel_plate.png deleted file mode 100644 index c2188235..00000000 Binary files a/gallery/images/preview/darksteel_plate.png and /dev/null differ diff --git a/gallery/images/preview/deadeye_navigator .png b/gallery/images/preview/deadeye_navigator .png deleted file mode 100644 index 419d1ab6..00000000 Binary files a/gallery/images/preview/deadeye_navigator .png and /dev/null differ diff --git a/gallery/images/preview/demonic_tutor (2).png b/gallery/images/preview/demonic_tutor (2).png deleted file mode 100644 index 5ecd4ab3..00000000 Binary files a/gallery/images/preview/demonic_tutor (2).png and /dev/null differ diff --git a/gallery/images/preview/demonic_tutor.png b/gallery/images/preview/demonic_tutor.png deleted file mode 100644 index 836001ad..00000000 Binary files a/gallery/images/preview/demonic_tutor.png and /dev/null differ diff --git a/gallery/images/preview/dimir_signet (1).png b/gallery/images/preview/dimir_signet (1).png deleted file mode 100644 index 22f63f8b..00000000 Binary files a/gallery/images/preview/dimir_signet (1).png and /dev/null differ diff --git a/gallery/images/preview/dimir_signet.png b/gallery/images/preview/dimir_signet.png deleted file mode 100644 index 144ce7ed..00000000 Binary files a/gallery/images/preview/dimir_signet.png and /dev/null differ diff --git a/gallery/images/preview/dolmen_gate.png b/gallery/images/preview/dolmen_gate.png deleted file mode 100644 index a266ecc7..00000000 Binary files a/gallery/images/preview/dolmen_gate.png and /dev/null differ diff --git a/gallery/images/preview/doubling_season.png b/gallery/images/preview/doubling_season.png deleted file mode 100644 index a467c3f0..00000000 Binary files a/gallery/images/preview/doubling_season.png and /dev/null differ diff --git a/gallery/images/preview/dryad_of_the_ilysian_grove (2).png b/gallery/images/preview/dryad_of_the_ilysian_grove (2).png deleted file mode 100644 index 24f1793b..00000000 Binary files a/gallery/images/preview/dryad_of_the_ilysian_grove (2).png and /dev/null differ diff --git a/gallery/images/preview/dryad_of_the_ilysian_grove.png b/gallery/images/preview/dryad_of_the_ilysian_grove.png deleted file mode 100644 index fa4e07e0..00000000 Binary files a/gallery/images/preview/dryad_of_the_ilysian_grove.png and /dev/null differ diff --git a/gallery/images/preview/eladamri's_call.png b/gallery/images/preview/eladamri's_call.png deleted file mode 100644 index da5dc2b7..00000000 Binary files a/gallery/images/preview/eladamri's_call.png and /dev/null differ diff --git a/gallery/images/preview/emerald_medallion.png b/gallery/images/preview/emerald_medallion.png deleted file mode 100644 index 5ad1fb09..00000000 Binary files a/gallery/images/preview/emerald_medallion.png and /dev/null differ diff --git a/gallery/images/preview/emeria_angel.png b/gallery/images/preview/emeria_angel.png deleted file mode 100644 index 515a4b0c..00000000 Binary files a/gallery/images/preview/emeria_angel.png and /dev/null differ diff --git a/gallery/images/preview/emrakul,_the_aeons_torn.png b/gallery/images/preview/emrakul,_the_aeons_torn.png deleted file mode 100644 index 412a51ef..00000000 Binary files a/gallery/images/preview/emrakul,_the_aeons_torn.png and /dev/null differ diff --git a/gallery/images/preview/emrakul,_the_promised_end (2).png b/gallery/images/preview/emrakul,_the_promised_end (2).png deleted file mode 100644 index a5b1b6db..00000000 Binary files a/gallery/images/preview/emrakul,_the_promised_end (2).png and /dev/null differ diff --git a/gallery/images/preview/emrakul,_the_promised_end.png b/gallery/images/preview/emrakul,_the_promised_end.png deleted file mode 100644 index 9ef16460..00000000 Binary files a/gallery/images/preview/emrakul,_the_promised_end.png and /dev/null differ diff --git a/gallery/images/preview/enlightened_tutor.png b/gallery/images/preview/enlightened_tutor.png deleted file mode 100644 index b0d45b39..00000000 Binary files a/gallery/images/preview/enlightened_tutor.png and /dev/null differ diff --git a/gallery/images/preview/eternal_witness.png b/gallery/images/preview/eternal_witness.png deleted file mode 100644 index 38d7be08..00000000 Binary files a/gallery/images/preview/eternal_witness.png and /dev/null differ diff --git a/gallery/images/preview/evacuation.png b/gallery/images/preview/evacuation.png deleted file mode 100644 index 0d35f2fe..00000000 Binary files a/gallery/images/preview/evacuation.png and /dev/null differ diff --git a/gallery/images/preview/fabricate (1).png b/gallery/images/preview/fabricate (1).png deleted file mode 100644 index d922b581..00000000 Binary files a/gallery/images/preview/fabricate (1).png and /dev/null differ diff --git a/gallery/images/preview/fabricate.png b/gallery/images/preview/fabricate.png deleted file mode 100644 index 6c370d32..00000000 Binary files a/gallery/images/preview/fabricate.png and /dev/null differ diff --git a/gallery/images/preview/farseek (1).png b/gallery/images/preview/farseek (1).png deleted file mode 100644 index 38bc6033..00000000 Binary files a/gallery/images/preview/farseek (1).png and /dev/null differ diff --git a/gallery/images/preview/farseek.png b/gallery/images/preview/farseek.png deleted file mode 100644 index a71cf173..00000000 Binary files a/gallery/images/preview/farseek.png and /dev/null differ diff --git a/gallery/images/preview/fellwar stone.png b/gallery/images/preview/fellwar stone.png deleted file mode 100644 index 68631cff..00000000 Binary files a/gallery/images/preview/fellwar stone.png and /dev/null differ diff --git a/gallery/images/preview/fertilid.png b/gallery/images/preview/fertilid.png deleted file mode 100644 index 5cfa20c4..00000000 Binary files a/gallery/images/preview/fertilid.png and /dev/null differ diff --git a/gallery/images/preview/fire_diamond.png b/gallery/images/preview/fire_diamond.png deleted file mode 100644 index 89daf5bf..00000000 Binary files a/gallery/images/preview/fire_diamond.png and /dev/null differ diff --git a/gallery/images/preview/flooded_strand (2).png b/gallery/images/preview/flooded_strand (2).png deleted file mode 100644 index a4ea45b3..00000000 Binary files a/gallery/images/preview/flooded_strand (2).png and /dev/null differ diff --git a/gallery/images/preview/flooded_strand (3).png b/gallery/images/preview/flooded_strand (3).png deleted file mode 100644 index efc66f16..00000000 Binary files a/gallery/images/preview/flooded_strand (3).png and /dev/null differ diff --git a/gallery/images/preview/flooded_strand.png b/gallery/images/preview/flooded_strand.png deleted file mode 100644 index 83f075a8..00000000 Binary files a/gallery/images/preview/flooded_strand.png and /dev/null differ diff --git a/gallery/images/preview/force_of_vigor.png b/gallery/images/preview/force_of_vigor.png deleted file mode 100644 index 189e16bb..00000000 Binary files a/gallery/images/preview/force_of_vigor.png and /dev/null differ diff --git a/gallery/images/preview/forest.png b/gallery/images/preview/forest.png deleted file mode 100644 index 7733a9f1..00000000 Binary files a/gallery/images/preview/forest.png and /dev/null differ diff --git a/gallery/images/preview/gaea's_cradle (1).png b/gallery/images/preview/gaea's_cradle (1).png deleted file mode 100644 index 9ddb69aa..00000000 Binary files a/gallery/images/preview/gaea's_cradle (1).png and /dev/null differ diff --git a/gallery/images/preview/gaea's_cradle (2).png b/gallery/images/preview/gaea's_cradle (2).png deleted file mode 100644 index b383b738..00000000 Binary files a/gallery/images/preview/gaea's_cradle (2).png and /dev/null differ diff --git a/gallery/images/preview/gaea's_cradle (3).png b/gallery/images/preview/gaea's_cradle (3).png deleted file mode 100644 index 3e0ce292..00000000 Binary files a/gallery/images/preview/gaea's_cradle (3).png and /dev/null differ diff --git a/gallery/images/preview/gaea's_cradle.png b/gallery/images/preview/gaea's_cradle.png deleted file mode 100644 index 1074affb..00000000 Binary files a/gallery/images/preview/gaea's_cradle.png and /dev/null differ diff --git a/gallery/images/preview/gavi_nest_warden (gavin verhey).png b/gallery/images/preview/gavi_nest_warden (gavin verhey).png deleted file mode 100644 index afff5173..00000000 Binary files a/gallery/images/preview/gavi_nest_warden (gavin verhey).png and /dev/null differ diff --git a/gallery/images/preview/generous_gift.png b/gallery/images/preview/generous_gift.png deleted file mode 100644 index 1d7c0f09..00000000 Binary files a/gallery/images/preview/generous_gift.png and /dev/null differ diff --git a/gallery/images/preview/gerrard,_weatherlight_hero (malcolm reynolds).png b/gallery/images/preview/gerrard,_weatherlight_hero (malcolm reynolds).png deleted file mode 100644 index beba315e..00000000 Binary files a/gallery/images/preview/gerrard,_weatherlight_hero (malcolm reynolds).png and /dev/null differ diff --git a/gallery/images/preview/gilded_lotus.png b/gallery/images/preview/gilded_lotus.png deleted file mode 100644 index b0c09370..00000000 Binary files a/gallery/images/preview/gilded_lotus.png and /dev/null differ diff --git a/gallery/images/preview/goblin_bombardment.png b/gallery/images/preview/goblin_bombardment.png deleted file mode 100644 index d4add606..00000000 Binary files a/gallery/images/preview/goblin_bombardment.png and /dev/null differ diff --git a/gallery/images/preview/godless_shrine (2).png b/gallery/images/preview/godless_shrine (2).png deleted file mode 100644 index e367b354..00000000 Binary files a/gallery/images/preview/godless_shrine (2).png and /dev/null differ diff --git a/gallery/images/preview/godless_shrine.png b/gallery/images/preview/godless_shrine.png deleted file mode 100644 index 15eede1f..00000000 Binary files a/gallery/images/preview/godless_shrine.png and /dev/null differ diff --git a/gallery/images/preview/golgari_signet (1).png b/gallery/images/preview/golgari_signet (1).png deleted file mode 100644 index e56634ca..00000000 Binary files a/gallery/images/preview/golgari_signet (1).png and /dev/null differ diff --git a/gallery/images/preview/golgari_signet.png b/gallery/images/preview/golgari_signet.png deleted file mode 100644 index 0fa2685c..00000000 Binary files a/gallery/images/preview/golgari_signet.png and /dev/null differ diff --git a/gallery/images/preview/growing_rites_of_itlimoc.png b/gallery/images/preview/growing_rites_of_itlimoc.png deleted file mode 100644 index 0d61af51..00000000 Binary files a/gallery/images/preview/growing_rites_of_itlimoc.png and /dev/null differ diff --git a/gallery/images/preview/gruul_signet.png b/gallery/images/preview/gruul_signet.png deleted file mode 100644 index 311b09c6..00000000 Binary files a/gallery/images/preview/gruul_signet.png and /dev/null differ diff --git a/gallery/images/preview/hall_of_heliod's_generosity.png b/gallery/images/preview/hall_of_heliod's_generosity.png deleted file mode 100644 index d734ff6c..00000000 Binary files a/gallery/images/preview/hall_of_heliod's_generosity.png and /dev/null differ diff --git a/gallery/images/preview/hallowed_fountain (2).png b/gallery/images/preview/hallowed_fountain (2).png deleted file mode 100644 index ebc5ae87..00000000 Binary files a/gallery/images/preview/hallowed_fountain (2).png and /dev/null differ diff --git a/gallery/images/preview/hallowed_fountain.png b/gallery/images/preview/hallowed_fountain.png deleted file mode 100644 index 49432b8e..00000000 Binary files a/gallery/images/preview/hallowed_fountain.png and /dev/null differ diff --git a/gallery/images/preview/hammer_of_nazahn.png b/gallery/images/preview/hammer_of_nazahn.png deleted file mode 100644 index ae72a4d8..00000000 Binary files a/gallery/images/preview/hammer_of_nazahn.png and /dev/null differ diff --git a/gallery/images/preview/helm_of_awakening.png b/gallery/images/preview/helm_of_awakening.png deleted file mode 100644 index 893d7f80..00000000 Binary files a/gallery/images/preview/helm_of_awakening.png and /dev/null differ diff --git a/gallery/images/preview/helm_of_the_host.png b/gallery/images/preview/helm_of_the_host.png deleted file mode 100644 index 2868868e..00000000 Binary files a/gallery/images/preview/helm_of_the_host.png and /dev/null differ diff --git a/gallery/images/preview/idyllic_tutor.png b/gallery/images/preview/idyllic_tutor.png deleted file mode 100644 index 7901d400..00000000 Binary files a/gallery/images/preview/idyllic_tutor.png and /dev/null differ diff --git a/gallery/images/preview/intruder_alarm.png b/gallery/images/preview/intruder_alarm.png deleted file mode 100644 index 8e84e4a6..00000000 Binary files a/gallery/images/preview/intruder_alarm.png and /dev/null differ diff --git a/gallery/images/preview/inventors'_fair.png b/gallery/images/preview/inventors'_fair.png deleted file mode 100644 index 489d0726..00000000 Binary files a/gallery/images/preview/inventors'_fair.png and /dev/null differ diff --git a/gallery/images/preview/island.png b/gallery/images/preview/island.png deleted file mode 100644 index c26b54a9..00000000 Binary files a/gallery/images/preview/island.png and /dev/null differ diff --git a/gallery/images/preview/izzet_signet.png b/gallery/images/preview/izzet_signet.png deleted file mode 100644 index 5fd0e38b..00000000 Binary files a/gallery/images/preview/izzet_signet.png and /dev/null differ diff --git a/gallery/images/preview/jace, mirror mage (double_identity).png b/gallery/images/preview/jace, mirror mage (double_identity).png deleted file mode 100644 index bf640cb0..00000000 Binary files a/gallery/images/preview/jace, mirror mage (double_identity).png and /dev/null differ diff --git a/gallery/images/preview/jhoira,_weatherlight_captain.png b/gallery/images/preview/jhoira,_weatherlight_captain.png deleted file mode 100644 index e3f2dffd..00000000 Binary files a/gallery/images/preview/jhoira,_weatherlight_captain.png and /dev/null differ diff --git a/gallery/images/preview/kaheera, the orphanguard (katniss, friend to all).png b/gallery/images/preview/kaheera, the orphanguard (katniss, friend to all).png deleted file mode 100644 index 7547a91d..00000000 Binary files a/gallery/images/preview/kaheera, the orphanguard (katniss, friend to all).png and /dev/null differ diff --git a/gallery/images/preview/kalamax,_the_stormsire.png b/gallery/images/preview/kalamax,_the_stormsire.png deleted file mode 100644 index 602d0c51..00000000 Binary files a/gallery/images/preview/kalamax,_the_stormsire.png and /dev/null differ diff --git a/gallery/images/preview/karn's_bastion.png b/gallery/images/preview/karn's_bastion.png deleted file mode 100644 index a87bd90c..00000000 Binary files a/gallery/images/preview/karn's_bastion.png and /dev/null differ diff --git a/gallery/images/preview/keruga, the macrosage (jabba_the_hutt,_crime_lord).png b/gallery/images/preview/keruga, the macrosage (jabba_the_hutt,_crime_lord).png deleted file mode 100644 index fc089558..00000000 Binary files a/gallery/images/preview/keruga, the macrosage (jabba_the_hutt,_crime_lord).png and /dev/null differ diff --git a/gallery/images/preview/kozilek,_butcher_of_truth (2).png b/gallery/images/preview/kozilek,_butcher_of_truth (2).png deleted file mode 100644 index 1f17fc80..00000000 Binary files a/gallery/images/preview/kozilek,_butcher_of_truth (2).png and /dev/null differ diff --git a/gallery/images/preview/kozilek,_butcher_of_truth.png b/gallery/images/preview/kozilek,_butcher_of_truth.png deleted file mode 100644 index 7902d308..00000000 Binary files a/gallery/images/preview/kozilek,_butcher_of_truth.png and /dev/null differ diff --git a/gallery/images/preview/kozilek,_the_great_distortion (saitama).png b/gallery/images/preview/kozilek,_the_great_distortion (saitama).png deleted file mode 100644 index 1b463e13..00000000 Binary files a/gallery/images/preview/kozilek,_the_great_distortion (saitama).png and /dev/null differ diff --git a/gallery/images/preview/kozilek,_the_great_distortion.png b/gallery/images/preview/kozilek,_the_great_distortion.png deleted file mode 100644 index f49050fd..00000000 Binary files a/gallery/images/preview/kozilek,_the_great_distortion.png and /dev/null differ diff --git a/gallery/images/preview/life_from_the_loam.png b/gallery/images/preview/life_from_the_loam.png deleted file mode 100644 index 60f1839e..00000000 Binary files a/gallery/images/preview/life_from_the_loam.png and /dev/null differ diff --git a/gallery/images/preview/lightning_greaves.png b/gallery/images/preview/lightning_greaves.png deleted file mode 100644 index 90f4f20a..00000000 Binary files a/gallery/images/preview/lightning_greaves.png and /dev/null differ diff --git a/gallery/images/preview/liliana's_caress.png b/gallery/images/preview/liliana's_caress.png deleted file mode 100644 index bbc0c6e8..00000000 Binary files a/gallery/images/preview/liliana's_caress.png and /dev/null differ diff --git a/gallery/images/preview/lotus_petal (1).png b/gallery/images/preview/lotus_petal (1).png deleted file mode 100644 index 5e0f7d12..00000000 Binary files a/gallery/images/preview/lotus_petal (1).png and /dev/null differ diff --git a/gallery/images/preview/lotus_petal.png b/gallery/images/preview/lotus_petal.png deleted file mode 100644 index 1bbaba9b..00000000 Binary files a/gallery/images/preview/lotus_petal.png and /dev/null differ diff --git a/gallery/images/preview/mana_confluence (2).png b/gallery/images/preview/mana_confluence (2).png deleted file mode 100644 index 19603e55..00000000 Binary files a/gallery/images/preview/mana_confluence (2).png and /dev/null differ diff --git a/gallery/images/preview/mana_confluence.png b/gallery/images/preview/mana_confluence.png deleted file mode 100644 index 8d47bd3c..00000000 Binary files a/gallery/images/preview/mana_confluence.png and /dev/null differ diff --git a/gallery/images/preview/manascape_refractor.png b/gallery/images/preview/manascape_refractor.png deleted file mode 100644 index 62c087c7..00000000 Binary files a/gallery/images/preview/manascape_refractor.png and /dev/null differ diff --git a/gallery/images/preview/maze_of_ith (the mines of moria).png b/gallery/images/preview/maze_of_ith (the mines of moria).png deleted file mode 100644 index f6314db9..00000000 Binary files a/gallery/images/preview/maze_of_ith (the mines of moria).png and /dev/null differ diff --git a/gallery/images/preview/maze_of_ith.png b/gallery/images/preview/maze_of_ith.png deleted file mode 100644 index 9166aeef..00000000 Binary files a/gallery/images/preview/maze_of_ith.png and /dev/null differ diff --git a/gallery/images/preview/merciless eviction (not the impostor...).png b/gallery/images/preview/merciless eviction (not the impostor...).png deleted file mode 100644 index 2b21f42e..00000000 Binary files a/gallery/images/preview/merciless eviction (not the impostor...).png and /dev/null differ diff --git a/gallery/images/preview/metallic_mimic.png b/gallery/images/preview/metallic_mimic.png deleted file mode 100644 index ed272c72..00000000 Binary files a/gallery/images/preview/metallic_mimic.png and /dev/null differ diff --git a/gallery/images/preview/moss_diamond.png b/gallery/images/preview/moss_diamond.png deleted file mode 100644 index 531295a5..00000000 Binary files a/gallery/images/preview/moss_diamond.png and /dev/null differ diff --git a/gallery/images/preview/mountain.png b/gallery/images/preview/mountain.png deleted file mode 100644 index 12c6fe3d..00000000 Binary files a/gallery/images/preview/mountain.png and /dev/null differ diff --git a/gallery/images/preview/mox_opal.png b/gallery/images/preview/mox_opal.png deleted file mode 100644 index dd116d2d..00000000 Binary files a/gallery/images/preview/mox_opal.png and /dev/null differ diff --git a/gallery/images/preview/murder.png b/gallery/images/preview/murder.png deleted file mode 100644 index b4e31172..00000000 Binary files a/gallery/images/preview/murder.png and /dev/null differ diff --git a/gallery/images/preview/mystic_remora.png b/gallery/images/preview/mystic_remora.png deleted file mode 100644 index e1a21eac..00000000 Binary files a/gallery/images/preview/mystic_remora.png and /dev/null differ diff --git a/gallery/images/preview/negan,_the_cold_blooded (aurra_sing,_bounty_hunter).png b/gallery/images/preview/negan,_the_cold_blooded (aurra_sing,_bounty_hunter).png deleted file mode 100644 index 90230cbc..00000000 Binary files a/gallery/images/preview/negan,_the_cold_blooded (aurra_sing,_bounty_hunter).png and /dev/null differ diff --git a/gallery/images/preview/negan,_the_cold_blooded (dryden_vos,_crime_lord).png b/gallery/images/preview/negan,_the_cold_blooded (dryden_vos,_crime_lord).png deleted file mode 100644 index 428f9c33..00000000 Binary files a/gallery/images/preview/negan,_the_cold_blooded (dryden_vos,_crime_lord).png and /dev/null differ diff --git a/gallery/images/preview/nesting_grounds.png b/gallery/images/preview/nesting_grounds.png deleted file mode 100644 index f598f6c6..00000000 Binary files a/gallery/images/preview/nesting_grounds.png and /dev/null differ diff --git a/gallery/images/preview/niv-mizzet, parun (nivvy_m).png b/gallery/images/preview/niv-mizzet, parun (nivvy_m).png deleted file mode 100644 index 3826d213..00000000 Binary files a/gallery/images/preview/niv-mizzet, parun (nivvy_m).png and /dev/null differ diff --git a/gallery/images/preview/nykthos,_shrine_to_nyx (1).png b/gallery/images/preview/nykthos,_shrine_to_nyx (1).png deleted file mode 100644 index 042f9fd0..00000000 Binary files a/gallery/images/preview/nykthos,_shrine_to_nyx (1).png and /dev/null differ diff --git a/gallery/images/preview/nykthos,_shrine_to_nyx.png b/gallery/images/preview/nykthos,_shrine_to_nyx.png deleted file mode 100644 index cfff6035..00000000 Binary files a/gallery/images/preview/nykthos,_shrine_to_nyx.png and /dev/null differ diff --git a/gallery/images/preview/oona,_queen_of_the_fae.png b/gallery/images/preview/oona,_queen_of_the_fae.png deleted file mode 100644 index 18ffe672..00000000 Binary files a/gallery/images/preview/oona,_queen_of_the_fae.png and /dev/null differ diff --git a/gallery/images/preview/opt.png b/gallery/images/preview/opt.png deleted file mode 100644 index 14c37e4a..00000000 Binary files a/gallery/images/preview/opt.png and /dev/null differ diff --git a/gallery/images/preview/orzhov_signet.png b/gallery/images/preview/orzhov_signet.png deleted file mode 100644 index d31a465c..00000000 Binary files a/gallery/images/preview/orzhov_signet.png and /dev/null differ diff --git a/gallery/images/preview/overgrown_tomb (2).png b/gallery/images/preview/overgrown_tomb (2).png deleted file mode 100644 index 5760e2bf..00000000 Binary files a/gallery/images/preview/overgrown_tomb (2).png and /dev/null differ diff --git a/gallery/images/preview/overgrown_tomb.png b/gallery/images/preview/overgrown_tomb.png deleted file mode 100644 index 6acdc506..00000000 Binary files a/gallery/images/preview/overgrown_tomb.png and /dev/null differ diff --git a/gallery/images/preview/panharmonicon.png b/gallery/images/preview/panharmonicon.png deleted file mode 100644 index d3664669..00000000 Binary files a/gallery/images/preview/panharmonicon.png and /dev/null differ diff --git a/gallery/images/preview/phyrexian_altar (1).png b/gallery/images/preview/phyrexian_altar (1).png deleted file mode 100644 index ca8e6c44..00000000 Binary files a/gallery/images/preview/phyrexian_altar (1).png and /dev/null differ diff --git a/gallery/images/preview/phyrexian_altar.png b/gallery/images/preview/phyrexian_altar.png deleted file mode 100644 index 2e431a8d..00000000 Binary files a/gallery/images/preview/phyrexian_altar.png and /dev/null differ diff --git a/gallery/images/preview/phyrexian_metamorph.png b/gallery/images/preview/phyrexian_metamorph.png deleted file mode 100644 index 567a7d2a..00000000 Binary files a/gallery/images/preview/phyrexian_metamorph.png and /dev/null differ diff --git a/gallery/images/preview/polluted_delta.png b/gallery/images/preview/polluted_delta.png deleted file mode 100644 index 6aae1cff..00000000 Binary files a/gallery/images/preview/polluted_delta.png and /dev/null differ diff --git a/gallery/images/preview/predator,_flagship (reaver cutter).png b/gallery/images/preview/predator,_flagship (reaver cutter).png deleted file mode 100644 index b6b90e33..00000000 Binary files a/gallery/images/preview/predator,_flagship (reaver cutter).png and /dev/null differ diff --git a/gallery/images/preview/propaganda.png b/gallery/images/preview/propaganda.png deleted file mode 100644 index ff67ef5d..00000000 Binary files a/gallery/images/preview/propaganda.png and /dev/null differ diff --git a/gallery/images/preview/rakdos_signet.png b/gallery/images/preview/rakdos_signet.png deleted file mode 100644 index f02869ed..00000000 Binary files a/gallery/images/preview/rakdos_signet.png and /dev/null differ diff --git a/gallery/images/preview/ramos, dragon engine (mechagodzilla,_kaiju_engine).png b/gallery/images/preview/ramos, dragon engine (mechagodzilla,_kaiju_engine).png deleted file mode 100644 index cf5016a6..00000000 Binary files a/gallery/images/preview/ramos, dragon engine (mechagodzilla,_kaiju_engine).png and /dev/null differ diff --git a/gallery/images/preview/ramos, dragon engine (super_mechagodzilla,_kaiju_engine).png b/gallery/images/preview/ramos, dragon engine (super_mechagodzilla,_kaiju_engine).png deleted file mode 100644 index 3093ace4..00000000 Binary files a/gallery/images/preview/ramos, dragon engine (super_mechagodzilla,_kaiju_engine).png and /dev/null differ diff --git a/gallery/images/preview/reflecting_pool.png b/gallery/images/preview/reflecting_pool.png deleted file mode 100644 index 1eac272e..00000000 Binary files a/gallery/images/preview/reflecting_pool.png and /dev/null differ diff --git a/gallery/images/preview/reliquary_tower (1).png b/gallery/images/preview/reliquary_tower (1).png deleted file mode 100644 index 615f47a9..00000000 Binary files a/gallery/images/preview/reliquary_tower (1).png and /dev/null differ diff --git a/gallery/images/preview/reliquary_tower.png b/gallery/images/preview/reliquary_tower.png deleted file mode 100644 index 57490641..00000000 Binary files a/gallery/images/preview/reliquary_tower.png and /dev/null differ diff --git a/gallery/images/preview/ren and seri, inseperable (catdog,_inseperable).png b/gallery/images/preview/ren and seri, inseperable (catdog,_inseperable).png deleted file mode 100644 index 9ed3e518..00000000 Binary files a/gallery/images/preview/ren and seri, inseperable (catdog,_inseperable).png and /dev/null differ diff --git a/gallery/images/preview/return_of_the_wildspeaker.png b/gallery/images/preview/return_of_the_wildspeaker.png deleted file mode 100644 index 9e88ef27..00000000 Binary files a/gallery/images/preview/return_of_the_wildspeaker.png and /dev/null differ diff --git a/gallery/images/preview/return_to_dust.png b/gallery/images/preview/return_to_dust.png deleted file mode 100644 index b9cb8369..00000000 Binary files a/gallery/images/preview/return_to_dust.png and /dev/null differ diff --git a/gallery/images/preview/revel_in_riches.png b/gallery/images/preview/revel_in_riches.png deleted file mode 100644 index f12949bf..00000000 Binary files a/gallery/images/preview/revel_in_riches.png and /dev/null differ diff --git a/gallery/images/preview/rhystic_study (2).png b/gallery/images/preview/rhystic_study (2).png deleted file mode 100644 index 75762a88..00000000 Binary files a/gallery/images/preview/rhystic_study (2).png and /dev/null differ diff --git a/gallery/images/preview/rhystic_study.png b/gallery/images/preview/rhystic_study.png deleted file mode 100644 index bf1125ad..00000000 Binary files a/gallery/images/preview/rhystic_study.png and /dev/null differ diff --git a/gallery/images/preview/rick, steadfast leader (odric, steadfast leader) (1).png b/gallery/images/preview/rick, steadfast leader (odric, steadfast leader) (1).png deleted file mode 100644 index 185f21fb..00000000 Binary files a/gallery/images/preview/rick, steadfast leader (odric, steadfast leader) (1).png and /dev/null differ diff --git a/gallery/images/preview/rick, steadfast leader (odric, steadfast leader).png b/gallery/images/preview/rick, steadfast leader (odric, steadfast leader).png deleted file mode 100644 index f50c04d6..00000000 Binary files a/gallery/images/preview/rick, steadfast leader (odric, steadfast leader).png and /dev/null differ diff --git a/gallery/images/preview/rick, steadfast leader (thalia, steadfast leader).png b/gallery/images/preview/rick, steadfast leader (thalia, steadfast leader).png deleted file mode 100644 index 81284e2e..00000000 Binary files a/gallery/images/preview/rick, steadfast leader (thalia, steadfast leader).png and /dev/null differ diff --git a/gallery/images/preview/rogue's passage (the vent).png b/gallery/images/preview/rogue's passage (the vent).png deleted file mode 100644 index fc482b34..00000000 Binary files a/gallery/images/preview/rogue's passage (the vent).png and /dev/null differ diff --git a/gallery/images/preview/rogue's_passage.png b/gallery/images/preview/rogue's_passage.png deleted file mode 100644 index c00883fc..00000000 Binary files a/gallery/images/preview/rogue's_passage.png and /dev/null differ diff --git a/gallery/images/preview/ruby_medallion.png b/gallery/images/preview/ruby_medallion.png deleted file mode 100644 index 751b12c5..00000000 Binary files a/gallery/images/preview/ruby_medallion.png and /dev/null differ diff --git a/gallery/images/preview/rune-scarred_demon.png b/gallery/images/preview/rune-scarred_demon.png deleted file mode 100644 index df7c40fc..00000000 Binary files a/gallery/images/preview/rune-scarred_demon.png and /dev/null differ diff --git a/gallery/images/preview/sacred_foundry (2).png b/gallery/images/preview/sacred_foundry (2).png deleted file mode 100644 index be8d0652..00000000 Binary files a/gallery/images/preview/sacred_foundry (2).png and /dev/null differ diff --git a/gallery/images/preview/sacred_foundry.png b/gallery/images/preview/sacred_foundry.png deleted file mode 100644 index 4b974e76..00000000 Binary files a/gallery/images/preview/sacred_foundry.png and /dev/null differ diff --git a/gallery/images/preview/sakura_tribe_elder (baby yoda, the innocent).png b/gallery/images/preview/sakura_tribe_elder (baby yoda, the innocent).png deleted file mode 100644 index 315145cd..00000000 Binary files a/gallery/images/preview/sakura_tribe_elder (baby yoda, the innocent).png and /dev/null differ diff --git a/gallery/images/preview/sea_gate,_reborn.png b/gallery/images/preview/sea_gate,_reborn.png deleted file mode 100644 index 84e87bb5..00000000 Binary files a/gallery/images/preview/sea_gate,_reborn.png and /dev/null differ diff --git a/gallery/images/preview/sea_gate_restoration.png b/gallery/images/preview/sea_gate_restoration.png deleted file mode 100644 index 643e275f..00000000 Binary files a/gallery/images/preview/sea_gate_restoration.png and /dev/null differ diff --git a/gallery/images/preview/seedborn_muse.png b/gallery/images/preview/seedborn_muse.png deleted file mode 100644 index 08b38109..00000000 Binary files a/gallery/images/preview/seedborn_muse.png and /dev/null differ diff --git a/gallery/images/preview/sensei's_divining_top.png b/gallery/images/preview/sensei's_divining_top.png deleted file mode 100644 index 2af2804b..00000000 Binary files a/gallery/images/preview/sensei's_divining_top.png and /dev/null differ diff --git a/gallery/images/preview/show_and_tell.png b/gallery/images/preview/show_and_tell.png deleted file mode 100644 index 72cbd8da..00000000 Binary files a/gallery/images/preview/show_and_tell.png and /dev/null differ diff --git a/gallery/images/preview/simic_signet.png b/gallery/images/preview/simic_signet.png deleted file mode 100644 index d5d123e6..00000000 Binary files a/gallery/images/preview/simic_signet.png and /dev/null differ diff --git a/gallery/images/preview/skullclamp.png b/gallery/images/preview/skullclamp.png deleted file mode 100644 index 8e0e78c8..00000000 Binary files a/gallery/images/preview/skullclamp.png and /dev/null differ diff --git a/gallery/images/preview/smothering_tithe.png b/gallery/images/preview/smothering_tithe.png deleted file mode 100644 index 6805cb1b..00000000 Binary files a/gallery/images/preview/smothering_tithe.png and /dev/null differ diff --git a/gallery/images/preview/sol_ring (2).png b/gallery/images/preview/sol_ring (2).png deleted file mode 100644 index 0f309903..00000000 Binary files a/gallery/images/preview/sol_ring (2).png and /dev/null differ diff --git a/gallery/images/preview/sol_ring.png b/gallery/images/preview/sol_ring.png deleted file mode 100644 index 885c6eaa..00000000 Binary files a/gallery/images/preview/sol_ring.png and /dev/null differ diff --git a/gallery/images/preview/solemn simulacrum (c-3po).png b/gallery/images/preview/solemn simulacrum (c-3po).png deleted file mode 100644 index 1b23efb6..00000000 Binary files a/gallery/images/preview/solemn simulacrum (c-3po).png and /dev/null differ diff --git a/gallery/images/preview/solemn_simulacrum (1).png b/gallery/images/preview/solemn_simulacrum (1).png deleted file mode 100644 index d2a80aef..00000000 Binary files a/gallery/images/preview/solemn_simulacrum (1).png and /dev/null differ diff --git a/gallery/images/preview/solemn_simulacrum (2).png b/gallery/images/preview/solemn_simulacrum (2).png deleted file mode 100644 index 084698cd..00000000 Binary files a/gallery/images/preview/solemn_simulacrum (2).png and /dev/null differ diff --git a/gallery/images/preview/solemn_simulacrum.png b/gallery/images/preview/solemn_simulacrum.png deleted file mode 100644 index ae0edb8e..00000000 Binary files a/gallery/images/preview/solemn_simulacrum.png and /dev/null differ diff --git a/gallery/images/preview/songs-of-the-damned.png b/gallery/images/preview/songs-of-the-damned.png deleted file mode 100644 index 84002aec..00000000 Binary files a/gallery/images/preview/songs-of-the-damned.png and /dev/null differ diff --git a/gallery/images/preview/spark_double.png b/gallery/images/preview/spark_double.png deleted file mode 100644 index bfd0c61e..00000000 Binary files a/gallery/images/preview/spark_double.png and /dev/null differ diff --git a/gallery/images/preview/squee's_embrace (smeagol's final embrace).png b/gallery/images/preview/squee's_embrace (smeagol's final embrace).png deleted file mode 100644 index 6c804b99..00000000 Binary files a/gallery/images/preview/squee's_embrace (smeagol's final embrace).png and /dev/null differ diff --git a/gallery/images/preview/squee's_revenge (gollum's betrayal).png b/gallery/images/preview/squee's_revenge (gollum's betrayal).png deleted file mode 100644 index a89516b3..00000000 Binary files a/gallery/images/preview/squee's_revenge (gollum's betrayal).png and /dev/null differ diff --git a/gallery/images/preview/squee's_toy (gollum's precious).png b/gallery/images/preview/squee's_toy (gollum's precious).png deleted file mode 100644 index e870f404..00000000 Binary files a/gallery/images/preview/squee's_toy (gollum's precious).png and /dev/null differ diff --git a/gallery/images/preview/squee,_goblin_nabob (smeagol, unlikely ally).png b/gallery/images/preview/squee,_goblin_nabob (smeagol, unlikely ally).png deleted file mode 100644 index 4d55cce9..00000000 Binary files a/gallery/images/preview/squee,_goblin_nabob (smeagol, unlikely ally).png and /dev/null differ diff --git a/gallery/images/preview/sram, senior edificer (sokka,_veteran_combatant).png b/gallery/images/preview/sram, senior edificer (sokka,_veteran_combatant).png deleted file mode 100644 index a2da4ea7..00000000 Binary files a/gallery/images/preview/sram, senior edificer (sokka,_veteran_combatant).png and /dev/null differ diff --git a/gallery/images/preview/steam_vents (2).png b/gallery/images/preview/steam_vents (2).png deleted file mode 100644 index b301f361..00000000 Binary files a/gallery/images/preview/steam_vents (2).png and /dev/null differ diff --git a/gallery/images/preview/steam_vents.png b/gallery/images/preview/steam_vents.png deleted file mode 100644 index 43cbe17f..00000000 Binary files a/gallery/images/preview/steam_vents.png and /dev/null differ diff --git a/gallery/images/preview/steelshaper's_gift.png b/gallery/images/preview/steelshaper's_gift.png deleted file mode 100644 index e55fe5af..00000000 Binary files a/gallery/images/preview/steelshaper's_gift.png and /dev/null differ diff --git a/gallery/images/preview/stomping_ground (2).png b/gallery/images/preview/stomping_ground (2).png deleted file mode 100644 index 4355d998..00000000 Binary files a/gallery/images/preview/stomping_ground (2).png and /dev/null differ diff --git a/gallery/images/preview/stomping_ground.png b/gallery/images/preview/stomping_ground.png deleted file mode 100644 index ae6f8497..00000000 Binary files a/gallery/images/preview/stomping_ground.png and /dev/null differ diff --git a/gallery/images/preview/stoneforge mystic (piandao,_master_swordsman).png b/gallery/images/preview/stoneforge mystic (piandao,_master_swordsman).png deleted file mode 100644 index 3305cd30..00000000 Binary files a/gallery/images/preview/stoneforge mystic (piandao,_master_swordsman).png and /dev/null differ diff --git a/gallery/images/preview/swamp.png b/gallery/images/preview/swamp.png deleted file mode 100644 index 1ad6bb70..00000000 Binary files a/gallery/images/preview/swamp.png and /dev/null differ diff --git a/gallery/images/preview/sword_of_feast_and_famine (2).png b/gallery/images/preview/sword_of_feast_and_famine (2).png deleted file mode 100644 index 49dadd3e..00000000 Binary files a/gallery/images/preview/sword_of_feast_and_famine (2).png and /dev/null differ diff --git a/gallery/images/preview/sword_of_feast_and_famine.png b/gallery/images/preview/sword_of_feast_and_famine.png deleted file mode 100644 index 55c144cf..00000000 Binary files a/gallery/images/preview/sword_of_feast_and_famine.png and /dev/null differ diff --git a/gallery/images/preview/sword_of_fire_and_ice.png b/gallery/images/preview/sword_of_fire_and_ice.png deleted file mode 100644 index c2ea4105..00000000 Binary files a/gallery/images/preview/sword_of_fire_and_ice.png and /dev/null differ diff --git a/gallery/images/preview/sword_of_light_and_shadow.png b/gallery/images/preview/sword_of_light_and_shadow.png deleted file mode 100644 index c74d33b8..00000000 Binary files a/gallery/images/preview/sword_of_light_and_shadow.png and /dev/null differ diff --git a/gallery/images/preview/sword_of_sinew_and_steel.png b/gallery/images/preview/sword_of_sinew_and_steel.png deleted file mode 100644 index 7ff5f489..00000000 Binary files a/gallery/images/preview/sword_of_sinew_and_steel.png and /dev/null differ diff --git a/gallery/images/preview/sword_of_truth_and_justice.png b/gallery/images/preview/sword_of_truth_and_justice.png deleted file mode 100644 index 2c151518..00000000 Binary files a/gallery/images/preview/sword_of_truth_and_justice.png and /dev/null differ diff --git a/gallery/images/preview/talisman_of_conviction.png b/gallery/images/preview/talisman_of_conviction.png deleted file mode 100644 index 1e883e24..00000000 Binary files a/gallery/images/preview/talisman_of_conviction.png and /dev/null differ diff --git a/gallery/images/preview/talisman_of_creativity.png b/gallery/images/preview/talisman_of_creativity.png deleted file mode 100644 index 31b9a932..00000000 Binary files a/gallery/images/preview/talisman_of_creativity.png and /dev/null differ diff --git a/gallery/images/preview/talisman_of_curiosity.png b/gallery/images/preview/talisman_of_curiosity.png deleted file mode 100644 index 5c96c118..00000000 Binary files a/gallery/images/preview/talisman_of_curiosity.png and /dev/null differ diff --git a/gallery/images/preview/talisman_of_hierarchy.png b/gallery/images/preview/talisman_of_hierarchy.png deleted file mode 100644 index d93d23cd..00000000 Binary files a/gallery/images/preview/talisman_of_hierarchy.png and /dev/null differ diff --git a/gallery/images/preview/talisman_of_resilience.png b/gallery/images/preview/talisman_of_resilience.png deleted file mode 100644 index 9bbe259f..00000000 Binary files a/gallery/images/preview/talisman_of_resilience.png and /dev/null differ diff --git a/gallery/images/preview/teferi's protection (emergency meeting).png b/gallery/images/preview/teferi's protection (emergency meeting).png deleted file mode 100644 index f74bfa76..00000000 Binary files a/gallery/images/preview/teferi's protection (emergency meeting).png and /dev/null differ diff --git a/gallery/images/preview/temple_garden (2).png b/gallery/images/preview/temple_garden (2).png deleted file mode 100644 index 139f39da..00000000 Binary files a/gallery/images/preview/temple_garden (2).png and /dev/null differ diff --git a/gallery/images/preview/temple_garden.png b/gallery/images/preview/temple_garden.png deleted file mode 100644 index 7b2f7d7a..00000000 Binary files a/gallery/images/preview/temple_garden.png and /dev/null differ diff --git a/gallery/images/preview/thassa's_oracle.png b/gallery/images/preview/thassa's_oracle.png deleted file mode 100644 index e26e7d6e..00000000 Binary files a/gallery/images/preview/thassa's_oracle.png and /dev/null differ diff --git a/gallery/images/preview/the-gitrog-monster.png b/gallery/images/preview/the-gitrog-monster.png deleted file mode 100644 index 9cad2e7f..00000000 Binary files a/gallery/images/preview/the-gitrog-monster.png and /dev/null differ diff --git a/gallery/images/preview/the_ozolith.png b/gallery/images/preview/the_ozolith.png deleted file mode 100644 index a83c9cde..00000000 Binary files a/gallery/images/preview/the_ozolith.png and /dev/null differ diff --git a/gallery/images/preview/the_storm_crow.png b/gallery/images/preview/the_storm_crow.png deleted file mode 100644 index b770c8a3..00000000 Binary files a/gallery/images/preview/the_storm_crow.png and /dev/null differ diff --git a/gallery/images/preview/thran_dynamo.png b/gallery/images/preview/thran_dynamo.png deleted file mode 100644 index 3da9b8b1..00000000 Binary files a/gallery/images/preview/thran_dynamo.png and /dev/null differ diff --git a/gallery/images/preview/thriving_bluff.png b/gallery/images/preview/thriving_bluff.png deleted file mode 100644 index 9e13144b..00000000 Binary files a/gallery/images/preview/thriving_bluff.png and /dev/null differ diff --git a/gallery/images/preview/thriving_grove.png b/gallery/images/preview/thriving_grove.png deleted file mode 100644 index acaee588..00000000 Binary files a/gallery/images/preview/thriving_grove.png and /dev/null differ diff --git a/gallery/images/preview/thriving_heath.png b/gallery/images/preview/thriving_heath.png deleted file mode 100644 index 68a881fa..00000000 Binary files a/gallery/images/preview/thriving_heath.png and /dev/null differ diff --git a/gallery/images/preview/thriving_moor.png b/gallery/images/preview/thriving_moor.png deleted file mode 100644 index 05d621a2..00000000 Binary files a/gallery/images/preview/thriving_moor.png and /dev/null differ diff --git a/gallery/images/preview/thryx, the sudden storm (aquaman).png b/gallery/images/preview/thryx, the sudden storm (aquaman).png deleted file mode 100644 index 6ea5ad3b..00000000 Binary files a/gallery/images/preview/thryx, the sudden storm (aquaman).png and /dev/null differ diff --git a/gallery/images/preview/tiana_ship's_caretaker (kaylee frye).png b/gallery/images/preview/tiana_ship's_caretaker (kaylee frye).png deleted file mode 100644 index bf0e0580..00000000 Binary files a/gallery/images/preview/tiana_ship's_caretaker (kaylee frye).png and /dev/null differ diff --git a/gallery/images/preview/true_conviction.png b/gallery/images/preview/true_conviction.png deleted file mode 100644 index 642fc36d..00000000 Binary files a/gallery/images/preview/true_conviction.png and /dev/null differ diff --git a/gallery/images/preview/ulamog,_the_ceaseless_hunger.png b/gallery/images/preview/ulamog,_the_ceaseless_hunger.png deleted file mode 100644 index 779de2c3..00000000 Binary files a/gallery/images/preview/ulamog,_the_ceaseless_hunger.png and /dev/null differ diff --git a/gallery/images/preview/ulamog,_the_infinite_gyre.png b/gallery/images/preview/ulamog,_the_infinite_gyre.png deleted file mode 100644 index 316d5ed0..00000000 Binary files a/gallery/images/preview/ulamog,_the_infinite_gyre.png and /dev/null differ diff --git a/gallery/images/preview/valakut,_the_molten_pinnacle.png b/gallery/images/preview/valakut,_the_molten_pinnacle.png deleted file mode 100644 index 748103a6..00000000 Binary files a/gallery/images/preview/valakut,_the_molten_pinnacle.png and /dev/null differ diff --git a/gallery/images/preview/vanquisher's_banner.png b/gallery/images/preview/vanquisher's_banner.png deleted file mode 100644 index 3d050f82..00000000 Binary files a/gallery/images/preview/vanquisher's_banner.png and /dev/null differ diff --git a/gallery/images/preview/vilis,_broker_of_blood.png b/gallery/images/preview/vilis,_broker_of_blood.png deleted file mode 100644 index 9bb2ba49..00000000 Binary files a/gallery/images/preview/vilis,_broker_of_blood.png and /dev/null differ diff --git a/gallery/images/preview/vizier_of_the_menagerie.png b/gallery/images/preview/vizier_of_the_menagerie.png deleted file mode 100644 index fd6c841b..00000000 Binary files a/gallery/images/preview/vizier_of_the_menagerie.png and /dev/null differ diff --git a/gallery/images/preview/watery_grave (2).png b/gallery/images/preview/watery_grave (2).png deleted file mode 100644 index 160507bd..00000000 Binary files a/gallery/images/preview/watery_grave (2).png and /dev/null differ diff --git a/gallery/images/preview/watery_grave.png b/gallery/images/preview/watery_grave.png deleted file mode 100644 index 801cb6ed..00000000 Binary files a/gallery/images/preview/watery_grave.png and /dev/null differ diff --git a/gallery/images/preview/weatherlight (serenity).png b/gallery/images/preview/weatherlight (serenity).png deleted file mode 100644 index 2b2a9f9c..00000000 Binary files a/gallery/images/preview/weatherlight (serenity).png and /dev/null differ diff --git a/gallery/images/preview/whispersilk_cloak.png b/gallery/images/preview/whispersilk_cloak.png deleted file mode 100644 index 72c2331b..00000000 Binary files a/gallery/images/preview/whispersilk_cloak.png and /dev/null differ diff --git a/gallery/images/preview/windswept_heath (2).png b/gallery/images/preview/windswept_heath (2).png deleted file mode 100644 index 8c7e08e9..00000000 Binary files a/gallery/images/preview/windswept_heath (2).png and /dev/null differ diff --git a/gallery/images/preview/windswept_heath.png b/gallery/images/preview/windswept_heath.png deleted file mode 100644 index 722c831a..00000000 Binary files a/gallery/images/preview/windswept_heath.png and /dev/null differ diff --git a/gallery/images/preview/wooded_foothills (1).png b/gallery/images/preview/wooded_foothills (1).png deleted file mode 100644 index 13d9afd9..00000000 Binary files a/gallery/images/preview/wooded_foothills (1).png and /dev/null differ diff --git a/gallery/images/preview/wooded_foothills (2).png b/gallery/images/preview/wooded_foothills (2).png deleted file mode 100644 index a53b4e7e..00000000 Binary files a/gallery/images/preview/wooded_foothills (2).png and /dev/null differ diff --git a/gallery/images/preview/wooded_foothills.png b/gallery/images/preview/wooded_foothills.png deleted file mode 100644 index 1a07101c..00000000 Binary files a/gallery/images/preview/wooded_foothills.png and /dev/null differ diff --git a/gallery/images/preview/worldly_tutor.png b/gallery/images/preview/worldly_tutor.png deleted file mode 100644 index fd081e38..00000000 Binary files a/gallery/images/preview/worldly_tutor.png and /dev/null differ diff --git a/gallery/images/preview/yarok,_the_desecrated.png b/gallery/images/preview/yarok,_the_desecrated.png deleted file mode 100644 index f28ebc3e..00000000 Binary files a/gallery/images/preview/yarok,_the_desecrated.png and /dev/null differ diff --git a/gallery/images/preview/zacama,_primal_calamity.png b/gallery/images/preview/zacama,_primal_calamity.png deleted file mode 100644 index 5d6a26bd..00000000 Binary files a/gallery/images/preview/zacama,_primal_calamity.png and /dev/null differ diff --git a/gallery/images/preview/zirda, the dawnwaker (flareon).png b/gallery/images/preview/zirda, the dawnwaker (flareon).png deleted file mode 100644 index 17bf9f13..00000000 Binary files a/gallery/images/preview/zirda, the dawnwaker (flareon).png and /dev/null differ diff --git a/gallery/images/preview/zirda,_the_dawnwaker.png b/gallery/images/preview/zirda,_the_dawnwaker.png deleted file mode 100644 index f5ef6995..00000000 Binary files a/gallery/images/preview/zirda,_the_dawnwaker.png and /dev/null differ diff --git a/gallery/images/preview/zurzoth,_chaos_rider.png b/gallery/images/preview/zurzoth,_chaos_rider.png deleted file mode 100644 index 8fbe3bb4..00000000 Binary files a/gallery/images/preview/zurzoth,_chaos_rider.png and /dev/null differ diff --git a/gallery/index.html b/gallery/index.html deleted file mode 100644 index 143db564..00000000 --- a/gallery/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - CC - Gallery -
Kyle's Proxy Gallery
-
- -
-
- - -
- - -
- diff --git a/globalHTML/footer.html b/globalHTML/footer.html new file mode 100644 index 00000000..5e448673 --- /dev/null +++ b/globalHTML/footer.html @@ -0,0 +1,16 @@ +
+

Card Conjurer

+
Twitter
+
Patreon
+
+
+

Navigation

+
Home
+
Creator
+
Ask Urza
+
+
+

Legal

+
Terms and Conditions
+

We are neither affiliated with, sponsored by, nor endorsed by Wizards of the Coast. Fonts, Mana symbols, card images, and other related images are trademarks and copyrights of Wizards of the Coast, LLC, a subsidiary of Hasbro, Inc.
We are neither affiliated with, sponsored by, nor endorsed by Scryfall LLC.
All user-uploaded material is property of the original artist, and it is the user's responsibility to ensure that these materials are properly credited.
All other content Copyright © 2020 Card Conjurer.
For more information on the Disclaimer or Terms and Conditions, please click the link above.

+
\ No newline at end of file diff --git a/globalHTML/header.html b/globalHTML/header.html new file mode 100644 index 00000000..77599fb5 --- /dev/null +++ b/globalHTML/header.html @@ -0,0 +1 @@ +

CARD CONJURER

\ No newline at end of file diff --git a/globalHTML/menu.html b/globalHTML/menu.html new file mode 100644 index 00000000..9d198755 --- /dev/null +++ b/globalHTML/menu.html @@ -0,0 +1,20 @@ + + + + + +
+ \ No newline at end of file diff --git a/googlef9aa262dda68ac25.html b/googlef9aa262dda68ac25.html deleted file mode 100644 index 44488294..00000000 --- a/googlef9aa262dda68ac25.html +++ /dev/null @@ -1 +0,0 @@ -google-site-verification: googlef9aa262dda68ac25.html \ No newline at end of file diff --git a/index.html b/index.html index d4c813e9..10e7782e 100644 --- a/index.html +++ b/index.html @@ -1,85 +1,29 @@ - + - - - - - - - - - + + + + + + + + + - + +
+
+
+ Card Conjurer -
Card Conjurer
-
-
-
Welcome to Card Conjurer
-
-
loading sample...
-
loading sample...
-
loading sample...
-
loading sample...
-
loading sample...
-
-
+
+

Welcome to Card Conjurer

-
-
- -
-
- Choose From A Variety Of Card Frames -
-
- Card Conjurer offers Expeditions, Inventions, Showcase Frames, and so much more. Take a look! -
-
-
+
+

The home page is currently under construction...

-
-
-
-
- Customize To Your Heart's Content -
-
- With Card Conjurer's level of customization, you'll have endless options when designing your dream cards. Try it out! -
-
- -
-
-
-
- -
-
- Bling Out Existing Favorites -
-
- Easily import vital information from existing cards, then redesign them. Get started! -
-
-
-
- - - - + +
-
- - -
- + \ No newline at end of file diff --git a/js/creator.js b/js/creator.js new file mode 100644 index 00000000..15050fe4 --- /dev/null +++ b/js/creator.js @@ -0,0 +1,1170 @@ +//card object +var card = {width:1500, height:2100, marginX:0, marginY:0, frames:[], artSource:'/img/blank.png', artX:0, artY:0, artZoom:1, setSymbolSource:'/img/blank.png', setSymbolX:0, setSymbolY:0, setSymbolZoom:1, watermarkSource:'/img/blank.png', watermarkX:0, watermarkY:0, watermarkZoom:1, watermarkLeft:'none', watermarkRight:'none', watermarkOpacity:0.4, version:'', manaSymbols:[]}; +//art +art = new Image(); +art.src = '/img/blank.png'; +art.crossOrigin = 'anonymous'; +art.onerror = function() {this.src = '/img/blank.png';} +art.onload = artEdited; +//set symbol +setSymbol = new Image() +setSymbol.src = '/img/blank.png'; +setSymbol.crossOrigin = 'anonymous'; +setSymbol.onerror = function() {this.src = '/img/blank.png';} +setSymbol.onload = setSymbolEdited; +//watermark +watermark = new Image() +watermark.src = '/img/blank.png'; +watermark.crossOrigin = 'anonymous'; +watermark.onerror = function() {this.src = '/img/blank.png';} +watermark.onload = watermarkEdited; +//preview canvas +var previewCanvas = document.querySelector('#previewCanvas'); +var previewContext = previewCanvas.getContext('2d'); +var canvasList = []; +//frame/mask picker stuff +var availableFrames = []; +var selectedFrameIndex = 0; +var selectedMaskIndex = 0; +var selectedTextIndex = 0; +//core images/masks +const black = new Image(); black.src = '/img/black.png'; +const blank = new Image(); blank.src = '/img/blank.png'; +const right = new Image(); right.src = '/img/frames/maskRightHalf.png'; +const middle = new Image(); middle.src = '/img/frames/maskMiddleThird.png'; +const corner = new Image(); corner.src = '/img/frames/cornerCutout.png'; +//for imports +var scryfallArt; +var scryfallCard; +//for text +var savedTextXPosition = 0; +//for misc +var date = new Date(); +//to avoid rerunning special scripts (planeswalker, saga, etc...) +var loadedVersions = []; +//Card Object managament +async function resetCardIrregularities({canvas = [1500, 2100, 0, 0], resetOthers = true} = {}) { + //rotation + if (card.landscape) { + previewContext.scale(5/7, 7/5); + previewContext.rotate(Math.PI / 2); + previewContext.translate(0, -card.width / 2); + card.landscape = false; + } + //card size + card.width = canvas[0]; + card.height = canvas[1]; + card.marginX = canvas[2]; + card.marginY = canvas[3]; + //canvases + canvasList.forEach(name => { + if (window[name + 'Canvas'].width != card.width * (1 + card.marginX) || window[name + 'Canvas'].height != card.height * (1 + card.marginY)) { + sizeCanvas(name); + } + }); + if (resetOthers) { + //bottom info + await loadBottomInfo({ + midLeft: {text:'{elemidinfo-set}*{elemidinfo-language} {savex}{fontbelerenbsc}{fontsize' + scaleHeight(0.001) + '}{upinline' + scaleHeight(0.0005) + '}\uFFEE{elemidinfo-artist}', x:0.0647, y:0.9548, width:0.8707, height:0.0171, oneLine:true, font:'gothammedium', size:0.0171, color:'white', outlineWidth:0.003}, + topLeft: {text:'{elemidinfo-number}{loadx}{elemidinfo-rarity}', x:0.0647, y:0.9377, width:0.8707, height:0.0171, oneLine:true, font:'gothammedium', size:0.0171, color:'white', outlineWidth:0.003}, + bottomLeft: {text:'NOT FOR SALE', x:0.0647, y:0.9719, width:0.8707, height:0.0143, oneLine:true, font:'gothammedium', size:0.0143, color:'white', outlineWidth:0.003}, + wizards: {text:'{ptshift0,0.0172}\u2122 & \u00a9 ' + date.getFullYear() + ' Wizards of the Coast', x:0.0647, y:0.9377, width:0.8707, height:0.0167, oneLine:true, font:'mplantin', size:0.0162, color:'white', align:'right', outlineWidth:0.003}, + bottomRight: {text:'{ptshift0,0.0172}CardConjurer.com', x:0.0647, y:0.9548, width:0.8707, height:0.0143, oneLine:true, font:'mplantin', size:0.0143, color:'white', align:'right', outlineWidth:0.003} + }); + //onload + card.onload = null; + } +} +//Canvas management +function sizeCanvas(name, width = Math.round(card.width * (1 + 2 * card.marginX)), height = Math.round(card.height * (1 + 2 * card.marginY))) { + if (!window[name + 'Canvas']) { + window[name + 'Canvas'] = document.createElement('canvas'); + window[name + 'Context'] = window[name + 'Canvas'].getContext('2d'); + canvasList[canvasList.length] = name; + } + window[name + 'Canvas'].width = width; + window[name + 'Canvas'].height = height; + // var label = document.createElement('p'); + // label.innerHTML = name; + // window[name + 'Canvas'].style = 'width: 20rem; height: 28rem; border: 1px solid red;'; + // document.body.appendChild(window[name + 'Canvas']); + // document.body.appendChild(label); +} +//create main canvases +sizeCanvas('card'); +sizeCanvas('frame'); +sizeCanvas('frameMasking'); +sizeCanvas('text'); +sizeCanvas('paragraph'); +sizeCanvas('line'); +sizeCanvas('watermark'); +sizeCanvas('bottomInfo'); +//Scaling +function scaleX(input) { + return Math.round((input + card.marginX) * card.width); +} +function scaleWidth(input) { + return Math.round(input * card.width); +} +function scaleY(input) { + return Math.round((input + card.marginY) * card.height); +} +function scaleHeight(input) { + return Math.round(input * card.height); +} +//Other nifty functions +function getElementIndex(element) { + return Array.prototype.indexOf.call(element.parentElement.children, element); +} +//UI +function toggleCreatorTabs(event, target) { + Array.from(document.querySelector('#creator-menu-sections').children).forEach(element => element.classList.add('hidden')); + document.querySelector('#creator-menu-' + target).classList.remove('hidden'); + selectSelectable(event); +} +function selectSelectable(event) { + var eventTarget = event.target.closest('.selectable'); + Array.from(eventTarget.parentElement.children).forEach(element => element.classList.remove('selected')); + eventTarget.classList.add('selected'); +} +function dragStart(event) { + event.target.closest('.draggable').classList.add('dragging'); +} +function dragEnd(event) { + Array.from(document.querySelectorAll('.dragging')).forEach(element => element.classList.remove('dragging')); +} +function dragOver(event) { + var eventTarget = event.target.closest('.draggable'); + var movingElement = document.querySelector('.dragging'); + if (document.querySelector('.dragging') && !eventTarget.classList.contains('dragging') && eventTarget.parentElement == movingElement.parentElement) { + var parentElement = eventTarget.parentElement; + var elements = document.createDocumentFragment(); + var movingElementPassed = false; + var movingElementOldIndex = -1; + var movingElementNewIndex = -1; + Array.from(parentElement.children).forEach((element, index) => { + if (element == eventTarget) { + movingElementNewIndex = index; + if(movingElementPassed) { + elements.appendChild(element.cloneNode(true)); + elements.appendChild(movingElement.cloneNode(true)); + } else { + elements.appendChild(movingElement.cloneNode(true)); + elements.appendChild(element.cloneNode(true)); + } + } else if(element != movingElement) { + elements.appendChild(element.cloneNode(true)); + } else { + movingElementOldIndex = index; + movingElementPassed = true; + } + }); + Array.from(elements.children).forEach(element => { + element.ondragstart = dragStart; + element.ondragend = dragEnd; + element.ondragover = dragOver; + element.onclick = frameElementClicked; + element.children[3].onclick = removeFrame; + }) + parentElement.innerHTML = null; + parentElement.appendChild(elements); + if (movingElementNewIndex >= 0) { + var originalMovingElement = card.frames[movingElementOldIndex]; + card.frames.splice(movingElementOldIndex, 1); + card.frames.splice(movingElementNewIndex, 0, originalMovingElement); + drawFrames(); + } + } +} +function toggleCollapse(event) { + event.target.closest('.collapsible').classList.toggle('collapsed'); +} +//Mana Symbols +var manaSymbols = []; +loadManaSymbols(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', 'w', 'u', 'b', 'r', 'g', 'c', 'x', 'y', 'z', 't', 'untap', 'e', 'snow', 'chaos']); +loadManaSymbols(['wu', 'wb', 'ub', 'ur', 'br', 'bg', 'rg', 'rw', 'gw', 'gu', '2w', '2u', '2b', '2r', '2g', 'wp', 'up', 'bp', 'rp', 'gp'], [1.2, 1.2]); +loadManaSymbols(['bar.png', 'whitebar.png']); +loadManaSymbols(['chaos'], [1, 10.2]); +function loadManaSymbols(manaSymbolPaths, size = [1, 1]) { + manaSymbolPaths.forEach(item => { + var manaSymbol = {}; + manaSymbol.name = item.split('.')[0]; + if (manaSymbol.name.includes('/')) { + manaSymbol.name = manaSymbol.name.split('/')[1]; + } + manaSymbol.width = size[0]; + manaSymbol.height = size[1]; + manaSymbol.image = new Image(); + var manaSymbolPath = '/img/manaSymbols/' + item; + if (!manaSymbolPath.includes('.png')) { + manaSymbolPath += '.svg'; + } + manaSymbol.image.src = manaSymbolPath; + manaSymbols.push(manaSymbol); + }); +} +function findManaSymbolIndex(string) { + return manaSymbols.findIndex(element => element.name == string); +} +//FRAME TAB +function drawFrames() { + frameContext.clearRect(0, 0, frameCanvas.width, frameCanvas.height); + var frameToDraw = card.frames.slice().reverse(); + frameToDraw.forEach(item => { + if (item.image) { + frameContext.globalCompositeOperation = item.mode || 'source-over'; + frameContext.globalAlpha = item.opacity / 100 || 1; + if (item.opacity == 0) { + frameContext.globalAlpha = 0; + } + var bounds = item.bounds || {}; + frameX = Math.round(scaleX(bounds.x || 0)); + frameY = Math.round(scaleY(bounds.y || 0)); + frameWidth = Math.round(scaleWidth(bounds.width || 1)); + frameHeight = Math.round(scaleHeight(bounds.height || 1)); + frameMaskingContext.globalCompositeOperation = 'source-over'; + frameMaskingContext.drawImage(black, 0, 0, frameMaskingCanvas.width, frameMaskingCanvas.height); + frameMaskingContext.globalCompositeOperation = 'source-in'; + item.masks.forEach(mask => frameMaskingContext.drawImage(mask.image, scaleX(0), scaleY(0), scaleWidth(1), scaleHeight(1))); + frameMaskingContext.drawImage(item.image, frameX, frameY, frameWidth, frameHeight); + if (item.erase) {frameContext.globalCompositeOperation = 'destination-out';} + frameContext.drawImage(frameMaskingCanvas, 0, 0, frameCanvas.width, frameCanvas.height); + } + }); + drawCard(); +} +function loadFramePacks(framePackOptions = []) { + document.querySelector('#selectFramePack').innerHTML = null; + framePackOptions.forEach(item => { + var framePackOption = document.createElement('option'); + framePackOption.innerHTML = item.name; + if (item.value == 'disabled') { + framePackOption.disabled = true; + } else { + framePackOption.value = item.value; + } + document.querySelector('#selectFramePack').appendChild(framePackOption); + }); + loadScript("/js/frames/pack" + document.querySelector('#selectFramePack').value + ".js"); +} +function loadFramePack(frameOptions = availableFrames) { + document.querySelector('#frame-picker').innerHTML = null; + frameOptions.forEach(item => { + var frameOption = document.createElement('div'); + frameOption.classList = 'frame-option hidden'; + frameOption.onclick = frameOptionClicked; + var frameOptionImage = document.createElement('img'); + frameOption.appendChild(frameOptionImage); + frameOptionImage.onload = function() { + this.parentElement.classList.remove('hidden'); + } + if (!item.noThumb && !item.src.includes('/img/black.png')) { + frameOptionImage.src = item.src.replace('.png', 'Thumb.png'); + } else { + frameOptionImage.src = item.src; + } + document.querySelector('#frame-picker').appendChild(frameOption); + + }) + document.querySelector('#frame-picker').children[0].click(); +} +function frameOptionClicked(event) { + var clickedFrameOption = event.target.closest('.frame-option'); + if (document.querySelector('.frame-option.selected')) { + document.querySelector('.frame-option.selected').classList.remove('selected'); + } + clickedFrameOption.classList.add('selected'); + selectedFrameIndex = getElementIndex(clickedFrameOption); + document.querySelector('#mask-picker').innerHTML = '

No Mask

'; + selectedMaskIndex = 0; + document.querySelector('#selectedPreview').innerHTML = '(Selected: ' + availableFrames[selectedFrameIndex].name + ', No Mask)'; + if (availableFrames[selectedFrameIndex].masks) { + availableFrames[selectedFrameIndex].masks.forEach(item => { + var maskOption = document.createElement('div'); + maskOption.classList = 'mask-option hidden'; + maskOption.onclick = maskOptionClicked; + var maskOptionImage = document.createElement('img'); + maskOption.appendChild(maskOptionImage); + maskOptionImage.onload = function() { + this.parentElement.classList.remove('hidden'); + } + maskOptionImage.src = item.src.replace('.png', 'Thumb.png'); + maskOptionLabel = document.createElement('p'); + maskOptionLabel.innerHTML = item.name; + maskOption.appendChild(maskOptionLabel); + document.querySelector('#mask-picker').appendChild(maskOption); + }); + } +} +function maskOptionClicked(event) { + var clickedMaskOption = event.target.closest('.mask-option'); + document.querySelector('.mask-option.selected').classList.remove('selected'); + clickedMaskOption.classList.add('selected'); + selectedMaskIndex = getElementIndex(clickedMaskOption); + var selectedMaskName = 'No Mask' + if (selectedMaskIndex > 0) {selectedMaskName = availableFrames[selectedFrameIndex].masks[selectedMaskIndex - 1].name;} + document.querySelector('#selectedPreview').innerHTML = '(Selected: ' + availableFrames[selectedFrameIndex].name + ', ' + selectedMaskName + ')'; +} +function addFrame(additionalMasks = [], loadingFrame = false) { + var frameToAdd = JSON.parse(JSON.stringify(availableFrames[selectedFrameIndex])); + var maskThumbnail = true; + if (!loadingFrame) { + if (frameToAdd.masks && selectedMaskIndex > 0) { + frameToAdd.masks = frameToAdd.masks.slice(selectedMaskIndex - 1, selectedMaskIndex); + } else { + frameToAdd.masks = []; + maskThumbnail = false; + } + additionalMasks.forEach(item => frameToAdd.masks.push(item)); + } else { + frameToAdd = loadingFrame; + if (frameToAdd.masks.length == 0 || (frameToAdd.masks[0].src.includes('/img/frames/mask'))) { + maskThumbnail = false; + } + } + frameToAdd.masks.forEach(item => { + item.image = new Image(); + item.image.src = '/img/blank.png'; + item.image.onload = drawFrames; + item.image.src = item.src; + }); + frameToAdd.image = new Image(); + if (frameToAdd.name == 'Uploaded Image') { + frameToAdd.image.crossOrigin = 'anonymous' + } + frameToAdd.image.src = '/img/blank.png'; + frameToAdd.image.onload = drawFrames; + frameToAdd.image.src = frameToAdd.src; + if (!loadingFrame) { + card.frames.unshift(frameToAdd); + } + var frameElement = document.createElement('div'); + frameElement.classList = 'draggable frame-element'; + frameElement.draggable = 'true'; + frameElement.ondragstart = dragStart; + frameElement.ondragend = dragEnd; + frameElement.ondragover = dragOver; + frameElement.onclick = frameElementClicked; + var frameElementImage = document.createElement('img'); + if (frameToAdd.noThumb || frameToAdd.src.includes('/img/black.png')) { + frameElementImage.src = frameToAdd.src; + } else { + frameElementImage.src = frameToAdd.src.replace('.png', 'Thumb.png'); + } + frameElement.appendChild(frameElementImage); + var frameElementMask = document.createElement('img'); + if (maskThumbnail) { + frameElementMask.src = frameToAdd.masks[0].src.replace('.png', 'Thumb.png'); + } else { + frameElementMask.src = '/img/black.png'; + } + frameElement.appendChild(frameElementMask); + var frameElementLabel = document.createElement('h4'); + frameElementLabel.innerHTML = frameToAdd.name; + frameToAdd.masks.forEach(item => frameElementLabel.innerHTML += ', ' + item.name); + frameElement.appendChild(frameElementLabel); + var frameElementClose = document.createElement('h4'); + frameElementClose.innerHTML = 'X'; + frameElementClose.classList = 'frame-element-close'; + frameElementClose.onclick = removeFrame; + frameElement.appendChild(frameElementClose); + document.querySelector('#frame-list').prepend(frameElement); + bottomInfoEdited(); +} +function removeFrame(event) { + card.frames.splice(getElementIndex(event.target.parentElement), 1); + event.target.parentElement.remove(); + drawFrames(); + bottomInfoEdited(); +} +function frameElementClicked(event) { + if (!event.target.classList.contains('frame-element-close')) { + var selectedFrameElement = event.target.closest('.frame-element'); + var selectedFrame = card.frames[Array.from(selectedFrameElement.parentElement.children).indexOf(selectedFrameElement)]; + document.querySelector('#frame-element-editor').classList.add('opened'); + selectedFrame.bounds = selectedFrame.bounds || {}; + document.querySelector('#frame-editor-x').value = scaleWidth(selectedFrame.bounds.x || 0); + document.querySelector('#frame-editor-x').onchange = (event) => {selectedFrame.bounds.x = (event.target.value / card.width); drawFrames();} + document.querySelector('#frame-editor-y').value = scaleHeight(selectedFrame.bounds.y || 0); + document.querySelector('#frame-editor-y').onchange = (event) => {selectedFrame.bounds.y = (event.target.value / card.height); drawFrames();} + document.querySelector('#frame-editor-width').value = scaleWidth(selectedFrame.bounds.width || 1); + document.querySelector('#frame-editor-width').onchange = (event) => {selectedFrame.bounds.width = (event.target.value / card.width); drawFrames();} + document.querySelector('#frame-editor-height').value = scaleHeight(selectedFrame.bounds.height || 1); + document.querySelector('#frame-editor-height').onchange = (event) => {selectedFrame.bounds.height = (event.target.value / card.height); drawFrames();} + document.querySelector('#frame-editor-opacity').value = selectedFrame.opacity || 100; + document.querySelector('#frame-editor-opacity').onchange = (event) => {selectedFrame.opacity = event.target.value; drawFrames();} + document.querySelector('#frame-editor-erase').checked = selectedFrame.erase || false; + document.querySelector('#frame-editor-erase').onchange = (event) => {selectedFrame.erase = event.target.checked; drawFrames();} + } +} +function uploadFrameOption(imageSource) { + var uploadedFrame = {name:'Uploaded Image', src:imageSource, noThumb:true} + availableFrames.push(uploadedFrame); + loadFramePack(); +} +//TEXT TAB +var writingText; +function loadTextOptions(textObject) { + var oldCardText = card.text || {}; + card.text = textObject; + document.querySelector('#text-options').innerHTML = null; + Object.entries(card.text).forEach(item => { + if (oldCardText[item[0]]) { + card.text[item[0]].text = oldCardText[item[0]].text; + } + var textOptionElement = document.createElement('h4'); + textOptionElement.innerHTML = item[1].name; + textOptionElement.classList = 'selectable text-option' + textOptionElement.onclick = textOptionClicked; + document.querySelector('#text-options').appendChild(textOptionElement); + }); + document.querySelector('#text-options').firstChild.click(); + drawTextBuffer(); +} +function textOptionClicked(event) { + selectedTextIndex = getElementIndex(event.target); + document.querySelector('#text-editor').value = Object.entries(card.text)[selectedTextIndex][1].text; + selectSelectable(event); +} +function textEdited() { + card.text[Object.keys(card.text)[selectedTextIndex]].text = document.querySelector('#text-editor').value; + drawTextBuffer(); +} +function drawTextBuffer() { + clearTimeout(writingText); + writingText = setTimeout(drawText, 500); +} +async function drawText() { + textContext.clearRect(0, 0, textCanvas.width, textCanvas.height); + for (var textObject of Object.entries(card.text)) { + await writeText(textObject[1], textContext); + continue; + } + drawCard(); +} +function writeText(textObject, targetContext) { + //Most bits of info about text loaded, with defaults when needed + var textX = scaleX(textObject.x) || scaleX(0); + var textY = scaleY(textObject.y) || scaleY(0); + var textWidth = scaleWidth(textObject.width) || scaleWidth(1); + var textHeight = scaleHeight(textObject.height) || scaleHeight(1); + var startingTextSize = scaleHeight(textObject.size) || scaleHeight(0.038); + var textFontHeightRatio = 0.7; + var textBounded = textObject.bounded || true; + var textOneLine = textObject.oneLine || false; + var textManaCost = textObject.manaCost || false; + var textManaSpacing = scaleWidth(textObject.manaSpacing) || 0; + //Buffers the canvases accordingly + var canvasMargin = 300; + paragraphCanvas.width = textWidth + 2 * canvasMargin; + paragraphCanvas.height = textHeight + 2 * canvasMargin; + lineCanvas.width = textWidth + 2 * canvasMargin; + lineCanvas.height = startingTextSize + 2 * canvasMargin; + //Preps the text string + var splitString = '6GJt7eL8'; + var splitText = textObject.text.replace(/\n/g, '{line}').replace('{flavor}', '{lns}{bar}{lns}{i}').replace(/{/g, splitString + '{').replace(/}/g, '}' + splitString).replace(/ /g, splitString + ' ' + splitString).split(splitString); + splitText = splitText.filter(item => item); + splitText.push(''); + //Manages the redraw loop + var drawingText = true; + //Repeatedly tries to draw the text at smaller and smaller sizes until it fits + outerloop: while (drawingText) { + //Rest of the text info loaded that may have been changed by a previous attempt at drawing the text + var textColor = textObject.color || 'black'; + var textFont = textObject.font || 'mplantin'; + var textAlign = textObject.align || 'left'; + var textShadowColor = textObject.shadow || 'black'; + var textShadowOffsetX = scaleWidth(textObject.shadowX) || 0; + var textShadowOffsetY = scaleHeight(textObject.shadowY) || 0; + var textShadowBlur = scaleHeight(textObject.shadowBlur) || 0; + //Variables for tracking text position/size/font + var currentX = 0; + var startingCurrentX = 0; + var currentY = 0; + var lineY = 0; + var newLine = false; + var textFontExtension = ''; + var textFontStyle = textObject.fontStyle || ''; + var manaPlacementCounter = 0; + //variables that track various... things? + var newLineSpacing = 0; + var textSize = startingTextSize; + var ptShift = [0, 0]; + var permaShift = [0, 0]; + //Finish prepping canvases + paragraphContext.clearRect(0, 0, paragraphCanvas.width, paragraphCanvas.height); + lineContext.clearRect(0, 0, lineCanvas.width, lineCanvas.height); + lineContext.font = textFontStyle + textSize + 'px ' + textFont + textFontExtension; + lineContext.fillStyle = textColor; + lineContext.shadowColor = textShadowColor; + lineContext.shadowOffsetX = textShadowOffsetX; + lineContext.shadowOffsetY = textShadowOffsetY; + lineContext.shadowBlur = textShadowBlur; + lineContext.strokeStyle = textObject.outlineColor || 'black'; + var textOutlineWidth = scaleHeight(textObject.outlineWidth) || 0; + lineContext.lineWidth = textOutlineWidth; + //Begin looping through words/codes + innerloop: for (word of splitText) { + var wordToWrite = word; + if (wordToWrite.includes('{') && wordToWrite.includes('}') || textManaCost) { + var possibleCode = wordToWrite.toLowerCase().replace('{', '').replace('}', ''); + wordToWrite = null; + if (possibleCode == 'line') { + newLine = true; + newLineSpacing = textSize * 0.35; + } else if (possibleCode == 'lns' || possibleCode == 'linenospace') { + newLine = true; + } else if (possibleCode == 'bar') { + var barWidth = textWidth * 0.95; + var barHeight = scaleHeight(0.002); + var barImageName = 'bar'; + if (textColor == 'white') { + barImageName = 'whitebar'; + } + lineContext.drawImage(manaSymbols[findManaSymbolIndex(barImageName)].image, canvasMargin + (textWidth - barWidth) / 2, canvasMargin + 0.45 * textSize, barWidth, barHeight); + } else if (possibleCode == 'i') { + if (textFont == 'mplantin') { + textFontExtension = 'i'; + textFontStyle = ''; + } else { + textFontExtension = ''; + textFontStyle = 'italic '; + } + lineContext.font = textFontStyle + textSize + 'px ' + textFont + textFontExtension; + } else if (possibleCode == '/i') { + textFontExtension = ''; + textFontStyle = ''; + lineContext.font = textFontStyle + textSize + 'px ' + textFont + textFontExtension; + } else if (possibleCode == 'left') { + textAlign = 'left'; + } else if (possibleCode == 'center') { + textAlign = 'center'; + } else if (possibleCode == 'right') { + textAlign = 'right'; + } else if (possibleCode.includes('fontcolor')) { + textColor = possibleCode.replace('fontcolor', ''); + lineContext.fillStyle = textColor; + } else if (possibleCode.includes('fontsize')) { + textSize += parseInt(possibleCode.replace('fontsize', '')) || 0; + lineContext.font = textFontStyle + textSize + 'px ' + textFont + textFontExtension; + } else if (possibleCode.includes('font')) { + textFont = word.replace('{font', '').replace('}', ''); + textFontExtension = ''; + textFontStyle = ''; + lineContext.font = textFontStyle + textSize + 'px ' + textFont + textFontExtension; + } else if (possibleCode.includes('outlinecolor')) { + lineContext.strokeStyle = possibleCode.replace('outlinecolor', ''); + } else if (possibleCode.includes('outline')) { + textOutlineWidth = parseInt(possibleCode.replace('outline', '')); + lineContext.lineWidth = textOutlineWidth; + } else if (possibleCode.includes('upinline')) { + lineY -= parseInt(possibleCode.replace('upinline', '')) || 0; + } else if (possibleCode.includes('up') && possibleCode != 'up') { + currentY -= parseInt(possibleCode.replace('up', '')) || 0; + } else if (possibleCode.includes('down')) { + currentY += parseInt(possibleCode.replace('down', '')) || 0; + } else if (possibleCode.includes('left')) { + currentX -= parseInt(possibleCode.replace('left', '')) || 0; + } else if (possibleCode.includes('right')) { + currentX += parseInt(possibleCode.replace('right', '')) || 0; + } else if (possibleCode.includes('shadow')) { + if (possibleCode.includes('color')) { + textShadowColor = possibleCode.replace('shadowcolor', ''); + lineContext.shadowColor = textShadowColor; + } else if (possibleCode.includes('blur')) { + textShadowBlur = parseInt(possibleCode.replace('shadowblur', '')) || 0; + lineContext.shadowBlur = textShadowBlur + } else if (possibleCode.includes('shadowx')) { + textShadowOffsetX = parseInt(possibleCode.replace('shadowx', '')) || 0; + lineContext.shadowOffsetX = textShadowOffsetX; + } else if (possibleCode.includes('shadowy')) { + textShadowOffsetY = parseInt(possibleCode.replace('shadowy', '')) || 0; + lineContext.shadowOffsetY = textShadowOffsetY; + } else { + textShadowOffsetX = parseInt(possibleCode.replace('shadow', '')) || 0; + textShadowOffsetY = textShadowOffsetX; + lineContext.shadowOffsetX = textShadowOffsetX; + lineContext.shadowOffsetY = textShadowOffsetY; + } + } else if (possibleCode == 'planechase') { + var planechaseHeight = textSize * 1.8; + lineContext.drawImage(manaSymbols[findManaSymbolIndex('chaos')].image, currentX + canvasMargin, canvasMargin, planechaseHeight * 1.2, planechaseHeight); + currentX += planechaseHeight * 1.3; + startingCurrentX += planechaseHeight * 1.3; + } else if (possibleCode.includes('elemid')) { + if (document.querySelector('#' + word.replace('{elemid', '').replace('}', ''))) { + wordToWrite = document.querySelector('#' + word.replace('{elemid', '').replace('}', '')).value || ''; + } + } else if (possibleCode == 'savex') { + savedTextXPosition = currentX; + } else if (possibleCode == 'loadx') { + if (savedTextXPosition > currentX) { + currentX = savedTextXPosition; + } + } else if (possibleCode.includes('ptshift')) { + if (card.frames.findIndex(element => element.name.toLowerCase().includes('power/toughness')) >= 0 || card.version.includes('planeswalker') || card.version.includes('commanderLegends')) { + ptShift[0] = scaleWidth(parseFloat(possibleCode.replace('ptshift', '').split(',')[0])); + ptShift[1] = scaleHeight(parseFloat(possibleCode.split(',')[1])); + } + } else if (possibleCode.includes('permashift')) { + permaShift = [parseFloat(possibleCode.replace('permashift', '').split(',')[0]), parseFloat(possibleCode.split(',')[1])]; + } else if (findManaSymbolIndex(possibleCode.replace('/', '')) > -1 || findManaSymbolIndex(possibleCode.replace('/', '').split('').reverse().join('')) > -1) { + var manaSymbol = manaSymbols[findManaSymbolIndex(possibleCode.replace('/', ''))] || manaSymbols[findManaSymbolIndex(possibleCode.replace('/', '').split('').reverse().join(''))]; + var manaSymbolSpacing = textSize * 0.04 + textManaSpacing; + var manaSymbolWidth = manaSymbol.width * textSize * 0.78; + var manaSymbolHeight = manaSymbol.height * textSize * 0.78; + var manaSymbolX = currentX + canvasMargin + manaSymbolSpacing; + var manaSymbolY = canvasMargin + textSize * 0.34 - manaSymbolHeight / 2; + if (textObject.manaPlacement) { + manaSymbolX = scaleX(textObject.manaPlacement.x[manaPlacementCounter] || 0) + canvasMargin; + manaSymbolY = canvasMargin; + currentY = scaleY(textObject.manaPlacement.y[manaPlacementCounter] || 0); + manaPlacementCounter ++; + newLine = true; + } + lineContext.drawImage(manaSymbol.image, manaSymbolX, manaSymbolY, manaSymbolWidth, manaSymbolHeight); + currentX += manaSymbolWidth + manaSymbolSpacing * 2; + } else { + wordToWrite = word; + } + } + if (wordToWrite && lineContext.measureText(wordToWrite).width + currentX >= textWidth) { + if (textOneLine && startingTextSize > 1) { + //doesn't fit... try again at a smaller text size? + startingTextSize -= 1; + continue outerloop; + } + newLine = true; + } + if ((newLine && !textOneLine) || splitText.indexOf(word) == splitText.length - 1) { + var horizontalAdjust = 0 + if (textAlign == 'center') { + horizontalAdjust = (textWidth - currentX) / 2; + } else if (textAlign == 'right') { + horizontalAdjust = textWidth - currentX; + } + paragraphContext.drawImage(lineCanvas, horizontalAdjust, currentY); + lineY = 0; + lineContext.clearRect(0, 0, lineCanvas.width, lineCanvas.height); + currentX = startingCurrentX; + currentY += textSize + newLineSpacing; + newLineSpacing = 0; + newLine = false; + } + if (wordToWrite && (currentX != 0 || wordToWrite != ' ') && !textManaCost) { + if (textOutlineWidth >= 1) { + lineContext.strokeText(wordToWrite, currentX + canvasMargin, canvasMargin + textSize * textFontHeightRatio + lineY); + } + lineContext.fillText(wordToWrite, currentX + canvasMargin, canvasMargin + textSize * textFontHeightRatio + lineY); + currentX += lineContext.measureText(wordToWrite).width; + } + if (currentY > textHeight && textBounded && !textOneLine && startingTextSize > 1) { + //doesn't fit... try again at a smaller text size? + startingTextSize -= 1; + continue outerloop; + } + if (splitText.indexOf(word) == splitText.length - 1) { + //should manage vertical centering here + var verticalAdjust = 0; + if (!textObject.noVerticalCenter) { + verticalAdjust = (textHeight - currentY + textSize * 0.15) / 2; + } + targetContext.drawImage(paragraphCanvas, textX - canvasMargin + ptShift[0] + permaShift[0], textY - canvasMargin + verticalAdjust + ptShift[1] + permaShift[1]); + drawingText = false; + } + } + } +} +//ART TAB +function uploadArt(imageSource, otherParams) { + art.src = imageSource; + if (otherParams && otherParams == 'autoFit') { + art.onload = function() { + autoFitArt(); + art.onload = artEdited; + }; + } +} +function artEdited() { + card.artSource = art.src; + card.artX = document.querySelector('#art-x').value / card.width; + card.artY = document.querySelector('#art-y').value / card.height; + card.artZoom = document.querySelector('#art-zoom').value / 100; + drawCard(); +} +function autoFitArt() { + if (art.width / art.height > scaleWidth(card.artBounds.width) / scaleHeight(card.artBounds.height)) { + document.querySelector('#art-y').value = Math.round(scaleY(card.artBounds.y) - scaleHeight(card.marginY)); + document.querySelector('#art-zoom').value = (scaleHeight(card.artBounds.height) / art.height * 100).toFixed(1); + document.querySelector('#art-x').value = Math.round(scaleX(card.artBounds.x) - (document.querySelector('#art-zoom').value / 100 * art.width - scaleWidth(card.artBounds.width)) / 2 - scaleWidth(card.marginX)); + } else { + document.querySelector('#art-x').value = Math.round(scaleX(card.artBounds.x) - scaleWidth(card.marginX)); + document.querySelector('#art-zoom').value = (scaleWidth(card.artBounds.width) / art.width * 100).toFixed(1); + document.querySelector('#art-y').value = Math.round(scaleY(card.artBounds.y) - (document.querySelector('#art-zoom').value / 100 * art.height - scaleHeight(card.artBounds.height)) / 2 - scaleHeight(card.marginY)); + } + artEdited(); +} +function artFromScryfall(scryfallResponse) { + scryfallArt = scryfallResponse.data; + document.querySelector('#art-index').value = 1; + document.querySelector('#art-index').max = scryfallArt.length; + changeArtIndex(); +} +function changeArtIndex() { + imageURL(scryfallArt[document.querySelector('#art-index').value - 1].image_uris.art_crop, uploadArt, "autoFit"); + artistEdited(scryfallArt[document.querySelector('#art-index').value - 1].artist); +} +//SET SYMBOL TAB +function uploadSetSymbol(imageSource, otherParams) { + setSymbol.src = imageSource; + if (otherParams && otherParams == 'resetSetSymbol') { + setSymbol.onload = function() { + resetSetSymbol(); + setSymbol.onload = setSymbolEdited; + }; + } +} +function setSymbolEdited() { + card.setSymbolSource = setSymbol.src; + card.setSymbolX = document.querySelector('#setSymbol-x').value / card.width; + card.setSymbolY = document.querySelector('#setSymbol-y').value / card.height; + card.setSymbolZoom = document.querySelector('#setSymbol-zoom').value / 100; + drawCard(); +} +function resetSetSymbol() { + document.querySelector('#setSymbol-x').value = Math.round(scaleX(card.setSymbolBounds.x)); + document.querySelector('#setSymbol-y').value = Math.round(scaleY(card.setSymbolBounds.y)); + var setSymbolZoom; + if (setSymbol.width / setSymbol.height > scaleWidth(card.setSymbolBounds.width) / scaleHeight(card.setSymbolBounds.height)) { + setSymbolZoom = (scaleWidth(card.setSymbolBounds.width) / setSymbol.width * 100).toFixed(1); + } else { + setSymbolZoom = (scaleHeight(card.setSymbolBounds.height) / setSymbol.height * 100).toFixed(1); + } + document.querySelector('#setSymbol-zoom').value = setSymbolZoom; + if (card.setSymbolBounds.horizontal == 'center') { + document.querySelector('#setSymbol-x').value = Math.round(scaleX(card.setSymbolBounds.x) - (setSymbol.width * setSymbolZoom / 100) / 2 - scaleWidth(card.marginX)); + } else if (card.setSymbolBounds.horizontal == 'right') { + document.querySelector('#setSymbol-x').value = Math.round(scaleX(card.setSymbolBounds.x) - (setSymbol.width * setSymbolZoom / 100) - scaleWidth(card.marginX)); + } + if (card.setSymbolBounds.vertical == 'center') { + document.querySelector('#setSymbol-y').value = Math.round(scaleY(card.setSymbolBounds.y) - (setSymbol.height * setSymbolZoom / 100) / 2 - scaleHeight(card.marginY)); + } else if (card.setSymbolBounds.vertical == 'bottom') { + document.querySelector('#setSymbol-y').value = Math.round(scaleY(card.setSymbolBounds.y) - (setSymbol.height * setSymbolZoom / 100) - scaleHeight(card.marginY)); + } + setSymbolEdited(); +} +function fetchSetSymbol() { + var setCode = document.querySelector('#set-symbol-code').value.toLowerCase() || 'cmd'; + var setRarity = document.querySelector('#set-symbol-rarity').value.toLowerCase() || 'c'; + if (setCode == 'cc') { + uploadSetSymbol('/img/setSymbols/cc-' + setRarity + '.png', 'resetSetSymbol'); + } else { + imageURL('http://gatherer.wizards.com/Handlers/Image.ashx?type=symbol&set=' + setCode + '&size=large&rarity=' + setRarity, uploadSetSymbol, 'resetSetSymbol'); + } +} +//WATERMARK TAB +function uploadWatermark(imageSource, otherParams) { + watermark.src = imageSource; + if (otherParams && otherParams == 'resetWatermark') { + watermark.onload = function() { + resetWatermark(); + watermark.onload = watermarkEdited; + }; + } +} +function watermarkEdited() { + card.watermarkSource = watermark.src; + card.watermarkX = document.querySelector('#watermark-x').value / card.width; + card.watermarkY = document.querySelector('#watermark-y').value / card.height; + card.watermarkZoom = document.querySelector('#watermark-zoom').value / 100; + card.watermarkLeft = document.querySelector('#watermark-left').value; + card.watermarkRight = document.querySelector('#watermark-right').value; + card.watermarkOpacity = document.querySelector('#watermark-opacity').value / 100; + watermarkContext.globalCompositeOperation = 'source-over'; + watermarkContext.globalAlpha = 1; + watermarkContext.clearRect(0, 0, watermarkCanvas.width, watermarkCanvas.height); + if (card.watermarkLeft != 'none') { + if (card.watermarkRight != 'none') { + watermarkContext.drawImage(right, scaleX(0), scaleY(0), scaleWidth(1), scaleHeight(1)); + watermarkContext.globalCompositeOperation = 'source-in'; + if (card.watermarkRight == 'default') { + watermarkContext.drawImage(watermark, scaleX(card.watermarkX), scaleY(card.watermarkY), watermark.width * card.watermarkZoom, watermark.height * card.watermarkZoom); + } else { + watermarkContext.fillStyle = card.watermarkRight; + watermarkContext.fillRect(0, 0, watermarkCanvas.width, watermarkCanvas.height); + } + watermarkContext.globalCompositeOperation = 'destination-over'; + } + if (card.watermarkLeft == 'default') { + watermarkContext.drawImage(watermark, scaleX(card.watermarkX), scaleY(card.watermarkY), watermark.width * card.watermarkZoom, watermark.height * card.watermarkZoom); + } else { + watermarkContext.fillStyle = card.watermarkLeft; + watermarkContext.fillRect(0, 0, watermarkCanvas.width, watermarkCanvas.height); + } + watermarkContext.globalCompositeOperation = 'destination-in'; + watermarkContext.drawImage(watermark, scaleX(card.watermarkX), scaleY(card.watermarkY), watermark.width * card.watermarkZoom, watermark.height * card.watermarkZoom); + watermarkContext.globalAlpha = card.watermarkOpacity; + watermarkContext.fillRect(0, 0, watermarkCanvas.width, watermarkCanvas.height); + } + drawCard(); +} +function resetWatermark() { + var watermarkZoom; + if (watermark.width / watermark.height > scaleWidth(card.watermarkBounds.width) / scaleHeight(card.watermarkBounds.height)) { + watermarkZoom = (scaleWidth(card.watermarkBounds.width) / watermark.width * 100).toFixed(1); + } else { + watermarkZoom = (scaleHeight(card.watermarkBounds.height) / watermark.height * 100).toFixed(1); + } + document.querySelector('#watermark-zoom').value = watermarkZoom; + document.querySelector('#watermark-x').value = Math.round(scaleX(card.watermarkBounds.x) - watermark.width * watermarkZoom / 200 - scaleWidth(card.marginX)); + document.querySelector('#watermark-y').value = Math.round(scaleY(card.watermarkBounds.y) - watermark.height * watermarkZoom / 200 - scaleHeight(card.marginY)); + watermarkEdited(); +} +//svg cropper +function getSetSymbolWatermark(setCode, targetImage = watermark) { + xhttp = new XMLHttpRequest(); + xhttp.open('GET', 'https://raw.githubusercontent.com/andrewgioia/keyrune/4073ac89bb943978c29be504275e6f3160a07255/svg/' + setCode + '.svg', true); + xhttp.overrideMimeType('image/svg+xml'); + xhttp.onload = function(event) { + if (this.readyState == 4 && this.status == 200) { + var svg = document.body.appendChild(xhttp.responseXML.documentElement); + var box = svg.getBBox(svg); + svg.setAttribute('viewBox', [box.x, box.y, box.width, box.height].join(' ')); + svg.setAttribute('width', box.width); + svg.setAttribute('height', box.height); + uploadWatermark('data:image/svg+xml,' + encodeURIComponent(svg.outerHTML), 'resetWatermark'); + svg.remove(); + } else if (this.status == 404) { + throw new Error('woopsie'); + } + } + xhttp.send(); +} +//Bottom Info Tab +async function loadBottomInfo(textObjects = []) { + await bottomInfoContext.clearRect(0, 0, bottomInfoCanvas.width, bottomInfoCanvas.height); + card.bottomInfo = textObjects; + bottomInfoEdited(); +} +async function bottomInfoEdited() { + await bottomInfoContext.clearRect(0, 0, bottomInfoCanvas.width, bottomInfoCanvas.height); + card.infoNumber = document.querySelector('#info-number').value; + card.infoRarity = document.querySelector('#info-rarity').value; + card.infoSet = document.querySelector('#info-set').value; + card.infoLanguage = document.querySelector('#info-language').value; + card.infoArtist = document.querySelector('#info-artist').value; + for (var textObject of Object.entries(card.bottomInfo)) { + await writeText(textObject[1], bottomInfoContext); + continue; + } + drawCard(); +} +function artistEdited(value) { + document.querySelector('#art-artist').value = value; + document.querySelector('#info-artist').value = value; + bottomInfoEdited(); +} +//DRAWING THE CARD (putting it all together) +function drawCard() { + cardContext.globalCompositeOperation = 'source-over'; + cardContext.clearRect(0, 0, cardCanvas.width, cardCanvas.height); + cardContext.drawImage(art, scaleX(card.artX), scaleY(card.artY), art.width * card.artZoom, art.height * card.artZoom); + cardContext.drawImage(frameCanvas, 0, 0, cardCanvas.width, cardCanvas.height); + if (card.version.includes('planeswalker') && typeof planeswalkerCanvas !== "undefined") { + cardContext.drawImage(planeswalkerCanvas, 0, 0, cardCanvas.width, cardCanvas.height); + } + cardContext.drawImage(watermarkCanvas, 0, 0, cardCanvas.width, cardCanvas.height); + if (card.version.includes('saga') && typeof sagaCanvas !== "undefined") { + cardContext.drawImage(sagaCanvas, 0, 0, cardCanvas.width, cardCanvas.height); + } + cardContext.drawImage(textCanvas, 0, 0, cardCanvas.width, cardCanvas.height); + cardContext.drawImage(setSymbol, scaleX(card.setSymbolX), scaleY(card.setSymbolY), setSymbol.width * card.setSymbolZoom, setSymbol.height * card.setSymbolZoom) + cardContext.drawImage(bottomInfoCanvas, 0, 0, cardCanvas.width, cardCanvas.height); + cardContext.globalCompositeOperation = 'destination-out'; + if (card.marginX == 0 && card.marginY == 0) { + cardContext.drawImage(corner, 0, 0, scaleWidth(59/1500), scaleWidth(59/1500)); + cardContext.rotate(Math.PI / 2); + cardContext.drawImage(corner, 0, -card.width, scaleWidth(59/1500), scaleWidth(59/1500)); + cardContext.rotate(Math.PI / 2); + cardContext.drawImage(corner, -card.width, -card.height, scaleWidth(59/1500), scaleWidth(59/1500)); + cardContext.rotate(Math.PI / 2); + cardContext.drawImage(corner, -card.height, 0, scaleWidth(59/1500), scaleWidth(59/1500)); + cardContext.rotate(Math.PI / 2); + } + previewContext.clearRect(0, 0, previewCanvas.width, previewCanvas.height); + previewContext.drawImage(cardCanvas, 0, 0, previewCanvas.width, previewCanvas.height); +} +//DOWNLOADING +async function downloadCard() { + if (card.infoArtist.replace(/ /g, '') == '' && !card.artSource.includes('/img/blank.png')) { + alert('You must credit an artist before downloading!' + ' ' + card.artSource); + } else { + var download = document.createElement('a'); + var imageName = card.text.title.text; + if (card.text.nickname) { + imageName = card.text.nickname.text + ' (' + imageName + ')' + } + download.download = imageName + '.png'; + download.href = cardCanvas.toDataURL(); + document.body.appendChild(download); + await download.click(); + download.remove(); + } +} +//IMPORT/SAVE TAB +function importCard(cardObject) { + scryfallCard = cardObject.data; + document.querySelector('#import-index').value = 1; + document.querySelector('#import-index').max = scryfallCard.length; + changeCardIndex(); +} +function changeCardIndex() { + var cardToImport = scryfallCard[document.querySelector('#import-index').value - 1]; + //text + if (card.text.title) {card.text.title.text = cardToImport.name || '';} + if (card.text.nickname) {card.text.nickname.text = cardToImport.flavor_name || '';} + if (card.text.mana) {card.text.mana.text = cardToImport.mana_cost || '';} + if (card.text.type) {card.text.type.text = cardToImport.type_line || '';} + if (card.text.rules) { + var rulesText = (cardToImport.oracle_text || '').replace('(', '{i}(').replace(')', '){/i}'); + var rulesTextCounter = 1; + while (rulesText.includes('"')) { + if (rulesTextCounter % 2) { + rulesText = rulesText.replace('"', '\u201c'); + } else { + rulesText = rulesText.replace('"', '\u201d'); + } + rulesTextCounter ++; + } + card.text.rules.text = rulesText; + if (cardToImport.flavor_text) { + var flavorText = cardToImport.flavor_text; + var flavorTextCounter = 1; + while (flavorText.includes('*') || flavorText.includes('"')) { + if (flavorTextCounter % 2) { + flavorText = flavorText.replace('*', '{/i}'); + flavorText = flavorText.replace('"', '\u201c'); + } else { + flavorText = flavorText.replace('*', '{i}'); + flavorText = flavorText.replace('"', '\u201d'); + } + flavorTextCounter ++; + } + card.text.rules.text += '{flavor}' + flavorText.replace('\n', '{lns}'); + } + } + if (card.text.pt) {card.text.pt.text = cardToImport.power + '/' + cardToImport.toughness || '';} + if (card.text.pt && card.text.pt.text == undefined + '/' + undefined) {card.text.pt.text = '';} + if (card.version.includes('planeswalker')) { + card.text.loyalty.text = cardToImport.loyalty || ''; + var planeswalkerAbilities = cardToImport.oracle_text.split('\n'); + while (planeswalkerAbilities.length > 4) { + var newAbility = planeswalkerAbilities[planeswalkerAbilities.length - 2] + '\n' + planeswalkerAbilities.pop(); + planeswalkerAbilities[planeswalkerAbilities.length - 1] = newAbility; + } + for (var i = 0; i < 4; i ++) { + if (planeswalkerAbilities[i]) { + var planeswalkerAbility = planeswalkerAbilities[i].replace(': ', 'splitstring').split('splitstring'); + if (!planeswalkerAbility[1]) { + planeswalkerAbility = ['', '{permashift' + scaleWidth(-0.04) + ',0}' + planeswalkerAbility[0]]; + } + card.text['ability' + i].text = planeswalkerAbility[1].replace('(', '{i}(').replace(')', '){/i}'); + if (card.version == 'planeswalkerTall') { + document.querySelector('#planeswalker-height-' + i).value = Math.round(scaleHeight(0.3572) / planeswalkerAbilities.length); + } else { + document.querySelector('#planeswalker-height-' + i).value = Math.round(scaleHeight(0.2915) / planeswalkerAbilities.length); + } + document.querySelector('#planeswalker-cost-' + i).value = planeswalkerAbility[0].replace('\u2212', '-'); + } else { + card.text['ability' + i].text = ''; + document.querySelector('#planeswalker-height-' + i).value = 0; + } + } + planeswalkerEdited(); + } else if (card.version.includes('saga')) { + card.text.ability0.text = cardToImport.oracle_text.replace('(', '{i}(').replace(')', '){/i}') || ''; + } + document.querySelector('#text-editor').value = card.text[Object.keys(card.text)[selectedTextIndex]].text; + textEdited(); + //art + scryfallArt = scryfallCard; + document.querySelector('#art-name').value = cardToImport.name; + document.querySelector('#art-index').value = 1; + document.querySelector('#art-index').max = scryfallArt.length; + changeArtIndex(); + //set symbol + document.querySelector('#set-symbol-code').value = cardToImport.set; + document.querySelector('#set-symbol-rarity').value = cardToImport.rarity.slice(0, 1); + fetchSetSymbol(); +} +function loadAvailableCards(cardKeys = JSON.parse(localStorage.getItem('cardKeys'))) { + if (!cardKeys) { + cardKeys = []; + cardKeys.sort(); + localStorage.setItem('cardKeys', JSON.stringify(cardKeys)); + } + document.querySelector('#load-card-options').innerHTML = ''; + cardKeys.forEach(item => { + var cardKeyOption = document.createElement('option'); + cardKeyOption.innerHTML = item; + document.querySelector('#load-card-options').appendChild(cardKeyOption); + }); +} +function saveCard(saveFromFile) { + var cardKeys = JSON.parse(localStorage.getItem('cardKeys')) || []; + var cardKey, cardToSave; + if (saveFromFile) { + cardKey = saveFromFile.key; + } else { + cardKey = card.text.title.text || 'unnamed'; + } + if (!saveFromFile) { + cardKey = prompt('Enter the name you would like to save your card under:', cardKey); + if (!cardKey) {return null;} + } + if (cardKeys.includes(cardKey)) { + if (!confirm('Would you like to overwrite your card previously saved as "' + cardKey + '"?\n(Clicking "cancel" will affix a version number)')) { + var originalCardKey = cardKey; + var cardKeyNumber = 1; + while (cardKeys.includes(cardKey)) { + cardKey = originalCardKey + ' (' + cardKeyNumber + ')'; + cardKeyNumber ++; + } + } + } + if (!cardKeys.includes(cardKey)) { + cardKeys.push(cardKey); + cardKeys.sort(); + localStorage.setItem('cardKeys', JSON.stringify(cardKeys)); + loadAvailableCards(cardKeys); + } + if (saveFromFile) { + cardToSave = saveFromFile.data; + } else { + cardToSave = JSON.parse(JSON.stringify(card)); + cardToSave.frames.forEach(frame => { + delete frame.image; + frame.masks.forEach(mask => delete mask.image); + }); + } + localStorage.setItem(cardKey, JSON.stringify(cardToSave)); +} +async function loadCard(selectedCardKey) { + document.querySelector('#frame-list').innerHTML = null; + card = {}; + card = JSON.parse(localStorage.getItem(selectedCardKey)); + document.querySelector('#info-number').value = card.infoNumber; + document.querySelector('#info-rarity').value = card.infoRarity; + document.querySelector('#info-set').value = card.infoSet; + document.querySelector('#info-language').value = card.infoLanguage; + artistEdited(card.infoArtist); + document.querySelector('#text-editor').value = card.text[Object.keys(card.text)[selectedTextIndex]].text; + loadTextOptions(card.text); + document.querySelector('#art-x').value = scaleX(card.artX); + document.querySelector('#art-y').value = scaleY(card.artY); + document.querySelector('#art-zoom').value = card.artZoom * 100; + uploadArt(card.artSource); + document.querySelector('#setSymbol-x').value = scaleX(card.setSymbolX); + document.querySelector('#setSymbol-y').value = scaleY(card.setSymbolY); + document.querySelector('#setSymbol-zoom').value = card.setSymbolZoom * 100; + uploadSetSymbol(card.setSymbolSource); + document.querySelector('#watermark-x').value = scaleX(card.watermarkX); + document.querySelector('#watermark-y').value = scaleY(card.watermarkY); + document.querySelector('#watermark-zoom').value = card.watermarkZoom * 100; + document.querySelector('#watermark-left').value = card.watermarkLeft; + document.querySelector('#watermark-right').value = card.watermarkRight; + document.querySelector('#watermark-opacity').value = card.watermarkOpacity * 100; + uploadWatermark(card.watermarkSource); + card.frames.reverse(); + await card.frames.forEach(item => addFrame([], item)); + card.frames.reverse(); + if (card.onload) { + await loadScript(card.onload); + if (card.version.includes('planeswalker')) { + setTimeout(function(){ + fixPlaneswalkerInputs(invertPlaneswalkerColors(true)); + }, 1000); + } + } + card.manaSymbols.forEach(item => loadScript(item)); +} +function deleteCard() { + var keyToDelete = document.querySelector('#load-card-options').value; + if (keyToDelete) { + var cardKeys = JSON.parse(localStorage.getItem('cardKeys')); + cardKeys.splice(cardKeys.indexOf(keyToDelete), 1); + cardKeys.sort(); + localStorage.setItem('cardKeys', JSON.stringify(cardKeys)); + localStorage.removeItem(keyToDelete); + loadAvailableCards(cardKeys); + } +} +async function downloadSavedCards() { + var cardKeys = JSON.parse(localStorage.getItem('cardKeys')); + if (cardKeys) { + var allSavedCards = []; + cardKeys.forEach(item => { + allSavedCards.push({key:item, data:JSON.parse(localStorage.getItem(item))}); + }); + var download = document.createElement('a'); + download.href = URL.createObjectURL(new Blob([JSON.stringify(allSavedCards)], {type:'text'})); + download.download = 'saved-cards.cardconjurer'; + document.body.appendChild(download); + await download.click(); + download.remove(); + } +} +function uploadSavedCards(event) { + var reader = new FileReader(); + reader.onload = function () { + JSON.parse(reader.result).forEach(item => saveCard(item)); + } + reader.readAsText(event.target.files[0]); +} +//TUTORIAL TAB +function loadTutorialVideo() { + var video = document.querySelector('.video > iframe'); + if (video.src == '') { + video.src = 'https://www.youtube-nocookie.com/embed/UrNk6I55S0Q?rel=0'; + } +} +//Various loaders +function imageURL(url, destination, otherParams) { + destination('https://cors-anywhere.herokuapp.com/' + url, otherParams); +} +async function imageLocal(event, destination, otherParams) { + var reader = new FileReader(); + reader.onload = function () { + destination(reader.result, otherParams); + } + reader.onerror = function () { + destination('/img/blank.png', otherParams); + } + await reader.readAsDataURL(event.target.files[0]); +} +function loadScript(scriptPath) { + var script = document.createElement('script'); + script.setAttribute('type', 'text/javascript'); + script.setAttribute('src', scriptPath); + if (typeof script != 'undefined') { + document.querySelectorAll('head')[0].appendChild(script); + } +} +//SCRYFALL STUFF MAY BE CHANGED IN THE FUTURE +function fetchScryfallData(cardName, callback = console.log) { + var xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function() { + if (this.readyState == 4 && this.status == 200) { + callback(JSON.parse(this.responseText)); + // JSON.parse(this.responseText); + } else if (this.readyState == 4 && this.status == 404) { + alert('No cards found for "' + cardName + '"'); + } + } + xhttp.open('GET', 'https://api.scryfall.com/cards/search?order=released&unique=art&q=name%3D' + cardName.replace(/ /g, '_'), true); + xhttp.send(); +} +//Initialization +document.querySelector('#info-number').value = date.getFullYear(); +loadScript('/js/frames/groupStandard.js'); +loadAvailableCards(); \ No newline at end of file diff --git a/js/frames/groupMisc.js b/js/frames/groupMisc.js new file mode 100644 index 00000000..ec375056 --- /dev/null +++ b/js/frames/groupMisc.js @@ -0,0 +1,8 @@ +loadFramePacks([ + {name:'Future Shifted', value:'FutureRegular'}, + {name:'Seventh Edition', value:'Seventh'}, + {name:'Legends Multicolored', value:'Legends'}, + {name:'Misc', value:'disabled'}, + {name:'Planechase', value:'Planechase'}, + {name:'1/8 Inch Margin', value:'Margin'} +]) \ No newline at end of file diff --git a/js/frames/groupModal.js b/js/frames/groupModal.js new file mode 100644 index 00000000..1b166691 --- /dev/null +++ b/js/frames/groupModal.js @@ -0,0 +1,4 @@ +loadFramePacks([ + {name:'Regular', value:'ModalShort'}, + {name:'Nickname', value:'ModalShortNickname'} +]) \ No newline at end of file diff --git a/js/frames/groupPlaneswalker.js b/js/frames/groupPlaneswalker.js new file mode 100644 index 00000000..eb730b8b --- /dev/null +++ b/js/frames/groupPlaneswalker.js @@ -0,0 +1,5 @@ +loadFramePacks([ + {name:'Regular Frames', value:'PlaneswalkerRegular'}, + {name:'Nickname Frames', value:'PlaneswalkerNickname'}, + {name:'Tall Frames', value:'PlaneswalkerTall'} +]) \ No newline at end of file diff --git a/js/frames/groupPromo.js b/js/frames/groupPromo.js new file mode 100644 index 00000000..cb8e4c6a --- /dev/null +++ b/js/frames/groupPromo.js @@ -0,0 +1,4 @@ +loadFramePacks([ + {name:'Regular Frames', value:'PromoRegular'}, + {name:'Nickname Frames', value:'PromoNickname'} +]) \ No newline at end of file diff --git a/js/frames/groupSaga.js b/js/frames/groupSaga.js new file mode 100644 index 00000000..51aedc26 --- /dev/null +++ b/js/frames/groupSaga.js @@ -0,0 +1,3 @@ +loadFramePacks([ + {name:'Regular Frames', value:'SagaRegular'} +]) \ No newline at end of file diff --git a/js/frames/groupShowcase.js b/js/frames/groupShowcase.js new file mode 100644 index 00000000..38bff843 --- /dev/null +++ b/js/frames/groupShowcase.js @@ -0,0 +1,12 @@ +loadFramePacks([ + {name:'Generic Showcase', value:'GenericShowcase'}, + {name:'Commander Legends', value:'CommanderLegends'}, + {name:'Zendikar Rising', value:'ZendikarRising'}, + {name:'M21', value:'M21'}, + {name:'Eldraine Storybooks', value:'Storybook'}, + {name:'Masterpieces/Other', value:'disabled'}, + {name:'ZNR Expeditions (2020)', value:'ExpeditionZNR'}, + {name:'Ixalan Maps', value:'Ixalan'}, + {name:'Kaladesh Inventions', value:'Invention'}, + {name:'BFZ Expeditions (2015)', value:'ExpeditionBFZ'}, +]) \ No newline at end of file diff --git a/js/frames/groupStandard.js b/js/frames/groupStandard.js new file mode 100644 index 00000000..676ceb1b --- /dev/null +++ b/js/frames/groupStandard.js @@ -0,0 +1,15 @@ +loadFramePacks([ + {name:'Regular Frames', value:'M15Regular'}, + {name:'Addons', value:'disabled'}, + {name:'Legend Crowns', value:'M15LegendCrowns'}, + {name:'Floating Legend Crowns', value:'M15LegendCrownsFloating'}, + {name:'Inner Crowns', value:'M15InnerCrowns'}, + {name:'Holo Stamps', value:'M15HoloStamps'}, + {name:'Dark Power/Toughness', value:'M15DarkPT'}, + {name:'Other Frames', value:'disabled'}, + {name:'Nyx', value:'M15Nyx'}, + {name:'Devoid', value:'M15Devoid'}, + {name:'Special', value:'disabled'}, + {name:'Nickname', value:'M15Nickname'}, + {name:'Box Toppers', value:'M15BoxTopper'} +]) \ No newline at end of file diff --git a/js/frames/groupTextless.js b/js/frames/groupTextless.js new file mode 100644 index 00000000..7d5fad6b --- /dev/null +++ b/js/frames/groupTextless.js @@ -0,0 +1,6 @@ +loadFramePacks([ + {name:'Generic Showcase', value:'TextlessGenericShowcase'}, + {name:'Inventions', value:'TextlessInvention'}, + {name:'Unstable Basics', value:'Unstable'}, + {name:'Seventh', value:'SeventhTextless'} +]) \ No newline at end of file diff --git a/js/frames/groupToken.js b/js/frames/groupToken.js new file mode 100644 index 00000000..15bdd4ca --- /dev/null +++ b/js/frames/groupToken.js @@ -0,0 +1,10 @@ +loadFramePacks([ + {name:'Regular', value:'TokenRegular'}, + {name:'Textless', value:'TokenTextless'}, + {name:'Tall', value:'TokenTall'}, + {name:'Addons', value:'disabled'}, + {name:'Floating Legend Crowns', value:'M15LegendCrownsFloating'}, + {name:'Inner Crowns', value:'M15InnerCrowns'}, + {name:'Holo Stamps', value:'M15HoloStamps'}, + {name:'Dark Power/Toughness', value:'M15DarkPT'}, +]) \ No newline at end of file diff --git a/js/frames/manaSymbolsFuture.js b/js/frames/manaSymbolsFuture.js new file mode 100644 index 00000000..82e770ab --- /dev/null +++ b/js/frames/manaSymbolsFuture.js @@ -0,0 +1,7 @@ +//checks to see if it needs to run +if (!card.manaSymbols.includes('/js/frames/manaSymbolsFuture.js')) { + card.manaSymbols.push('/js/frames/manaSymbolsFuture.js'); +} +if (findManaSymbolIndex('fw') == -1) { + loadManaSymbols(['future/fw.png', 'future/fu.png', 'future/fb.png', 'future/fr.png', 'future/fg.png', 'future/f0.png', 'future/f1.png', 'future/f2.png', 'future/f3.png', 'future/f4.png', 'future/f5.png', 'future/f6.png', 'future/f7.png', 'future/f8.png', 'future/f9.png', 'future/f10.png', 'future/f11.png', 'future/f12.png', 'future/f13.png', 'future/f14.png', 'future/f15.png', 'future/f16.png', 'future/f17.png', 'future/f18.png', 'future/f19.png', 'future/f20.png', 'future/fwu.png', 'future/fwb.png', 'future/fub.png', 'future/fur.png', 'future/fbr.png', 'future/fbg.png', 'future/frg.png', 'future/frw.png', 'future/fgw.png', 'future/fgu.png', 'future/fx.png']); +} \ No newline at end of file diff --git a/js/frames/manaSymbolsM21.js b/js/frames/manaSymbolsM21.js new file mode 100644 index 00000000..ddbd71d9 --- /dev/null +++ b/js/frames/manaSymbolsM21.js @@ -0,0 +1,7 @@ +//checks to see if it needs to run +if (!card.manaSymbols.includes('/js/frames/manaSymbolsM21.js')) { + card.manaSymbols.push('/js/frames/manaSymbolsM21.js'); +} +if (findManaSymbolIndex('fw') == -1) { + loadManaSymbols(['m21/m21w.png', 'm21/m21u.png', 'm21/m21b.png', 'm21/m21r.png', 'm21/m21g.png', 'm21/m210.png', 'm21/m211.png', 'm21/m212.png', 'm21/m213.png', 'm21/m214.png', 'm21/m215.png', 'm21/m216.png', 'm21/m217.png', 'm21/m218.png', 'm21/m219.png', 'm21/m21x.png', 'm21/dark/dm21w.png', 'm21/dark/dm21u.png', 'm21/dark/dm21b.png', 'm21/dark/dm21r.png', 'm21/dark/dm21g.png', 'm21/dark/dm210.png', 'm21/dark/dm211.png', 'm21/dark/dm212.png', 'm21/dark/dm213.png', 'm21/dark/dm214.png', 'm21/dark/dm215.png', 'm21/dark/dm216.png', 'm21/dark/dm217.png', 'm21/dark/dm218.png', 'm21/dark/dm219.png', 'm21/dark/dm21x.png']); +} \ No newline at end of file diff --git a/js/frames/packCommanderLegends.js b/js/frames/packCommanderLegends.js new file mode 100644 index 00000000..b982b2cb --- /dev/null +++ b/js/frames/packCommanderLegends.js @@ -0,0 +1,50 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/m15/commanderLegends/m15CommanderLegendsMaskFrame.png', name:'Frame'}, {src:'/img/frames/m15/commanderLegends/m15CommanderLegendsMaskTitle.png', name:'Title'}, {src:'/img/frames/m15/commanderLegends/m15CommanderLegendsMaskType.png', name:'Type'}, {src:'/img/frames/m15/commanderLegends/m15CommanderLegendsMaskRules.png', name:'Rules'}, {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/m15/commanderLegends/m15CommanderLegendsFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsFrameL.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsPTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsPTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsPTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsPTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsPTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsPTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsPTA.png', bounds:bounds}, + {name:'Land Power/Toughness', src:'/img/frames/m15/commanderLegends/m15CommanderLegendsPTL.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 = 'commanderLegends'; + //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, color:'white', shadowX:0.0014, shadowY:0.001}, + type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, color:'white', shadowX:0.0014, shadowY:0.001}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.6303, width:0.828, height:0.2875, size:0.0362, color:'white', shadowX:0.0014, shadowY:0.001}, + 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', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packExpeditionBFZ.js b/js/frames/packExpeditionBFZ.js new file mode 100644 index 00000000..a1a2935c --- /dev/null +++ b/js/frames/packExpeditionBFZ.js @@ -0,0 +1,39 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/expedition/bfz/expeditionMaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/expedition/bfz/expeditionMaskType.png', name:'Type'}, {src:'/img/frames/expedition/bfz/expeditionMaskTextbox.png', name:'Rules'}, {src:'/img/frames/expedition/bfz/expeditionMaskFrame.png', name:'Frame'}, {src:'/img/frames/m15/regular/m15MaskBorder.png', name:'Border'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/expedition/bfz/expeditionFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/expedition/bfz/expeditionFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/expedition/bfz/expeditionFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/expedition/bfz/expeditionFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/expedition/bfz/expeditionFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/expedition/bfz/expeditionFrameM.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/expedition/bfz/expeditionFrameL.png', masks:masks}, + {name:'Colorless Frame', src:'/img/frames/expedition/bfz/expeditionFrameA.png', masks:masks} +]; +//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 = 'expeditionBFZ'; + //art bounds + card.artBounds = {x:0.0754, y:0.111, width:0.8494, height:0.6991}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9214, y:0.8439, width:0.12, height:0.0381, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.5, y:0.7762, width:0.75, height:0.2305}; + resetWatermark(); + //text + loadTextOptions({ + 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.8196, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324}, + rules: {name:'Rules Text', text:'', x:0.09, y:0.5996, width:0.82, height:0.2072, size:0.0362}, + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packExpeditionZNR.js b/js/frames/packExpeditionZNR.js new file mode 100644 index 00000000..26d258da --- /dev/null +++ b/js/frames/packExpeditionZNR.js @@ -0,0 +1,39 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/expedition/znr/expeditionNewMaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/expedition/znr/expeditionNewMaskType.png', name:'Type'}, {src:'/img/frames/expedition/znr/expeditionNewMaskText.png', name:'Rules'}, {src:'/img/frames/expedition/znr/expeditionNewMaskFrame.png', name:'Frame'}, {src:'/img/frames/expedition/znr/expeditionNewMaskHedrons.png', name:'Hedrons'}, {src:'/img/frames/expedition/znr/expeditionNewMaskBorder.png', name:'Border'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/expedition/znr/expeditionNewFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/expedition/znr/expeditionNewFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/expedition/znr/expeditionNewFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/expedition/znr/expeditionNewFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/expedition/znr/expeditionNewFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/expedition/znr/expeditionNewFrameM.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/expedition/znr/expeditionNewFrameL.png', masks:masks}, + {name:'Colorless Frame', src:'/img/frames/expedition/znr/expeditionNewFrameC.png', masks:masks} +]; +//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 = 'expeditionZNR'; + //art bounds + card.artBounds = {x:0.04, y:0.0667, width:0.92, height:0.7491}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.946, y:0.8439, width:0.12, height:0.0381, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.5, y:0.7762, width:0.75, height:0.2305}; + resetWatermark(); + //text + loadTextOptions({ + 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.8196, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324}, + rules: {name:'Rules Text', text:'', x:0.1, y:0.5648, width:0.8, height:0.2505, size:0.0362}, + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packFutureRegular.js b/js/frames/packFutureRegular.js new file mode 100644 index 00000000..7032781c --- /dev/null +++ b/js/frames/packFutureRegular.js @@ -0,0 +1,62 @@ +//Create objects for common properties across available frames +var mask = [{src:'/img/frames/future/futureMaskBorder.png', name:'Border'}]; +var masks = [{src:'/img/frames/future/futureMaskCreature.png', name:'Creature'}, {src:'/img/frames/future/futureMaskInstant.png', name:'Instant'}, {src:'/img/frames/future/futureMaskSorcery.png', name:'Sorcery'}, {src:'/img/frames/future/futureMaskEnchantment.png', name:'Enchantment'}, {src:'/img/frames/future/futureMaskArtifact.png', name:'Artifact'}, {src:'/img/frames/future/futureMaskLand.png', name:'Land'}, {src:'/img/frames/future/futureMaskMulti.png', name:'Multitype'}]; +var bounds = {x:0.7621, y:0.8834, width:0.1734, height:0.0781}; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/future/regular/futureFrameW.png', masks:mask}, + {name:'Blue Frame', src:'/img/frames/future/regular/futureFrameU.png', masks:mask}, + {name:'Black Frame', src:'/img/frames/future/regular/futureFrameB.png', masks:mask}, + {name:'Red Frame', src:'/img/frames/future/regular/futureFrameR.png', masks:mask}, + {name:'Green Frame', src:'/img/frames/future/regular/futureFrameG.png', masks:mask}, + {name:'Multicolored Frame', src:'/img/frames/future/regular/futureFrameM.png', masks:mask}, + {name:'Artifact Frame', src:'/img/frames/future/regular/futureFrameA.png', masks:mask}, + {name:'Land Frame', src:'/img/frames/future/regular/futureFrameL.png', masks:mask}, + {name:'Colorless Frame', src:'/img/frames/future/regular/futureFrameC.png', masks:mask}, + {name:'White Power/Toughness', src:'/img/frames/future/regular/futurePTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/future/regular/futurePTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/future/regular/futurePTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/future/regular/futurePTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/future/regular/futurePTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/future/regular/futurePTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/future/regular/futurePTA.png', bounds:bounds}, + {name:'Land Power/Toughness', src:'/img/frames/future/regular/futurePTL.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/future/regular/futurePTC.png', bounds:bounds}, + {name:'White Type Icon', src:'/img/frames/future/futureWhite.png', bounds:{x:0.0659, y:0.0472, width:0.0431, height:0.0308}, masks:masks}, + {name:'Gray Type Icon', src:'/img/frames/future/futureGray.png', bounds:{x:0.0659, y:0.0472, width:0.0431, height:0.0308}, masks:masks} +]; +//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 = 'futureRegular'; + loadScript('/js/frames/manaSymbolsFuture.js'); + //art bounds + card.artBounds = {x:0.086, y:0.0843, width:0.8714, height:0.5853}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9114, y:0.5948, width:0.0534, height:0.0381, vertical:'center', horizontal: 'center'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.5, y:0.7586, width:0.75, height:0.2305}; + resetWatermark(); + //text + loadTextOptions({ + mana: {name:'Mana Cost', text:'', size:119/1638, manaCost:true, manaPlacement:{x:[0.1224, 0.082, 0.0619, 0.0619, 0.0794, 0.1425], y:[0.1348, 0.1993, 0.2705, 0.3427, 0.4206, 0.4928]}, noVerticalCenter:true}, + title: {name:'Title', text:'', x:0.176, y:0.0491, width:0.832, height:0.0643, oneLine:true, font:'matrixb', size:0.0448, color:'white'}, + type: {name:'Type', text:'', x:0.1214, y:0.5615, width:0.832, height:0.0586, oneLine:true, font:'matrixb', size:0.0362, color:'white'}, + rules: {name:'Rules Text', text:'', x:0.1027, y:0.6248, width:0.8074, height:0.2639, size:0.0362}, + pt: {name:'Power/Toughness', text:'', x:0.7734, y:0.8953, width:0.14, height:0.0572, size:0.0381, oneLine:true, align:'center', color:'white'} + }); + //bottom info + loadBottomInfo({ + top: {text:'{ptshift-0.1667,0}\uFFEE {elemidinfo-artist}', x:0.094, y:1898/2100, width:0.8107, height:0.0248, oneLine:true, font:'matrixb', size:0.0248, color:'white', align:'right', shadowX:0.0007, shadowY:0.0005}, + wizards: {text:'{ptshift-0.1667,0}\u2122 & \u00a9 1993-' + date.getFullYear() + ' Wizards of the Coast, Inc. {elemidinfo-number}', x:0.094, y:1954/2100, width:0.8107, height:0.0153, oneLine:true, font:'mplantin', size:0.0153, color:'white', align:'right', shadowX:0.0007, shadowY:0.0005}, + bottom: {text:'{ptshift-0.1667,0}NOT FOR SALE CardConjurer.com', x:0.094, y:1990/2100, width:0.8107, height:0.0134, oneLine:true, font:'mplantin', size:0.0134, color:'white', align:'right', shadowX:0.0007, shadowY:0.0005} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packGenericShowcase.js b/js/frames/packGenericShowcase.js new file mode 100644 index 00000000..90f6152c --- /dev/null +++ b/js/frames/packGenericShowcase.js @@ -0,0 +1,50 @@ +//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/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/m15/genericShowcase/m15GenericShowcaseFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/m15/genericShowcase/m15GenericShowcaseFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/m15/genericShowcase/m15GenericShowcaseFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/m15/genericShowcase/m15GenericShowcaseFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/m15/genericShowcase/m15GenericShowcaseFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/m15/genericShowcase/m15GenericShowcaseFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/m15/genericShowcase/m15GenericShowcaseFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/m15/genericShowcase/m15GenericShowcaseFrameL.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTC.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 = 'genericShowcase'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9224}; + 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, color:'white', shadowX:0.0014, shadowY:0.001}, + type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, color:'white', shadowX:0.0014, shadowY:0.001}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.6303, width:0.828, height:0.2875, size:0.0362, color:'white', shadowX:0.0014, shadowY:0.001}, + 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', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packInvention.js b/js/frames/packInvention.js new file mode 100644 index 00000000..9ef53397 --- /dev/null +++ b/js/frames/packInvention.js @@ -0,0 +1,33 @@ +//defines available frames +availableFrames = [ + {name:'Invention Frame', src:'/img/frames/m15/invention/inventionFrameA.png', 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'}]}, + {name:'Invention Power/Toughness', src:'/img/frames/m15/invention/inventionPT.png', bounds:{x:0.7573, y:0.8848, width:0.188, height:0.0733}} +]; +//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 = 'invention'; + //art bounds + card.artBounds = {x:0.04, y:0.0286, width:0.92, height:0.8953}; + 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, shadow:'white', shadowX:-0.0007, shadowY:0.0005}, + type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, shadow:'white', shadowX:-0.0007, shadowY:0.0005}, + 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(); \ No newline at end of file diff --git a/js/frames/packIxalan.js b/js/frames/packIxalan.js new file mode 100644 index 00000000..a585cf6a --- /dev/null +++ b/js/frames/packIxalan.js @@ -0,0 +1,49 @@ +//Create objects for common properties across available frames +var bounds = {x:0.06, y:0.05, width:0.0667, height:0.0481}; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/ixalan/ixalanFrameW.png'}, + {name:'Blue Frame', src:'/img/frames/ixalan/ixalanFrameU.png'}, + {name:'Black Frame', src:'/img/frames/ixalan/ixalanFrameB.png'}, + {name:'Red Frame', src:'/img/frames/ixalan/ixalanFrameR.png'}, + {name:'Green Frame', src:'/img/frames/ixalan/ixalanFrameG.png'}, + {name:'Multicolored Frame', src:'/img/frames/ixalan/ixalanFrameM.png'}, + {name:'Colorless Frame', src:'/img/frames/ixalan/ixalanFrameL.png'}, + {name:'Creature Icon', src:'/img/frames/ixalan/ixalanIconCreature.png', bounds:bounds}, + {name:'Instant Icon', src:'/img/frames/ixalan/ixalanIconInstant.png', bounds:bounds}, + {name:'Sorcery Icon', src:'/img/frames/ixalan/ixalanIconSorcery.png', bounds:bounds}, + {name:'Enchantment Icon', src:'/img/frames/ixalan/ixalanIconEnchantment.png', bounds:bounds}, + {name:'Artifact Icon', src:'/img/frames/ixalan/ixalanIconArtifact.png', bounds:bounds}, + {name:'Multitype Icon', src:'/img/frames/ixalan/ixalanIconMulti.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 = 'ixalan'; + //art bounds + card.artBounds = {x:0.04, y:0.1091, width:0.92, height:0.4543}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.5, y:0.1162, width:0.12, height:0.0410, vertical:'center', horizontal: 'center'}; + 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.0553, 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.14, y:0.0458, width:0.72, height:0.0543, oneLine:true, font:'belerenbsc', size:0.0386, align:'center'}, + type: {name:'Type', text:'', x:0.23, y:0.5662, width:0.54, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, align:'center'}, + rules: {name:'Rules Text', text:'', x:0.1167, y:0.6381, width:0.7667, height:0.27, size:0.0362}, + }); +} +//loads available frames +loadFramePack(); +//Only for the main version as the webpage loads: +if (!card.text) { + document.querySelector('#loadFrameVersion').click(); +} \ No newline at end of file diff --git a/js/frames/packLegends.js b/js/frames/packLegends.js new file mode 100644 index 00000000..b06549a1 --- /dev/null +++ b/js/frames/packLegends.js @@ -0,0 +1,38 @@ +//defines available frames +availableFrames = [ + {name:'Multicolored Frame', src:'/img/frames/old/legends/legendsFrameM.png'} +]; +//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 = 'legends'; + //art bounds + card.artBounds = {x:0.1074, y:0.0924, width:0.7854, height:0.4524}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.8914, y:0.5777, width:0.12, height:0.0334, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.18, y:0.64, width:0.64, height:0.24}; + resetWatermark(); + //text + loadTextOptions({ + mana: {name:'Mana Cost', text:'', x:0.108, y:0.0458, width:0.8147, height:72/2100, oneLine:true, size:72/1638, align:'right', manaCost:true, manaSpacing:0.0014}, + title: {name:'Title', text:'', x:0.108, y:0.04, width:0.784, height:0.0405, oneLine:true, font:'goudymedieval', size:0.0405, color:'white', shadowX:0.0034, shadowY:0.0024}, + type: {name:'Type', text:'', x:0.108, y:0.5524, width:0.784, height:0.0543, oneLine:true, size:0.032, color:'white', shadowX:0.0021, shadowY:0.0015}, + rules: {name:'Rules Text', text:'', x:0.126, y:0.6081, width:0.748, height:0.2762, size:0.0362}, + pt: {name:'Power/Toughness', text:'', x:0.8, y:0.9039, width:0.1367, height:0.0453, size:0.0453, oneLine:true, align:'center', color:'white', shadowX:0.0034, shadowY:0.0024} + }); + //bottom info + loadBottomInfo({ + top: {text:'Illus: {elemidinfo-artist}', x:0.0614, y:0.8972, width:0.8774, height:0.0281, oneLine:true, size:0.0281, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'}, + wizards: {text:'\u2122 & \u00a9 ' + date.getFullYear() + ' Wizards of the Coast', x:0.0614, y:0.9267, width:0.8774, height:0.0172, oneLine:true, size:0.0172, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'}, + bottom: {text:'NOT FOR SALE CardConjurer.com', x:0.0614, y:0.9458, width:0.8774, height:0.0143, oneLine:true, size:0.0143, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15BoxTopper.js b/js/frames/packM15BoxTopper.js new file mode 100644 index 00000000..66cd5fa9 --- /dev/null +++ b/js/frames/packM15BoxTopper.js @@ -0,0 +1,43 @@ +//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/m15/boxTopper/m15BoxTopperFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/m15/boxTopper/m15BoxTopperFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/m15/boxTopper/m15BoxTopperFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/m15/boxTopper/m15BoxTopperFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/m15/boxTopper/m15BoxTopperFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/m15/boxTopper/m15BoxTopperFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/m15/boxTopper/m15BoxTopperFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/m15/boxTopper/m15BoxTopperFrameL.png', masks:masks}, + {name:'Vehicle Frame', src:'/img/frames/m15/boxTopper/m15BoxTopperFrameV.png', masks:masks} +]; +//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 = 'm15BoxTopper'; + //art bounds + card.artBounds = {x:0, y:0.081, width:1, height:0.531}; + 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.0386}, + type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0328, color:'white', shadowX:0.0014, shadowY:0.001}, + 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(); \ No newline at end of file diff --git a/js/frames/packM15DarkPT.js b/js/frames/packM15DarkPT.js new file mode 100644 index 00000000..1ec28dcf --- /dev/null +++ b/js/frames/packM15DarkPT.js @@ -0,0 +1,19 @@ +//Create objects for common properties across available frames +var bounds = {x:0.7573, y:0.8848, width:0.188, height:0.0733}; +//defines available frames +availableFrames = [ + {name:'White Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTC.png', bounds:bounds} +]; +//disables/enables the "Load Frame Version" button +document.querySelector('#loadFrameVersion').disabled = true; +//defines process for loading this version, if applicable +document.querySelector('#loadFrameVersion').onclick = null; +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15Devoid.js b/js/frames/packM15Devoid.js new file mode 100644 index 00000000..cdf4dd7d --- /dev/null +++ b/js/frames/packM15Devoid.js @@ -0,0 +1,24 @@ +//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'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/m15/devoid/m15DevoidFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/m15/devoid/m15DevoidFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/m15/devoid/m15DevoidFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/m15/devoid/m15DevoidFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/m15/devoid/m15DevoidFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/m15/devoid/m15DevoidFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/m15/devoid/m15DevoidFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/m15/devoid/m15DevoidFrameL.png', masks:masks}, + {name:'Devoid Power/Toughness', src:'/img/frames/m15/devoid/m15DevoidPT.png', bounds:{x:0.7573, y:0.8848, width:0.188, height:0.0733}} +]; +//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() { + //art bounds + card.artBounds = {x:0.04, y:0.1039, width:0.92, height:0.9229}; + autoFitArt(); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15HoloStamps.js b/js/frames/packM15HoloStamps.js new file mode 100644 index 00000000..ca162aa3 --- /dev/null +++ b/js/frames/packM15HoloStamps.js @@ -0,0 +1,21 @@ +//Create objects for common properties across available frames +var bounds = {x:0.436, y:0.9034, width:0.128, height:0.0458}; +//defines available frames +availableFrames = [ + {name:'White Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampW.png', bounds:bounds}, + {name:'Blue Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampU.png', bounds:bounds}, + {name:'Black Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampB.png', bounds:bounds}, + {name:'Red Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampR.png', bounds:bounds}, + {name:'Green Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampG.png', bounds:bounds}, + {name:'Multicolored Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampM.png', bounds:bounds}, + {name:'Artifact Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampA.png', bounds:bounds}, + {name:'Land Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampL.png', bounds:bounds}, + {name:'Artifact (2) Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampA2.png', bounds:bounds}, + {name:'Artifact (3) Holo Stamp', src:'/img/frames/m15/holoStamps/m15HoloStampA3.png', bounds:bounds} +]; +//disables/enables the "Load Frame Version" button +document.querySelector('#loadFrameVersion').disabled = true; +//defines process for loading this version, if applicable +document.querySelector('#loadFrameVersion').onclick = null; +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15InnerCrowns.js b/js/frames/packM15InnerCrowns.js new file mode 100644 index 00000000..c5d40c3e --- /dev/null +++ b/js/frames/packM15InnerCrowns.js @@ -0,0 +1,25 @@ +//Create objects for common properties across available frames +var bounds = {x:0.164, y:0.0239, width:0.672, height:0.0239}; +//defines available frames +availableFrames = [ + {name:'White Inner Crown (Nyx)', src:'/img/frames/m15/innerCrowns/m15InnerCrownWNyx.png', bounds:bounds}, + {name:'Blue Inner Crown (Nyx)', src:'/img/frames/m15/innerCrowns/m15InnerCrownUNyx.png', bounds:bounds}, + {name:'Black Inner Crown (Nyx)', src:'/img/frames/m15/innerCrowns/m15InnerCrownBNyx.png', bounds:bounds}, + {name:'Red Inner Crown (Nyx)', src:'/img/frames/m15/innerCrowns/m15InnerCrownRNyx.png', bounds:bounds}, + {name:'Green Inner Crown (Nyx)', src:'/img/frames/m15/innerCrowns/m15InnerCrownGNyx.png', bounds:bounds}, + {name:'Multicolored Inner Crown (Nyx)', src:'/img/frames/m15/innerCrowns/m15InnerCrownMNyx.png', bounds:bounds}, + {name:'Artifact Inner Crown (Nyx)', src:'/img/frames/m15/innerCrowns/m15InnerCrownANyx.png', bounds:bounds}, + {name:'White Inner Crown (Companion)', src:'/img/frames/m15/innerCrowns/m15InnerCrownWCompanion.png', bounds:bounds}, + {name:'Blue Inner Crown (Companion)', src:'/img/frames/m15/innerCrowns/m15InnerCrownUCompanion.png', bounds:bounds}, + {name:'Black Inner Crown (Companion)', src:'/img/frames/m15/innerCrowns/m15InnerCrownBCompanion.png', bounds:bounds}, + {name:'Red Inner Crown (Companion)', src:'/img/frames/m15/innerCrowns/m15InnerCrownRCompanion.png', bounds:bounds}, + {name:'Green Inner Crown (Companion)', src:'/img/frames/m15/innerCrowns/m15InnerCrownGCompanion.png', bounds:bounds}, + {name:'Multicolored Inner Crown (Companion)', src:'/img/frames/m15/innerCrowns/m15InnerCrownMCompanion.png', bounds:bounds}, + {name:'Artifact Inner Crown (Companion)', src:'/img/frames/m15/innerCrowns/m15InnerCrownACompanion.png', bounds:bounds} +]; +//disables/enables the "Load Frame Version" button +document.querySelector('#loadFrameVersion').disabled = true; +//defines process for loading this version, if applicable +document.querySelector('#loadFrameVersion').onclick = null; +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15LegendCrowns.js b/js/frames/packM15LegendCrowns.js new file mode 100644 index 00000000..a0ebddf3 --- /dev/null +++ b/js/frames/packM15LegendCrowns.js @@ -0,0 +1,21 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/m15/crowns/m15MaskLegendCrown.png', name:'Crown Without Pinlines'}, {src:'/img/frames/m15/crowns/m15MaskLegendCrownPinline.png', name:'Crown With Pinlines'}]; +var bounds = {x:0.0274, y:0.0191, width:0.9454, height:0.1667}; +//defines available frames +availableFrames = [ + {name:'White Legend Crown', src:'/img/frames/m15/crowns/m15CrownW.png', masks:masks, bounds:bounds}, + {name:'Blue Legend Crown', src:'/img/frames/m15/crowns/m15CrownU.png', masks:masks, bounds:bounds}, + {name:'Black Legend Crown', src:'/img/frames/m15/crowns/m15CrownB.png', masks:masks, bounds:bounds}, + {name:'Red Legend Crown', src:'/img/frames/m15/crowns/m15CrownR.png', masks:masks, bounds:bounds}, + {name:'Green Legend Crown', src:'/img/frames/m15/crowns/m15CrownG.png', masks:masks, bounds:bounds}, + {name:'Multicolored Legend Crown', src:'/img/frames/m15/crowns/m15CrownM.png', masks:masks, bounds:bounds}, + {name:'Artifact Legend Crown', src:'/img/frames/m15/crowns/m15CrownA.png', masks:masks, bounds:bounds}, + {name:'Land Legend Crown', src:'/img/frames/m15/crowns/m15CrownL.png', masks:masks, bounds:bounds}, + {name:'Legend Crown Border Cover', src:'/img/black.png', bounds:{x:0.0394, y:0.0277, width:0.9214, height:0.0177}} +]; +//disables/enables the "Load Frame Version" button +document.querySelector('#loadFrameVersion').disabled = true; +//defines process for loading this version, if applicable +document.querySelector('#loadFrameVersion').onclick = null; +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15LegendCrownsFloating.js b/js/frames/packM15LegendCrownsFloating.js new file mode 100644 index 00000000..35e743ba --- /dev/null +++ b/js/frames/packM15LegendCrownsFloating.js @@ -0,0 +1,21 @@ +//Create objects for common properties across available frames +var bounds = {x:0.0307, y:0.0191, width:0.9387, height:0.1024}; +//defines available frames +availableFrames = [ + {name:'White Legend Crown', src:'/img/frames/m15/crowns/m15CrownWFloating.png', bounds:bounds}, + {name:'Blue Legend Crown', src:'/img/frames/m15/crowns/m15CrownUFloating.png', bounds:bounds}, + {name:'Black Legend Crown', src:'/img/frames/m15/crowns/m15CrownBFloating.png', bounds:bounds}, + {name:'Red Legend Crown', src:'/img/frames/m15/crowns/m15CrownRFloating.png', bounds:bounds}, + {name:'Green Legend Crown', src:'/img/frames/m15/crowns/m15CrownGFloating.png', bounds:bounds}, + {name:'Multicolored Legend Crown', src:'/img/frames/m15/crowns/m15CrownMFloating.png', bounds:bounds}, + {name:'Artifact Legend Crown', src:'/img/frames/m15/crowns/m15CrownAFloating.png', bounds:bounds}, + {name:'Land Legend Crown', src:'/img/frames/m15/crowns/m15CrownLFloating.png', bounds:bounds}, + {name:'Legend Crown Border Cover', src:'/img/black.png', bounds:{x:0.0394, y:0.0277, width:0.9214, height:0.0177}}, + {name:'Legend Crown Lower Cutout', src:'/img/black.png', bounds:{x:0.0734, y:0.1096, width:0.8532, height:0.0143}, erase:true} +]; +//disables/enables the "Load Frame Version" button +document.querySelector('#loadFrameVersion').disabled = true; +//defines process for loading this version, if applicable +document.querySelector('#loadFrameVersion').onclick = null; +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15Nickname.js b/js/frames/packM15Nickname.js new file mode 100644 index 00000000..7b174e6b --- /dev/null +++ b/js/frames/packM15Nickname.js @@ -0,0 +1,71 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/m15/regular/m15MaskPinlineSuper.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskType.png', name:'Type'}, {src:'/img/frames/m15/regular/m15MaskRules.png', name:'Rules'}, {src:'/img/frames/m15/regular/m15MaskBorder.png', name:'Border'}]; +var masks2 = [{src:'/img/frames/m15/nickname/m15MaskNicknameLegendCrownStrokeless.png', name:'Strokeless Crown'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/m15/nickname/m15NicknameMaskTrueName.png', name:'True Title'}]; +var masks3 = [{src:'/img/frames/m15/nickname/m15MaskNicknameTitleStrokeless.png', name:'Strokeless Title'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/m15/nickname/m15NicknameMaskTrueName.png', name:'True Title'}]; +var bounds = {x:0.7573, y:0.8848, width:0.188, height:0.0733}; +var bounds2 = {x:0.024, y:0.0172, width:0.952, height:0.1286}; +var bounds3 = {x:0.0494, y:0.0405, width:0.9014, height:0.1053}; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/m15/nickname/m15NicknameFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/m15/nickname/m15NicknameFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/m15/nickname/m15NicknameFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/m15/nickname/m15NicknameFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/m15/nickname/m15NicknameFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/m15/nickname/m15NicknameFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/m15/nickname/m15NicknameFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/m15/nickname/m15NicknameFrameL.png', masks:masks}, + {name:'White Crown', src:'/img/frames/m15/nickname/m15NicknameCrownW.png', masks:masks2, bounds:bounds2}, + {name:'Blue Crown', src:'/img/frames/m15/nickname/m15NicknameCrownU.png', masks:masks2, bounds:bounds2}, + {name:'Black Crown', src:'/img/frames/m15/nickname/m15NicknameCrownB.png', masks:masks2, bounds:bounds2}, + {name:'Red Crown', src:'/img/frames/m15/nickname/m15NicknameCrownR.png', masks:masks2, bounds:bounds2}, + {name:'Green Crown', src:'/img/frames/m15/nickname/m15NicknameCrownG.png', masks:masks2, bounds:bounds2}, + {name:'Multicolored Crown', src:'/img/frames/m15/nickname/m15NicknameCrownM.png', masks:masks2, bounds:bounds2}, + {name:'Artifact Crown', src:'/img/frames/m15/nickname/m15NicknameCrownA.png', masks:masks2, bounds:bounds2}, + {name:'Land Crown', src:'/img/frames/m15/nickname/m15NicknameCrownL.png', masks:masks2, bounds:bounds2}, + {name:'White Title', src:'/img/frames/m15/nickname/m15NicknameTitleW.png', masks:masks3, bounds:bounds3}, + {name:'Blue Title', src:'/img/frames/m15/nickname/m15NicknameTitleU.png', masks:masks3, bounds:bounds3}, + {name:'Black Title', src:'/img/frames/m15/nickname/m15NicknameTitleB.png', masks:masks3, bounds:bounds3}, + {name:'Red Title', src:'/img/frames/m15/nickname/m15NicknameTitleR.png', masks:masks3, bounds:bounds3}, + {name:'Green Title', src:'/img/frames/m15/nickname/m15NicknameTitleG.png', masks:masks3, bounds:bounds3}, + {name:'Multicolored Title', src:'/img/frames/m15/nickname/m15NicknameTitleM.png', masks:masks3, bounds:bounds3}, + {name:'Artifact Title', src:'/img/frames/m15/nickname/m15NicknameTitleA.png', masks:masks3, bounds:bounds3}, + {name:'Land Title', src:'/img/frames/m15/nickname/m15NicknameTitleL.png', masks:masks3, bounds:bounds3}, + {name:'White Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTC.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 = 'm15Nickname'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9224}; + 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}, + nickname: {name:'Nickname', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381, color:'white', shadowX:0.0014, shadowY:0.001}, + title: {name:'Title', text:'', x:0.14, y:0.1129, width:0.72, height:0.0243, oneLine:true, font:'mplantini', size:0.0229, color:'white', shadowX:0.0014, shadowY:0.001, align:'center'}, + type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, color:'white', shadowX:0.0014, shadowY:0.001}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.6303, width:0.828, height:0.2875, size:0.0362, color:'white', shadowX:0.0014, shadowY:0.001}, + 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', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15Nyx.js b/js/frames/packM15Nyx.js new file mode 100644 index 00000000..eca1d275 --- /dev/null +++ b/js/frames/packM15Nyx.js @@ -0,0 +1,18 @@ +//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'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/m15/nyx/m15FrameWNyx.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/m15/nyx/m15FrameUNyx.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/m15/nyx/m15FrameBNyx.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/m15/nyx/m15FrameRNyx.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/m15/nyx/m15FrameGNyx.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/m15/nyx/m15FrameMNyx.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/m15/nyx/m15FrameANyx.png', masks:masks} +]; +//disables/enables the "Load Frame Version" button +document.querySelector('#loadFrameVersion').disabled = true; +//defines process for loading this version, if applicable +document.querySelector('#loadFrameVersion').onclick = null; +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packM15Regular.js b/js/frames/packM15Regular.js new file mode 100644 index 00000000..495a03e6 --- /dev/null +++ b/js/frames/packM15Regular.js @@ -0,0 +1,55 @@ +//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/m15/regular/m15FrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/m15/regular/m15FrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/m15/regular/m15FrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/m15/regular/m15FrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/m15/regular/m15FrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/m15/regular/m15FrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/m15/regular/m15FrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/m15/regular/m15FrameL.png', masks:masks}, + {name:'Vehicle Frame', src:'/img/frames/m15/regular/m15FrameV.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/regular/m15PTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/regular/m15PTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/regular/m15PTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/regular/m15PTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/regular/m15PTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/regular/m15PTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/regular/m15PTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/regular/m15PTC.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 = 'm15Regular'; + //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(); +//Only for the main version as the webpage loads: +if (!card.text) { + document.querySelector('#loadFrameVersion').click(); +} \ No newline at end of file diff --git a/js/frames/packM21.js b/js/frames/packM21.js new file mode 100644 index 00000000..5a54d9e3 --- /dev/null +++ b/js/frames/packM21.js @@ -0,0 +1,51 @@ +//Create objects for common properties across available frames +var bounds = {x:0.7573, y:0.8848, width:0.188, height:0.0733}; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/m15/m21/m15M21FrameW.png'}, + {name:'Blue Frame', src:'/img/frames/m15/m21/m15M21FrameU.png'}, + {name:'Black Frame', src:'/img/frames/m15/m21/m15M21FrameB.png'}, + {name:'Red Frame', src:'/img/frames/m15/m21/m15M21FrameR.png'}, + {name:'Green Frame', src:'/img/frames/m15/m21/m15M21FrameG.png'}, + {name:'White Basic Land', src:'/img/frames/m15/m21/m15M21FrameWL.png'}, + {name:'Blue Basic Land', src:'/img/frames/m15/m21/m15M21FrameUL.png'}, + {name:'Black Basic Land', src:'/img/frames/m15/m21/m15M21FrameBL.png'}, + {name:'Red Basic Land', src:'/img/frames/m15/m21/m15M21FrameRL.png'}, + {name:'Green Basic Land', src:'/img/frames/m15/m21/m15M21FrameGL.png'}, + {name:'White Power/Toughness', src:'/img/frames/m15/m21/m15M21PTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/m21/m15M21PTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/m21/m15M21PTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/m21/m15M21PTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/m21/m15M21PTG.png', bounds:bounds}, + {name:'Holo Stamp', src:'/img/frames/m15/m21/m15M21Stamp.png', bounds:{x:0.4727, y:0.892, width:0.0547, height:0.0391}}, + {name:'Chandra\'s Fire', src:'/img/frames/m15/m21/m15M21Fire.png', bounds:{x:0.0074, y:0.8215, width:0.9867, height:0.1524}} +]; +//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 = 'm21'; + loadScript('/js/frames/manaSymbolsM21.js'); + //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, color:'white', shadowX:0.0014, shadowY:0.001}, + type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, color:'white', shadowX:0.0014, shadowY:0.001}, + rules: {name:'Rules Text', text:'', x:0.0967, y:0.6453, width:0.8067, height:0.2381, 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', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packMargin.js b/js/frames/packMargin.js new file mode 100644 index 00000000..b07f3c52 --- /dev/null +++ b/js/frames/packMargin.js @@ -0,0 +1,40 @@ +//Create objects for common properties across available frames +var bounds = {x:-0.044, y:-1/35, width:1.088, height:37/35}; +//defines available frames +availableFrames = [ + {name:'Black Border Extension', src:'/img/frames/margins/blackBorderExtension.png', bounds:bounds}, + {name:'Borderless Border Extension', src:'/img/frames/margins/borderlessBorderExtension.png', bounds:bounds}, + {name:'Box Topper Border Extension', src:'/img/frames/margins/boxTopperBorderExtension.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({canvas:[1500, 2100, 0.044, 1/35], resetOthers:false}); + //sets card version + card.version = 'margin'; + //art stuff + if (card.artBounds.width == 1) { + card.artBounds.width += 0.044; + } + if (card.artBounds.x == 0) { + card.artBounds.x = -0.044; + card.artBounds.width += 0.044; + } + if (card.artBounds.height == 1) { + card.artBounds.height += 1/35; + } + if (card.artBounds.y == 0) { + card.artBounds.y = -1/35; + card.artBounds.height += 1/35; + } + autoFitArt(); + //runs anything that needs to run + drawTextBuffer(); + drawFrames(); + bottomInfoEdited(); + watermarkEdited(); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packModalShort.js b/js/frames/packModalShort.js new file mode 100644 index 00000000..db03858e --- /dev/null +++ b/js/frames/packModalShort.js @@ -0,0 +1,55 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/modal/short/shortModalMaskPinline.png', name:'Pinline'}, {src:'/img/frames/modal/modalMaskTitle.png', name:'Title'}, {src:'/img/frames/modal/short/shortMaskType.png', name:'Type'}, {src:'/img/frames/modal/short/shortModalMaskText.png', name:'Rules'}, {src:'/img/frames/modal/modalMaskReminder.png', name:'Flipside'}, {src:'/img/frames/modal/short/shortModalMaskBorder.png', name:'Border'}]; +var bounds = {x:0.7573, y:0.8848, width:0.188, height:0.0733}; +//defines available frames +availableFrames = [ + {name:'White Frame (Front)', src:'/img/frames/modal/short/shortModalFrameWF.png', masks:masks}, + {name:'Blue Frame (Front)', src:'/img/frames/modal/short/shortModalFrameUF.png', masks:masks}, + {name:'Black Frame (Front)', src:'/img/frames/modal/short/shortModalFrameBF.png', masks:masks}, + {name:'Red Frame (Front)', src:'/img/frames/modal/short/shortModalFrameRF.png', masks:masks}, + {name:'Green Frame (Front)', src:'/img/frames/modal/short/shortModalFrameGF.png', masks:masks}, + {name:'White Frame (Back)', src:'/img/frames/modal/short/shortModalFrameWB.png', masks:masks}, + {name:'Blue Frame (Back)', src:'/img/frames/modal/short/shortModalFrameUB.png', masks:masks}, + {name:'Black Frame (Back)', src:'/img/frames/modal/short/shortModalFrameBB.png', masks:masks}, + {name:'Red Frame (Back)', src:'/img/frames/modal/short/shortModalFrameRB.png', masks:masks}, + {name:'Green Frame (Back)', src:'/img/frames/modal/short/shortModalFrameGB.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/regular/m15PTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/regular/m15PTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/regular/m15PTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/regular/m15PTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/regular/m15PTG.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 = 'modalShort'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9224}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9213, y:0.7272, 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.1614, y:0.0522, width:0.7534, height:0.0543, oneLine:true, font:'belerenb', size:0.0381}, + type: {name:'Type', text:'', x:0.0854, y:0.7024, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.7647, width:0.828, height:0.1239, size:0.0362}, + flipsideType: {name:'Flipside Type', text:'', x:0.068, y:0.892, width:0.364, height:0.0391, size:0.0234, color:'white', oneLine:true, font:'belerenb'}, + flipSideReminder: {name:'Flipside Text', text:'', x:0.068, y:0.892, width:0.364, height:0.0391, size:0.0258, color:'white', oneLine:true, align:'right'}, + 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(); +//Only for the main version as the webpage loads: +if (!card.text) { + document.querySelector('#loadFrameVersion').click(); +} \ No newline at end of file diff --git a/js/frames/packModalShortNickname.js b/js/frames/packModalShortNickname.js new file mode 100644 index 00000000..84f84734 --- /dev/null +++ b/js/frames/packModalShortNickname.js @@ -0,0 +1,42 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/modal/shortNickname/maskTitle.png', name:'Title'}]; +var bounds = {x:0.0247, y:0.0405, width:0.926, height:0.1053}; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/modal/shortNickname/titleW.png', masks:masks, bounds:bounds}, + {name:'Blue Frame', src:'/img/frames/modal/shortNickname/titleU.png', masks:masks, bounds:bounds}, + {name:'Black Frame', src:'/img/frames/modal/shortNickname/titleB.png', masks:masks, bounds:bounds}, + {name:'Red Frame', src:'/img/frames/modal/shortNickname/titleR.png', masks:masks, bounds:bounds}, + {name:'Green Frame', src:'/img/frames/modal/shortNickname/titleG.png', masks:masks, 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 = 'modalShortNickname'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9224}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9213, y:0.7272, 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}, + nickname: {name:'Nickname', text:'', x:0.1614, y:0.0522, width:0.7534, height:0.0543, oneLine:true, font:'belerenb', size:0.0381}, + title: {name:'Title', text:'', x:0.14, y:0.1129, width:0.72, height:0.0243, oneLine:true, font:'mplantini', size:0.0229, color:'white', shadowX:0.0014, shadowY:0.001, align:'center'}, + type: {name:'Type', text:'', x:0.0854, y:0.7024, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.7647, width:0.828, height:0.1239, size:0.0362}, + flipsideType: {name:'Flipside Type', text:'', x:0.068, y:0.892, width:0.364, height:0.0391, size:0.0234, color:'white', oneLine:true, font:'belerenb'}, + flipSideReminder: {name:'Flipside Text', text:'', x:0.068, y:0.892, width:0.364, height:0.0391, size:0.0258, color:'white', oneLine:true, align:'right'}, + 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(); \ No newline at end of file diff --git a/js/frames/packPlanechase.js b/js/frames/packPlanechase.js new file mode 100644 index 00000000..5fe433f9 --- /dev/null +++ b/js/frames/packPlanechase.js @@ -0,0 +1,43 @@ +//defines available frames +availableFrames = [ + {name:'Planechase Frame', src:'/img/frames/planechase/planechaseFrame.png'} +]; +//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({canvas:[2100, 1500, 0, 0]}); + //sets card version + card.version = 'planechase'; + //rotation + card.landscape = true; + previewContext.translate(0, card.width / 2); + previewContext.rotate(-Math.PI / 2); + previewContext.scale(7/5, 5/7); + //art bounds + card.artBounds = {x:0.031, y:0.0434, width:0.9381, height:0.9147}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.7772, y:0.694, width:0.12, height:0.0334, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.5, y:0.7762, width:0.75, height:0.2305}; + resetWatermark(); + //text + loadTextOptions({ + title: {name:'Title', text:'', x:0.0854, y:0.0577, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0434, align:'center'}, + type: {name:'Type', text:'', x:0.2424, y:0.6667, width:0.5152, height:0.0543, oneLine:true, font:'belerenb', size:0.0339, align:'center'}, + rules: {name:'Rules Text', text:'', x:0.1158, y:0.7174, width:0.7684, height:0.2087, size:0.0362}, + }); + //bottom info + await loadBottomInfo({ + top: {text:'\uFFEE{elemidinfo-artist}', x:0.0647, y:0.9434, width:0.8707, height:0.0174, oneLine:true, font:'belerenbsc', size:0.0174, color:'white', outlineWidth:0.003, align:'center'}, + wizards: {text:'{elemidinfo-number} {elemidinfo-set} * {elemidinfo-language} {fontmplantin}\u2122 & \u00a9 ' + date.getFullYear() + ' Wizards of the Coast', x:0.0647, y:0.9614, width:0.8707, height:0.0167, oneLine:true, font:'gothammedium', size:0.0162, color:'white', align:'center', outlineWidth:0.003}, + bottom: {text:'NOT FOR SALE {fontmplantin}CardConjurer.com', x:0.0647, y:0.98, width:0.8707, height:0.0143, oneLine:true, font:'gothammedium', size:0.0143, color:'white', align:'center', outlineWidth:0.003} + }); + //runs other necessary functions + drawFrames(); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packPlaneswalkerNickname.js b/js/frames/packPlaneswalkerNickname.js new file mode 100644 index 00000000..4480041e --- /dev/null +++ b/js/frames/packPlaneswalkerNickname.js @@ -0,0 +1,47 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/planeswalker/regular/planeswalkerMaskPinline.png', name:'Pinline'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskTitle.png', name:'Title'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskType.png', name:'Type'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskBorder.png', name:'Border'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/planeswalker/nickname/planeswalkerNicknameFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/planeswalker/nickname/planeswalkerNicknameFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/planeswalker/nickname/planeswalkerNicknameFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/planeswalker/nickname/planeswalkerNicknameFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/planeswalker/nickname/planeswalkerNicknameFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/planeswalker/nickname/planeswalkerNicknameFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/planeswalker/nickname/planeswalkerNicknameFrameA.png', masks:masks}, + {name:'Colorless Frame', src:'/img/frames/planeswalker/nickname/planeswalkerNicknameFrameL.png', masks:masks} +]; +//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 = 'planeswalkerNickname'; + card.onload = '/js/frames/versionPlaneswalker.js'; + loadScript('/js/frames/versionPlaneswalker.js'); + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9153}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9227, y:0.5891, width:0.12, height:0.0381, 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.0481, width:0.9292, height:71/2100, oneLine:true, size:71/1638, align:'right', shadowX:-0.001, shadowY:0.0029, manaCost:true, manaSpacing:0}, + nickname: {name:'Nickname', text:'', x:0.0867, y:0.0372, width:0.8267, height:0.0548, oneLine:true, font:'belerenb', size:0.0381, color:'white', shadowX:0.0014, shadowY:0.001}, + title: {name:'Title', text:'', x:0.14, y:0.1015, width:0.72, height:0.0243, oneLine:true, font:'mplantini', size:0.0229, color:'white', shadowX:0.0014, shadowY:0.001, align:'center'}, + type: {name:'Type', text:'', x:0.0867, y:0.5625, width:0.8267, height:0.0548, oneLine:true, font:'belerenb', size:0.0324, color:'white', shadowX:0.0014, shadowY:0.001}, + ability0: {name:'Ability 1', text:'', x:0.18, y:0.6239, width:0.7467, height:0.0972, size:0.0353, color:'white', shadowX:0.0014, shadowY:0.001}, + ability1: {name:'Ability 2', text:'', x:0.18, y:0, width:0.7467, height:0.0972, size:0.0353, color:'white', shadowX:0.0014, shadowY:0.001}, + ability2: {name:'Ability 3', text:'', x:0.18, y:0, width:0.7467, height:0.0972, size:0.0353, color:'white', shadowX:0.0014, shadowY:0.001}, + ability3: {name:'Ability 4', text:'', x:0.18, y:0, width:0.7467, height:0, size:0.0353, color:'white', shadowX:0.0014, shadowY:0.001}, + loyalty: {name:'Loyalty', text:'', x:0.806, y:0.902, width:0.14, height:0.0372, size:0.0372, font:'belerenbsc', oneLine:true, align:'center', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packPlaneswalkerRegular.js b/js/frames/packPlaneswalkerRegular.js new file mode 100644 index 00000000..2b4af2f3 --- /dev/null +++ b/js/frames/packPlaneswalkerRegular.js @@ -0,0 +1,45 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/planeswalker/regular/planeswalkerMaskPinline.png', name:'Pinline'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskTitle.png', name:'Title'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskType.png', name:'Type'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskFrame.png', name:'Frame'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskBorder.png', name:'Border'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/planeswalker/regular/planeswalkerFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/planeswalker/regular/planeswalkerFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/planeswalker/regular/planeswalkerFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/planeswalker/regular/planeswalkerFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/planeswalker/regular/planeswalkerFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/planeswalker/regular/planeswalkerFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/planeswalker/regular/planeswalkerFrameA.png', masks:masks} +]; +//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 = 'planeswalkerRegular'; + card.onload = '/js/frames/versionPlaneswalker.js'; + loadScript('/js/frames/versionPlaneswalker.js'); + //art bounds + card.artBounds = {x:0.068, y:0.101, width:0.864, height:0.8143}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9227, y:0.5891, width:0.12, height:0.0381, 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.0481, 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.0867, y:0.0372, width:0.8267, height:0.0548, oneLine:true, font:'belerenb', size:0.0381}, + type: {name:'Type', text:'', x:0.0867, y:0.5625, width:0.8267, height:0.0548, oneLine:true, font:'belerenb', size:0.0324}, + ability0: {name:'Ability 1', text:'', x:0.18, y:0.6239, width:0.7467, height:0.0972, size:0.0353}, + ability1: {name:'Ability 2', text:'', x:0.18, y:0, width:0.7467, height:0.0972, size:0.0353}, + ability2: {name:'Ability 3', text:'', x:0.18, y:0, width:0.7467, height:0.0972, size:0.0353}, + ability3: {name:'Ability 4', text:'', x:0.18, y:0, width:0.7467, height:0, size:0.0353}, + loyalty: {name:'Loyalty', text:'', x:0.806, y:0.902, width:0.14, height:0.0372, size:0.0372, font:'belerenbsc', oneLine:true, align:'center', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packPlaneswalkerTall.js b/js/frames/packPlaneswalkerTall.js new file mode 100644 index 00000000..6cee3ef8 --- /dev/null +++ b/js/frames/packPlaneswalkerTall.js @@ -0,0 +1,45 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/planeswalker/tall/planeswalkerTallMaskPinline.png', name:'Pinline'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskTitle.png', name:'Title'}, {src:'/img/frames/planeswalker/tall/planeswalkerTallMaskType.png', name:'Type'}, {src:'/img/frames/planeswalker/tall/planeswalkerTallMaskFrame.png', name:'Frame'}, {src:'/img/frames/planeswalker/regular/planeswalkerMaskBorder.png', name:'Border'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/planeswalker/tall/planeswalkerTallW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/planeswalker/tall/planeswalkerTallU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/planeswalker/tall/planeswalkerTallB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/planeswalker/tall/planeswalkerTallR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/planeswalker/tall/planeswalkerTallG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/planeswalker/tall/planeswalkerTallM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/planeswalker/tall/planeswalkerTallA.png', masks:masks} +]; +//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 = 'planeswalkerTall'; + card.onload = '/js/frames/versionPlaneswalker.js'; + loadScript('/js/frames/versionPlaneswalker.js'); + //art bounds + card.artBounds = {x:0.068, y:0.101, width:0.864, height:0.8143}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9227, y:0.5234, width:0.12, height:0.0381, 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.0481, 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.0867, y:0.0372, width:0.8267, height:0.0548, oneLine:true, font:'belerenb', size:0.0381}, + type: {name:'Type', text:'', x:0.0867, y:0.4967, width:0.8267, height:0.0548, oneLine:true, font:'belerenb', size:0.0324}, + ability0: {name:'Ability 1', text:'', x:0.18, y:0.5581, width:0.7467, height:0.0896, size:0.0353}, + ability1: {name:'Ability 2', text:'', x:0.18, y:0, width:0.7467, height:0.0896, size:0.0353}, + ability2: {name:'Ability 3', text:'', x:0.18, y:0, width:0.7467, height:0.0896, size:0.0353}, + ability3: {name:'Ability 4', text:'', x:0.18, y:0, width:0.7467, height:0.0896, size:0.0353}, + loyalty: {name:'Loyalty', text:'', x:0.806, y:0.902, width:0.14, height:0.0372, size:0.0372, font:'belerenbsc', oneLine:true, align:'center', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packPromoNickname.js b/js/frames/packPromoNickname.js new file mode 100644 index 00000000..7bda6f70 --- /dev/null +++ b/js/frames/packPromoNickname.js @@ -0,0 +1,71 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/promo/m15PromoMaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/promo/m15PromoMaskType.png', name:'Type'}, {src:'/img/frames/promo/m15PromoMaskRules.png', name:'Rules'}, {src:'/img/frames/m15/regular/m15MaskBorder.png', name:'Border'}]; +var masks2 = [{src:'/img/frames/m15/nickname/m15MaskNicknameLegendCrownStrokeless.png', name:'Strokeless Crown'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/m15/nickname/m15NicknameMaskTrueName.png', name:'True Title'}]; +var masks3 = [{src:'/img/frames/m15/nickname/m15MaskNicknameTitleStrokeless.png', name:'Strokeless Title'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/m15/nickname/m15NicknameMaskTrueName.png', name:'True Title'}]; +var bounds = {x:0.7573, y:0.8848, width:0.188, height:0.0733}; +var bounds2 = {x:0.024, y:0.0172, width:0.952, height:0.1286}; +var bounds3 = {x:0.0494, y:0.0405, width:0.9014, height:0.1053}; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/promo/nickname/m15PromoNicknameFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/promo/nickname/m15PromoNicknameFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/promo/nickname/m15PromoNicknameFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/promo/nickname/m15PromoNicknameFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/promo/nickname/m15PromoNicknameFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/promo/nickname/m15PromoNicknameFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/promo/nickname/m15PromoNicknameFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/promo/nickname/m15PromoNicknameFrameL.png', masks:masks}, + {name:'White Crown', src:'/img/frames/m15/nickname/m15NicknameCrownW.png', masks:masks2, bounds:bounds2}, + {name:'Blue Crown', src:'/img/frames/m15/nickname/m15NicknameCrownU.png', masks:masks2, bounds:bounds2}, + {name:'Black Crown', src:'/img/frames/m15/nickname/m15NicknameCrownB.png', masks:masks2, bounds:bounds2}, + {name:'Red Crown', src:'/img/frames/m15/nickname/m15NicknameCrownR.png', masks:masks2, bounds:bounds2}, + {name:'Green Crown', src:'/img/frames/m15/nickname/m15NicknameCrownG.png', masks:masks2, bounds:bounds2}, + {name:'Multicolored Crown', src:'/img/frames/m15/nickname/m15NicknameCrownM.png', masks:masks2, bounds:bounds2}, + {name:'Artifact Crown', src:'/img/frames/m15/nickname/m15NicknameCrownA.png', masks:masks2, bounds:bounds2}, + {name:'Land Crown', src:'/img/frames/m15/nickname/m15NicknameCrownL.png', masks:masks2, bounds:bounds2}, + {name:'White Title', src:'/img/frames/m15/nickname/m15NicknameTitleW.png', masks:masks3, bounds:bounds3}, + {name:'Blue Title', src:'/img/frames/m15/nickname/m15NicknameTitleU.png', masks:masks3, bounds:bounds3}, + {name:'Black Title', src:'/img/frames/m15/nickname/m15NicknameTitleB.png', masks:masks3, bounds:bounds3}, + {name:'Red Title', src:'/img/frames/m15/nickname/m15NicknameTitleR.png', masks:masks3, bounds:bounds3}, + {name:'Green Title', src:'/img/frames/m15/nickname/m15NicknameTitleG.png', masks:masks3, bounds:bounds3}, + {name:'Multicolored Title', src:'/img/frames/m15/nickname/m15NicknameTitleM.png', masks:masks3, bounds:bounds3}, + {name:'Artifact Title', src:'/img/frames/m15/nickname/m15NicknameTitleA.png', masks:masks3, bounds:bounds3}, + {name:'Land Title', src:'/img/frames/m15/nickname/m15NicknameTitleL.png', masks:masks3, bounds:bounds3}, + {name:'White Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTC.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 = 'promoNickname'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9224}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9213, y:0.6743, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.5, y:0.8177, width:0.75, height:0.1472}; + 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}, + nickname: {name:'Nickname', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381, color:'white', shadowX:0.0014, shadowY:0.001}, + title: {name:'Title', text:'', x:0.14, y:0.1129, width:0.72, height:0.0243, oneLine:true, font:'mplantini', size:0.0229, color:'white', shadowX:0.0014, shadowY:0.001, align:'center'}, + type: {name:'Type', text:'', x:0.0854, y:0.65, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, color:'white', shadowX:0.0014, shadowY:0.001}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.7143, width:0.828, height:0.2048, size:0.0362, color:'white', shadowX:0.0014, shadowY:0.001}, + 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', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packPromoRegular.js b/js/frames/packPromoRegular.js new file mode 100644 index 00000000..b2f64f67 --- /dev/null +++ b/js/frames/packPromoRegular.js @@ -0,0 +1,50 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/promo/m15PromoMaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/promo/m15PromoMaskType.png', name:'Type'}, {src:'/img/frames/promo/m15PromoMaskRules.png', name:'Rules'}, {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/promo/regular/m15PromoFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/promo/regular/m15PromoFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/promo/regular/m15PromoFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/promo/regular/m15PromoFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/promo/regular/m15PromoFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/promo/regular/m15PromoFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/promo/regular/m15PromoFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/promo/regular/m15PromoFrameL.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/regular/m15PTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/regular/m15PTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/regular/m15PTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/regular/m15PTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/regular/m15PTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/regular/m15PTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/regular/m15PTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/regular/m15PTC.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 = 'promoRegular'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9224}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9213, y:0.6743, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.5, y:0.8177, width:0.75, height:0.1472}; + 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, color:'white', shadowX:0.0014, shadowY:0.001}, + type: {name:'Type', text:'', x:0.0854, y:0.65, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, color:'white', shadowX:0.0014, shadowY:0.001}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.7143, width:0.828, height:0.2048, size:0.0362, color:'white', shadowX:0.0014, shadowY:0.001}, + 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', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packSagaRegular.js b/js/frames/packSagaRegular.js new file mode 100644 index 00000000..02ac42ec --- /dev/null +++ b/js/frames/packSagaRegular.js @@ -0,0 +1,44 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/saga/sagaMaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/saga/sagaMaskType.png', name:'Type'}, {src:'/img/frames/saga/sagaMaskFrame.png', name:'Frame'}, {src:'/img/frames/saga/sagaMaskBanner.png', name:'Banner'}, {src:'/img/frames/saga/sagaMaskBorder.png', name:'Border'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/saga/regular/sagaFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/saga/regular/sagaFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/saga/regular/sagaFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/saga/regular/sagaFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/saga/regular/sagaFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/saga/regular/sagaFrameM.png', masks:masks}, +]; +//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 = 'sagaRegular'; + card.onload = '/js/frames/versionSaga.js'; + loadScript('/js/frames/versionSaga.js'); + //art bounds + card.artBounds = {x:0.5, y:0.1124, width:0.4247, height:0.7253}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9227, y:0.8739, width:0.12, height:0.0381, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.3027, y:0.4748, width:0.3547, height:0.6767}; + 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.8481, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324}, + ability0: {name:'Ability 1', text:'', x:0.1334, y:0.2896, width:0.35, height:0.1786, size:0.0305}, + ability1: {name:'Ability 2', text:'', x:0.1334, y:0, width:0.35, height:0.1786, size:0.0305}, + ability2: {name:'Ability 3', text:'', x:0.1334, y:0, width:0.35, height:0.1786, size:0.0305}, + ability3: {name:'Ability 4', text:'', x:0.1334, y:0, width:0.35, height:0, size:0.0305}, + reminder: {name:'Reminder Text', text:'{i}(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)', x:0.0867, y:0.1129, width:0.404, height:0.1772, size:0.03, shadowColor:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packSeventh.js b/js/frames/packSeventh.js new file mode 100644 index 00000000..bbff24c1 --- /dev/null +++ b/js/frames/packSeventh.js @@ -0,0 +1,54 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/seventh/regular/seventhMaskPinline.png', name:'Pinline'}, {src:'/img/frames/seventh/regular/seventhMaskRules.png', name:'Rules'}, {src:'/img/frames/seventh/regular/seventhMaskFrame.png', name:'Frame'}, {src:'/img/frames/seventh/regular/seventhMaskBorder.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/seventh/regular/seventhFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/seventh/regular/seventhFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/seventh/regular/seventhFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/seventh/regular/seventhFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/seventh/regular/seventhFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/seventh/regular/seventhFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/seventh/regular/seventhFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/seventh/regular/seventhFrameCL.png', masks:masks}, + {name:'White Land Frame', src:'/img/frames/seventh/regular/seventhFrameWL.png', masks:masks}, + {name:'Blue Land Frame', src:'/img/frames/seventh/regular/seventhFrameUL.png', masks:masks}, + {name:'Black Land Frame', src:'/img/frames/seventh/regular/seventhFrameBL.png', masks:masks}, + {name:'Red Land Frame', src:'/img/frames/seventh/regular/seventhFrameRL.png', masks:masks}, + {name:'Green Land Frame', src:'/img/frames/seventh/regular/seventhFrameGL.png', masks:masks}, + {name:'DCI Star', src:'/img/frames/seventh/seventhFoilStamp.png', bounds:{x:0.1089, y:0.8345, width:0.4033, height:0.1107}} +]; +//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 = 'seventh'; + //art bounds + card.artBounds = {x:0.117, y:0.0973, width:0.7662, height:0.4466}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.8914, y:0.5748, width:0.12, height:0.0381, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.18, y:0.64, width:0.64, height:0.24}; + resetWatermark(); + //text + loadTextOptions({ + mana: {name:'Mana Cost', text:'', x:0.108, y:0.0505, width:0.8147, height:72/2100, oneLine:true, size:72/1638, align:'right', manaCost:true, manaSpacing:0.0014}, + title: {name:'Title', text:'', x:0.108, y:0.0448, width:0.784, height:0.0405, oneLine:true, font:'goudymedieval', size:0.0405, color:'white', shadowX:0.0034, shadowY:0.0024}, + type: {name:'Type', text:'', x:0.1074, y:0.5486, width:0.7852, height:0.0543, oneLine:true, size:0.032, color:'white', shadowX:0.0021, shadowY:0.0015}, + rules: {name:'Rules Text', text:'', x:0.126, y:0.6074, width:0.748, height:0.2724, size:0.0362}, + pt: {name:'Power/Toughness', text:'', x:0.8, y:0.8981, width:0.1367, height:0.0453, size:0.0453, oneLine:true, align:'center', color:'white', shadowX:0.0034, shadowY:0.0024} + }); + //bottom info + loadBottomInfo({ + top: {text:'Illus: {elemidinfo-artist}', x:0.0614, y:0.8915, width:0.8774, height:0.0281, oneLine:true, size:0.0281, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'}, + wizards: {text:'\u2122 & \u00a9 ' + date.getFullYear() + ' Wizards of the Coast', x:0.0614, y:0.921, width:0.8774, height:0.0172, oneLine:true, size:0.0172, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'}, + bottom: {text:'NOT FOR SALE CardConjurer.com', x:0.0614, y:0.94, width:0.8774, height:0.0143, oneLine:true, size:0.0143, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packSeventhTextless.js b/js/frames/packSeventhTextless.js new file mode 100644 index 00000000..5a42c52f --- /dev/null +++ b/js/frames/packSeventhTextless.js @@ -0,0 +1,49 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/seventh/textless/seventhTextlessMaskPinline.png', name:'Pinline'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/seventh/textless/seventhTextlessFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/seventh/textless/seventhTextlessFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/seventh/textless/seventhTextlessFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/seventh/textless/seventhTextlessFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/seventh/textless/seventhTextlessFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/seventh/textless/seventhTextlessFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/seventh/textless/seventhTextlessFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/seventh/textless/seventhTextlessFrameL.png', masks:masks} +]; +//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 = 'seventhTextless'; + //art bounds + card.artBounds = {x:0.116, y:0.0977, width:0.768, height:0.7772}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.8914, y:0.9224, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:-1, y:-1, width:0.0007, height:0.0005}; + resetWatermark(); + //text + loadTextOptions({ + mana: {name:'Mana Cost', text:'', x:0.108, y:0.0486, width:0.8147, height:72/2100, oneLine:true, size:72/1638, align:'right', manaCost:true, manaSpacing:0}, + title: {name:'Title', text:'', x:0.108, y:0.0448, width:0.784, height:0.0405, oneLine:true, font:'goudymedieval', size:0.0405, color:'white', shadowX:0.0034, shadowY:0.0024}, + pt: {name:'Power/Toughness', text:'', x:0.8, y:0.8981, width:0.1367, height:0.0453, size:0.0453, oneLine:true, align:'center', color:'white', shadowX:0.0034, shadowY:0.0024} + }); + //bottom info + loadBottomInfo({ + top: {text:'Illus: {elemidinfo-artist}', x:0.0614, y:0.8915, width:0.8774, height:0.0281, oneLine:true, size:0.0281, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'}, + wizards: {text:'\u2122 & \u00a9 ' + date.getFullYear() + ' Wizards of the Coast', x:0.0614, y:0.921, width:0.8774, height:0.0172, oneLine:true, size:0.0172, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'}, + bottom: {text:'NOT FOR SALE CardConjurer.com', x:0.0614, y:0.94, width:0.8774, height:0.0143, oneLine:true, size:0.0143, align:'center', shadowX:0.0027, shadowY:0.002, color:'white'} + }); +} +//loads available frames +loadFramePack(); +//Only for the main version as the webpage loads: +if (!card.text) { + document.querySelector('#loadFrameVersion').click(); +} \ No newline at end of file diff --git a/js/frames/packStorybook.js b/js/frames/packStorybook.js new file mode 100644 index 00000000..2eacbeb5 --- /dev/null +++ b/js/frames/packStorybook.js @@ -0,0 +1,53 @@ +//Create objects for common properties across available frames +var bounds = {x:0.7427, y:0.8858, width:0.2213, height:0.0658}; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/storybook/storybookFrameW.png'}, + {name:'Blue Frame', src:'/img/frames/storybook/storybookFrameU.png'}, + {name:'Black Frame', src:'/img/frames/storybook/storybookFrameB.png'}, + {name:'Red Frame', src:'/img/frames/storybook/storybookFrameR.png'}, + {name:'Green Frame', src:'/img/frames/storybook/storybookFrameG.png'}, + {name:'Colorless Frame', src:'/img/frames/storybook/storybookFrameC.png'}, + {name:'White Power/Toughness', src:'/img/frames/storybook/storybookPTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/storybook/storybookPTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/storybook/storybookPTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/storybook/storybookPTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/storybook/storybookPTG.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/storybook/storybookPTC.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 = 'storybook'; + //art bounds + card.artBounds = {x:0.0334, y:0.0258, width:0.9367, height:0.5596}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.8854, y:0.5929, width:0.0494, height:0.0353, vertical:'center', horizontal: 'center'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.72, y:0.7681, width:0.3867, height:0.2358}; + 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.1454, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381}, + type: {name:'Type', text:'', x:0.2134, y:0.5667, width:0.5732, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, align:'center'}, + rules: {name:'Rules Text', text:'', x:0.0854, y:0.7358, width:0.3947, height:0.15, size:0.0353}, + rules2: {name:'Rules Text (Right)', text:'', x:0.5267, y:0.65, width:0.3867, height:0.2358, size:0.0353}, + pt: {name:'Power/Toughness', text:'', x:0.7934, y:0.9029, width:0.14, height:0.0372, size:0.0372, font:'belerenbsc', oneLine:true, align:'center'}, + mana2: {name:'Adventure Mana Cost', text:'', x:0.0814, y:0.6391, width:0.4, height:60/2100, oneLine:true, size:60/1638, color:'white', shadowX:-0.001, shadowY:0.0029, align:'right', manaCost:true}, + title2: {name:'Adventure Title', text:'', x:0.0814, y:0.6391, width:0.4, height:0.0296, size:0.0296, color:'white', shadowX:0.0014, shadowY:0.001, oneLine:true, font:'belerenb'}, + type2: {name:'Adventure Type', text:'', x:0.0814, y:0.6839, width:0.4, height:0.0296, size:0.0296, color:'white', shadowX:0.0014, shadowY:0.001, oneLine:true, font:'belerenb'}, + }); +} +//loads available frames +loadFramePack(); +//Only for the main version as the webpage loads: +if (!card.text) { + document.querySelector('#loadFrameVersion').click(); +} \ No newline at end of file diff --git a/js/frames/packTextlessGenericShowcase.js b/js/frames/packTextlessGenericShowcase.js new file mode 100644 index 00000000..f45b73cc --- /dev/null +++ b/js/frames/packTextlessGenericShowcase.js @@ -0,0 +1,48 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/textless/m15TextlessMaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/textless/m15TextlessMaskType.png', name:'Type'}, {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/textless/genericShowcase/m15TextlessGenericShowcaseFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/textless/genericShowcase/m15TextlessGenericShowcaseFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/textless/genericShowcase/m15TextlessGenericShowcaseFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/textless/genericShowcase/m15TextlessGenericShowcaseFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/textless/genericShowcase/m15TextlessGenericShowcaseFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/textless/genericShowcase/m15TextlessGenericShowcaseFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/textless/genericShowcase/m15TextlessGenericShowcaseFrameA.png', masks:masks}, + {name:'Colorless Frame', src:'/img/frames/textless/genericShowcase/m15TextlessGenericShowcaseFrameL.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTC.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 = 'textlessGenericShowcase'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9224}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9213, y:0.8439, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:-1, y:-1, width:0.0007, height:0.0005}; + resetWatermark(); + //text + loadTextOptions({ + title: {name:'Title', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381, color:'white', shadowX:0.0014, shadowY:0.001}, + type: {name:'Type', text:'', x:0.0854, y:0.8196, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, shadowX:0.0014, shadowY:0.001, color:'white'}, + 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', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packTextlessInvention.js b/js/frames/packTextlessInvention.js new file mode 100644 index 00000000..38beb653 --- /dev/null +++ b/js/frames/packTextlessInvention.js @@ -0,0 +1,51 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/textless/m15TextlessMaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/textless/m15TextlessMaskType.png', name:'Type'}, {src:'/img/frames/textless/invention/m15TextlessMaskInvention.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:'Invention Frame', src:'/img/frames/textless/invention/m15TextlessFrameInvention.png', masks:masks}, + {name:'White Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionA.png', masks:masks}, + {name:'Colorless Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionL.png', masks:masks}, + {name:'Phyrexian Frame', src:'/img/frames/textless/invention/m15TextlessFrameInventionPhyrexian.png', masks:masks}, + {name:'Invention Power/Toughness', src:'/img/frames/m15/invention/inventionPT.png', bounds:bounds}, + {name:'White Power/Toughness', src:'/img/frames/m15/regular/m15PTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/regular/m15PTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/regular/m15PTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/regular/m15PTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/regular/m15PTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/regular/m15PTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/regular/m15PTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/regular/m15PTC.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 = 'textlessInvention'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9224}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9213, y:0.8439, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:-1, y:-1, width:0.0007, height:0.0005}; + resetWatermark(); + //text + loadTextOptions({ + title: {name:'Title', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381, shadow:'white', shadowX:-0.0007, shadowY:0.0005}, + type: {name:'Type', text:'', x:0.0854, y:0.8196, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, shadow:'white', shadowX:-0.0007, shadowY:0.0005}, + 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', shadow:'white', shadowX:-0.0007, shadowY:0.0005} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packTokenRegular.js b/js/frames/packTokenRegular.js new file mode 100644 index 00000000..91db7826 --- /dev/null +++ b/js/frames/packTokenRegular.js @@ -0,0 +1,49 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/token/tokenMaskRegularPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/token/tokenMaskRegularType.png', name:'Type'}, {src:'/img/frames/token/tokenMaskRegularRules.png', name:'Rules'}, {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/token/regular/tokenFrameWRegular.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/token/regular/tokenFrameURegular.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/token/regular/tokenFrameBRegular.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/token/regular/tokenFrameRRegular.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/token/regular/tokenFrameGRegular.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/token/regular/tokenFrameMRegular.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/token/regular/tokenFrameARegular.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/token/regular/tokenFrameLRegular.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/regular/m15PTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/regular/m15PTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/regular/m15PTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/regular/m15PTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/regular/m15PTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/regular/m15PTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/regular/m15PTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/regular/m15PTC.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 = 'promoRegular'; + //art bounds + card.artBounds = {x:0.04, y:0.0286, width:0.92, height:0.8953}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9213, y:0.6743, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:0.5, y:0.8177, width:0.75, height:0.1472}; + resetWatermark(); + //text + loadTextOptions({ + title: {name:'Title', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381, color:'white', align:'center'}, + type: {name:'Type', text:'', x:0.0854, y:0.65, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.7143, width:0.828, height:0.2048, 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(); \ No newline at end of file diff --git a/js/frames/packTokenTall.js b/js/frames/packTokenTall.js new file mode 100644 index 00000000..15e5281a --- /dev/null +++ b/js/frames/packTokenTall.js @@ -0,0 +1,49 @@ +//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/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/token/tall/tokenFrameWTall.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/token/tall/tokenFrameUTall.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/token/tall/tokenFrameBTall.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/token/tall/tokenFrameRTall.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/token/tall/tokenFrameGTall.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/token/tall/tokenFrameMTall.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/token/tall/tokenFrameATall.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/token/tall/tokenFrameLTall.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/regular/m15PTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/regular/m15PTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/regular/m15PTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/regular/m15PTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/regular/m15PTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/regular/m15PTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/regular/m15PTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/regular/m15PTC.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 = 'promoTall'; + //art bounds + card.artBounds = {x:0.04, y:0.0286, width:0.92, height:0.8953}; + 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({ + title: {name:'Title', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381, color:'white', align:'center'}, + 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(); \ No newline at end of file diff --git a/js/frames/packTokenTextless.js b/js/frames/packTokenTextless.js new file mode 100644 index 00000000..9baf38c8 --- /dev/null +++ b/js/frames/packTokenTextless.js @@ -0,0 +1,48 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/token/tokenMaskTextlessPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/token/tokenMaskTextlessType.png', name:'Type'}, {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/token/textless/tokenFrameWTextless.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/token/textless/tokenFrameUTextless.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/token/textless/tokenFrameBTextless.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/token/textless/tokenFrameRTextless.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/token/textless/tokenFrameGTextless.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/token/textless/tokenFrameMTextless.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/token/textless/tokenFrameATextless.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/token/textless/tokenFrameLTextless.png', masks:masks}, + {name:'White Power/Toughness', src:'/img/frames/m15/regular/m15PTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/regular/m15PTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/regular/m15PTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/regular/m15PTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/regular/m15PTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/regular/m15PTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/regular/m15PTA.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/regular/m15PTC.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 = 'promoTextless'; + //art bounds + card.artBounds = {x:0.04, y:0.0286, width:0.92, height:0.8953}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.9213, y:0.8439, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:-1, y:-1, width:0.0007, height:0.0005}; + resetWatermark(); + //text + loadTextOptions({ + title: {name:'Title', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381, color:'white', align:'center'}, + type: {name:'Type', text:'', x:0.0854, y:0.8196, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324}, + 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(); \ No newline at end of file diff --git a/js/frames/packUnstable.js b/js/frames/packUnstable.js new file mode 100644 index 00000000..9ec5ad68 --- /dev/null +++ b/js/frames/packUnstable.js @@ -0,0 +1,36 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/textless/m15TextlessMaskPinline.png', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/textless/m15TextlessMaskType.png', name:'Type'}, {src:'/img/frames/m15/regular/m15MaskBorder.png', name:'Border'}]; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/unstable/unstableFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/unstable/unstableFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/unstable/unstableFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/unstable/unstableFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/unstable/unstableFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/unstable/unstableFrameM.png', masks:masks}, + {name:'Colorless Frame', src:'/img/frames/unstable/unstableFrameC.png', masks:masks} +]; +//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 = 'unstable'; + //art bounds + card.artBounds = {x:0, y:0, width:1, height:0.9196}; + autoFitArt(); + //set symbol bounds + card.setSymbolBounds = {x:0.5, y:-0.0639, width:0.12, height:0.0410, vertical:'center', horizontal: 'center'}; + resetSetSymbol(); + //watermark bounds + card.watermarkBounds = {x:-1, y:-1, width:0.0007, height:0.0005}; + resetWatermark(); + //text + loadTextOptions({ + title: {name:'Title', text:'', x:0.0854, y:0.0024, width:0.8292, height:0.0639, oneLine:true, font:'belerenb', size:0.0381, color:'white', align:'center'}, + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/packZendikarRising.js b/js/frames/packZendikarRising.js new file mode 100644 index 00000000..f4aa1e67 --- /dev/null +++ b/js/frames/packZendikarRising.js @@ -0,0 +1,73 @@ +//Create objects for common properties across available frames +var masks = [{src:'/img/frames/m15/zendikarRising/m15ZendikarRisingMaskPinline.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/zendikarRising/m15ZendikarRisingMaskText.png', name:'Rules'}, {src:'/img/frames/m15/zendikarRising/m15ZendikarRisingMaskFrame.png', name:'Frame'}, {src:'/img/frames/m15/zendikarRising/m15ZendikarRisingMaskBorder.png', name:'Border'}]; +var bounds = {x:0.7573, y:0.8848, width:0.188, height:0.0733}; +var bounds2 = {x:0.0294, y:0.0234, width:0.9414, height:0.1167}; +var bounds3 = {x:0.0374, y:0.0262, width:0.9254, height:0.1091}; +//defines available frames +availableFrames = [ + {name:'White Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameW.png', masks:masks}, + {name:'Blue Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameU.png', masks:masks}, + {name:'Black Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameB.png', masks:masks}, + {name:'Red Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameR.png', masks:masks}, + {name:'Green Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameG.png', masks:masks}, + {name:'Multicolored Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameM.png', masks:masks}, + {name:'Artifact Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameA.png', masks:masks}, + {name:'Land Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameL.png', masks:masks}, + {name:'Colorless Frame', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameC.png', masks:masks}, + {name:'Colorless Frame (2)', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingFrameCAlt.png', masks:masks}, + {name:'White Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleW.png', bounds:bounds3}, + {name:'Blue Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleU.png', bounds:bounds3}, + {name:'Black Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleB.png', bounds:bounds3}, + {name:'Red Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleR.png', bounds:bounds3}, + {name:'Green Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleG.png', bounds:bounds3}, + {name:'Multicolored Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleM.png', bounds:bounds3}, + {name:'Artifact Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleA.png', bounds:bounds3}, + {name:'Land Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleL.png', bounds:bounds3}, + {name:'Colorless Title', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingTitleC.png', bounds:bounds3}, + {name:'White Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownW.png', bounds:bounds2}, + {name:'Blue Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownU.png', bounds:bounds2}, + {name:'Black Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownB.png', bounds:bounds2}, + {name:'Red Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownR.png', bounds:bounds2}, + {name:'Green Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownG.png', bounds:bounds2}, + {name:'Multicolored Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownM.png', bounds:bounds2}, + {name:'Artifact Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownA.png', bounds:bounds2}, + {name:'Land Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownL.png', bounds:bounds2}, + {name:'Colorless Crown', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingCrownC.png', bounds:bounds2}, + {name:'White Power/Toughness', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingPTW.png', bounds:bounds}, + {name:'Blue Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTU.png', bounds:bounds}, + {name:'Black Power/Toughness', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingPTB.png', bounds:bounds}, + {name:'Red Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTR.png', bounds:bounds}, + {name:'Green Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTG.png', bounds:bounds}, + {name:'Multicolored Power/Toughness', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingPTM.png', bounds:bounds}, + {name:'Artifact Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTA.png', bounds:bounds}, + {name:'Land Power/Toughness', src:'/img/frames/m15/nickname/m15NicknamePTC.png', bounds:bounds}, + {name:'Colorless Power/Toughness', src:'/img/frames/m15/zendikarRising/m15ZendikarRisingPTC.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 = 'genericShowcase'; + //art bounds + card.artBounds = {x:0.04, y:0.0286, width:0.92, height:0.8648}; + 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, color:'white', shadowX:0.0014, shadowY:0.001}, + type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, color:'white', shadowX:0.0014, shadowY:0.001}, + rules: {name:'Rules Text', text:'', x:0.086, y:0.6303, width:0.828, height:0.2875, size:0.0362, color:'white', shadowX:0.0014, shadowY:0.001}, + 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', color:'white'} + }); +} +//loads available frames +loadFramePack(); \ No newline at end of file diff --git a/js/frames/versionPlaneswalker.js b/js/frames/versionPlaneswalker.js new file mode 100644 index 00000000..681db1b5 --- /dev/null +++ b/js/frames/versionPlaneswalker.js @@ -0,0 +1,184 @@ +//checks to see if it needs to run +if (!loadedVersions.includes('/js/frames/versionPlaneswalker.js')) { + loadedVersions.push('/js/frames/versionPlaneswalker.js'); + sizeCanvas('planeswalker'); + document.querySelector('#creator-menu-tabs').innerHTML += '

Planeswalker

'; + var newHTML = document.createElement('div'); + newHTML.id = 'creator-menu-planeswalker'; + newHTML.classList.add('hidden'); + newHTML.innerHTML = ` +
+
Adjust the height (first input) and loyalty cost (second input) of each Planeswalker ability
+
First Ability:
+
+ + +
+
Second Ability:
+
+ + +
+
Third Ability:
+
+ + +
+
Fourth Ability:
+
+ + +
+
Invert textbox colors:
+ +
For two-ability planeswalkers only:
+
`; + if (!card.planeswalker) { + card.planeswalker = {abilities:['+1', '0', '-7', ''], count:3, x:0.1167, width:0.8094}; + } + window.planeswalkerAbilityLayout = [[[0.7467], [0.6953, 0.822], [0.6639, 0.7467, 0.8362], [0.6505, 0.72, 0.7905, 0.861]],[[0.72], [0.6391, 0.801], [0.5986, 0.72, 0.8415], [0.5986, 0.6796, 0.7605, 0.8415]]]; + document.querySelector('#creator-menu-sections').appendChild(newHTML); + var plusIcon = new Image(); + plusIcon.src = '/img/frames/planeswalker/planeswalkerPlus.png'; + var minusIcon = new Image(); + minusIcon.src = '/img/frames/planeswalker/planeswalkerMinus.png'; + var neutralIcon = new Image(); + neutralIcon.src = '/img/frames/planeswalker/planeswalkerNeutral.png'; + var lightToDark = new Image(); + lightToDark.src = '/img/frames/planeswalker/abilityLineOdd.png'; + var darkToLight = new Image(); + darkToLight.src = '/img/frames/planeswalker/abilityLineEven.png'; + var planeswalkerTextMask = new Image(); + planeswalkerTextMask.onload = function(){fixPlaneswalkerInputs(planeswalkerEdited);} + planeswalkerTextMask.src = '/img/frames/planeswalker/planeswalkerMaskText.png'; + var lightColor = 'white'; + var darkColor = '#a4a4a4'; +} + +function planeswalkerEdited() { + var planeswalkerTall = 0; + if (card.version == 'planeswalkerTall') { + planeswalkerTall = 1; + if (!planeswalkerTextMask.src.includes('Tall')) { + planeswalkerTextMask.src = '/img/frames/planeswalker/tall/planeswalkerTallMaskRules.png'; + } + } else { + if (planeswalkerTextMask.src.includes('Tall')) { + planeswalkerTextMask.src = '/img/frames/planeswalker/planeswalkerMaskText.png'; + } + } + card.planeswalker.abilities[0] = document.querySelector('#planeswalker-cost-0').value; + card.planeswalker.abilities[1] = document.querySelector('#planeswalker-cost-1').value; + card.planeswalker.abilities[2] = document.querySelector('#planeswalker-cost-2').value; + card.planeswalker.abilities[3] = document.querySelector('#planeswalker-cost-3').value; + card.planeswalker.count = 0; + var lastY = card.text.ability0.y; + for (var i = 0; i < 4; i ++) { + card.text['ability' + i].y = lastY; + var height = parseFloat((parseInt(document.querySelector('#planeswalker-height-' + i).value) / card.height).toFixed(4)); + if (height > 0) { + card.planeswalker.count ++; + } + card.text['ability' + i].height = height; + lastY += height; + } + fixPlaneswalkerInputs(); + var transitionHeight = scaleHeight(0.0048); + planeswalkerContext.clearRect(0, 0, planeswalkerCanvas.width, planeswalkerCanvas.height); + for (var i = 0; i < card.planeswalker.count; i ++) { + var x = scaleX(card.planeswalker.x); + var y = scaleY(card.text['ability' + i].y); + var width = scaleWidth(card.planeswalker.width); + var height = scaleHeight(card.text['ability' + i].height); + if (i == 0) { + y -= scaleHeight(0.1); + height += scaleHeight(0.1); + } else if (i == card.planeswalker.count - 1) { + height += scaleHeight(0.5); + } + if (i % 2 == 0) { + planeswalkerContext.fillStyle = lightColor; + planeswalkerContext.globalAlpha = 0.608; + planeswalkerContext.fillRect(x, y + transitionHeight, width, height - 2 * transitionHeight); + planeswalkerContext.globalAlpha = 1; + if (lightToDark.complete) { + planeswalkerContext.drawImage(lightToDark, x, y + height - transitionHeight, width, 2 * transitionHeight); + } + } else { + planeswalkerContext.fillStyle = darkColor; + planeswalkerContext.globalAlpha = 0.706; + planeswalkerContext.fillRect(x, y + transitionHeight, width, height - 2 * transitionHeight); + planeswalkerContext.globalAlpha = 1; + if (darkToLight.complete) { + planeswalkerContext.drawImage(darkToLight, x, y + height - transitionHeight, width, 2 * transitionHeight); + } + } + } + planeswalkerContext.globalCompositeOperation = 'destination-in'; + if (planeswalkerTextMask.complete) { + planeswalkerContext.drawImage(planeswalkerTextMask, scaleX(0), scaleY(0), scaleWidth(1), scaleHeight(1)); + } + planeswalkerContext.globalCompositeOperation = 'source-over'; + planeswalkerContext.fillStyle = 'white' + planeswalkerContext.font = scaleHeight(0.0286) + 'px belerenbsc'; + planeswalkerContext.textAlign = 'center'; + for (var i = 0; i < card.planeswalker.count; i ++) { + var planeswalkerIconValue = card.planeswalker.abilities[i]; + var planeswalkerPlacement = scaleY(planeswalkerAbilityLayout[planeswalkerTall][card.planeswalker.count - 1][i]) + if (planeswalkerIconValue.includes('+')) { + if (plusIcon.complete) { + planeswalkerContext.drawImage(plusIcon, scaleX(0.0294), planeswalkerPlacement - scaleHeight(0.0258), scaleWidth(0.14), scaleHeight(0.0724)); + } + planeswalkerContext.fillText(planeswalkerIconValue, scaleX(0.1027), planeswalkerPlacement + scaleHeight(0.0172)); + } else if (planeswalkerIconValue.includes('-')) { + if (minusIcon.complete) { + planeswalkerContext.drawImage(minusIcon, scaleX(0.028), planeswalkerPlacement - scaleHeight(0.0153), scaleWidth(0.1414), scaleHeight(0.0705)); + } + planeswalkerContext.fillText(planeswalkerIconValue, scaleX(0.1027), planeswalkerPlacement + scaleHeight(0.0181)); + } else if (planeswalkerIconValue != '') { + if (neutralIcon.complete) { + planeswalkerContext.drawImage(neutralIcon, scaleX(0.028), planeswalkerPlacement - scaleHeight(0.0153), scaleWidth(0.1414), scaleHeight(0.061)); + } + planeswalkerContext.fillText(planeswalkerIconValue, scaleX(0.1027), planeswalkerPlacement + scaleHeight(0.0191)); + } + } + drawTextBuffer(); + drawCard(); +} + +function fixPlaneswalkerInputs(callback) { + document.querySelector('#planeswalker-height-0').value = scaleHeight(card.text.ability0.height); + document.querySelector('#planeswalker-cost-0').value = card.planeswalker.abilities[0]; + document.querySelector('#planeswalker-height-1').value = scaleHeight(card.text.ability1.height); + document.querySelector('#planeswalker-cost-1').value = card.planeswalker.abilities[1]; + document.querySelector('#planeswalker-height-2').value = scaleHeight(card.text.ability2.height); + document.querySelector('#planeswalker-cost-2').value = card.planeswalker.abilities[2]; + document.querySelector('#planeswalker-height-3').value = scaleHeight(card.text.ability3.height); + document.querySelector('#planeswalker-cost-3').value = card.planeswalker.abilities[3]; + if (callback) { + callback(); + } +} + +function invertPlaneswalkerColors(reverse = false) { + if (reverse) { + document.querySelector('#planeswalker-invert').checked = card.planeswalker.invert; + } else { + card.planeswalker.invert = document.querySelector('#planeswalker-invert').checked; + } + if (!lightToDark.onload) { + lightToDark.onload = planeswalkerEdited; + darkToLight.onload = planeswalkerEdited; + } + if (card.planeswalker.invert) { + darkColor = '#5b5b5b'; + lightColor = 'black'; + lightToDark.src = '/img/frames/planeswalker/abilityLineOddDarkened.png'; + darkToLight.src = '/img/frames/planeswalker/abilityLineEvenDarkened.png'; + } else { + darkColor = '#a4a4a4'; + lightColor = 'white'; + lightToDark.src = '/img/frames/planeswalker/abilityLineOdd.png'; + darkToLight.src = '/img/frames/planeswalker/abilityLineEven.png'; + } +} \ No newline at end of file diff --git a/js/frames/versionSaga.js b/js/frames/versionSaga.js new file mode 100644 index 00000000..e098286b --- /dev/null +++ b/js/frames/versionSaga.js @@ -0,0 +1,126 @@ +//checks to see if it needs to run +if (!loadedVersions.includes('/js/frames/versionSaga.js')) { + loadedVersions.push('/js/frames/versionSaga.js'); + sizeCanvas('saga'); + document.querySelector('#creator-menu-tabs').innerHTML += '

Saga

'; + var newHTML = document.createElement('div'); + newHTML.id = 'creator-menu-saga'; + newHTML.classList.add('hidden'); + newHTML.innerHTML = ` +
+
Adjust the height (first input) and loyalty chapter count (second input) of each Saga ability
+
First Ability:
+
+ + +
+
Second Ability:
+
+ + +
+
Third Ability:
+
+ + +
+
Fourth Ability:
+
+ + +
+
`; + if (!card.saga) { + card.saga = {abilities:[1, 1, 1, 0], count:3, x:0.1, width:0.3947}; + } + document.querySelector('#creator-menu-sections').appendChild(newHTML); + var sagaChapter = new Image(); + sagaChapter.src = '/img/frames/saga/sagaChapter.png'; + var sagaDivider = new Image(); + sagaDivider.src = '/img/frames/saga/sagaDivider.png'; + sagaChapter.onload = sagaDivider.onload = sagaEdited; + fixSagaInputs(sagaEdited); +} + +function sagaEdited() { + //gather data + card.saga.abilities[0] = document.querySelector('#saga-chapters-0').value; + card.saga.abilities[1] = document.querySelector('#saga-chapters-1').value; + card.saga.abilities[2] = document.querySelector('#saga-chapters-2').value; + card.saga.abilities[3] = document.querySelector('#saga-chapters-3').value; + card.saga.count = 0; + var lastY = card.text.ability0.y; + for (var i = 0; i < 4; i ++) { + card.text['ability' + i].y = lastY; + var height = parseFloat((parseInt(document.querySelector('#saga-height-' + i).value) / card.height).toFixed(4)); + if (height > 0) { + card.saga.count ++; + } + card.text['ability' + i].height = height; + lastY += height; + } + fixSagaInputs(); + //draw to saga canvas + sagaContext.clearRect(0, 0, sagaCanvas.width, sagaCanvas.height); + sagaContext.font = 'normal normal 550 ' + scaleHeight(0.0324) + 'px plantinsemibold'; + sagaContext.textAlign = 'center'; + var sagaCount = 1; + for (var i = 0; i < card.saga.count; i ++) { + var x = scaleX(card.saga.x); + var y = scaleY(card.text['ability' + i].y); + var width = scaleWidth(card.saga.width); + var height = scaleHeight(card.text['ability' + i].height); + if (sagaDivider.complete) { + sagaContext.drawImage(sagaDivider, x, y - scaleHeight(0.0029) / 2, width, scaleHeight(0.0029)); + } + if (sagaChapter.complete) { + var numeralX = x - scaleWidth(0.0614); + var numeralWidth = scaleWidth(0.0787); + var numeralHeight = scaleHeight(0.0629); + var numeralY = y + (height - numeralHeight) / 2; + var numeralTextX = numeralX + scaleWidth(0.0394); + var numeralTextY = numeralY + scaleHeight(0.0429); + if (card.saga.abilities[i] == 1) { + sagaContext.drawImage(sagaChapter, numeralX, numeralY, numeralWidth, numeralHeight); + sagaContext.fillText(romanNumeral(sagaCount), numeralTextX, numeralTextY); + sagaCount ++; + } else { + var numeralSpread = scaleHeight(0.0358); + var numeralTextSpread = scaleHeight(0.0358); + sagaContext.drawImage(sagaChapter, numeralX, numeralY - numeralSpread, numeralWidth, numeralHeight); + sagaContext.drawImage(sagaChapter, numeralX, numeralY + numeralSpread, numeralWidth, numeralHeight); + sagaContext.fillText(romanNumeral(sagaCount), numeralTextX, numeralTextY - numeralTextSpread); + sagaContext.fillText(romanNumeral(sagaCount + 1), numeralTextX, numeralTextY + numeralTextSpread); + sagaCount += 2; + } + } + } + drawTextBuffer(); + drawCard(); +} + +function fixSagaInputs(callback) { + document.querySelector('#saga-height-0').value = scaleHeight(card.text.ability0.height); + document.querySelector('#saga-chapters-0').value = card.saga.abilities[0]; + document.querySelector('#saga-height-1').value = scaleHeight(card.text.ability1.height); + document.querySelector('#saga-chapters-1').value = card.saga.abilities[1]; + document.querySelector('#saga-height-2').value = scaleHeight(card.text.ability2.height); + document.querySelector('#saga-chapters-2').value = card.saga.abilities[2]; + document.querySelector('#saga-height-3').value = scaleHeight(card.text.ability3.height); + document.querySelector('#saga-chapters-3').value = card.saga.abilities[3]; + if (callback) { + callback(); + } +} + +function romanNumeral(input) { + switch(input) { + case 1: return 'I'; + case 2: return 'II'; + case 3: return 'III'; + case 4: return 'IV'; + case 5: return 'V'; + case 6: return 'VI'; + default: return input; + } +} \ No newline at end of file diff --git a/js/includeHTML.js b/js/includeHTML.js new file mode 100644 index 00000000..cf83e3f8 --- /dev/null +++ b/js/includeHTML.js @@ -0,0 +1,24 @@ +function includeHTML() { + var elementList = document.getElementsByTagName('*'); + for (var i = 0; i < elementList.length; i ++) { + element = elementList[i]; + var file = element.getAttribute('html-include'); + if (file) { + var xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function() { + if (this.readyState == 4) { + if (this.status == 200) { + element.innerHTML = this.responseText; + } else if (this.status == 404) { + element.innerHTML = 'HTML inclusion not found'; + } + element.removeAttribute('html-include'); + includeHTML(); + } + } + xhttp.open('GET', file, true); + xhttp.send(); + return; + } + } +} \ No newline at end of file diff --git a/js/main.js b/js/main.js new file mode 100644 index 00000000..335ee94b --- /dev/null +++ b/js/main.js @@ -0,0 +1,10 @@ +function toggleMenu() { + if (document.querySelector('.hamburger').classList.contains('opened')) { + document.querySelector('.hamburger').classList.remove('opened'); + Array.from(document.querySelectorAll('.menu-visible')).forEach(element => element.classList.remove('menu-visible')); + } else { + document.documentElement.style.setProperty('--window-diagonal-size', (Math.floor(Math.sqrt(window.innerWidth ** 2 + window.innerHeight ** 2)) + 2) + 'px'); + document.querySelector('.hamburger').classList.add('opened'); + document.querySelector('.menu').classList.add('menu-visible'); + } +} \ No newline at end of file diff --git a/legal/index.html b/legal/index.html deleted file mode 100644 index 229a5673..00000000 --- a/legal/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - CC - Terms and Conditions -
Introduction
-
-
- Welcome, and thank you for using Card Conjurer! -

- In these Terms and Conditions ("Terms") CardConjurer.com will refer to itself as "Card Conjurer", "we", "us", or "our". -

- By using our website ("Services"), you confirm that you have read, understand, and agree to be bound by these Terms. -
-
-
Disclaimer
-
-
- We are in no way affiliated with, sponsored by, or endorsed by Wizards of the Coast. Fonts, Mana symbols, and other related images are trademarks and copyrights of Wizards of the Coast, LLC, a subsidiary of Hasbro, Inc. -

- Some card frames, or elements used in various card frames, were sourced from Chilli_Axe, Kentu, thevodkaboy, and Timmy XD69. -

- Any user-uploaded artwork is property of the original artist, and it is up to the users to ensure that these images are properly credited. -
-
-
Terms of Use
-
-
- Our services are intented for personal use only, not commercial. -

- You will not upload artwork that you do not have permission to use, or is in any way illegal. -
-
-
Cookies/Storage
-
-
- By using our services, you are consenting to the use of localStorage and cookies on your device. The data only serves to store settings you have previously input to improve your experience. -
-
-
Advertising
-
-
- We may present advertisements for or links to third party websites, products, and/or services ("Third Party Ads"). We are not responsible for the availability of these Third Party Ads, the materials they contain, nor any damages or losses they ensue. -
-
-
Liability
-
-
- We are not responsible for any damages to your device related to the use of our Services. -
-
-
Changes
-
-
- We may revise these Terms at any time. We are not responsible for notifying users of any changes to these Terms, and by continuing to use our Services you are agreeing to be bound by the most recent revision. -
-
-
Contact
-
-
- If you have any questions regarding this Agreement, you may contact us at CardConjurerMTG@gmail.com. -
-
- -
- - -
- diff --git a/life.html b/life.html deleted file mode 100644 index 72a8baca..00000000 --- a/life.html +++ /dev/null @@ -1,222 +0,0 @@ - - - - Life Counter - - - - - - - - - - -
-
- Number of Players:
-
- Starting Life Total:
-
-
- Enable Wake Lock

- For an optimal experience, save this website to your home screen and open it from there.

Check out my other website, Card Conjurer, to easily create custom Magic cards!
-
-
- -
- - -
-
- - - - - diff --git a/creator/index.html b/old/index.html similarity index 100% rename from creator/index.html rename to old/index.html diff --git a/phyrexian/index.html b/phyrexian/index.html deleted file mode 100644 index 564fdc05..00000000 --- a/phyrexian/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - CC - Phyrexian -
-
- Phyrexian "Translator" -
-
-
-
- Input the text you would like to be "translated" - -
-
- Then copy the "translated" text from here - -
-
-
-
-
- This is not a real translator. It simply detects paragraphs and sentences, then randomly converts characters to phyrexian. Once you have the copied text, drop it into the Card Creator following {fontphyrexian} wherever you'd like! -
-
-
-
- - - -
-
- - - -
-
-
- - -
- - -
- diff --git a/sitemap.xml b/sitemap.xml deleted file mode 100644 index 70eb1439..00000000 --- a/sitemap.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - https://cardconjurer.com/ - monthly - 1.00 - - - https://cardconjurer.com/creator/ - monthly - 1.00 - - - https://cardconjurer.com/legal/ - monthly - 0.80 - - - https://cardconjurer.com/askurza/ - monthly - 0.50 - - - https://cardconjurer.com/phyrexian/ - monthly - 0.40 - - - https://cardconjurer.com/about/ - monthly - 0.30 - - - https://cardconjurer.com/life.html - monthly - 0.20 - - - - \ No newline at end of file