##// END OF EJS Templates
Unify thread and post creation into one method inside post manager, that can be called from almost anywhere (one step closer to ajax thread creation)
Unify thread and post creation into one method inside post manager, that can be called from almost anywhere (one step closer to ajax thread creation)

File last commit:

r1940:1f7b0788 default
r1997:be673d04 default
Show More
main.js
230 lines | 7.0 KiB | application/javascript | JavascriptLexer
neko259
Added copyright to the JS code.
r332 /*
@licstart The following is the entire license notice for the
JavaScript code in this page.
Copyright (C) 2013 neko259
The JavaScript code in this page is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this page.
*/
neko259
Save video and audio volume level
r1432 var ITEM_VOLUME_LEVEL = 'volumeLevel';
neko259
Changed extensions to mimetypes for images in scripts
r1868 var IMAGE_TYPES = ['image/png', 'image/jpg', 'image/jpeg', 'image/bmp', 'image/gif'];
neko259
Added favorite thread popup
r1340
neko259
Hide email form row by the JS code.
r653 /**
* An email is a hidden file to prevent spam bots from posting. It has to be
* hidden.
*/
function hideEmailFromForm() {
$('.form-email').parent().parent().hide();
}
neko259
Added js code highlight
r703 /**
* Highlight code blocks with code highlighter
*/
neko259
Run js highlight on the new posts only, not on all page each time. Add...
r709 function highlightCode(node) {
node.find('pre code').each(function(i, e) {
neko259
Added js code highlight
r703 hljs.highlightBlock(e);
});
}
neko259
Use shared workers for favorites update script
r1463 function updateFavPosts(data) {
neko259
Added favorite thread popup
r1340 var includePostBody = $('#fav-panel').is(":visible");
neko259
Use shared workers for favorites update script
r1463
var allNewPostCount = 0;
neko259
Added favorite thread popup
r1340 if (includePostBody) {
neko259
Use shared workers for favorites update script
r1463 var favoriteThreadPanel = $('#fav-panel');
favoriteThreadPanel.empty();
neko259
Added favorite thread popup
r1340 }
neko259
Use shared workers for favorites update script
r1463
$.each($.parseJSON(data), function (_, dict) {
var newPostCount = dict.new_post_count;
allNewPostCount += newPostCount;
neko259
Added favorite thread popup
r1340
neko259
Use shared workers for favorites update script
r1463 if (includePostBody) {
var favThreadNode = $('<div class="post"></div>');
favThreadNode.append($(dict.post_url));
favThreadNode.append(' ');
favThreadNode.append($('<span class="title">' + dict.title + '</span>'));
if (newPostCount > 0) {
favThreadNode.append(' (<a href="' + dict.newest_post_link + '">+' + newPostCount + "</a>)");
neko259
Added favorite thread popup
r1340 }
neko259
Use shared workers for favorites update script
r1463 favoriteThreadPanel.append(favThreadNode);
neko259
Added favorite thread popup
r1340
neko259
Use shared workers for favorites update script
r1463 addRefLinkPreview(favThreadNode[0]);
}
});
neko259
Added favorite thread popup
r1340
neko259
Use shared workers for favorites update script
r1463 var newPostCountNode = $('#new-fav-post-count');
if (allNewPostCount > 0) {
newPostCountNode.text('(+' + allNewPostCount + ')');
newPostCountNode.show();
} else {
newPostCountNode.hide();
}
neko259
Added favorite thread popup
r1340 }
function initFavPanel() {
neko259
Use shared workers for favorites update script
r1463 var favPanelButton = $('#fav-panel-btn');
neko259
Check for shared worker support before enabling them
r1465 if (favPanelButton.length > 0 && typeof SharedWorker != 'undefined') {
neko259
Use shared workers for favorites update script
r1463 var worker = new SharedWorker($('body').attr('data-update-script'));
worker.port.onmessage = function(e) {
updateFavPosts(e.data);
};
neko259
Fixed capturing worker errors
r1466 worker.onerror = function(event){
throw new Error(event.message + " (" + event.filename + ":" + event.lineno + ")");
neko259
Add worker js errors to the console
r1464 };
neko259
Use shared workers for favorites update script
r1463 worker.port.start();
$(favPanelButton).click(function() {
var favPanel = $('#fav-panel');
favPanel.toggle();
worker.port.postMessage({ includePostBody: favPanel.is(':visible')});
neko259
Added favorite thread popup
r1340
neko259
Dont update favorites if there aren't any
r1341 return false;
});
neko259
Added favorite thread popup
r1340
neko259
Dont update favorites if there aren't any
r1341 $(document).on('keyup.removepic', function(e) {
if(e.which === 27) {
$('#fav-panel').hide();
}
});
}
neko259
Added favorite thread popup
r1340 }
neko259
Save video and audio volume level
r1432 function setVolumeLevel(level) {
localStorage.setItem(ITEM_VOLUME_LEVEL, level);
}
function getVolumeLevel() {
var level = localStorage.getItem(ITEM_VOLUME_LEVEL);
if (level == null) {
level = 1.0;
}
return level
}
function processVolumeUser(node) {
Opera Mini fixes
r1639 if (!window.localStorage) return;
neko259
Save video and audio volume level
r1432 node.prop("volume", getVolumeLevel());
node.on('volumechange', function(event) {
setVolumeLevel(event.target.volume);
$("video,audio").prop("volume", getVolumeLevel());
});
}
/**
* Add all scripts than need to work on post, when the post is added to the
* document.
*/
function addScriptsToPost(post) {
addRefLinkPreview(post[0]);
highlightCode(post);
processVolumeUser(post.find("video,audio"));
}
Opera Mini fixes
r1639 /**
* Fix compatibility issues with some rare browsers
*/
function compatibilityCrutches() {
if (window.operamini) {
$('#form textarea').each(function() { this.placeholder = ''; });
}
}
neko259
Build file search menu on the JS side
r1817 function addContextMenu() {
$.contextMenu({
selector: '.file-menu',
trigger: 'left',
build: function($trigger, e) {
var fileSearchUrl = $trigger.data('search-url');
var isImage = IMAGE_TYPES.indexOf($trigger.data('type')) > -1;
var hasUrl = fileSearchUrl.length > 0;
neko259
Added local stickers feature
r1940 var id = $trigger.data('id');
neko259
Build file search menu on the JS side
r1817 return {
items: {
duplicates: {
name: gettext('Duplicates search'),
callback: function(key, opts) {
neko259
Search duplicates for file, not hash
r1827 window.location = '/feed/?image=' + $trigger.data('filename');
neko259
Build file search menu on the JS side
r1817 }
},
google: {
name: 'Google',
visible: isImage && hasUrl,
callback: function(key, opts) {
window.location = 'https://www.google.com/searchbyimage?image_url=' + fileSearchUrl;
}
},
iqdb: {
name: 'IQDB',
visible: isImage && hasUrl,
callback: function(key, opts) {
window.location = 'http://iqdb.org/?url=' + fileSearchUrl;
}
},
tineye: {
name: 'TinEye',
visible: isImage && hasUrl,
callback: function(key, opts) {
window.location = 'http://tineye.com/search?url=' + fileSearchUrl;
}
neko259
Added local stickers feature
r1940 },
addAlias: {
name: gettext('Add local sticker'),
callback: function(key, opts) {
var alias = prompt(gettext('Input sticker name'));
if (alias) {
window.location = '/stickers/?action=add&name=' + alias + '&id=' + id;
}
}
neko259
Build file search menu on the JS side
r1817 }
neko259
Added local stickers feature
r1940 }
neko259
Build file search menu on the JS side
r1817 };
}
});
}
neko259
xs
r54 $( document ).ready(function() {
neko259
Hide email form row by the JS code.
r653 hideEmailFromForm();
neko259
xs
r54 $("a[href='#top']").click(function() {
$("html, body").animate({ scrollTop: 0 }, "slow");
return false;
});
neko259
Added js popup for image viewing.
r63
neko259
Fixed image preview script which was accidentally disabled during testing.
r270 addImgPreview();
neko259
Removed reply popups as too buggy for using as they are now.
r272
neko259
Added post preview popups
r352 addRefLinkPreview();
neko259
Added js code highlight
r703
neko259
Run js highlight on the new posts only, not on all page each time. Add...
r709 highlightCode($(document));
neko259
Added favorite thread popup
r1340
initFavPanel();
neko259
Save video and audio volume level
r1432
var volumeUsers = $("video,audio");
processVolumeUser(volumeUsers);
Opera Mini fixes
r1639
neko259
Build file search menu on the JS side
r1817 addContextMenu();
Opera Mini fixes
r1639 compatibilityCrutches();
rt@lightning
add mark panel
r228 });