Initial commit. Transferred from an Eclipse/Brainstorm environment to NodeJS.

This commit is contained in:
Wynne Crisman
2015-10-25 15:20:42 -07:00
commit 7bba9dc2b0
386 changed files with 22589 additions and 0 deletions

View File

@@ -0,0 +1 @@
cmd /k "npm install"

View File

@@ -0,0 +1 @@
cmd /k "node bin/www"

401
app.js Normal file
View File

@@ -0,0 +1,401 @@
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var nodemailer = require('nodemailer');
var bodyParser = require('body-parser');
var phantom = require('node-phantom');
var fs = require('fs');
var rootPath = path.join(__dirname, 'public');
var config = require('./config');
var moment = require('moment');
var app = express();
app.use(bodyParser.urlencoded({extended: false}));
//app.use(favicon(__dirname + '/public/images/AV4H.ico'));
app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
//Ensure we have an endsWith method in String.
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
/*
//Check for all calls to content pages with a password attached and log it in the password's counter.
app.use(function(req, res, next) {
if(req.path.endsWith('.html')) {
if(req.query.Password) {
incrementPwdUseCount(req.query.Password);
}
}
next();
});
*/
app.use(express.static(rootPath, {dotfiles: 'deny', index: false}));
//app.use('/', routes);
app.use('/FrameworkController.java', function(req, res) {
console.log("In /FrameworkController.java");
var requestParam = req.query.Request;
if(requestParam == 'CreateId') {
res.type('json');
res.send({result: 0});
}
else {
console.log('unexpected value');
res.status(400).send('Unexpected Param');
}
});
//Handle the getting a brief and contacting us.
var smtpTransport = nodemailer.createTransport({host: config.smtpHost, port: config.smtpPort, secure: true, ignoreTLS: false, requiresAuth: true, auth: {user: config.smtpUser, pass: config.smtpPassword}});
/*
//TEST CODE!!!//
try {
var name = "Wynne Crisman";
var email = "wynne@petitteton.com";
var textPath = rootPath + '/email/downloadBreifText.txt';
var htmlPath = rootPath + '/email/downloadBriefHtml.txt';
var signaturePath = rootPath + '/email/emailSignature.jpg';
var params = {from: config.fromAddress, to: email, subject: "Payback Brief", text: {path: textPath}, html: {path: htmlPath}, attachments: [{filename:'emailSignature.jpg', cid: 'emailSignature', path: signaturePath}]};
smtpTransport.sendMail(params, function(error, response) {
if(error) {
console.log("Error: " + error);
}
else {
console.log("Successfully sent the email - not an error.");
}
});
}
catch(e) {
console.log(e);
}
//END TEST//
*/
/*
//Setup the passwords used by users to access the content. Allows us to track who has used the site when and how much.
//Note: This is mostly for marketing purposes so it won't be very secure at all (no hashing, salting, SSL, or anything), and it allows the search engines to bypass it to the content.
var pwdData;
try {
if(fs.existsSync('pwdData.json')) {
pwdData = JSON.parse(fs.readFileSync('pwdData.json', 'utf8'));
}
else {
pwdData = [];
pwdData.push({pwd: 'zerotoone'});
pwdData.push({pwd: 'zephyr'});
pwdData.push({pwd: 'borealis'});
pwdData.push({pwd: 'gyroscope'});
pwdData.push({pwd: 'colnago'});
pwdData.push({pwd: 'derosa'});
pwdData.push({pwd: 'wwww&w'});
pwdData.push({pwd: 'catalyst'});
fs.writeFileSync('pwdData.json', JSON.stringify(pwdData), 'utf8');
}
} catch(e) {console.log(e);}
function writePwdData() {
try {
fs.writeFileSync('pwdData.json', JSON.stringify(pwdData), 'utf8');
} catch(e) {console.log(e);}
}
function incrementPwdUseCount(password) {
//Note: This is mostly for marketing purposes so it won't be very secure at all (no hashing, salting, SSL, or anything), and it allows the search engines to bypass it to the content.
try {
if(password) {
var index;
var found = false;
//Convert the password from base64.
password = new Buffer(password, 'base64').toString('utf-8');
//Identify which password was used (note: could use a map, but realistically with so few it is pointless complexity).
for(index = 0; !found && index < pwdData.length; index++) {
if(pwdData[index].pwd == password) {
//Track the number of times a user requests a content page.//
if(pwdData[index].accessCount) pwdData[index].accessCount++;
else pwdData[index].accessCount = 1;
writePwdData();
found = true;
}
}
}
} catch(e) {console.log(e);}
}
app.use('/RequestBrief/', function(req, res) {
try {
var firstName = req.body.FirstName;
var lastName = req.body.LastName;
var email = req.body.Email;
var isPartnership = req.body.PartnershipInterest;
var isInvestment = req.body.InvestmentInterest;
var isOther = req.body.OtherInterest;
var textPath = rootPath + '/email/downloadBriefText.txt';
var htmlPath = rootPath + '/email/downloadBriefHtml.txt';
var signaturePath = rootPath + '/email/emailSignature.jpg';
var params = {from: config.fromAddress, to: email, subject: "Payback Brief", text: {path: textPath}, html: {path: htmlPath}, attachments: [{filename:'emailSignature.jpg', cid: 'emailSignature', path: signaturePath}]};
smtpTransport.sendMail(params, function(error, response) {
try {
if(error) {
console.log("Received an error while sending the download brief email to the user. " + error);
fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (request brief)");}});
}
else {
params = {from: config.fromAddress, to: config.contactUsRecipient, subject: "Downloaded Brief", text: "A user has requested the Payback brief.\n\nFirst Name: " + firstName + "\nLast Name: " + lastName + "\nEmail: " + email + "\nPartnership: " + isPartnership + "\nInvestment: " + isInvestment + "\nOther: " + isOther};
smtpTransport.sendMail(params, function(error, response) {
if(error) {
try {
console.log("Received an error while sending the request brief email to the admin. " + error);
fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (request brief)");}});
} catch(e) {console.log(e);}
}
});
}
res.status(200).send('success');
} catch(e) {console.log(e);}
});
} catch(e) {console.log(e);}
});
app.use('/RequestFinancials/', function(req, res) {
try {
var firstName = req.body.FirstName;
var lastName = req.body.LastName;
var email = req.body.Email;
var phone = req.body.Phone;
var company = req.body.Company;
var message = req.body.Message;
var isPartnership = req.body.PartnershipInterest;
var isInvestment = req.body.InvestmentInterest;
var isOther = req.body.OtherInterest;
var textPath = rootPath + '/email/downloadFinancialsText.txt';
var htmlPath = rootPath + '/email/downloadFinancialsHtml.txt';
var textContents = fs.readFileSync(textPath, "UTF8");
var htmlContents = fs.readFileSync(htmlPath, "UTF8");
var signaturePath = rootPath + '/email/emailSignature.jpg';
textContents = textContents.replace("%%NAME%%", firstName);
htmlContents = htmlContents.replace("%%NAME%%", firstName);
var params = {from: config.fromAddress, to: email, subject: "Payback Financials", text: textContents, html: htmlContents, attachments: [{filename:'emailSignature.jpg', cid: 'emailSignature', path: signaturePath}]};
smtpTransport.sendMail(params, function(error, response) {
try {
if(error) {
console.log("Received an error while sending the request financials email to the user. " + error);
fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (request financials)");}});
}
else {
params = {from: config.fromAddress, to: config.contactUsRecipient, subject: "Downloaded Financials", text: "A user has requested Payback's financials.\n\nFirst Name: " + firstName + "\nLast Name: " + lastName + "\nEmail: " + email + "\nPhone: " + phone + "\nCompany: " + company + "\nPartnership: " + isPartnership + "\nInvestment: " + isInvestment + "\nOther: " + isOther + "\nMessage: " + message};
smtpTransport.sendMail(params, function(error, response) {
if(error) {
try {
console.log("Received an error while sending the request financials email to the admin. " + error);
fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (request financials)");}});
} catch(e) {console.log(e);}
}
});
}
res.status(200).send('success');
} catch(e) {console.log(e);}
});
} catch(e) {console.log(e);}
});
*/
app.use('/ContactUs', function(req, res) {
try {
var firstName = req.body.FirstName;
var lastName = req.body.LastName;
var email = req.body.Email;
var message = req.body.Text;
var params = {from: config.fromAddress, to: config.contactUsRecipient, subject: "Contact Us", text: "A user has commented via the Petit Teton website.\n\nFirst Name: " + firstName + "\nLast Name: " + lastName + "\nEmail: " + email + "\n" + message};
smtpTransport.sendMail(params, function(error, response) {
if(error) {
try {
console.log("Received an error while sending the contact us email to the admin. " + error);
fs.appendFile(rootPath + '/emailFailures.txt', JSON.stringify(params) + '\n', function(err) {if(err) {console.log("Failed to write email data to file! (contact us)");}});
} catch(e) {console.log(e);}
}
});
res.status(200).send('success');
} catch(e) {console.log(e);}
});
/*
app.use('/LoginUser', function(req, res) {
//Note: This is mostly for marketing purposes so it won't be very secure at all (no hashing, salting, SSL, or anything), and it allows the search engines to bypass it to the content.
try {
var password = req.body.Password;
if(password) {
var index;
var found = false;
//Convert the password from base64.
password = new Buffer(password, 'base64').toString('utf-8');
//Identify which password was used (note: could use a map, but realistically with so few it is pointless complexity).
for(index = 0; !found && index < pwdData.length; index++) {
if(pwdData[index].pwd == password) {
//Track the time of the first and last login.
if(pwdData[index].firstLogin) pwdData[index].lastLogin = new Date();
else pwdData[index].firstLogin = new Date();
writePwdData();
found = true;
}
}
if(found) {
//Notify the client they have logged in.
res.status(200).send('success');
}
else {
res.status(200).send('failed');
}
}
else {
res.status(200).send('failed');
}
} catch(e) {console.log(e);}
});
*/
console.log("Time now is: " + moment(new Date()).format("MMM Do YYYY, h:mm:ss a"));
/*
app.use('/Admin/UserData', function(req, res) {
//TODO: Return a table of user data. This is a hidden function, and since the data is not very sensitive we won't bother with password protection or ssl.
var body = "<html><body><table><thead><tr><th style='padding: 0 20px 0 0'>Password</th><th style='padding: 0 20px 0 20px'>Page Request Count</th><th style='padding: 0 20px 0 20px'>First Login</th><th style='padding: 0 0 0 20px'>Last Login</th></tr></thead><tbody>";
for(var index = 0; index < pwdData.length; index++) {
body += "<tr>";
body += "<td>" + pwdData[index].pwd + "</td>";
body += "<td style='text-align: center'>" + (pwdData[index].accessCount ? pwdData[index].accessCount : 0) + "</td>";
body += "<td style='padding: 0 20px 0 20px'>" + (pwdData[index].firstLogin ? (moment(pwdData[index].firstLogin).format("MMM Do YYYY, h:mm:ss a") + " (" + moment(pwdData[index].firstLogin).fromNow() + ")") : "") + "</td>";
body += "<td style='padding: 0 20px 0 20px'>" + (pwdData[index].lastLogin ? (moment(pwdData[index].lastLogin).format("MMM Do YYYY, h:mm:ss a") + " (" + moment(pwdData[index].lastLogin).fromNow() + ")") : "") + "</td>";
body += "</tr>";
}
body += "</tbody></table></body></html>";
res.send(body);
});
*/
//Handle the root being requested, and the search engine requesting a static page with content.
app.use('/', function(req, res) {
try {
//Note: This is for search engines. It bypasses the password, which is fine since that is mostly a marketing gimmic to make users feel that they have some special access priviliges.
if(typeof(req.query._escaped_fragment_) !== "undefined") {
//The DIY method which is somewhat brittle since it relies on <!--CONTENT--> existing in the index.html file, and it replaces that with the contents of the passed parameter (what is after the #!) for the content html which is inserted into the index.html in place of <!--CONTENT-->.
fs.readFile(rootPath + '/index.html', {encoding: "UTF8"}, function(err, indexContent) {
if(!err) {
var file = rootPath + '/' + req.query._escaped_fragment_ + '.html';
fs.readFile(file, {encoding: "UTF8"}, function(err, content) {
if(!err) {
//Non-regex method.//
if(content.indexOf("<runonce>") != -1 && content.indexOf("</runonce>") != -1) {
content = content.substr(0, content.indexOf("<runonce>")) + content.substr(content.indexOf("</runonce>") + 10, -1);
}
//Doesn't work? Not sure why. Works in the regex test tools.//
//content = content.replace(/<runonce>(.|\n)*?<\x2frunonce>/, " ");
//Doesn't work? Based on the regex failure above, I think that replace is failing.//
var html = indexContent.replace(/<!--CONTENT-->/g, content);
//console.log(html);
res.send(html);
}
else console.log("Error reading the content file '" + file + "'. " + err);
});
}
else console.log("Error reading the index.html file. " + err);
});
/* Does not work! Would be nice, but Phantom doesn't work well with Node.js. Could try using jsdom/io.js or could use prerenderer-node which is a server that runs in parallel with the web server and builds the html as the client would, which is then returned.
phantom.create(function(err, ph) {
if(!err) {
return ph.createPage(function(err, page) {
return page.open(req.protocol + "://" + req.hostname + ':' + req.app.get('port') + req.path + "#!" + req.query._escaped_fragment_, function(status) {
return page.evaluate((function() {
return document.getElementsByTagName('html')[0].innerHTML;
}), function(err, result) {
res.send(result);
return ph.exit();
});
});
});
}
else console.log("Error in Phantom.create: " + err);
});
*/
}
else {
res.sendFile("index.html", {root: rootPath});
}
} catch(e) {console.log(e);}
});
//Schedule a task every 10 minutes to check the email failure log and re-attempt sending.//
/* TODO
setInterval(function() {
//How to remove things from the file without worrying about synchronization between those threads adding to the file?
fs.
}, 600000);
*/
// catch 404 and forward to error handler
app.use(function(req, res, next) {
try {
var err = new Error('Not Found');
err.status = 404;
next(err);
} catch(e) {console.log(e);}
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, nex) {
try {
res.status(err.status || 500);
res.render('error.ejs', {
message: err.message,
error: err
});
} catch(e) {console.log(e);}
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
try {
res.status(err.status || 500);
res.render('error.ejs', {
message: err.message,
error: {}
});
} catch(e) {console.log(e);}
});
//console.log(app._router);
module.exports = app;

