Skip to content
This repository has been archived by the owner on Dec 23, 2023. It is now read-only.

Commit

Permalink
Printer module made optional
Browse files Browse the repository at this point in the history
  • Loading branch information
vtardia committed Jun 29, 2016
1 parent 29da1c7 commit da19262
Show file tree
Hide file tree
Showing 7 changed files with 105 additions and 56 deletions.
8 changes: 6 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ SkelEktron was born to be a scratchpad application. A kitchen sink forked from t

- A smart cross-platform logger
- A ready-to-go auto updater
- A printer management feature (fully supported on 64bit Mac/Linux)
- Built-in support for [Electron Builder][electron-builder]
- Built-in support for different _build targets_ (ie. release, debug, test, etc) with different settings
- A printer management feature (optional, fully supported on 64bit Mac/Linux)

### Logger

Expand Down Expand Up @@ -52,7 +52,11 @@ If the value is not set or is set to `false`, the feature is disabled.

With the [printer][printer] module the application has access to the printers list and can send data directly to the chosen printer. The current implementation prints test pages in PDF or TXT format. For your specific implementations you can have a look at [the examples][printer-examples].

**Please Note**: printer management has been disabled in Windows, because it's not fully supported. You can enable it and enhance it, if needed.
**Please Note**: since very few apps would need printing ability, and it's not fully supported in Windows, printer management has been disabled by default. To enable the library:

- add the [printer][printer] in `app/package.json`,
- uncomment and customize `require('./lib/printer')` in `main.js`,
- add and customize `require('./assets/js/printers.js')` to your HTML views.

### Electron Builder support

Expand Down
10 changes: 10 additions & 0 deletions app/assets/css/app.css
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
/* Add styles for your app here */

/* Hide printers box by default */
.printer-list {
display: none;
}

/* Activate printers box, dynamically added by printers.js */
.printer-list-active {
display: initial;
}
81 changes: 81 additions & 0 deletions app/assets/js/printers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
const electron = require('electron')
const ipc = electron.ipcRenderer

// Request printer list on load
window.addEventListener('load', () => {
window.printers = []
ipc.send('list-printers')
})

// Send printer events
function printTXTTest (i) {
console.log('Printing TXT test on', window.printers[i].name)
ipc.send('print-txt-test', window.printers[i])
}

function printPDFTest (i) {
console.log('Printing PDF test on', window.printers[i].name)
ipc.send('print-pdf-test', window.printers[i])
}

// Manage printer events
ipc.on('printing-error', (event, error) => {
console.log('Printing Error: ', error)
window.alert('Error while printing, see log for details')
})

ipc.on('printing-success', (event) => {
console.log('Printing Complete')
window.alert('Printing Complete')
})

// Display printer list
ipc.on('printer-list', (event, printers) => {
// Make the printers box visible, if present
var printersListBox = document.getElementsByClassName('printer-list')
if (printersListBox.length === 0) {
return
}
printersListBox[0].className += ' printer-list-active'

var html = '<p>No printers found.</p>'

// Get printers data
if (printers.length > 0) {
window.printers = printers
html = '<ul>'
printers.forEach(function (device, i) {
var isDefault = (device.isDefault) ? ' <small>(default)</small>' : ''
var deviceName = (device.options && device.options['printer-info']) ? device.options['printer-info'] : device.name
var buttons = `<button class="printTXTTest" data-printer="${i}">Print TXT Test</button>&nbsp;<button class="printPDFTest" data-printer="${i}">Print PDF Test</button>`
if (process.platform === 'win32') {
buttons = ''
}
html += `<li>${deviceName}${isDefault} ${buttons}</li>`
})
html += '</ul>'
}
var printerList = document.getElementById('printers')
printerList.innerHTML = html

// Add buttons handlers
var printTXTTestButtons = printerList.getElementsByClassName('printTXTTest')
for (var i = 0; i < printTXTTestButtons.length; i++) {
printTXTTestButtons[i].addEventListener('click', (event) => {
var device = event.target.getAttribute('data-printer') || null
if (device) {
printTXTTest(device)
}
})
}

var printPDFTestButtons = printerList.getElementsByClassName('printPDFTest')
for (i = 0; i < printPDFTestButtons.length; i++) {
printPDFTestButtons[i].addEventListener('click', (event) => {
var device = event.target.getAttribute('data-printer') || null
if (device) {
printPDFTest(device)
}
})
}
})
2 changes: 1 addition & 1 deletion app/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ <h3>Core Features</h3>
<ul>
<li>A smart cross-platform logger</li>
<li>A ready-to-go auto updater (you just need to hook in a <a href="https://github.com/ArekSredzki/electron-release-server">working server</a>)</li>
<li>Printer management, provided by <a href="https://www.npmjs.com/package/printer">printer</a></li>
<li>Built-in support for <a href="https://www.npmjs.com/package/electron-builder">Electron Builder</a></li>
<li>Built-in support for different <em>build targets</em> (ie. release, debug, test, etc) with different settings</li>
<li>Optional printer management, provided by <a href="https://www.npmjs.com/package/printer">printer</a></li>
</ul>
</section>
<footer>
Expand Down
54 changes: 4 additions & 50 deletions app/info.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,55 +7,7 @@
<script>
const pjson = require('./package.json')
const electron = require('electron')
const ipc = require('electron').ipcRenderer

