From c6327dda0587a2c04e72cfd26299316960ced84d Mon Sep 17 00:00:00 2001 From: Sebastian Hugentobler Date: Thu, 5 Jan 2017 15:57:32 +0100 Subject: [PATCH] add compiled javascript --- Gruntfile.js | 2 +- src/proboard_saver.js | 451 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 452 insertions(+), 1 deletion(-) create mode 100644 src/proboard_saver.js diff --git a/Gruntfile.js b/Gruntfile.js index 56a6838..d15d126 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -6,7 +6,7 @@ module.exports = function(grunt) { saver: { cmd: 'casperjs', args: [ - 'src/proboard_saver.coffee', + 'src/proboard_saver.js', '--board-nr=YOUR-BOARD-NR', '--board-name=YOUR-BOARD-NAME', '--user=YOUR-USERNAME', diff --git a/src/proboard_saver.js b/src/proboard_saver.js new file mode 100644 index 0000000..493bdfa --- /dev/null +++ b/src/proboard_saver.js @@ -0,0 +1,451 @@ +// Generated by CoffeeScript 1.12.2 +(function() { + var casper, findBoards, findPages, findPosts, findThreads, findUserLinks, fs, getUser, loadImages, missingArgumentError, password, proboard, proboardName, proboardNr, proboardUrl, proboardUserUrl, readBoard, replaceHtml, user, utils; + + casper = require('casper').create({ + verbose: false, + logLevel: 'info', + pageSettings: { + webSecurityEnabled: false + } + }); + + utils = require('utils'); + + fs = require('fs'); + + casper.on('error', function(msg, trace) { + return this.echo("Error: " + msg, "ERROR"); + }); + + casper.on('page.error', function(msg, trace) { + return this.echo("Error: " + msg, "ERROR"); + }); + + casper.on('remote.message', function(msg, trace) { + if (!/Unsafe JavaScript attempt/.test(msg)) { + return this.echo("remote log: " + msg, "INFO"); + } + }); + + loadImages = function(searchString) { + var detailImage, image, imageName, imageParts, images, j, len, re; + images = searchString.match(/\[img\](.*?)\[\/img\]/g); + if (images) { + for (j = 0, len = images.length; j < len; j++) { + image = images[j]; + detailImage = image.match(/\[img\](.*?)\[\/img\]/)[1]; + imageParts = detailImage.split('/'); + imageName = imageParts[imageParts.length - 1]; + console.log("\t\tdownloading image '" + imageName + "'..."); + casper.download(detailImage, "data/images/" + imageName); + re = new RegExp("\\[img\\]" + detailImage + "\\[/img\\]", "i"); + searchString = searchString.replace(re, "[img]{{baseurl}}/images/" + imageName + "[/img]"); + } + } + return searchString; + }; + + replaceHtml = function(element) { + var attachmentIndex, bold, boldElements, colour, colourElements, cursive, cursiveElements, dummyContent, dummyElements, dummySpan, finalText, image, images, j, k, l, len, len1, len2, len3, len4, len5, len6, len7, link, linkElements, m, message, n, o, p, q, quote, quoteAvatar, quoteClear, quoteHeader, quoteHeaderNode, registeredUserNode, underlined, underlinedElements, user, video, videos; + images = Array.prototype.map.call(element.querySelectorAll('img'), function(img) { + return { + src: img.src, + alt: img.hasAttribute('alt') ? img.alt : '' + }; + }); + for (j = 0, len = images.length; j < len; j++) { + image = images[j]; + element.innerHTML = element.innerHTML.replace(/]*>/, "[img" + (image.alt ? '=' + image.alt : '') + "]" + image.src + "[/img]"); + } + videos = Array.prototype.map.call(element.querySelectorAll("iframe[title='YouTube video player']"), function(video) { + return video.src.split('/')[4].split('?')[0]; + }); + for (k = 0, len1 = videos.length; k < len1; k++) { + video = videos[k]; + element.innerHTML = element.innerHTML.replace(/