90
bin/www Normal file
View File

@@ -0,0 +1,90 @@
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('payback:server');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '4480');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}

10
config.example.js Normal file
View File

@@ -0,0 +1,10 @@
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Email settings - Change these:
exports.fromAddress = 'dave@paybackdigital.com';
exports.smtpUser = 'dave@paybackdigital.com';
exports.smtpPassword = 'password';
exports.smtpHost = "secure.emailsrvr.com";
exports.smtpPort = 587;
exports.contactUsRecipient = fromAddress;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

10
config.js Normal file
View File

@@ -0,0 +1,10 @@
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Email settings - Change these:
exports.fromAddress = 'wynne@av4h.com';
exports.smtpUser = 'wynne@av4h.com';
exports.smtpPassword = 'landFJ40';
exports.smtpHost = "secure.emailsrvr.com";
exports.smtpPort = 465;
exports.contactUsRecipient = exports.fromAddress;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1
debug node.js.bat Normal file
View File

@@ -0,0 +1 @@
cmd /k "node-debug bin/www"

24
package.json Normal file
View File

@@ -0,0 +1,24 @@
{
"name": "payback",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "~1.10.2",
"cookie-parser": "~1.3.3",
"debug": "~2.1.1",
"ejs": "~2.2.3",
"express": "~4.11.1",
"morgan": "~1.5.1",
"serve-favicon": "~2.2.0",
"stylus": "~0.42.3",
"swig": "~1.4.2",
"html": "latest",
"nodemailer": "~1.0",
"body-parser": "latest",
"node-phantom": "latest",
"moment": "latest"
}
}