// Request printer list on load
window.addEventListener('load', () => {
window.printers = []
ipc.send('list-printers')
})

// Send printer events
function printTXTTest(i) {
console.log("Printing TXT test on", window.printers[i].name)
ipc.send('print-txt-test', window.printers[i])
}

function printPDFTest(i) {
console.log("Printing PDF test on", window.printers[i].name)
ipc.send('print-pdf-test', window.printers[i])
}

// Manage printer events
ipc.on('printing-error', (event, error) => {
console.log('Printing Error: ', error)
window.alert('Error while printing, see log for details')
})

ipc.on('printing-success', (event) => {
console.log('Printing Complete')
window.alert('Printing Complete')
})

// Display printer list
ipc.on('printer-list', (event, printers) => {
var html = '<p>No printers found.</p>'
if (printers.length > 0) {
window.printers = printers
html = '<ul>'
printers.forEach(function (device, i) {
var isDefault = (device.isDefault) ? ' <small>(default)</small>' : ''
var deviceName = (device.options && device.options['printer-info'])? device.options['printer-info'] : device.name
var buttons = `<button onclick="printTXTTest(${i})">Print TXT Test</button>&nbsp;<button onclick="printPDFTest(${i})">Print PDF Test</button>`
if (process.platform === 'win32') {
buttons = ''
}
html += `<li>${deviceName}${isDefault} ${buttons}</li>`
})
html += '</ul>'
}
document.getElementById('printers').innerHTML = html
})
const ipc = electron.ipcRenderer
</script>
</head>
<body>
Expand All @@ -79,7 +31,7 @@ <h2>Version <script>document.write(pjson.version)</script></h2>
<li><strong>Debug Mode</strong>: <script>document.write(pjson.config.debug || false)</script></li>
</ul>
</section>
<section class="printers">
<section class="printer-list">
<h2>Available Printers</h2>
<div id="printers">
<p>Searching for printers...</p>
Expand All @@ -96,5 +48,7 @@ <h2>Available Printers</h2>
<script>
// You can also require other files to run in this process
require('./assets/js/ex-links.js')
// Uncomment below to enable printer management
// require('./assets/js/printers.js')
</script>
</html>
3 changes: 2 additions & 1 deletion app/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ function initialize () {
var shouldQuit = makeSingleInstance()
if (shouldQuit) return app.quit()

require('./lib/printer')
// Use printer utility lib (requires printer module, see README)
// require('./lib/printer')

function onClosed () {
// Dereference used windows
Expand Down
3 changes: 1 addition & 2 deletions app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "SkelEktron",
"productName": "SkelEktron",
"description": "Electron Template Desktop Application",
"version": "0.0.2",
"version": "0.0.3",
"homepage": "https://github.com/BZCoding/SkelEktron",
"author": {
"name": "Vito Tardia / BZ Coding",
Expand All @@ -14,7 +14,6 @@
"dependencies": {
"electron-debug": "^1",
"devtron": "^1.1",
"printer": "^0.2",
"lodash": "^4"
},
"config": {
Expand Down

0 comments on commit da19262

Please sign in to comment.