added notes to the collection, updated css

This commit is contained in:
Daniel 2021-03-31 11:44:45 -04:00
parent 5c5932feac
commit d18604ded5
29 changed files with 157 additions and 65 deletions

View File

@ -1 +0,0 @@
@media only screen and (min-width:975px){.pack{max-width:90%}}.packsim input[type=number]::-webkit-inner-spin-button,.packsim input[type=number]::-webkit-outer-spin-button{opacity:1}.pack{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;margin:auto}.pack .card{width:150px;height:210px;background-size:cover;box-sizing:content-box;margin:5px;-webkit-transition:-webkit-transform 1s,opacity 1s,background 1s,width 1s,height 1s,font-size 1s,top 1s,left 1s;-webkit-border-radius:5px;-o-transition-property:width,height,-o-transform,background,font-size,opacity,top,left;-o-transition-duration:1s,1s,1s,1s,1s,1s,1s,1s;-moz-transition-property:width,height,-o-transform,background,font-size,opacity,top,left;-moz-transition-duration:1s,1s,1s,1s,1s,1s,1s,1s;transition-property:width,height,transform,background,font-size,opacity,top,left;transition-duration:1s,1s,1s,1s,1s,1s,1s,1s}.pack .card:hover{width:250px;height:350px}.pack .stats{height:100%;width:100%;text-align:left}.pack .stats span{position:relative;color:#000;display:block;left:10px;font-size:12px}.pack .stats span:first-of-type{top:130px}.pack .stats span:nth-of-type(2){top:128px}.pack .stats span:nth-of-type(3){top:126px}.pack .stats span:nth-of-type(4){top:124px}.pack .stats span:nth-of-type(5){text-align:right;top:125px;left:-11px;font-size:14px}.pack .card:hover .stats span{left:20px;font-size:14px;font-weight:700}.pack .card:hover .stats span:first-of-type{top:220px}.pack .card:hover .stats span:nth-of-type(2){top:229px}.pack .card:hover .stats span:nth-of-type(3){top:237px}.pack .card:hover .stats span:nth-of-type(4){top:245px}.pack .card:hover .stats span:nth-of-type(5){text-align:right;top:258px;left:-21px;font-size:20px}

File diff suppressed because one or more lines are too long

1
build/159.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
build/510.css Normal file

File diff suppressed because one or more lines are too long

1
build/510.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
build/631.js Normal file

File diff suppressed because one or more lines are too long

1
build/640.js Normal file
View File

@ -0,0 +1 @@
(self.webpackChunkchaoticbackup=self.webpackChunkchaoticbackup||[]).push([[640],{8640:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(2122),a=n(6610),l=n(5991),o=n(379),c=n(6089),i=n(7608),s=n(7294),u=n(3727),f=n(2195);n(2188);function m(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=(0,i.Z)(e);if(t){var a=(0,i.Z)(this).constructor;n=Reflect.construct(r,arguments,a)}else n=r.apply(this,arguments);return(0,c.Z)(this,n)}}var h=function(){return s.createElement("a",{href:"https://github.com/chaoticbackup",className:"name",rel:"noreferrer noopener",target:"_blank"},"Chaotic Backup Project")},d=function(e){var t=e.block,n=e.text,r=e.sets;return s.createElement("div",{className:"lore"},s.createElement("div",{className:"block"},t),n.map((function(e,t){return s.createElement("div",{key:t,dangerouslySetInnerHTML:{__html:e}})})),r.map((function(e,t){if(e.text&&e.text.length>0)return s.createElement("div",{className:"set",key:t},s.createElement("div",{className:"title"},e.title),e.text.map((function(e,t){return s.createElement("div",{key:t},e)})))})))},p=function(e){(0,o.Z)(n,e);var t=m(n);function n(){var e;(0,a.Z)(this,n);for(var r=arguments.length,l=new Array(r),o=0;o<r;o++)l[o]=arguments[o];return(e=t.call.apply(t,[this].concat(l))).state={lore:[]},e}return(0,l.Z)(n,[{key:"componentDidMount",value:function(){var e=this;fetch("/public/json/starter_lore.json").then((function(e){return e.json()})).then((function(t){e.setState({lore:t})})).catch((function(){e.setState({lore:[{block:"Unable to load lore...",text:[]}]})}))}},{key:"render",value:function(){return s.createElement("div",null,s.createElement("br",null),s.createElement("div",{className:"with-love"},s.createElement("div",null,"Welcome to the ",s.createElement(h,null),"."),s.createElement("span",null,"Built by fans for fans."),s.createElement("br",null),s.createElement("br",null),s.createElement("div",null,"Made with ",s.createElement("span",{className:"heart"},"♥")," by",s.createElement("br",null),"Danude Sandstorm (Project Lead)",s.createElement("br",null),"Chiodosin1 (Database Contributions)",s.createElement("br",null),"Afjak and Blitser (Art and Knowledge)"),s.createElement("div",null,"Do you like the site? You can donate to support it!"),s.createElement("div",{className:"donate"},s.createElement(f.U9,null)),s.createElement("div",{className:"lore"},"We were unsatisfied with the options on how to search for cards. I took the design of the old Chaotic website and added my own modernizations. With an extensive lists of search options in the ",s.createElement(u.rU,{to:"/collection"},"collection"),", you'll find deck building mores streamlined than ever before. Chaotic is full of rich lore, but unfortunately the best database of official lore disapeared when the ",s.createElement(u.rU,{to:"/portal"},"Portal to Perim")," disapeared along with the official site. You can again explore the official lore and information!"),s.createElement("br",null),this.state.lore.length>0?this.state.lore.map((function(e,t){return s.createElement(d,(0,r.Z)({key:t},e))})):"Loading lore entries..."))}}]),n}(s.Component)}}]);

