Skip to content

Commit

Permalink
Release 1.1.5
Browse files Browse the repository at this point in the history
Fixes for Issue #19 and Issue #23.
  • Loading branch information
GitBrent authored and GitBrent committed Jan 18, 2017
1 parent b2ac951 commit d0ee1fa
Show file tree
Hide file tree
Showing 5 changed files with 391 additions and 9 deletions.
62 changes: 54 additions & 8 deletions dist/pptxgen.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,16 @@ Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" && isFinite(value) && Math.floor(value) === value;
};

// Node.js version of <script> includes
if ( typeof module !== 'undefined' && module.exports ) {
var gObjPptxMasters = require('../dist/pptxgen.masters.js');
var gObjPptxShapes = require('../dist/pptxgen.shapes.js');
}

var PptxGenJS = function(){
// CONSTANTS
var APP_VER = "1.1.5";
var APP_REL = "20170116";
var APP_REL = "20170117";
var LAYOUTS = {
'LAYOUT_4x3' : { name: 'screen4x3', width: 9144000, height: 6858000 },
'LAYOUT_16x9' : { name: 'screen16x9', width: 9144000, height: 5143500 },
Expand All @@ -65,6 +71,7 @@ var PptxGenJS = function(){
LINE: { 'displayName': 'Line', 'name': 'line', 'avLst': {} }
};
var SLDNUMFLDID = '{F7021451-1387-4CA6-816F-3879F97B5CBC}';
var IMG_BROKEN = 'data:image/png;base64,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';
var EMU = 914400; // One (1) Inch - OfficeXML measures in EMU (English Metric Units)
var ONEPT = 12700; // One (1) point (pt)
var CRLF = '\r\n';
Expand Down Expand Up @@ -159,7 +166,7 @@ var PptxGenJS = function(){

// E: Add image
var isBase64 = /base64/.test(header);
zip.file("ppt/media/image" + id + "." + extn, content, {base64: isBase64});
zip.file( "ppt/media/image" + id + "." + extn, content, {base64:isBase64} );
}
}

Expand All @@ -171,9 +178,12 @@ var PptxGenJS = function(){

// STEP 3: Push the PPTX file to browser
var strExportName = ((gObjPptx.fileName.toLowerCase().indexOf('.ppt') > -1) ? gObjPptx.fileName : gObjPptx.fileName+gObjPptx.fileExtn);
zip.generateAsync({type:"blob"}).then(function(content) {
saveAs(content, strExportName);
});
if ( typeof module !== 'undefined' && module.exports ) {
zip.generateAsync({type:'nodebuffer'}).then(function(content){ fs.writeFile(strExportName, content); });
}
else {
zip.generateAsync({type:'blob'}).then(function(content){ saveAs(content, strExportName); });
}
}

function componentToHex(c) {
Expand All @@ -198,6 +208,18 @@ var PptxGenJS = function(){
}

function getSizeFromImage(inImgUrl) {
// Node.js
if ( typeof module !== 'undefined' && module.exports ) {
try {
var dimensions = sizeOf(inImgUrl);
return { width:dimensions.width, height:dimensions.height };
}
catch(ex) {
console.error('ERROR: Unable to read image: '+inImgUrl);
return { width:0, height:0 };
}
}

// A: Create
var image = new Image();

Expand All @@ -217,8 +239,22 @@ var PptxGenJS = function(){
}

function convertImgToDataURLviaCanvas(slideRel){
// Node.js
if ( typeof module !== 'undefined' && module.exports ) {
try {
var bitmap = fs.readFileSync(slideRel.path);
callbackImgToDataURLDone( new Buffer(bitmap).toString('base64'), slideRel );
}
catch(ex) {
console.error('ERROR: Unable to read image: '+slideRel.path);
callbackImgToDataURLDone(IMG_BROKEN, slideRel);
}
return;
}

// A: Create
var image = new Image();

// B: Set onload event
image.onload = function(){
// First: Check for any errors: This is the best method (try/catch wont work, etc.)
Expand Down Expand Up @@ -249,8 +285,9 @@ var PptxGenJS = function(){
console.error('Unable to load image: "'+ slideRel.path +'"\nPlease check the image URL:\n'+ ( slideRel.path.indexOf('/') == 0 ? slideRel.path : window.location.href.substring(0,window.location.href.lastIndexOf('/')+1) + slideRel.path ) );
} catch(ex){}
// Return a predefined "Broken image" graphic so the user will see something on the slide
callbackImgToDataURLDone('data:image/png;base64,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', slideRel);
callbackImgToDataURLDone(IMG_BROKEN, slideRel);
};

// C: Load image
image.src = slideRel.path;
}
Expand Down Expand Up @@ -1647,7 +1684,7 @@ var PptxGenJS = function(){
var strImgExtn = inMaster.bkgd.src.substring( inMaster.bkgd.src.indexOf('.')+1 ).toLowerCase();
if ( strImgExtn == 'jpg' ) strImgExtn = 'jpeg';
if ( strImgExtn == 'gif' ) strImgExtn = 'png'; // MS-PPT: canvas.toDataURL for gif comes out image/png, and PPT will show "needs repair" unless we do this
// TODO 1.5: The next few lines are copies from .addImage above. A bad idea thats already bit my once! So of course it's makred as future :)
// TODO: FIXME: The next few lines are copies from .addImage above. A bad idea thats already bit me once! So of course it's makred as future :)
var intRels = 1;
for ( var idx=0; idx<gObjPptx.slides.length; idx++ ) { intRels += gObjPptx.slides[idx].rels.length; }
slideObjRels.push({
Expand Down Expand Up @@ -1917,4 +1954,13 @@ var PptxGenJS = function(){
};

// Node.js support (Usage: `var pptxgenjs = require("pptxgenjs").PptxGenJS;`)
if (typeof module !== 'undefined' && module.exports) exports.PptxGenJS = new PptxGenJS();
if ( typeof module !== 'undefined' && module.exports ) {
// A: Load 2 depdendencies
var fs = require("fs");
var $ = require("jquery-node");
var JSZip = require("jszip");
var sizeOf = require("image-size");

// B: Export module
module.exports = new PptxGenJS();
}
4 changes: 4 additions & 0 deletions dist/pptxgen.masters.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,7 @@ var gObjPptxMasters = {
]
}
};

if ( typeof module !== 'undefined' && module.exports ) {
module.exports = gObjPptxMasters;
}
4 changes: 4 additions & 0 deletions dist/pptxgen.shapes.js
Original file line number Diff line number Diff line change
Expand Up @@ -1387,3 +1387,7 @@ var gObjPptxShapes = {
}
}
};

if ( typeof module !== 'undefined' && module.exports ) {
module.exports = gObjPptxShapes;
}
Loading

0 comments on commit d0ee1fa

Please sign in to comment.