Skip to content

Commit ba2d67d

Browse files
Merge pull request #11 from wildbit/feature/template-preview
Template preview command
2 parents 199949b + ebc926e commit ba2d67d

23 files changed

Lines changed: 2427 additions & 83 deletions

package-lock.json

Lines changed: 797 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,35 @@
11
{
22
"name": "postmark-cli",
3-
"version": "1.2.2",
3+
"version": "1.3.2",
44
"description": "A CLI tool for managing templates, sending emails, and fetching servers on Postmark.",
55
"main": "./dist/index.js",
66
"dependencies": {
77
"@types/traverse": "^0.6.32",
8+
"@types/watch": "^1.0.1",
89
"chalk": "^2.4.2",
10+
"consolidate": "^0.15.1",
911
"directory-tree": "^2.2.3",
12+
"ejs": "^2.6.2",
13+
"express": "^4.17.1",
1014
"fs-extra": "^7.0.1",
1115
"inquirer": "^6.2.1",
1216
"lodash": "^4.17.11",
1317
"ora": "^3.0.0",
1418
"postmark": "^2.2.7",
1519
"request": "^2.88.0",
20+
"socket.io": "^2.3.0",
1621
"table": "^5.2.0",
1722
"traverse": "^0.6.6",
1823
"untildify": "^4.0.0",
24+
"watch": "^1.0.2",
1925
"yargonaut": "^1.1.4",
2026
"yargs": "^13.2.4"
2127
},
2228
"devDependencies": {
2329
"@types/chai": "^4.1.4",
30+
"@types/consolidate": "^0.14.0",
2431
"@types/execa": "^0.9.0",
32+
"@types/express": "^4.17.0",
2533
"@types/fs-extra": "^5.0.5",
2634
"@types/inquirer": "^6.0.0",
2735
"@types/lodash": "^4.14.123",
@@ -39,8 +47,7 @@
3947
"nconf": "^0.10.0",
4048
"pre-commit": "^1.2.2",
4149
"ts-node": "^8.0.3",
42-
"typescript": "^3.4.3",
43-
"watch": "^1.0.2"
50+
"typescript": "^3.4.3"
4451
},
4552
"scripts": {
4653
"start:dev": "watch 'npm run build' './src'",

preview/assets/images/check.svg

Lines changed: 1 addition & 0 deletions
Loading

preview/assets/images/favicon.ico

6.37 KB
Binary file not shown.

preview/assets/images/folder.svg

Lines changed: 1 addition & 0 deletions
Loading

preview/assets/images/icon.png

997 Bytes
Loading
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

preview/assets/js/preview.js

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
var activeToggleClass = 'is-active'
2+
3+
/**
4+
* Mode toggles
5+
*/
6+
var mode = document.querySelectorAll('.js-mode')
7+
var currentMode = 'html'
8+
9+
mode.forEach(function(toggle) {
10+
toggle.addEventListener('click', function(event) {
11+
// Reset all classes
12+
mode.forEach(function(modeToggle) {
13+
// Remove active class from all toggles
14+
modeToggle.classList.remove(activeToggleClass)
15+
16+
// Hide all views
17+
document
18+
.querySelector('.js-' + modeToggle.dataset.mode)
19+
.classList.add('is-hidden')
20+
})
21+
22+
// Add active class
23+
currentMode = this.dataset.mode
24+
this.classList.add(activeToggleClass)
25+
26+
// Show view
27+
document
28+
.querySelector('.js-' + this.dataset.mode)
29+
.classList.remove('is-hidden')
30+
})
31+
})
32+
33+
/**
34+
* View toggles
35+
*/
36+
var view = document.querySelectorAll('.js-view')
37+
var currentView = 'desktop'
38+
39+
view.forEach(function(toggle) {
40+
// Add click event
41+
toggle.addEventListener('click', function(event) {
42+
view.forEach(function(viewToggle) {
43+
// Remove active class from all toggles
44+
viewToggle.classList.remove(activeToggleClass)
45+
46+
document.querySelectorAll('.preview-iframe').forEach(function(item) {
47+
item.classList.remove('preview-iframe--mobile')
48+
})
49+
})
50+
51+
currentView = this.dataset.view
52+
this.classList.add(activeToggleClass)
53+
54+
if (this.dataset.view === 'mobile') {
55+
document.querySelectorAll('.preview-iframe').forEach(function(item) {
56+
item.classList.add('preview-iframe--mobile')
57+
})
58+
}
59+
})
60+
})
61+
62+
function keypress(e) {
63+
var evt = window.event ? event : e
64+
65+
// ctrl + v
66+
if (evt.keyCode == 86 && evt.ctrlKey) {
67+
var view = currentView === 'desktop' ? 'mobile' : 'desktop'
68+
document.querySelector('.js-view[data-view="' + view + '"]').click()
69+
}
70+
71+
// ctrl + m
72+
if (evt.keyCode == 77 && evt.ctrlKey) {
73+
var mode = currentMode === 'html' ? 'text' : 'html'
74+
document.querySelector('.js-mode[data-mode="' + mode + '"]').click()
75+
}
76+
}
77+
78+
document.onkeydown = keypress
79+
80+
// Manage state when HTML iframe is finished loading
81+
document.querySelector('.js-html').onload = function() {
82+
// Hide loading indicator
83+
document.querySelector('.js-loader').classList.add('is-hidden')
84+
85+
// Add state class to HTML iframe
86+
this.classList.add('is-loaded')
87+
}

0 commit comments

Comments
 (0)