View File

@ -1 +0,0 @@
(self.webpackChunkchaoticbackup=self.webpackChunkchaoticbackup||[]).push([[767],{8640:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return g}});var r=n(7154),a=n.n(r),l=n(4575),o=n.n(l),c=n(3913),i=n.n(c),u=n(2205),s=n.n(u),f=n(8585),m=n.n(f),h=n(9754),d=n.n(h),p=n(7294),b=n(3727),v=n(2195);n(2188);function E(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,r=d()(e);if(t){var a=d()(this).constructor;n=Reflect.construct(r,arguments,a)}else n=r.apply(this,arguments);return m()(this,n)}}var k=function(){return p.createElement("a",{href:"https://github.com/chaoticbackup",className:"name",rel:"noreferrer noopener",target:"_blank"},"Chaotic Backup Project")},y=function(e){var t=e.block,n=e.text,r=e.sets;return p.createElement("div",{className:"lore"},p.createElement("div",{className:"block"},t),n.map((function(e,t){return p.createElement("div",{key:t,dangerouslySetInnerHTML:{__html:e}})})),r.map((function(e,t){if(e.text&&e.text.length>0)return p.createElement("div",{className:"set",key:t},p.createElement("div",{className:"title"},e.title),e.text.map((function(e,t){return p.createElement("div",{key:t},e)})))})))},g=function(e){s()(n,e);var t=E(n);function n(){var e;o()(this,n);for(var r=arguments.length,a=new Array(r),l=0;l<r;l++)a[l]=arguments[l];return(e=t.call.apply(t,[this].concat(a))).state={lore:[]},e}return i()(n,[{key:"componentDidMount",value:function(){var e=this;fetch("/public/json/starter_lore.json").then((function(e){return e.json()})).then((function(t){e.setState({lore:t})})).catch((function(){e.setState({lore:[{block:"Unable to load lore...",text:[]}]})}))}},{key:"render",value:function(){return p.createElement("div",null,p.createElement("br",null),p.createElement("div",{className:"with-love"},p.createElement("div",null,"Welcome to the ",p.createElement(k,null),"."),p.createElement("span",null,"Built by fans for fans."),p.createElement("br",null),p.createElement("br",null),p.createElement("div",null,"Made with ",p.createElement("span",{className:"heart"},"♥")," by",p.createElement("br",null),"Danude Sandstorm (Project Lead)",p.createElement("br",null),"Chiodosin1 (Database Contributions)",p.createElement("br",null),"Afjak and Blitser (Art and Knowledge)"),p.createElement("div",null,"Do you like the site? You can donate to support it!"),p.createElement("div",{className:"donate"},p.createElement(v.U9,null)),p.createElement("div",{className:"lore"},"We were unsatisfied with the options on how to search for cards. I took the design of the old Chaotic website and added my own modernizations. With an extensive lists of search options in the ",p.createElement(b.rU,{to:"/collection"},"collection"),", you'll find deck building mores streamlined than ever before. Chaotic is full of rich lore, but unfortunately the best database of official lore disapeared when the ",p.createElement(b.rU,{to:"/portal"},"Portal to Perim")," disapeared along with the official site. You can again explore the official lore and information!"),p.createElement("br",null),this.state.lore.length>0?this.state.lore.map((function(e,t){return p.createElement(y,a()({key:t},e))})):"Loading lore entries..."))}}]),n}(p.Component)}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

89
package-lock.json generated
View File

@ -3208,6 +3208,12 @@
}
}
},
"@types/anymatch": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz",
"integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==",
"dev": true
},
"@types/chai": {
"version": "4.2.15",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.15.tgz",
@ -3362,6 +3368,76 @@
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz",
"integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA=="
},
"@types/source-list-map": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
"integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
"dev": true
},
"@types/tapable": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz",
"integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==",
"dev": true
},
"@types/uglify-js": {
"version": "3.13.0",
"resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.0.tgz",
"integrity": "sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q==",
"dev": true,
"requires": {
"source-map": "^0.6.1"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"@types/webpack": {
"version": "4.41.27",
"resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.27.tgz",
"integrity": "sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA==",
"dev": true,
"requires": {
"@types/anymatch": "*",
"@types/node": "*",
"@types/tapable": "^1",
"@types/uglify-js": "*",
"@types/webpack-sources": "*",
"source-map": "^0.6.0"
},
"dependencies": {
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
}
}
},
"@types/webpack-sources": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz",
"integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==",
"dev": true,
"requires": {
"@types/node": "*",
"@types/source-list-map": "*",
"source-map": "^0.7.3"
},
"dependencies": {
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"dev": true
}
}
},
"@typescript-eslint/eslint-plugin": {
"version": "4.20.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.20.0.tgz",
@ -4875,6 +4951,16 @@
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"dev": true
},
"clean-webpack-plugin": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz",
"integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==",
"dev": true,
"requires": {
"@types/webpack": "^4.4.31",
"del": "^4.1.1"
}
},
"cliui": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
@ -14826,7 +14912,8 @@
"y18n": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
"integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ=="
"integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
"dev": true
},
"yargs": {
"version": "13.3.2",

View File

@ -66,6 +66,7 @@
"babel-eslint": "^10.1.0",
"babel-loader": "^8.2.2",
"chai": "^4.3.4",
"clean-webpack-plugin": "^3.0.0",
"cross-env": "^7.0.3",
"css-loader": "^5.2.0",
"css-minimizer-webpack-plugin": "^1.3.0",

View File

@ -19,7 +19,9 @@ export function Unique(props) {
string = (string) ? ("Legendary, " + string) : "Legendary";
}
string = string.replace(/,\s+$/, "");
return (
<span style={{ fontWeight: "Bold" }}>{string}{string && <br />}</span>
if (string === "") return <></>;
else return (
<div style={{ fontWeight: "Bold" }}>{string}</div>
);
}

View File

@ -2,15 +2,17 @@ import React from 'react';
export function Name(props) {
const name = props.name.split(",");
return (<span className="name">
<span className="bigger">{name[0]}</span>
{name.length > 1 &&
<>
<span style={{ opacity: "0" }}>,</span>
<span className="subname">{name[1]}</span>
</>
}
</span>);
return (<div>
<span className="name">
<span className="bigger">{name[0]}</span>
{name.length > 1 &&
<>
<span style={{ opacity: "0" }}>,</span>
<span className="subname">{name[1]}</span>
</>
}
</span>
</div>);
}
export function Mugic(props) {
@ -35,3 +37,7 @@ export function Tribe(props) {
export function Discipline(props) {
return <img className={props.size || "icon16"} src={("/public/img/icons/disciplines/" + props.discipline + ".png").toLowerCase()} />;
}
export function FlavorText({ flavortext }) {
return (flavortext) ? <div className="flavortext">{flavortext}</div> : <></>;
}

View File

@ -35,4 +35,4 @@
font-size: 13px;
padding-bottom: 4px;
display: inherit;
}
}

View File

@ -125,6 +125,10 @@
padding-bottom: 6px;
white-space: pre-line;
}
.right > *:not(:last-child) {
margin-bottom: 4px;
}
}
.creature .right {

View File

@ -1,7 +1,7 @@
import React from 'react';
import API from '../../SpreadsheetData';
import { observer, inject } from 'mobx-react';
import { Rarity, Unique, Name, Element, Ability, AttackIcon } from '../../Snippets';
import { FlavorText, Rarity, Unique, Name, Element, Ability, AttackIcon } from '../../Snippets';
@inject((stores, props, context) => props) @observer
export default class Attack extends React.Component {
@ -13,7 +13,7 @@ export default class Attack extends React.Component {
<div className="card attack">
<img className="thumb" src={API.base_image + (card.gsx$thumb||API.thumb_missing)} onClick={() => this.props.setImage(API.cardImage(card))} />
<div className="left">
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Rarity set={card.gsx$set} rarity={card.gsx$rarity} /><br />
<span><AttackIcon bp={card.gsx$bp} /> Attack - {card.gsx$bp}</span><br />
<div>
@ -28,7 +28,7 @@ export default class Attack extends React.Component {
<div className="right" >
<Ability ability={card.gsx$ability} />
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary }} />
<span className="flavortext">{card.gsx$flavortext}</span>
<FlavorText flavortext={card.gsx$flavortext} />
</div>
</div>
);
@ -36,13 +36,11 @@ export default class Attack extends React.Component {
<div className="card attack">
<div className="fullcard"><img src={API.cardImage(card)} /></div>
<div className="right">
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Ability ability={card.gsx$ability} />
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary }} />
{card.gsx$flavortext && <>
<span className="flavortext">{card.gsx$flavortext}</span><br />
</>}
<span>Art By: {card.gsx$artist}</span>
<FlavorText flavortext={card.gsx$flavortext} />
<div>Art By: {card.gsx$artist}</div>
</div>
</div>
);

