Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * quote-selection.js
- *
- * This is a little buggy.
- * Allows you to quote a post by just selecting some text, then beginning to type.
- *
- * Released under the MIT license
- * Copyright (c) 2012 Michael Save <savetheinternet@tinyboard.org>
- *
- * Usage:
- * $config['additional_javascript'][] = 'js/jquery.min.js';
- * $config['additional_javascript'][] = 'js/quote-selection.js';
- *
- */
- $(document).ready(function(){
- if (!window.getSelection)
- return;
- $.fn.selectRange = function(start, end) {
- return this.each(function() {
- if (this.setSelectionRange) {
- this.focus();
- this.setSelectionRange(start, end);
- } else if (this.createTextRange) {
- var range = this.createTextRange();
- range.collapse(true);
- range.moveEnd('character', end);
- range.moveStart('character', start);
- range.select();
- }
- });
- };
- var altKey = true
- var ctrlKey = true
- var metaKey = true
- $(document).keyup(function(e) {
- if (e.keyCode == 18)
- altKey = false;
- else if (e.keyCode == 17)
- ctrlKey = false;
- else if (e.keyCode == 91)
- metaKey = false;
- });
- $(document).keydown(function(e) {
- if (e.altKey)
- altKey = true;
- else if (e.ctrlKey)
- ctrlKey = true;
- else if (e.metaKey)
- metaKey = true;
- if (altKey || ctrlKey || metaKey) {
- // console.log('CTRL/ALT/Something used. Ignoring');
- return;
- }
- if (e.keyCode < 48 || e.keyCode > 90)
- return;
- var selection = window.getSelection();
- var $post = $(selection.anchorNode).parents('.post');
- if ($post.length == 0) {
- // console.log('Start of selection was not post div', $(selection.anchorNode).parent());
- return;
- }
- var postID = $post.find('.post_no:eq(1)').text();
- if (postID != $(selection.focusNode).parents('.post').find('.post_no:eq(1)').text()) {
- // console.log('Selection left post div', $(selection.focusNode).parent());
- return;
- }
- ;
- var selectedText = selection.toString();
- // console.log('Selected text: ' + selectedText.replace(/\n/g, '\\n').replace(/\r/g, '\\r'));
- if ($('body').hasClass('debug'))
- alert(selectedText);
- if (selectedText.length == 0)
- return;
- var body = $('textarea#body')[0];
- var last_quote = body.value.match(/[\S.]*(^|[\S\s]*)>>(\d+)/);
- if (last_quote)
- last_quote = last_quote[2];
- /* to solve some bugs on weird browsers, we need to replace \r\n with \n and then undo that after */
- var quote = (last_quote != postID ? '>>' + postID + '\r\n' : '') + $.trim(selectedText).replace(/\r\n/g, '\n').replace(/^/mg, '>').replace(/\n/g, '\r\n') + '\r\n';
- // console.log('Deselecting text');
- selection.removeAllRanges();
- if (document.selection) {
- // IE
- body.focus();
- var sel = document.selection.createRange();
- sel.text = quote;
- body.focus();
- } else if (body.selectionStart || body.selectionStart == '0') {
- // Mozilla
- var start = body.selectionStart;
- var end = body.selectionEnd;
- if (!body.value.substring(0, start).match(/(^|\n)$/)) {
- quote = '\r\n\r\n' + quote;
- }
- body.value = body.value.substring(0, start) + quote + body.value.substring(end, body.value.length);
- $(body).selectRange(start + quote.length, start + quote.length);
- } else {
- // ???
- body.value += quote;
- body.focus();
- }
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement