People don't multi-quote enough. People don't know the pleasure of replying everything line by line.
You know what? Because people use the Quote bbc button and it's so complicated.
Click+hold, drag, Ctrl-C, click, [quote], Ctrl-V, [/quote] hahahaahQuote People don't multi-quote enough. People don't know the pleasure of replying everything line by line.
You know what? Because people use the Quote bbc button and it's so complicated.
Funny you should mention this, because this came up in SimpleDesk's dev cycle and for the same reason - folks that were used to email wouldn't like the reply-with-quote, and I kind of mulled it over and figured it'd be awesome to do but could never figure out how to make it work sanely for the forum users (the strong SMF background)
I love the idea, though I'm concerned it might be a paradigm shift too far for some folks... hmm.
I don't know about that... It doesn't work in Opera, at least.
using JS to select the text?
The multi-quoting sounds fascinating..but will it be an issue with widths? I mean, different people will have different set of lines, depending on what width they have in their browser.
Hmm. OK, well, we already know what is newline delineated because we're given newlines by the editor and they're still present in the message body. So it's not like we're totally devoid of that meaning.
We can easily use that to define blocks of text that should be indicated with >>... but without using JS there's no way to display it.
Part of me things we should just treat it as a single block of text, stick it in a paragraph tag and attach a coloured left border to it the way some email clients do. That way you essentially leave layout to the client to deal with ;)
Certainly sounds heavy, am curious to see it thought.
Hang on, why aren't you in bed?! :P
$(this.oTextHandle).keydown(this.aEventWrappers.shortcutCheck).keydown(splitQuote);// Split a quote if we press Enter inside it.
function splitQuote(oEvent)
{
// Did we just press Enter?
if (oEvent.which != 13)
return true;
// Where are we, already?
if ('selectionStart' in this)
var selectionStart = this.selectionStart;
else
{
var range = document.selection.createRange(), stored_range = range.duplicate();
dul.moveToElementText(this);
dul.setEndPoint('EndToEnd', range);
var selectionStart = dul.text.length - range.text.length;
}
// Is there an opened quote tag here?
var selection = this.value.substring(0, selectionStart), lcs = selection.toLowerCase(), lioQuote = lcs.lastIndexOf('[quote');
if (lioQuote <= lcs.lastIndexOf('[/quote'))
return true;
var quote = '\n\n' + selection.substring(lioQuote);
surroundText('[/quote]\n', quote.substring(0, quote.indexOf(']') + 1), this);
return true;
};'SplitQuote'... is that a vB feature I've just never noticed before?
// Is there an opened quote tag here?
var selection = this.value.substring(0, selectionStart), lcs = selection.toLowerCase();
var quotes = lcs.match(/\[quote.*?\]/g), unquotes = lcs.match(/\[\/quote\]/g);
if (quotes === null || (unquotes !== null && quotes.length <= unquotes.length))
return true;
var num = quotes.length - (unquotes === null ? 0 : unquotes.length) + 1;
surroundText(new Array(num).join('[/quote]') + '\n', '\n\n' + new Array(num).join('[quote]'), this);It still won't deal with things that are cut in the middle, like code tags or even anchors or whatever. Dunno if it's that important... Is it?
Adding them back would probably be a bit complicated...
surroundText(new Array(num).join('[/quote]') + '\n', '\n\n[quote continued]' + new Array(num - 1).join('[quote]'), this);It probably should, to be honest.Quote It still won't deal with things that are cut in the middle, like code tags or even anchors or whatever. Dunno if it's that important... Is it?
What about... If I cut a code tag that's located in a nested quote? (i.e. not directly inside the main quote.)
// Build a list of opened tags...
var
selection = this.value.substr(0, selectionStart), lcs = selection.toLowerCase(),
lcsl = lcs.length, pos = 0, tag, bbcode, taglist = [], extag, log_tags = true,
protect_tags = ['code', 'php', 'html'];
while (true)
{
pos = lcs.indexOf('[', pos) + 1;
if (!pos)
break;
tag = selection.substring(pos, lcs.indexOf(']', pos + 1));
bbcode = tag.substr(tag.charAt(0) === '/' ? 1 : 0);
if (tag.charAt(0) === '/')
{
if (!log_tags && bbcode != taglist[taglist.length - 1].substr(0, bbcode.length))
continue;
do
{
extag = taglist.pop();
if (in_array(extag, protect_tags))
log_tags = true;
}
while (extag && bbcode != extag.substr(0, bbcode.length).toLowerCase());
}
else if (log_tags)
taglist.push(bbcode);
if (log_tags && in_array(bbcode, protect_tags))
log_tags = false;
}
for (var closers = [], j = 0, l = taglist.length; j < l; j++)
closers[] = '[/' + (taglist[j].indexOf(' ') > 0 ? taglist[j].substr(0, taglist[j].indexOf(' ')) : taglist[j]) + ']';
surroundText(closers.reverse().join('') + '\n', '\n\n[' + taglist.join('][') + ']', this);
return true;// Split a quote if we press Enter inside it.
function splitQuote(oEvent)
{
// Did we just press Enter?
if (oEvent.which != 13)
return true;
// Where are we, already?
if ('selectionStart' in this)
var selectionStart = this.selectionStart;
else
{
var range = document.selection.createRange(), dul = range.duplicate();
dul.moveToElementText(this);
dul.setEndPoint('EndToEnd', range);
var selectionStart = dul.text.length - range.text.length;
}
// Build a list of opened tags...
var
selection = this.value.substr(0, selectionStart), lcs = selection.toLowerCase(),
lcsl = lcs.length, pos = 0, tag, bbcode, taglist = [], extag, log_tags = true,
protect_tags = [
'code',
'php',
'html',
],
closed_tags = [
'br',
'hr',
'more',
];
while (true)
{
pos = lcs.indexOf('[', pos) + 1;
if (!pos)
break;
tag = selection.substring(pos, lcs.indexOf(']', pos + 1));
bbcode = tag.substr(tag.charAt(0) === '/' ? 1 : 0);
if (tag.charAt(0) === '/')
{
if (!log_tags && bbcode != taglist[taglist.length - 1].substr(0, bbcode.length))
continue;
do
{
extag = taglist.pop();
if (in_array(extag, protect_tags))
log_tags = true;
}
while (extag && bbcode != extag.substr(0, bbcode.length).toLowerCase());
}
else if (log_tags && !in_array(bbcode, closed_tags))
taglist.push(bbcode);
if (log_tags && in_array(bbcode, protect_tags))
log_tags = false;
}
for (var closers = [], j = 0, l = taglist.length; j < l; j++)
closers.push('[/' + (taglist[j].indexOf(' ') > 0 ? taglist[j].substr(0, taglist[j].indexOf(' ')) : taglist[j]) + ']');
surroundText(closers.reverse().join('') + '\n', '\n\n[' + taglist.join('][') + ']', this);
return true;
};We'd actually have to pass the list of closed tags to the JS because although the list is only three tags now, it might not be in future.
As for the theme, just playing with some different header ideas and seeing how well the sidebar worked on the right.
I don't think forum wide would be very logical.
A per-user setting, yeah, I thought about that but am too lazy
True enough. I just get the impression that some people are going to freak out though.
We really need to overhaul that actually. The way it's implemented feels wrong to me. If you ever looked at it, you'll understand why it feels wrong, I think.
Yeah, possibly... But then they'll get used to it and they may like it. Only old timers will refuse it. People like me, probably
I'm saying if I were in a position to 'try' it, I would have a hard time accepting that Wedge is doing everything for me
You mean the fact that it's in the 'Look and layout' page?
I don't get the problem with the checkboxes.
As for security... Well, it's not THAT surprising ahah.