View File

@ -1,7 +1,7 @@
import React from 'react';
import API from '../../SpreadsheetData';
import { observer, inject } from 'mobx-react';
import { Rarity, Unique, Name, Ability, BattlegearIcon } from '../../Snippets';
import { FlavorText, Rarity, Unique, Name, Ability, BattlegearIcon } from '../../Snippets';
@inject((stores, props, context) => props) @observer
export default class Battlegear extends React.Component {
@ -13,14 +13,14 @@ export default class Battlegear extends React.Component {
<div className="card battlegear">
<img className="thumb" style={{ float: 'left' }} src={API.base_image + (card.gsx$thumb||API.thumb_missing)} onClick={() => this.props.setImage(API.cardImage(card))} />
<div className="left">
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Rarity set={card.gsx$set} rarity={card.gsx$rarity} /><br />
<span><BattlegearIcon /> Battlegear{card.gsx$types.length > 0 ? " - " + card.gsx$types : null}</span>
</div>
<div className="right" >
<Ability ability={card.gsx$ability} />
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary }} />
<span className="flavortext">{card.gsx$flavortext}</span>
<FlavorText flavortext={card.gsx$flavortext} />
</div>
</div>
);
@ -28,13 +28,11 @@ export default class Battlegear extends React.Component {
<div className="card battlegear">
<div className="fullcard"><img src={API.cardImage(card)} /></div>
<div className="right" >
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Ability ability={card.gsx$ability} />
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary }} />
{card.gsx$flavortext && <>
<span className="flavortext">{card.gsx$flavortext}</span><br />
</>}
<span>Art By: {card.gsx$artist}</span>
<FlavorText flavortext={card.gsx$flavortext} />
<div>Art By: {card.gsx$artist}</div>
</div>
</div>
);