364
photos/.svn/entries Normal file
View File

@@ -0,0 +1,364 @@
10
dir
0
svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files
svn://gooeyfish
add
svn:special svn:externals svn:needs-lock
5bae2391-cca6-ca44-bb23-a66e832fb2eb
Chicken Icon.png
file
svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Chicken%20Icon.png
add
has-props
has-prop-mods
Chicken-Egg.png
file
add
has-props
has-prop-mods
Chicken.png
file
add
has-props
has-prop-mods
Chicken.svg
file
add
Header-1.png
file
add
has-props
has-prop-mods
Header-1.svg
file
add
Map.psd
file
add
has-props
has-prop-mods
Misc Images.svg
file
svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Misc%20Images.svg
add
Petitteton Image Instructions.txt
file
svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Petitteton%20Image%20Instructions.txt
add
has-props
has-prop-mods
Petitteton.png
file
add
has-props
has-prop-mods
Petitteton.svg
file
add
Petitteton2.png
file
add
has-props
has-prop-mods
Petitteton2.svg
file
add
Yak Grazing.png
file
svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Yak%20Grazing.png
add
has-props
has-prop-mods
Yak Grazing.psd
file
svn://gooeyfish/trunk/Applications/Petit%20Teton/web/support-files/Yak%20Grazing.psd
add
has-props
has-prop-mods
Yak-Grazing_v2.psd
file
add
has-props
has-prop-mods
bullet.psd
file
add
has-props
has-prop-mods
egg.png
file
add
has-props
has-prop-mods
h1.png
file
add
has-props
has-prop-mods
h3.png
file
add
has-props
has-prop-mods
h4.png
file
add
has-props
has-prop-mods
h5.png
file
add
has-props
has-prop-mods
h6.png
file
add
has-props
has-prop-mods
h7.png
file
add
has-props
has-prop-mods
h8.png
file
add
has-props
has-prop-mods
menu-background.psd
file
add
has-props
has-prop-mods
photos
dir
add

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 10
text/plain
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

