szurubooru/public_html/media/js/core.js

217 lines
4.8 KiB
JavaScript
Raw Normal View History

2013-10-21 14:24:34 +02:00
$.fn.hasAttr = function(name)
{
return this.attr(name) !== undefined;
};
2013-10-09 00:58:49 +02:00
if ($.when.all === undefined)
{
$.when.all = function(deferreds)
{
var deferred = new $.Deferred();
$.when.apply($, deferreds).then(function()
{
deferred.resolve(Array.prototype.slice.call(arguments, 0));
}, function()
{
deferred.fail(Array.prototype.slice.call(arguments, 0));
});
return deferred;
}
}
2013-10-14 00:25:40 +02:00
$(function()
{
$('.safety a').click(function(e)
{
e.preventDefault();
var aDom = $(this);
if (aDom.hasClass('inactive'))
return;
aDom.addClass('inactive');
var url = $(this).attr('href') + '?json';
$.get(url, function(data)
{
if (data['success'])
{
window.location.reload();
}
else
{
alert(data['errorMessage']);
}
});
});
function confirmEvent(e)
{
if (!confirm($(this).attr('data-confirm-text')))
{
e.preventDefault();
e.stopPropagation();
}
}
$('form[data-confirm-text]').submit(confirmEvent);
$('a[data-confirm-text]').click(confirmEvent);
$('a.simple-action').click(function(e)
{
if(e.isPropagationStopped())
return;
e.preventDefault();
var aDom = $(this);
if (aDom.hasClass('inactive'))
return;
aDom.addClass('inactive');
var url = $(this).attr('href') + '?json';
2013-10-21 23:50:30 +02:00
$.get(url, {submit: 1}, function(data)
{
if (data['success'])
{
if (aDom.hasAttr('data-redirect-url'))
window.location.href = aDom.attr('data-redirect-url');
else
window.location.reload();
}
else
{
alert(data['errorMessage']);
aDom.removeClass('inactive');
}
});
});
//attach data from submit buttons to forms before .submit() gets called
$(':submit').each(function()
{
$(this).click(function()
{
var form = $(this).closest('form');
form.find('.faux-submit').remove();
var input = $('<input class="faux-submit" type="hidden"/>').attr({
name: $(this).attr('name'),
value: $(this).val()
});
form.append(input);
});
});
2013-10-19 22:56:56 +02:00
});
//modify DOM on small viewports
2013-10-19 22:56:56 +02:00
$(window).resize(function()
{
if ($('body').width() == $('body').data('last-width'))
return;
2013-10-19 22:56:56 +02:00
$('#inner-content .unit').addClass('bottom-unit');
if ($('body').width() < 600)
{
$('body').addClass('small-screen');
$('#sidebar').insertAfter($('#inner-content'));
$('#sidebar .unit').removeClass('left-unit').addClass('bottom-unit');
}
else
{
$('body').removeClass('small-screen');
$('#sidebar').insertBefore($('#inner-content'));
2013-10-19 22:56:56 +02:00
$('#sidebar .unit').removeClass('bottom-unit').addClass('left-unit');
}
$('body').data('last-width', $('body').width());
2013-10-14 00:25:40 +02:00
});
2013-10-21 14:24:34 +02:00
$(function()
{
$(window).resize();
});
//autocomplete
function split(val)
{
return val.split(/\s+/);
}
function extractLast(term)
{
return split(term).pop();
}
$(function()
{
var searchInput = $('#top-nav .search input');
searchInput
// don't navigate away from the field on tab when selecting an item
.bind("keydown", function(event)
{
if (event.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active)
{
event.preventDefault();
}
}).autocomplete({
2013-10-21 15:07:27 +02:00
minLength: 1,
2013-10-21 14:24:34 +02:00
source: function(request, response)
{
var term = extractLast(request.term);
if (term != '')
$.get(searchInput.attr('data-autocomplete-url') + '?json', {filter: term}, function(data)
{
response($.map(data.tags, function(tag) { return { label: tag, value: tag }; }));
});
2013-10-21 14:24:34 +02:00
},
focus: function()
{
// prevent value inserted on focus
return false;
},
select: function(event, ui)
{
var terms = split(this.value);
terms.pop();
terms.push(ui.item.value);
terms.push('');
this.value = terms.join(' ');
return false;
}
});
});
2013-10-21 14:48:28 +02:00
function getTagItOptions()
{
return {
caseSensitive: false,
autocomplete:
{
source:
function(request, response)
{
var term = request.term.toLowerCase();
var results = $.grep(this.options.availableTags, function(a)
{
if (term.length < 3)
return a.toLowerCase().indexOf(term) == 0;
else
return a.toLowerCase().indexOf(term) != -1;
2013-10-21 14:48:28 +02:00
});
if (!this.options.allowDuplicates)
results = this._subtractArray(results, this.assignedTags());
response(results);
},
}
};
}
$(function()
{
Mousetrap.bind('q', function() { $('#top-nav input').focus(); return false; }, 'keyup');
Mousetrap.bind('w', function() { $('body,html').animate({scrollTop: '-=150px'}, 200); });
Mousetrap.bind('s', function() { $('body,html').animate({scrollTop: '+=150px'}, 200); });
Mousetrap.bind('a', function() { var url = $('.paginator .prev:not(.disabled) a').attr('href'); if (typeof url !== 'undefined') window.location.href = url; }, 'keyup');
Mousetrap.bind('d', function() { var url = $('.paginator .next:not(.disabled) a').attr('href'); if (typeof url !== 'undefined') window.location.href = url; }, 'keyup');
});