View File

@ -1,7 +1,7 @@
import React from 'react';
import API from '../../SpreadsheetData';
import { observer, inject } from 'mobx-react';
import { Rarity, Unique, Name, Element, Mugic, Discipline, Ability, Tribe } from '../../Snippets';
import { FlavorText, Rarity, Unique, Name, Element, Mugic, Discipline, Ability, Tribe } from '../../Snippets';
@inject((stores, props, context) => props) @observer
export default class Creature extends React.Component {
@ -47,7 +47,7 @@ export default class Creature extends React.Component {
<div className="card creature">
<img className="thumb" style={{ float: 'left' }} src={API.base_image + (card.gsx$thumb||API.thumb_missing)} onClick={() => this.props.setImage(API.cardImage(card))} />
<div className="left">
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Rarity set={card.gsx$set} rarity={card.gsx$rarity} /><br />
<TribeLine /><br />
<div>
@ -70,9 +70,9 @@ export default class Creature extends React.Component {
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary, tribe: card.gsx$tribe }} />
{/*chieftain*/
card.gsx$types.includes("Chieftain") &&
<span className="chieftain">(Minions use Brainwashed text. Minions may only play Generic Mugic.)<br /></span>
<div className="chieftain">(Minions use Brainwashed text. Minions may only play Generic Mugic.)</div>
}
<span className="flavortext">{card.gsx$flavortext}</span>
<FlavorText flavortext={card.gsx$flavortext} />
</div>
<br />
<div className="stats">
@ -109,7 +109,7 @@ export default class Creature extends React.Component {
</div>
</div>
<div className="right" >
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<span>{stat_range(card.gsx$courage, card.gsx$name)}&nbsp;<Discipline discipline="courage" /></span>&nbsp;
<span>{stat_range(card.gsx$power, card.gsx$name)}&nbsp;<Discipline discipline="power" /></span>&nbsp;
<span>{stat_range(card.gsx$wisdom, card.gsx$name)}&nbsp;<Discipline discipline="wisdom" /></span>&nbsp;
@ -126,12 +126,10 @@ export default class Creature extends React.Component {
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary, tribe: card.gsx$tribe }} />
{/*chieftain*/
card.gsx$types.includes("Chieftain") &&
<span className="chieftain">(Minions use Brainwashed text. Minions may only play Generic Mugic.)<br /></span>
<div className="chieftain">(Minions use Brainwashed text. Minions may only play Generic Mugic.)</div>
}
{card.gsx$flavortext && <>
<span className="flavortext">{card.gsx$flavortext}</span><br />
</>}
<span>Art By: {card.gsx$artist}</span>
<FlavorText flavortext={card.gsx$flavortext} />
<div>Art By: {card.gsx$artist}</div>
</div>
</div>
);

View File

