diff --git a/demos/stefan/plugin-explorer/README.md b/demos/stefan/plugin-explorer/README.md
new file mode 100644
index 000000000..cf4b3847b
--- /dev/null
+++ b/demos/stefan/plugin-explorer/README.md
@@ -0,0 +1,14 @@
+# Babel Plugin Explorer Demo
+
+The babel.js plugin explorer allows developers to live program plugins to the babel transpiler used in Lively4.
+Live programming provides instant feedback on the example input.
+Further, Lively's self-sustaining nature allows you to apply changes to the compiler on-the-fly, thus, affecting all future module loads without the need to restart lively.
+
+
+
+You can go to the trace visualization using the button in top right corner.
\ No newline at end of file
diff --git a/src/components/tools/lively-container.html b/src/components/tools/lively-container.html
index f6eda695c..472fc349a 100644
--- a/src/components/tools/lively-container.html
+++ b/src/components/tools/lively-container.html
@@ -234,7 +234,7 @@
-
+
diff --git a/src/components/widgets/ubg-card.js b/src/components/widgets/ubg-card.js
index 7818c5b9a..e49ee1bc4 100644
--- a/src/components/widgets/ubg-card.js
+++ b/src/components/widgets/ubg-card.js
@@ -611,6 +611,9 @@ ${SVG.elementSymbol(others[2], lively.pt(12.5, 8.5), 1.5)}`, lively.rect(0, 0, 1
printedRules = printedRules.replace(/!!(.*?)!!/gmi, function replacer(match, content) {
return `${content} `;
});
+ printedRules = printedRules.replace(/\*(.*?)\*/gmi, (match, content) => {
+ return this.italic(content);
+ });
printedRules = this.parseEffectsAndLists(printedRules);
@@ -717,11 +720,11 @@ ${SVG.elementSymbol(others[2], lively.pt(12.5, 8.5), 1.5)}`, lively.rect(0, 0, 1
})
}
+ static italic(text) {
+ return `${text} `
+ }
+
static renderReminderText(printedRules, cardEditor, cardDesc) {
- function italic(text) {
- return `${text} `
- }
-
return printedRules.replace(/\bremind(?:er)?(\w+(?:\-(\w|\(|\))*)*)\b/gmi, (match, myMatch, offset, string, groups) => {
const keywords = {
actionquest: () => {
@@ -853,15 +856,15 @@ ${SVG.elementSymbol(others[2], lively.pt(12.5, 8.5), 1.5)}`, lively.rect(0, 0, 1
emerge: (...args) => {
if (args.includes('all')) {
// keyword granted
- return 'When you buy a card, you may trash a card for a discount equal to its cost.'
+ return 'When you buy a card: You may sacrifice a card for a discount equal to its cost.'
}
if (args.includes('one')) {
// keyword granted
- return 'When you buy the card, you may trash a card for a discount equal to its cost.'
+ return 'When you buy the card: You may sacrifice a card for a discount equal to its cost.'
}
- return 'When you buy this, you may trash a card for a discount equal to its cost.'
+ return 'When you buy this: You may sacrifice a card for a discount equal to its cost.'
},
evoke: (cost, who) => {
@@ -882,7 +885,7 @@ ${SVG.elementSymbol(others[2], lively.pt(12.5, 8.5), 1.5)}`, lively.rect(0, 0, 1
if (who === 'one') {
subject = 'the card';
}
- return `Passive As a free action, you may trash ${subject} to exec its blitz effects.`
+ return `gear Trash ${subject} to exec its blitz effects.`
},
impulse: () => {
@@ -931,7 +934,7 @@ ${SVG.elementSymbol(others[2], lively.pt(12.5, 8.5), 1.5)}`, lively.rect(0, 0, 1
},
reap: (...args) => {
- return `To reap, gain vp equal to a card's base vp.`
+ return `To reap a card, gain () equal to its cost OR vp equal to its base vp.`
},
resonance: (...args) => {
@@ -967,7 +970,7 @@ ${SVG.elementSymbol(others[2], lively.pt(12.5, 8.5), 1.5)}`, lively.rect(0, 0, 1
},
seek: (...args) => {
- return 'Reveal cards from any pile until you reveal the appropriate card(s), return the others to the game box.'
+ return 'Reveal cards from deck until you reveal the appropriate card(s), return the others to the game box.'
},
stuncounter: (...args) => {
@@ -1015,7 +1018,7 @@ ${SVG.elementSymbol(others[2], lively.pt(12.5, 8.5), 1.5)}`, lively.rect(0, 0, 1
return `unknown reminder text '${keyword}'' `;
}
- return italic(`(${reminderText(...modifiers)})`);
+ return this.italic(`(${reminderText(...modifiers)})`);
});
}