1376 lines
50 KiB
JavaScript
1376 lines
50 KiB
JavaScript
/**
|
|
* Last updated: 07/05/2016
|
|
*/
|
|
|
|
window.wp = window.wp || {};
|
|
window.fansub = window.fansub || {};
|
|
|
|
if(typeof jQuery === 'undefined') {
|
|
throw new Error(fansub.i18n.jquery_undefined_error)
|
|
}
|
|
|
|
jQuery(document).ready(function($) {
|
|
'use strict';
|
|
|
|
var version = $.fn.jquery.split(' ')[0].split('.');
|
|
if((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
|
|
throw new Error(fansub.i18n.jquery_version_error)
|
|
}
|
|
});
|
|
|
|
fansub.media_frame = null;
|
|
fansub.media_items = {};
|
|
|
|
jQuery(document).ready(function($) {
|
|
'use strict';
|
|
var $body = $('body');
|
|
|
|
fansub.getParamByName = function(url, name) {
|
|
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
|
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
|
|
results = regex.exec(url);
|
|
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
|
|
};
|
|
|
|
fansub.receiveSelectedMediaItems = function(file_frame) {
|
|
return file_frame.state().get('selection');
|
|
};
|
|
|
|
fansub.receiveSelectedMediaItem = function(file_frame) {
|
|
var items = fansub.receiveSelectedMediaItems(file_frame);
|
|
return items.first().toJSON();
|
|
};
|
|
|
|
fansub.isImageUrl = function(url) {
|
|
if(!$.trim(url)) {
|
|
return false;
|
|
}
|
|
var result = true,
|
|
extension = url.slice(-4);
|
|
if(extension != '.png' && extension != '.jpg' && extension != '.gif' && extension != '.bmp' && extension != 'jpeg') {
|
|
if(extension != '.ico') {
|
|
result = false;
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
|
|
fansub.getTagName = function($tag) {
|
|
if($tag.length) {
|
|
return $tag.get(0).tagName;
|
|
}
|
|
return '';
|
|
};
|
|
|
|
fansub.isUrl = function(text) {
|
|
var url_regex = new RegExp('^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)');
|
|
return url_regex.test(text);
|
|
};
|
|
|
|
fansub.isArray = function(variable){
|
|
return (Object.prototype.toString.call(variable) === '[object Array]');
|
|
};
|
|
|
|
fansub.getFirstMediaItemJSON = function(media_items) {
|
|
return media_items.first().toJSON();
|
|
};
|
|
|
|
fansub.createImageHTML = function(args) {
|
|
args = args || {};
|
|
var alt = args.alt || '',
|
|
id = args.id || 0,
|
|
src = args.src || '',
|
|
$element = args.element || null;
|
|
if($.isNumeric(id) && id > 0) {
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: fansub.ajax_url,
|
|
data: {
|
|
action: 'fansub_sanitize_media_value',
|
|
url: src,
|
|
id: id
|
|
},
|
|
success: function(response){
|
|
if(!response.is_image) {
|
|
src = response.type_icon;
|
|
}
|
|
if($element.length) {
|
|
$element.html('<img src="' + src + '" alt="' + alt + '">');
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
if($.trim(src)) {
|
|
return '<img src="' + src + '" alt="' + alt + '">';
|
|
}
|
|
}
|
|
};
|
|
|
|
fansub.autoReloadPageNoActive = function(reload_time, delay_time) {
|
|
reload_time = reload_time || 60000;
|
|
delay_time = delay_time || 10000;
|
|
var time = new Date().getTime();
|
|
$(document.body).bind('mousemove keypress', function() {
|
|
time = new Date().getTime();
|
|
});
|
|
function refresh() {
|
|
if(new Date().getTime() - time >= reload_time) {
|
|
window.location.reload(true);
|
|
} else {
|
|
setTimeout(refresh, delay_time);
|
|
}
|
|
}
|
|
setTimeout(refresh, delay_time);
|
|
};
|
|
|
|
fansub.autoReloadPage = function(delay_time) {
|
|
delay_time = delay_time || 2000;
|
|
var time = new Date().getTime();
|
|
function refresh() {
|
|
if(new Date().getTime() - time >= delay_time) {
|
|
window.location.reload(true);
|
|
} else {
|
|
setTimeout(refresh, 1000);
|
|
}
|
|
}
|
|
setTimeout(refresh, 1000);
|
|
};
|
|
|
|
fansub.debugLog = function(object) {
|
|
var data = JSON.stringify(object);
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: fansub.ajax_url,
|
|
data: {
|
|
action: 'fansub_debug_log',
|
|
object: data
|
|
},
|
|
success: function(response){
|
|
|
|
}
|
|
});
|
|
};
|
|
|
|
fansub.limitUploadFile = function($element) {
|
|
$element.on('change', function() {
|
|
var count_file = $element.get(0).files.length,
|
|
max_file = parseInt($element.attr('data-max')),
|
|
object = this,
|
|
$image_preview = $element.next();
|
|
if(!$.isNumeric(max_file)) {
|
|
max_file = -1;
|
|
}
|
|
if(max_file > 0 && count_file > max_file) {
|
|
alert('Bạn không được chọn quá ' + max_file + ' tập tin.');
|
|
$element.val('');
|
|
return false;
|
|
}
|
|
if($image_preview.length) {
|
|
$image_preview.empty();
|
|
if(typeof (FileReader) != "undefined") {
|
|
for(var i = 0; i < count_file; i++) {
|
|
var reader = new FileReader(),
|
|
file_name = object.files.item(i).name;
|
|
reader.onload = function(e) {
|
|
var $image = $('<img>', {
|
|
src: e.target.result,
|
|
class: 'thumb-image',
|
|
alt: ''
|
|
}).attr('data-file-name', file_name);
|
|
$image.appendTo($image_preview);
|
|
};
|
|
$image_preview.show();
|
|
reader.readAsDataURL($element.get(0).files[i]);
|
|
}
|
|
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
fansub.setCookie = function(cname, cvalue, exmin) {
|
|
var d = new Date();
|
|
d.setTime(d.getTime() + (exmin * 60 * 1000));
|
|
var expires = "expires=" + d.toGMTString(),
|
|
my_cookies;
|
|
my_cookies = cname + "=" + cvalue + "; " + expires + "; path=/";
|
|
document.cookie = my_cookies;
|
|
};
|
|
|
|
fansub.iconChangeCaptchaExecute = function() {
|
|
var $icon_refresh_captcha = $('img.fansub-captcha-reload'),
|
|
$captcha_image = $('img.fansub-captcha-image');
|
|
if(!$captcha_image.length) {
|
|
return false;
|
|
}
|
|
$captcha_image.css({'cursor' : 'text'});
|
|
$icon_refresh_captcha.css({'opacity' : '0.75'});
|
|
$icon_refresh_captcha.on('mouseover', function(e) {
|
|
e.preventDefault();
|
|
$(this).css({'opacity' : '1'});
|
|
});
|
|
$icon_refresh_captcha.on('mouseout mouseleave', function(e) {
|
|
e.preventDefault();
|
|
$(this).css({'opacity' : '0.75'});
|
|
});
|
|
$icon_refresh_captcha.on('click', function(e) {
|
|
e.preventDefault();
|
|
var $element = $(this),
|
|
$container = $element.parent(),
|
|
$image = $container.find('img.fansub-captcha-image');
|
|
$element.css({'opacity' : '0.25', 'pointer-events' : 'none'});
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: fansub.ajax_url,
|
|
data: {
|
|
action: 'fansub_change_captcha_image'
|
|
},
|
|
success: function(response){
|
|
if(response.success) {
|
|
$image.attr('src', response.captcha_image_url);
|
|
} else {
|
|
alert(response.message);
|
|
}
|
|
$element.css({'opacity' : '0.75', 'pointer-events' : 'inherit'});
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
fansub.addDefaultQuicktagButton = function() {
|
|
var $quicktags_toolbar = $body.find('.quicktags-toolbar');
|
|
if(!$body.hasClass('front-end') && $quicktags_toolbar.length && $quicktags_toolbar.attr('id') == 'ed_toolbar') {
|
|
QTags.addButton('hr', 'hr', '\n<hr>\n', '', 'h', 'Horizontal rule line', 30);
|
|
QTags.addButton('dl', 'dl', '<dl>\n', '</dl>\n\n', 'd', 'HTML Description List Element', 100);
|
|
QTags.addButton('dt', 'dt', '\t<dt>', '</dt>\n', '', 'HTML Definition Term Element', 101);
|
|
QTags.addButton('dd', 'dd', '\t<dd>', '</dd>\n', '', 'HTML Description Element', 102);
|
|
}
|
|
};
|
|
|
|
fansub.formatNumber = function(number, separator, currency) {
|
|
currency = currency || ' ₫';
|
|
separator = separator || ',';
|
|
var number_string = number.toString(),
|
|
decimal = '.',
|
|
numbers = number_string.split('.'),
|
|
result = '';
|
|
if(!fansub.isArray(numbers)) {
|
|
numbers = number_string.split(',');
|
|
decimal = ',';
|
|
}
|
|
if(fansub.isArray(numbers)) {
|
|
number_string = numbers[0];
|
|
}
|
|
var number_len = parseInt(number_string.length);
|
|
var last = number_string.slice(-3);
|
|
if(number_len > 3) {
|
|
result += separator + last;
|
|
} else {
|
|
result += last;
|
|
}
|
|
|
|
while(number_len > 3) {
|
|
number_len -= 3;
|
|
number_string = number_string.slice(0, number_len);
|
|
last = number_string.slice(-3);
|
|
|
|
if(number_len <= 3) {
|
|
result = last + result;
|
|
} else {
|
|
result = separator + last + result;
|
|
}
|
|
}
|
|
if(fansub.isArray(numbers) && $.isNumeric(numbers[1])) {
|
|
result += decimal + numbers[1];
|
|
}
|
|
result += currency;
|
|
result = $.trim(result);
|
|
return result;
|
|
};
|
|
|
|
fansub.scrollToPosition = function(pos, time) {
|
|
time = time || 1000;
|
|
$('html, body').stop().animate({scrollTop: pos}, time);
|
|
};
|
|
|
|
fansub.goToTop = function() {
|
|
fansub.scrollToPosition(0);
|
|
return false;
|
|
};
|
|
|
|
fansub.scrollToTop = function() {
|
|
fansub.goToTop();
|
|
};
|
|
|
|
fansub.isEmail = function(email) {
|
|
return this.test(email, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
|
|
};
|
|
|
|
fansub.isEmpty = function(text) {
|
|
return text.trim();
|
|
};
|
|
|
|
fansub.switcherAjax = function() {
|
|
$('.fansub-switcher-ajax .icon-circle').on('click', function(e) {
|
|
e.preventDefault();
|
|
var $element = $(this),
|
|
opacity = '0.5';
|
|
if($element.hasClass('icon-circle-success')) {
|
|
opacity = '0.25';
|
|
}
|
|
$element.css({'opacity' : opacity});
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: fansub.ajax_url,
|
|
data: {
|
|
action: 'fansub_switcher_ajax',
|
|
post_id: $element.attr('data-id'),
|
|
value: $element.attr('data-value'),
|
|
key: $element.attr('data-key')
|
|
},
|
|
success: function(response){
|
|
if(response.success) {
|
|
$element.toggleClass('icon-circle-success');
|
|
}
|
|
$element.css({'opacity' : '1'});
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
fansub.chosenSelectUpdated = function(el) {
|
|
var $element = el,
|
|
values = $element.chosen().val();
|
|
var $parent = $element.parent(),
|
|
$result = $parent.find('.chosen-result');
|
|
if(null == values) {
|
|
$result.val('');
|
|
return;
|
|
}
|
|
var new_value = [],
|
|
taxonomy = null,
|
|
$option = null,
|
|
i = 0,
|
|
count_value = values.length,
|
|
is_term = false;
|
|
for(i; i <= count_value; i++) {
|
|
var current_value = values[i],
|
|
new_item = {value: current_value};
|
|
$option = $parent.find('option[value="' + current_value + '"]');
|
|
taxonomy = $option.attr('data-taxonomy');
|
|
if($.trim(taxonomy)) {
|
|
new_item.taxonomy = taxonomy;
|
|
is_term = true;
|
|
}
|
|
new_value.push(new_item);
|
|
}
|
|
$result.val(JSON.stringify(new_value));
|
|
};
|
|
|
|
fansub.mediaRemove = function(upload, remove, preview, url, id) {
|
|
preview.html('');
|
|
url.val('');
|
|
id.val('');
|
|
remove.addClass('hidden');
|
|
upload.removeClass('hidden');
|
|
};
|
|
|
|
fansub.mediaChange = function(upload, remove, preview, url, id) {
|
|
if(fansub.isImageUrl(url.val())) {
|
|
preview.html(fansub.createImageHTML({src: url.val(), id: id.val(), element: preview}));
|
|
} else {
|
|
preview.html('');
|
|
}
|
|
id.val('');
|
|
};
|
|
|
|
fansub.mediaUpload = function(button, options) {
|
|
var defaults = {
|
|
title: fansub.i18n.insert_media_title,
|
|
button_text: null,
|
|
multiple: false,
|
|
remove: false,
|
|
change: false
|
|
};
|
|
options = options || {};
|
|
options = $.extend({}, defaults, options);
|
|
var $container = button.parent();
|
|
var $url = $container.find('input.media-url'),
|
|
$id = $container.find('input.media-id'),
|
|
$remove = $container.find('.btn-remove'),
|
|
$preview = $container.find('.media-preview'),
|
|
media_frame = null;
|
|
if(!options.remove && !options.change) {
|
|
if(button.hasClass('selecting')) {
|
|
return;
|
|
}
|
|
if(!options.button_text) {
|
|
if(options.multiple) {
|
|
options.button_text = fansub.i18n.insert_media_button_texts;
|
|
} else {
|
|
options.button_text = fansub.i18n.insert_media_button_text;
|
|
}
|
|
}
|
|
button.addClass('selecting');
|
|
if(media_frame) {
|
|
media_frame.open();
|
|
return;
|
|
}
|
|
media_frame = wp.media({
|
|
title: options.title,
|
|
button: {
|
|
text: options.button_text
|
|
},
|
|
multiple: options.multiple
|
|
});
|
|
media_frame.on('select', function() {
|
|
var media_items = fansub.receiveSelectedMediaItems(media_frame);
|
|
if(!options.multiple) {
|
|
var media_item = fansub.getFirstMediaItemJSON(media_items);
|
|
if(media_item.id) {
|
|
$id.val(media_item.id);
|
|
}
|
|
if(media_item.url) {
|
|
$url.val(media_item.url);
|
|
$preview.html(fansub.createImageHTML({src: media_item.url, id: media_item.id, element: $preview}));
|
|
button.addClass('hidden');
|
|
$remove.removeClass('hidden');
|
|
}
|
|
}
|
|
button.removeClass('selecting');
|
|
});
|
|
media_frame.on('escape', function() {
|
|
button.removeClass('selecting');
|
|
});
|
|
media_frame.open();
|
|
} else {
|
|
if(options.remove) {
|
|
fansub.mediaRemove(button, $remove, $preview, $url, $id);
|
|
}
|
|
}
|
|
|
|
if(options.change) {
|
|
fansub.mediaChange(button, $remove, $preview, $url, $id);
|
|
}
|
|
|
|
$url.on('change input', function(e) {
|
|
e.preventDefault();
|
|
fansub.mediaChange(button, $remove, $preview, $url, $id);
|
|
});
|
|
|
|
$remove.on('click', function(e) {
|
|
e.preventDefault();
|
|
fansub.mediaRemove(button, $remove, $preview, $url, $id);
|
|
});
|
|
};
|
|
|
|
fansub.sortableTermStop = function(container) {
|
|
var $input_result = container.find('.input-result'),
|
|
$sortable_result = container.find('.connected-result'),
|
|
value = [];
|
|
$sortable_result.find('li').each(function(index, el) {
|
|
var $element = $(el),
|
|
item = {
|
|
id: $element.attr('data-id'),
|
|
taxonomy: $element.attr('data-taxonomy')
|
|
};
|
|
value.push(item);
|
|
});
|
|
value = JSON.stringify(value);
|
|
$input_result.val(value);
|
|
return value;
|
|
};
|
|
|
|
fansub.sortablePostTypeStop = function(container) {
|
|
var $input_result = container.find('.input-result'),
|
|
$sortable_result = container.find('.connected-result'),
|
|
value = [];
|
|
$sortable_result.find('li').each(function(index, el) {
|
|
var $element = $(el),
|
|
item = {
|
|
id: $element.attr('data-id')
|
|
};
|
|
value.push(item);
|
|
});
|
|
value = JSON.stringify(value);
|
|
$input_result.val(value);
|
|
return value;
|
|
};
|
|
|
|
fansub.sortableTaxonomyStop = function(container) {
|
|
var $input_result = container.find('.input-result'),
|
|
$sortable_result = container.find('.connected-result'),
|
|
value = [];
|
|
$sortable_result.find('li').each(function(index, el) {
|
|
var $element = $(el),
|
|
item = {
|
|
id: $element.attr('data-id')
|
|
};
|
|
value.push(item);
|
|
});
|
|
value = JSON.stringify(value);
|
|
$input_result.val(value);
|
|
return value;
|
|
};
|
|
|
|
fansub.sortableStop = function($element, $container) {
|
|
var $input_result = $container.find('.input-result'),
|
|
value = [];
|
|
$element.find('li').each(function(index, el) {
|
|
var $element = $(el),
|
|
taxonomy = $element.attr('data-taxonomy'),
|
|
item = {
|
|
id: $element.attr('data-id')
|
|
};
|
|
if(typeof taxonomy !== typeof undefined && taxonomy !== false) {
|
|
item.taxonomy = taxonomy;
|
|
}
|
|
value.push(item);
|
|
});
|
|
value = JSON.stringify(value);
|
|
$input_result.val(value);
|
|
return value;
|
|
};
|
|
|
|
fansub.administrativeBoundaries = function($element, child_name, $container) {
|
|
$container = $container || $element.closest('form');
|
|
var $form = $container,
|
|
$child = $form.find('select[name=' + child_name + ']'),
|
|
$default = $child.find('option[value=0]'),
|
|
element_name = $element.attr('name');
|
|
if($child.length) {
|
|
if(!$default.length) {
|
|
$default = $child.find('option[value=""]')
|
|
}
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: fansub.ajax_url,
|
|
data: {
|
|
action: 'fansub_fetch_administrative_boundaries',
|
|
parent: $element.val(),
|
|
taxonomy: 'category',
|
|
type: element_name,
|
|
default: $default.prop('outerHTML')
|
|
},
|
|
success: function(response){
|
|
$child.html(response.html_data);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
function MediaUpload(element, options) {
|
|
this.self = this;
|
|
this.$element = $(element);
|
|
if(!this.$element.length) {
|
|
return this;
|
|
}
|
|
this.element = element;
|
|
this.options = $.extend({}, MediaUpload.DEFAULTS, options);
|
|
this.items = null;
|
|
this.$container = this.$element.parent();
|
|
this.$id = this.$container.find('input.media-id');
|
|
this.$url = this.$container.find('input.media-url');
|
|
this.$preview = this.$container.find('.media-preview');
|
|
this.$remove = this.$container.find('.btn-remove');
|
|
//this.$th = this.$container.prev();
|
|
this._defaults = MediaUpload.DEFAULTS;
|
|
this._name = MediaUpload.NAME;
|
|
this.frame = null;
|
|
|
|
this.init();
|
|
|
|
this.$element.on('click', $.proxy(this.add, this));
|
|
this.$url.on('change input', $.proxy(this.change, this));
|
|
this.$remove.on('click', $.proxy(this.remove, this));
|
|
}
|
|
|
|
MediaUpload.NAME = 'fansub.mediaUpload';
|
|
|
|
MediaUpload.DEFAULTS = {
|
|
title: fansub.i18n.insert_media_title,
|
|
button_text: null,
|
|
multiple: false
|
|
};
|
|
|
|
MediaUpload.prototype.init = function() {
|
|
if(!this.options.button_text) {
|
|
if(this.options.multiple) {
|
|
this.options.button_text = fansub.i18n.insert_media_button_texts;
|
|
} else {
|
|
this.options.button_text = fansub.i18n.insert_media_button_text;
|
|
}
|
|
}
|
|
};
|
|
|
|
MediaUpload.prototype.selected = function() {
|
|
this.items = fansub.receiveSelectedMediaItems(this.frame);
|
|
if(!this.options.multiple) {
|
|
var media_item = fansub.getFirstMediaItemJSON(this.items);
|
|
if(media_item.id) {
|
|
this.$id.val(media_item.id);
|
|
}
|
|
if(media_item.url) {
|
|
this.$url.val(media_item.url);
|
|
this.$preview.html(fansub.createImageHTML({src: media_item.url, id: media_item.id, element: this.$preview}));
|
|
this.$element.addClass('hidden');
|
|
this.$remove.removeClass('hidden');
|
|
}
|
|
}
|
|
this.$element.removeClass('selecting');
|
|
};
|
|
|
|
MediaUpload.prototype.remove = function(e) {
|
|
e.preventDefault();
|
|
this.$preview.html('');
|
|
this.$url.val('');
|
|
this.$id.val('');
|
|
this.$remove.addClass('hidden');
|
|
this.$element.removeClass('hidden');
|
|
};
|
|
|
|
MediaUpload.prototype.add = function(e) {
|
|
e.preventDefault();
|
|
var $element = this.$element;
|
|
if(this.$element.hasClass('selecting')) {
|
|
return;
|
|
}
|
|
this.$element.addClass('selecting');
|
|
if(this.frame) {
|
|
this.frame.open();
|
|
return;
|
|
}
|
|
this.frame = wp.media({
|
|
title: this.options.title,
|
|
button: {
|
|
text: this.options.button_text
|
|
},
|
|
multiple: this.options.multiple
|
|
});
|
|
this.frame.on('select', $.proxy(this.selected, this));
|
|
this.frame.on('escape', function() {
|
|
$element.removeClass('selecting');
|
|
});
|
|
this.frame.open();
|
|
};
|
|
|
|
MediaUpload.prototype.change = function(e) {
|
|
e.preventDefault();
|
|
if(fansub.isImageUrl(this.$url.val())) {
|
|
this.$preview.html(fansub.createImageHTML({src: this.$url.val(), id: this.$id.val(), element: this.$preview}));
|
|
} else {
|
|
this.$preview.html('');
|
|
}
|
|
this.$id.val('');
|
|
};
|
|
|
|
$.fn.fansubMediaUpload = function(options) {
|
|
return this.each(function() {
|
|
if(!$.data(this, MediaUpload.NAME)) {
|
|
$.data(this, MediaUpload.NAME, new MediaUpload(this, options));
|
|
}
|
|
});
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
function ScrollTop(element, options) {
|
|
var $window = $(window),
|
|
current_pos = $window.scrollTop();
|
|
this.self = this;
|
|
this.$element = $(element);
|
|
if(!this.$element.length) {
|
|
return this;
|
|
}
|
|
this.element = element;
|
|
this.options = $.extend({}, ScrollTop.DEFAULTS, options);
|
|
this._defaults = ScrollTop.DEFAULTS;
|
|
this._name = ScrollTop.NAME;
|
|
|
|
this.init();
|
|
|
|
var pos_to_show = this.options.posToShow,
|
|
$element = this.$element;
|
|
|
|
if(current_pos >= pos_to_show) {
|
|
$element.fadeIn();
|
|
}
|
|
|
|
$window.scroll(function() {
|
|
if($(this).scrollTop() >= pos_to_show) {
|
|
$element.fadeIn();
|
|
} else {
|
|
$element.fadeOut();
|
|
}
|
|
});
|
|
|
|
$element.on('click', $.proxy(this.click, this));
|
|
}
|
|
|
|
ScrollTop.NAME = 'fansub.scrollTop';
|
|
|
|
ScrollTop.DEFAULTS = {
|
|
posToShow: 100
|
|
};
|
|
|
|
ScrollTop.prototype.init = function() {
|
|
|
|
};
|
|
|
|
ScrollTop.prototype.click = function(e) {
|
|
e.preventDefault();
|
|
fansub.scrollToTop();
|
|
};
|
|
|
|
$.fn.fansubScrollTop = function(options) {
|
|
return this.each(function() {
|
|
if(!$.data(this, ScrollTop.NAME)) {
|
|
$.data(this, ScrollTop.NAME, new ScrollTop(this, options));
|
|
}
|
|
});
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
function SortableList(element, options) {
|
|
this.self = this;
|
|
this.$element = $(element);
|
|
if(!this.$element.length) {
|
|
return this;
|
|
}
|
|
this.element = element;
|
|
this.options = $.extend({}, SortableList.DEFAULTS, options);
|
|
this._defaults = SortableList.DEFAULTS;
|
|
this._name = SortableList.NAME;
|
|
if(this.$element.hasClass('manage-column')) {
|
|
return;
|
|
}
|
|
this.init();
|
|
var $element = this.$element,
|
|
$container = $element.parent(),
|
|
$sortable_result = $element.next(),
|
|
sortable_options = {
|
|
placeholder: 'ui-state-highlight',
|
|
sort: function(event, ui) {
|
|
var that = $(this),
|
|
ui_state_highlight = that.find('.ui-state-highlight');
|
|
ui_state_highlight.css({'height': ui.item.height()});
|
|
if(that.hasClass('display-inline')) {
|
|
ui_state_highlight.css({'width': ui.item.width()});
|
|
}
|
|
},
|
|
stop: function() {
|
|
var $sortable_result = $container.find('.connected-result');
|
|
if($sortable_result.length) {
|
|
if($sortable_result.hasClass('term-sortable')) {
|
|
fansub.sortableTermStop($container);
|
|
} else if($sortable_result.hasClass('post-type-sortable')) {
|
|
fansub.sortablePostTypeStop($container);
|
|
} else if($sortable_result.hasClass('taxonomy-sortable')) {
|
|
fansub.sortableTaxonomyStop($container);
|
|
}
|
|
} else {
|
|
fansub.sortableStop($element, $container);
|
|
}
|
|
}
|
|
};
|
|
if($sortable_result.length && $sortable_result.hasClass('sortable')) {
|
|
var element_height = $element.height(),
|
|
sortable_result_height = $sortable_result.height();
|
|
if(element_height > sortable_result_height) {
|
|
$sortable_result.css({'height': element_height});
|
|
}
|
|
}
|
|
if($element.hasClass('connected-list')) {
|
|
sortable_options.connectWith = '.connected-list';
|
|
}
|
|
$element.sortable(sortable_options).disableSelection();
|
|
}
|
|
|
|
SortableList.NAME = 'fansub.sortableList';
|
|
|
|
SortableList.DEFAULTS = {};
|
|
|
|
SortableList.prototype.init = function() {
|
|
|
|
};
|
|
|
|
$.fn.fansubSortable = function(options) {
|
|
return this.each(function() {
|
|
if(!$.data(this, SortableList.NAME)) {
|
|
$.data(this, SortableList.NAME, new SortableList(this, options));
|
|
}
|
|
});
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
function MobileMenu(element, options) {
|
|
var $window = $(window),
|
|
$body = $('body'),
|
|
current_width = $window.width();
|
|
this.self = this;
|
|
this.$element = $(element);
|
|
if(!this.$element.length) {
|
|
return this;
|
|
}
|
|
this.element = element;
|
|
this.options = $.extend({}, MobileMenu.DEFAULTS, options);
|
|
this._defaults = MobileMenu.DEFAULTS;
|
|
this._name = MobileMenu.NAME;
|
|
this.init();
|
|
var $element = this.$element,
|
|
$menu_parent = $element.parent(),
|
|
$mobile_menu_button = $menu_parent.find('.mobile-menu-button'),
|
|
$search_form = $menu_parent.find('.search-form'),
|
|
display_width = parseFloat(this.options.displayWidth),
|
|
height = parseInt(this.options.height),
|
|
body_height = $body.height(),
|
|
force_search_form = this.options.forceSearchForm,
|
|
search_form_added = false;
|
|
this.element_class = $element.attr('class');
|
|
this.html = $element.html();
|
|
var html = this.html,
|
|
menu_class = this.element_class,
|
|
position = this.options.position,
|
|
window_resized = false;
|
|
function fansub_update_mobile_menu() {
|
|
$element.removeClass('sf-menu sf-js-enabled');
|
|
$element.find('li.menu-item-has-children').not('.appended').addClass('appended').append('<i class="fa fa-plus"></i>');
|
|
$element.css({height: body_height});
|
|
$element.show();
|
|
$element.addClass(position);
|
|
$element.addClass('fansub-mobile-menu');
|
|
if(!$mobile_menu_button.length) {
|
|
$menu_parent.append(fansub.mobile_menu_icon);
|
|
$mobile_menu_button = $menu_parent.find('.mobile-menu-button');
|
|
$mobile_menu_button.attr('aria-controls', $element.attr('id'))
|
|
}
|
|
if(!search_form_added && (!$search_form.length || force_search_form)) {
|
|
if(!search_form_added && (!$element.find('li.search-item').length || force_search_form)) {
|
|
$element.prepend('<li class="search-item menu-item" style="overflow: hidden">' + fansub.search_form + '</li>');
|
|
search_form_added = true;
|
|
}
|
|
}
|
|
$mobile_menu_button.css({'line-height' : height + 'px'});
|
|
$mobile_menu_button.show();
|
|
|
|
$menu_parent.off('click', '.mobile-menu-button').on('click', '.mobile-menu-button', function(e) {
|
|
e.stopPropagation();
|
|
$element.toggleClass('active');
|
|
});
|
|
|
|
$body.on('click', function() {
|
|
$element.removeClass('active');
|
|
});
|
|
|
|
$menu_parent.off('click', '.fansub-mobile-menu').on('click', '.fansub-mobile-menu', function(e) {
|
|
e.stopPropagation();
|
|
if(e.target == this) {
|
|
$element.toggleClass('active');
|
|
}
|
|
});
|
|
|
|
$element.find('.search-field').on('click', function(e) {
|
|
e.preventDefault();
|
|
});
|
|
|
|
if($body.hasClass('jquery-mobile')) {
|
|
$menu_parent.on('swipeleft', '.fansub-mobile-menu', function(e) {
|
|
e.preventDefault();
|
|
$element.removeClass('active');
|
|
});
|
|
}
|
|
|
|
$element.find('li.menu-item-has-children .fa').off('click').on('click', function(e) {
|
|
e.preventDefault();
|
|
var $this = $(this),
|
|
$current_li = $this.parent(),
|
|
$sub_menu = $current_li.children('.sub-menu');
|
|
if($this.hasClass('active')) {
|
|
$sub_menu.stop(true, false, true).slideUp();
|
|
$this.removeClass('fa-minus');
|
|
$this.addClass('fa-plus');
|
|
$current_li.find('.fa-minus').each(function() {
|
|
$(this).removeClass('fa-minus active').addClass('fa-plus');
|
|
});
|
|
$current_li.find('.sub-menu').not($sub_menu).hide();
|
|
} else {
|
|
$this.removeClass('fa-plus');
|
|
$this.addClass('fa-minus');
|
|
$sub_menu.stop(true, false, true).slideDown();
|
|
}
|
|
$this.toggleClass('active');
|
|
});
|
|
|
|
$window.scroll(function() {
|
|
var pos = $(this).scrollTop(),
|
|
$admin_bar = $('#wpadminbar'),
|
|
admin_bar_height = 0;
|
|
if($admin_bar.length) {
|
|
admin_bar_height = $admin_bar.height();
|
|
}
|
|
if(pos < 100) {
|
|
pos = admin_bar_height;
|
|
}
|
|
if(pos == admin_bar_height) {
|
|
$element.css({'top' : pos + 'px'});
|
|
} else {
|
|
$element.css({'top' : '-' + pos + 'px'});
|
|
}
|
|
});
|
|
}
|
|
if(current_width > display_width) {
|
|
if(!window_resized) {
|
|
$window.on('resize', function() {
|
|
window_resized = true;
|
|
current_width = $window.width();
|
|
if(current_width > display_width) {
|
|
if($element.hasClass('fansub-mobile-menu')) {
|
|
$element.attr('class', menu_class);
|
|
$element.attr('style', '');
|
|
$element.html(html);
|
|
window.location.href = window.location.href;
|
|
}
|
|
} else {
|
|
fansub_update_mobile_menu();
|
|
}
|
|
});
|
|
}
|
|
return this;
|
|
}
|
|
|
|
if(current_width <= display_width) {
|
|
fansub_update_mobile_menu();
|
|
}
|
|
|
|
if(!window_resized) {
|
|
$window.on('resize', function() {
|
|
window_resized = true;
|
|
current_width = $window.width();
|
|
if(current_width > display_width) {
|
|
if($element.hasClass('fansub-mobile-menu')) {
|
|
$element.attr('class', menu_class);
|
|
$element.attr('style', '');
|
|
$element.html(html);
|
|
window.location.href = window.location.href;
|
|
}
|
|
} else {
|
|
fansub_update_mobile_menu();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
MobileMenu.NAME = 'fansub.mobileMenu';
|
|
|
|
MobileMenu.DEFAULTS = {
|
|
displayWidth: 980,
|
|
position: 'left',
|
|
height: 30,
|
|
forceSearchForm: false
|
|
};
|
|
|
|
MobileMenu.prototype.init = function() {
|
|
if(!this.$element.is('ul')) {
|
|
this.$element = this.$element.find('ul');
|
|
}
|
|
};
|
|
|
|
MobileMenu.prototype.click = function(e) {
|
|
e.preventDefault();
|
|
fansub.scrollToTop();
|
|
};
|
|
|
|
$.fn.fansubMobileMenu = function(options) {
|
|
return this.each(function() {
|
|
if(!$.data(this, MobileMenu.NAME)) {
|
|
$.data(this, MobileMenu.NAME, new MobileMenu(this, options));
|
|
}
|
|
});
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
function ChosenSelect(element, options) {
|
|
this.self = this;
|
|
this.$element = $(element);
|
|
if(!this.$element.length) {
|
|
return this;
|
|
}
|
|
this.element = element;
|
|
this.options = $.extend({}, ChosenSelect.DEFAULTS, options);
|
|
this._defaults = ChosenSelect.DEFAULTS;
|
|
this._name = ChosenSelect.NAME;
|
|
this.multiple = this.$element.attr('multiple');
|
|
this.init();
|
|
var $element = this.$element,
|
|
loaded = parseInt(this.$element.attr('data-loaded')),
|
|
chosen_params = {
|
|
width: this.options.width || '100%'
|
|
};
|
|
if(1 == loaded) {
|
|
this.$element.parent().find('.chosen-container').remove();
|
|
}
|
|
if('multiple' == this.multiple) {
|
|
this.$element.chosen(chosen_params).on('change', function() {
|
|
fansub.chosenSelectUpdated($element);
|
|
});
|
|
} else {
|
|
this.$element.chosen(chosen_params);
|
|
}
|
|
this.$element.parent().find('.chosen-container').show();
|
|
}
|
|
|
|
ChosenSelect.NAME = 'fansub.chosenSelect';
|
|
|
|
ChosenSelect.DEFAULTS = {
|
|
displayWidth: 980,
|
|
position: 'left'
|
|
};
|
|
|
|
ChosenSelect.prototype.init = function() {
|
|
var $element_parent = this.$element.parent(),
|
|
$next_element = $element_parent.next();
|
|
if($next_element.hasClass('chosen-container')) {
|
|
$next_element.remove();
|
|
}
|
|
this.$element.addClass('fansub-chosen-select');
|
|
this.$element.attr('data-loaded', 1);
|
|
};
|
|
|
|
$.fn.fansubChosenSelect = function(options) {
|
|
return this.each(function() {
|
|
if(!$.data(this, ChosenSelect.NAME)) {
|
|
$.data(this, ChosenSelect.NAME, new ChosenSelect(this, options));
|
|
}
|
|
});
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
function PostRating(element, options) {
|
|
this.self = this;
|
|
this.$element = $(element);
|
|
if(!this.$element.length) {
|
|
return this;
|
|
}
|
|
this.element = element;
|
|
this.options = $.extend({}, PostRating.DEFAULTS, options);
|
|
this._defaults = PostRating.DEFAULTS;
|
|
this._name = PostRating.NAME;
|
|
this.multiple = this.$element.attr('multiple');
|
|
this.init();
|
|
var $element = this.$element;
|
|
$element.raty(this.options);
|
|
}
|
|
|
|
PostRating.NAME = 'fansub.postRating';
|
|
|
|
PostRating.DEFAULTS = {
|
|
score: function() {
|
|
return $(this).attr('data-score');
|
|
},
|
|
path: function() {
|
|
return this.getAttribute('data-path');
|
|
},
|
|
number: parseInt($(this).attr('data-number')),
|
|
numberMax: parseInt($(this).attr('data-number-max')),
|
|
readOnly: function() {
|
|
var readonly = parseInt($(this).attr('data-readonly'));
|
|
return readonly == 1;
|
|
},
|
|
click: function(score, e) {
|
|
var $element = $(this),
|
|
post_id = parseInt(this.getAttribute('data-id'));
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: fansub.ajax_url,
|
|
data: {
|
|
action: 'fansub_rate_post',
|
|
post_id: post_id,
|
|
score: score,
|
|
number: $element.attr('data-number'),
|
|
number_max: $element.attr('data-number-max')
|
|
},
|
|
success: function(response){
|
|
if(response.success) {
|
|
var refresh = parseInt($element.attr('data-refresh'));
|
|
if(1 == refresh) {
|
|
$element.attr('data-score', response.score);
|
|
} else {
|
|
$element.attr('data-score', score);
|
|
}
|
|
$element.attr('data-readonly', 1);
|
|
$element.raty(options);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
PostRating.prototype.init = function() {
|
|
|
|
};
|
|
|
|
$.fn.fansubPostRating = function(options) {
|
|
return this.each(function() {
|
|
if(!$.data(this, PostRating.NAME)) {
|
|
$.data(this, PostRating.NAME, new PostRating(this, options));
|
|
}
|
|
});
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
var $body = $('body');
|
|
function GoogleMaps(element, options) {
|
|
this.self = this;
|
|
this.$element = $(element);
|
|
if(!this.$element.length || !$body.hasClass('fansub-google-maps')) {
|
|
return this;
|
|
}
|
|
this.element = element;
|
|
this.options = $.extend({}, GoogleMaps.DEFAULTS, options);
|
|
this._defaults = GoogleMaps.DEFAULTS;
|
|
this._name = GoogleMaps.NAME;
|
|
this.init();
|
|
var $element = this.$element,
|
|
$google_maps = $body.find('#google_maps'),
|
|
$geo_address = $body.find('.fansub-geo-address'),
|
|
$province = $body.find('select[name=province]'),
|
|
$category_list = $('.classifieds.fansub-google-maps #categorychecklist'),
|
|
lat_long = new google.maps.LatLng($element.attr('data-lat'), $element.attr('data-long')),
|
|
map_options = {
|
|
zoom: parseInt($element.attr('data-zoom')),
|
|
center: lat_long,
|
|
scrollwheel: $element.attr('data-scrollwheel')
|
|
},
|
|
map = new google.maps.Map(document.getElementById($element.attr('id')), map_options),
|
|
marker = new google.maps.Marker({
|
|
position: lat_long,
|
|
map: map,
|
|
draggable: true,
|
|
title: $element.attr('data-marker-title')
|
|
}),
|
|
point = marker.getPosition();
|
|
google.maps.event.addListener(marker, 'dragend', function(event) {
|
|
point = marker.getPosition();
|
|
map.panTo(point);
|
|
if($google_maps.length) {
|
|
$google_maps.val(JSON.stringify(point));
|
|
}
|
|
$element.attr('data-lat', point.lat);
|
|
$element.attr('data-long', point.lng);
|
|
});
|
|
var geocoder = new google.maps.Geocoder();
|
|
if($geo_address.length) {
|
|
$geo_address.on('change', function(e) {
|
|
e.preventDefault();
|
|
if($.trim($geo_address.val())) {
|
|
if(geocoder == null) {
|
|
geocoder = new google.maps.Geocoder();
|
|
}
|
|
geocoder.geocode({address: $geo_address.val()}, function(results, status) {
|
|
if(status == google.maps.GeocoderStatus.OK) {
|
|
var bounds = results[0].geometry.bounds;
|
|
if(bounds) {
|
|
map.fitBounds(bounds);
|
|
map.setZoom(14);
|
|
lat_long = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
|
|
marker.setPosition(lat_long);
|
|
point = marker.getPosition();
|
|
if($google_maps.length) {
|
|
$google_maps.val(JSON.stringify(point));
|
|
}
|
|
map.setCenter(point);
|
|
google.maps.event.addListener(marker, 'dragend', function(event) {
|
|
point = marker.getPosition();
|
|
map.panTo(point);
|
|
if($google_maps.length) {
|
|
$google_maps.val(JSON.stringify(point));
|
|
}
|
|
$element.attr('data-lat', point.lat);
|
|
$element.attr('data-long', point.lng);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
if($category_list.length) {
|
|
$category_list.find('input[type="checkbox"]').on('change', function(e) {
|
|
e.preventDefault();
|
|
var $input_category = $(this);
|
|
if($input_category.is(':checked')) {
|
|
if(geocoder == null) {
|
|
geocoder = new google.maps.Geocoder();
|
|
}
|
|
if(!$.trim($geo_address.val())) {
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: fansub.ajax_url,
|
|
data: {
|
|
action: 'fansub_get_term_administrative_boundaries_address',
|
|
term_id: $input_category.val(),
|
|
taxonomy: 'category'
|
|
},
|
|
success: function(response){
|
|
if($.trim(response.address)) {
|
|
geocoder.geocode({address: response.address}, function(results, status) {
|
|
if(status == google.maps.GeocoderStatus.OK) {
|
|
var bounds = results[0].geometry.bounds;
|
|
if(bounds) {
|
|
map.fitBounds(bounds);
|
|
map.setZoom(14);
|
|
lat_long = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
|
|
marker.setPosition(lat_long);
|
|
point = marker.getPosition();
|
|
if($google_maps.length) {
|
|
$google_maps.val(JSON.stringify(point));
|
|
}
|
|
map.setCenter(point);
|
|
google.maps.event.addListener(marker, 'dragend', function(event) {
|
|
point = marker.getPosition();
|
|
map.panTo(point);
|
|
if($google_maps.length) {
|
|
$google_maps.val(JSON.stringify(point));
|
|
}
|
|
$element.attr('data-lat', point.lat);
|
|
$element.attr('data-long', point.lng);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
if($province.length) {
|
|
var $district = $body.find('select[name=district]'),
|
|
$ward = $body.find('select[name=ward]'),
|
|
$street = $body.find('select[name=street]');
|
|
$province.add($district).add($ward).add($street).on('change', function(e) {
|
|
e.preventDefault();
|
|
var term_id = $(this).val();
|
|
if($.isNumeric(term_id) && term_id > 0) {
|
|
if(geocoder == null) {
|
|
geocoder = new google.maps.Geocoder();
|
|
}
|
|
if(!$.trim($geo_address.val())) {
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: fansub.ajax_url,
|
|
data: {
|
|
action: 'fansub_get_term_administrative_boundaries_address',
|
|
term_id: term_id,
|
|
taxonomy: 'category'
|
|
},
|
|
success: function(response){
|
|
if($.trim(response.address)) {
|
|
geocoder.geocode({address: response.address}, function(results, status) {
|
|
if(status == google.maps.GeocoderStatus.OK) {
|
|
var bounds = results[0].geometry.bounds;
|
|
if(bounds) {
|
|
map.fitBounds(bounds);
|
|
map.setZoom(14);
|
|
lat_long = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
|
|
marker.setPosition(lat_long);
|
|
point = marker.getPosition();
|
|
if($google_maps.length) {
|
|
$google_maps.val(JSON.stringify(point));
|
|
}
|
|
map.setCenter(point);
|
|
google.maps.event.addListener(marker, 'dragend', function(event) {
|
|
point = marker.getPosition();
|
|
map.panTo(point);
|
|
if($google_maps.length) {
|
|
$google_maps.val(JSON.stringify(point));
|
|
}
|
|
$element.attr('data-lat', point.lat);
|
|
$element.attr('data-long', point.lng);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
GoogleMaps.NAME = 'fansub.googleMaps';
|
|
|
|
GoogleMaps.DEFAULTS = {
|
|
|
|
};
|
|
|
|
GoogleMaps.prototype.init = function() {
|
|
|
|
};
|
|
|
|
$.fn.fansubGoogleMaps = function(options) {
|
|
return this.each(function() {
|
|
if(!$.data(this, GoogleMaps.NAME)) {
|
|
$.data(this, GoogleMaps.NAME, new GoogleMaps(this, options));
|
|
}
|
|
});
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
$.fn.fansubShow = function(show, fade) {
|
|
var that = $(this);
|
|
fade = fade || false;
|
|
if(show) {
|
|
if(fade) {
|
|
that.addClass('active').fadeIn();
|
|
} else {
|
|
that.addClass('active').show();
|
|
}
|
|
} else {
|
|
if(fade) {
|
|
that.removeClass('active').fadeOut();
|
|
} else {
|
|
that.removeClass('active').hide();
|
|
}
|
|
}
|
|
};
|
|
|
|
$.fn.fansubExternalLinkFilter = function() {
|
|
var that = $(this);
|
|
that.filter(function() {
|
|
return this.hostname && this.hostname !== location.hostname;
|
|
}).addClass('external');
|
|
};
|
|
});
|
|
|
|
jQuery(document).ready(function($) {
|
|
(function() {
|
|
$('.btn-insert-media').fansubMediaUpload();
|
|
})();
|
|
|
|
(function() {
|
|
$('.fansub-geo-address').on('input', function() {
|
|
$(this).addClass('user-type-address');
|
|
$(this).attr('data-user-type', 1);
|
|
});
|
|
})();
|
|
}); |