@ -1,7 +1,7 @@
import { inject, observer } from 'mobx-react';
import React from 'react';
import { Ability, Initiative, LocationIcon, Name, Rarity, Unique } from '../../Snippets';
import { Ability, FlavorText, Initiative, LocationIcon, Name, Rarity, Unique } from '../../Snippets';
import API from '../../SpreadsheetData';
@inject((stores, props, context) => props) @observer
@ -14,7 +14,7 @@ export default class Location extends React.Component {
<div className="card location">
<img className="thumb" style={{ float: 'left', width: '100px', height: '98px' }} src={API.base_image + (card.gsx$thumb||API.thumb_missing)} onClick={() => this.props.setImage(API.cardImage(card))} />
<div className="left">
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Rarity set={card.gsx$set} rarity={card.gsx$rarity} /><br />
<span><LocationIcon /> Location{card.gsx$types.length > 0 ? " - " + card.gsx$types : null}</span><br />
<Initiative initiative={card.gsx$initiative} />
@ -22,7 +22,7 @@ export default class Location extends React.Component {
<div className="right">
<Ability ability={card.gsx$ability} />
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary }} />
<span className="flavortext">{card.gsx$flavortext}</span>
<FlavorText flavortext={card.gsx$flavortext} />
</div>
</div>
);
@ -30,14 +30,12 @@ export default class Location extends React.Component {
<div className="card location">
<div className="fullcard"><img src={API.cardImage(card)} /></div>
<div className="right">
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Initiative initiative={card.gsx$initiative} />
<Ability ability={card.gsx$ability} />
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary }} />
{card.gsx$flavortext && <>
<span className="flavortext">{card.gsx$flavortext}</span><br />
</>}
<span>Art By: {card.gsx$artist}</span>
<FlavorText flavortext={card.gsx$flavortext} />
<div>Art By: {card.gsx$artist}</div>
</div>
</div>
);

View File

@ -1,7 +1,7 @@
import React from 'react';
import API from '../../SpreadsheetData';
import { observer, inject } from 'mobx-react';
import { Rarity, Unique, Name, Mugic, Ability, Tribe } from '../../Snippets';
import { FlavorText, Rarity, Unique, Name, Mugic, Ability, Tribe } from '../../Snippets';
import MugicPlay from '../../mugicplayer/playbutton.tsx';
import { withRouter } from 'react-router';
@ -28,12 +28,12 @@ class Attack extends React.Component {
}
}
}
if (this.props.ext == false) return (
<div className="card mugic">
<img className="thumb" style={{ float: 'left' }} src={API.base_image + (card.gsx$thumb||API.thumb_missing)} onClick={() => this.props.setImage(API.cardImage(card))} />
<div className="left">
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Rarity set={card.gsx$set} rarity={card.gsx$rarity} /> <br />
<Tribe size="icon16" tribe={card.gsx$tribe} /> Mugic - {card.gsx$tribe}<br />
<span>{mugicCounters}</span><MugicPlay notes={card.gsx$shownotes?.length > 0 ? card.gsx$shownotes : card.gsx$notes}/><br />
@ -42,7 +42,7 @@ class Attack extends React.Component {
<div className="right" >
<Ability ability={card.gsx$ability} tribe={card.gsx$tribe} />
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary }} />
<span className="flavortext">{card.gsx$flavortext}</span>
<FlavorText flavortext={card.gsx$flavortext} />
</div>
</div>
);
@ -50,13 +50,13 @@ class Attack extends React.Component {
<div className="card mugic">
<div className="fullcard"><img src={API.cardImage(card)} /></div>
<div className="right" >
<Name name={card.gsx$name} /><br />
<Name name={card.gsx$name} />
<Ability ability={card.gsx$ability} tribe={card.gsx$tribe} />
<Unique data={{ unique: card.gsx$unique, loyal: card.gsx$loyal, legendary: card.gsx$legendary }} />
{card.gsx$flavortext && <>
<span className="flavortext">{card.gsx$flavortext}</span><br />
</>}
<span>Art By: {card.gsx$artist}</span>
<FlavorText flavortext={card.gsx$flavortext} />
<div>Art By: {card.gsx$artist}</div>
<div>Notes: {card.gsx$notes}</div>
<MugicPlay notes={card.gsx$shownotes?.length > 0 ? card.gsx$shownotes : card.gsx$notes}/>
</div>
</div>
);

View File

@ -4,6 +4,7 @@ const webpack = require('webpack');
const TerserWebpackPlugin = require('terser-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
require('@babel/register');
module.exports = (env, argv) => {
@ -126,6 +127,7 @@ module.exports = (env, argv) => {
plugins: devMode
? [
] : [
new CleanWebpackPlugin(),
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('production'),
}),