danbooru
Version:
danbooru api wrapper
212 lines (211 loc) • 6.75 kB
JavaScript
// Generated by LiveScript 1.4.0
(function(){
var argsJs, deepExtend, defaultParams, search, out$ = typeof exports != 'undefined' && exports || this, split$ = ''.split, join$ = [].join;
argsJs = require('args-js');
deepExtend = require('deep-extend');
defaultParams = {
limit: 100
};
out$.search = search = function(){
var ref$, tags, params, callback, tagsArray, i$, len$, tag, helpers, postHelpers, helperify;
ref$ = argsJs([
{
tags: argsJs.STRING | argsJs.Optional,
_default: ''
}, {
params: argsJs.OBJECT | argsJs.Optional,
_default: {}
}, {
callback: argsJs.FUNCTION | argsJs.Optional,
_default: function(){}
}
], arguments), tags = ref$.tags, params = ref$.params, callback = ref$.callback;
if (params.page != null) {
params.page = Number(params.page);
if (isNaN(params.page)) {
throw new Error('page parameter must be a Number');
}
params.page >= 1 || (params.page = 1);
} else {
params.page = 1;
}
tags = tags.trim();
tagsArray = split$.call(tags, /\s+/);
tags = [];
for (i$ = 0, len$ = tagsArray.length; i$ < len$; ++i$) {
tag = tagsArray[i$];
if (!in$(tag, tags)) {
tags.push(tag);
}
}
tags = join$.call(tags, ' ');
params = deepExtend(defaultParams, params, {
tags: tags
});
(function(self){
helpers = {
load: function(){
var ref$, page, callback, myParams;
ref$ = argsJs([
{
page: argsJs.FLOAT | argsJs.Optional,
_default: this.page
}, {
callback: argsJs.FUNCTION | argsJs.Optional,
_default: function(){}
}
], arguments), page = ref$.page, callback = ref$.callback;
myParams = deepExtend({}, params, {
page: page
});
return self.search(this.tags, myParams, callback);
},
next: function(){
var ref$, modifier, callback;
ref$ = argsJs([
{
modifier: argsJs.FLOAT | argsJs.Optional,
_default: 1
}, {
callback: argsJs.FUNCTION | argsJs.Optional,
_default: function(){}
}
], arguments), modifier = ref$.modifier, callback = ref$.callback;
return this.load(this.page + modifier, callback);
},
prev: function(){
var ref$, modifier, callback;
ref$ = argsJs([
{
modifier: argsJs.FLOAT | argsJs.Optional,
_default: 1
}, {
callback: argsJs.FUNCTION | argsJs.Optional,
_default: function(){}
}
], arguments), modifier = ref$.modifier, callback = ref$.callback;
return this.load(this.page - modifier, callback);
},
add: function(){
var ref$, tagMod, callback, myParams;
ref$ = argsJs([
{
tagMod: argsJs.STRING | argsJs.Optional,
_default: ''
}, {
callback: argsJs.FUNCTION | argsJs.Optional,
_default: function(){}
}
], arguments), tagMod = ref$.tagMod, callback = ref$.callback;
myParams = deepExtend({}, params, {
page: 1
});
return self.search(this.tags + (" " + tagMod), myParams, callback);
},
rem: function(){
var ref$, tagMod, callback, newTags, tags, i$, len$, tag, myParams;
ref$ = argsJs([
{
tagMod: argsJs.STRING | argsJs.Optional,
_default: ''
}, {
callback: argsJs.FUNCTION | argsJs.Optional,
_default: function(){}
}
], arguments), tagMod = ref$.tagMod, callback = ref$.callback;
newTags = [];
tags = split$.call(this.tags, ' ');
tagMod = split$.call(tagMod, ' ');
for (i$ = 0, len$ = tags.length; i$ < len$; ++i$) {
tag = tags[i$];
if (!in$(tag, tagMod)) {
newTags.push(tag);
}
}
newTags = join$.call(newTags, ' ');
myParams = deepExtend({}, params, {
page: 1
});
return self.search(newTags, myParams, callback);
},
random: function(){
if (this.length) {
return this[Math.floor(this.length * Math.random())];
}
}
};
postHelpers = {
get: function(it){
return self.request(this.file_url, it);
},
getLarge: function(it){
return self.request(this.large_file_url, it);
},
getPreview: function(it){
return self.request(this.preview_file_url, it);
},
favorite: function(favorite, callback){
favorite == null && (favorite = true);
callback == null && (callback = function(){});
if (typeof favorite === 'function') {
callback = favorite;
favorite = true;
}
if (favorite) {
return self.post('favorites', {
post_id: this.id
}, callback);
} else {
return self['delete']("favorites/" + this.id, callback);
}
}
};
}.call(this, this));
helperify = function(it){
var i$, len$, ref$;
for (i$ = 0, len$ = it.length; i$ < len$; ++i$) {
(fn$.call(this, it[i$]));
}
return ref$ = import$(it, helpers), Object.defineProperty(ref$, 'page', {
get: function(){
return params.page;
},
configurable: true,
enumerable: true
}), Object.defineProperty(ref$, 'tags', {
get: function(){
return params.tags;
},
configurable: true,
enumerable: true
}), ref$;
function fn$(post){
Object.defineProperty(import$(post, postHelpers), 'url', {
get: function(){
return "https://danbooru.donmai.us/posts/" + post.id;
},
configurable: true,
enumerable: true
});
}
};
this.get('posts', params, function(e, data){
if (e != null) {
return callback(e, data);
}
helperify(data);
return callback(void 8, data);
});
return helperify({});
};
function in$(x, xs){
var i = -1, l = xs.length >>> 0;
while (++i < l) if (x === xs[i]) return true;
return false;
}
function import$(obj, src){
var own = {}.hasOwnProperty;
for (var key in src) if (own.call(src, key)) obj[key] = src[key];
return obj;
}
}).call(this);