lib/chantypes.js
'use strict';
/*
* chanarchive
* https://github.com/j3lte/chanarchive
*
* Copyright (c) 2014-2015 Jelte Lagendijk
* Licensed under the MIT license.
*/
var _ = require('lodash');
var genericImagePostHandler = function (post) {
var filename = this._originalFilenames ? post.filename + '_' + post.tim : post.tim;
var fullFileName = filename + post.ext;
var fileUrl = post.fileUrl || this.picUrl + this.board + '/src/' + post.tim + post.ext;
if (fileUrl && (!this._extensions || this._extensions.indexOf(post.ext) !== -1)) {
this.addFile(fileUrl, fullFileName);
}
// 8chan extra files
if (post.extra_files && post.extra_files.length) {
_.each(post.extra_files, function (extra_file) {
this.imagePostHandler(extra_file);
}.bind(this));
}
};
var chans = {
'4chan': {
alias: '4chan',
templateUrl: 'http://boards.4chan.org/%s/thread/%s',
regEx: /^http:\/\/boards\.4chan\.org\/(\w)+\/thread\/(\d)+/,
baseUrl: 'http://a.4cdn.org/',
del: '/thread/',
picUrl: 'http://images.4chan.org/',
b: 5,
t: 7,
imagePostHandler: genericImagePostHandler
},
'7chan': {
alias: '7chan',
templateUrl: 'http://7chan.org/%s/res/%s.html',
regEx: /^http:\/\/7chan\.org\/(\w)+\/res\/(\d+)\.html/,
b: 4,
t: 6,
useProxy: '7chan',
imagePostHandler: genericImagePostHandler
},
'8chan': {
alias: '8chan',
templateUrl: 'https://8ch.net/%s/res/%s.html',
regEx: /^https:\/\/8ch\.net\/(\w)+\/res\/(\d+)\.html.*/,
baseUrl: 'https://8ch.net/',
del: '/res/',
picUrl: 'https://8ch.net/',
b: 4,
t: 6,
imagePostHandler: genericImagePostHandler
},
'420chan': {
alias: '420chan',
templateUrl: 'http://boards.420chan.org/%s/res/%s.php',
regEx: /^http:\/\/boards\.420chan\.org\/(\w){1,}\/res\/(\d){1,}\.php.*/,
baseUrl: 'http://api.420chan.org/',
del: '/res/',
picUrl: 'http://boards.420chan.org/',
b: 5,
t: 7,
imagePostHandler: function (post) {
var fullFileName = post.filename + post.ext;
var fileUrl = this.picUrl + this.board + '/src/' + post.filename + post.ext;
this.addFile(fileUrl, fullFileName);
}
},
'krautchan': {
alias: 'krautchan',
templateUrl: 'http://krautchan.net/%s/thread-%s.html',
regEx: /^http:\/\/krautchan\.net\/(\w)+\/thread-(\d+)\.html.*/,
b: 4,
t: 5,
useProxy: 'krautchan',
skipSaveJSON: true,
imagePostHandler: genericImagePostHandler
}
};
var shortRegEx = /(4|7|8|420|kraut)chan\/(\w+)\/(\d+)/;
function get (url, callback) {
var chan,
returnUrl = null;
if (typeof callback !== 'function' || !url) {
return null;
}
if (shortRegEx.test(url)) {
// Shortcode
var p = url.split('/');
chan = chans[p[0]];
returnUrl = chan.templateUrl.replace('%s', p[1]).replace('%s', p[2]);
callback(chan, returnUrl);
} else {
// Basic url
chan = _.find(chans, function (ch) {
return ch.regEx.test(url);
});
callback(chan, returnUrl);
}
}
module.exports.get = get;