View File

@@ -0,0 +1,5 @@
K 13
svn:mime-type
V 24
application/octet-stream
END

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 MiB

BIN
photos/2011-Sept 041.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
photos/2012-1 021.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
photos/2012-1-2 004.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
photos/2012-2-1 001.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
photos/2012-2-1 003.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
photos/2012-2-1 006.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
photos/2012-2-1 016.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
photos/2012-2-1 018.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
photos/2012-2-1 024.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

BIN
photos/2012-2-1 027.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
photos/2012-2-1 030.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
photos/CSA/IMG_2993.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
photos/Chicken Icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
photos/Chicken-Egg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
photos/Chicken.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

235
photos/Chicken.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 426 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
photos/Header-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

169
photos/Header-1.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 59 KiB

BIN
photos/Holiday Advert.psd Normal file

Binary file not shown.

BIN
photos/Map.psd Normal file

Binary file not shown.

BIN
photos/Market/100_2715.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

BIN
photos/Market/IMG_3067.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
photos/Market/IMG_3068.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

396
photos/Misc Images.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 121 KiB

BIN
photos/People/IMG_3288.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 868 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,11 @@
Instructions for cleaning up the Petit Teton image from a Raster:
1) Extensions->Raster->Reduce Noise (10)
2) Path->Trace Bitmap (Grays + Remove Background + Smooth + Stack Scans)
Instructions for Converting the SVG back to a raster as 200x191 (after adding "from your neighbor to your table" in Scala Sans BD + Italic along the bottom)
1) Export to bitmap with an 800 width.
2) Open in Adobe Photoshop CS4
3) Export to web (gif) - remove the transparency checkbox - Scale to 25% - Use Bicubic filtering

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 24 KiB

BIN
photos/Petitteton.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

113
photos/Petitteton.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

BIN
photos/Petitteton2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

395
photos/Petitteton2.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 2.5 MiB

BIN
photos/Petitteton3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
photos/Pigs/IMG_3312.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
photos/Pigs/IMG_3314.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
photos/Pigs/img015.tif Normal file

Binary file not shown.

BIN
photos/Pigs/img017.tif Normal file

Binary file not shown.

BIN
photos/Pigs/sleepy_pig.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

BIN
photos/Sarah Pict.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

BIN
photos/Vaps/DSC_0180.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 KiB

Some files were not shown because too many files have changed in this diff Show More