mirror of
https://github.com/discourse/discourse.git
synced 2025-05-25 09:57:25 +08:00
missing prettified files
This commit is contained in:
@ -2,7 +2,17 @@
|
||||
|
||||
const DATA_PREFIX = "data-poll-";
|
||||
const DEFAULT_POLL_NAME = "poll";
|
||||
const WHITELISTED_ATTRIBUTES = ["type", "name", "min", "max", "step", "order", "status", "public", "close"];
|
||||
const WHITELISTED_ATTRIBUTES = [
|
||||
"type",
|
||||
"name",
|
||||
"min",
|
||||
"max",
|
||||
"step",
|
||||
"order",
|
||||
"status",
|
||||
"public",
|
||||
"close"
|
||||
];
|
||||
|
||||
function replaceToken(tokens, target, list) {
|
||||
let pos = tokens.indexOf(target);
|
||||
@ -12,44 +22,48 @@ function replaceToken(tokens, target, list) {
|
||||
list[0].map = target.map;
|
||||
|
||||
// resequence levels
|
||||
for(;pos<tokens.length;pos++) {
|
||||
for (; pos < tokens.length; pos++) {
|
||||
let nesting = tokens[pos].nesting;
|
||||
if (nesting < 0) { level--; }
|
||||
if (nesting < 0) {
|
||||
level--;
|
||||
}
|
||||
tokens[pos].level = level;
|
||||
if (nesting > 0) { level++; }
|
||||
if (nesting > 0) {
|
||||
level++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// analyzes the block to that we have poll options
|
||||
function getListItems(tokens, startToken) {
|
||||
let i = tokens.length-1;
|
||||
let i = tokens.length - 1;
|
||||
let listItems = [];
|
||||
let buffer = [];
|
||||
|
||||
for(;tokens[i]!==startToken;i--) {
|
||||
for (; tokens[i] !== startToken; i--) {
|
||||
if (i === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
let token = tokens[i];
|
||||
if (token.level === 0) {
|
||||
if (token.tag !== 'ol' && token.tag !== 'ul') {
|
||||
if (token.tag !== "ol" && token.tag !== "ul") {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (token.level === 1 && token.nesting === 1) {
|
||||
if (token.tag === 'li') {
|
||||
listItems.push([token, buffer.reverse().join(' ')]);
|
||||
if (token.tag === "li") {
|
||||
listItems.push([token, buffer.reverse().join(" ")]);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (token.level === 1 && token.nesting === 1 && token.tag === 'li') {
|
||||
if (token.level === 1 && token.nesting === 1 && token.tag === "li") {
|
||||
buffer = [];
|
||||
} else {
|
||||
if (token.type === 'text' || token.type === 'inline') {
|
||||
if (token.type === "text" || token.type === "inline") {
|
||||
buffer.push(token.content);
|
||||
}
|
||||
}
|
||||
@ -59,22 +73,21 @@ function getListItems(tokens, startToken) {
|
||||
}
|
||||
|
||||
function invalidPoll(state, tag) {
|
||||
let token = state.push('text', '', 0);
|
||||
token.content = '[/' + tag + ']';
|
||||
let token = state.push("text", "", 0);
|
||||
token.content = "[/" + tag + "]";
|
||||
}
|
||||
|
||||
const rule = {
|
||||
tag: 'poll',
|
||||
tag: "poll",
|
||||
|
||||
before: function(state, tagInfo, raw){
|
||||
let token = state.push('text', '', 0);
|
||||
before: function(state, tagInfo, raw) {
|
||||
let token = state.push("text", "", 0);
|
||||
token.content = raw;
|
||||
token.bbcode_attrs = tagInfo.attrs;
|
||||
token.bbcode_type = 'poll_open';
|
||||
token.bbcode_type = "poll_open";
|
||||
},
|
||||
|
||||
after: function(state, openToken, raw) {
|
||||
|
||||
let items = getListItems(state.tokens, openToken);
|
||||
if (!items) {
|
||||
return invalidPoll(state, raw);
|
||||
@ -85,7 +98,7 @@ const rule = {
|
||||
// default poll attributes
|
||||
const attributes = [["class", "poll"]];
|
||||
|
||||
if (!attrs['status']) {
|
||||
if (!attrs["status"]) {
|
||||
attributes.push([DATA_PREFIX + "status", "open"]);
|
||||
}
|
||||
|
||||
@ -111,48 +124,54 @@ const rule = {
|
||||
|
||||
let header = [];
|
||||
|
||||
let token = new state.Token('poll_open', 'div', 1);
|
||||
let token = new state.Token("poll_open", "div", 1);
|
||||
token.block = true;
|
||||
token.attrs = attributes;
|
||||
header.push(token);
|
||||
|
||||
token = new state.Token('poll_open', 'div', 1);
|
||||
token = new state.Token("poll_open", "div", 1);
|
||||
token.block = true;
|
||||
header.push(token);
|
||||
|
||||
token = new state.Token('poll_open', 'div', 1);
|
||||
token.attrs = [['class', 'poll-container']];
|
||||
token = new state.Token("poll_open", "div", 1);
|
||||
token.attrs = [["class", "poll-container"]];
|
||||
|
||||
header.push(token);
|
||||
|
||||
// generate the options when the type is "number"
|
||||
if (attrs["type"] === "number") {
|
||||
// default values
|
||||
if (isNaN(min)) { min = 1; }
|
||||
if (isNaN(max)) { max = state.md.options.discourse.pollMaximumOptions; }
|
||||
if (isNaN(step)) { step = 1; }
|
||||
if (isNaN(min)) {
|
||||
min = 1;
|
||||
}
|
||||
if (isNaN(max)) {
|
||||
max = state.md.options.discourse.pollMaximumOptions;
|
||||
}
|
||||
if (isNaN(step)) {
|
||||
step = 1;
|
||||
}
|
||||
|
||||
if (items.length > 0) {
|
||||
return invalidPoll(state, raw);
|
||||
}
|
||||
|
||||
// dynamically generate options
|
||||
token = new state.Token('bullet_list_open', 'ul', 1);
|
||||
token = new state.Token("bullet_list_open", "ul", 1);
|
||||
header.push(token);
|
||||
|
||||
for (let o = min; o <= max; o += step) {
|
||||
token = new state.Token('list_item_open', 'li', 1);
|
||||
items.push([token, String(o)]);
|
||||
token = new state.Token("list_item_open", "li", 1);
|
||||
items.push([token, String(o)]);
|
||||
header.push(token);
|
||||
|
||||
token = new state.Token('text', '', 0);
|
||||
token = new state.Token("text", "", 0);
|
||||
token.content = String(o);
|
||||
header.push(token);
|
||||
|
||||
token = new state.Token('list_item_close', 'li', -1);
|
||||
token = new state.Token("list_item_close", "li", -1);
|
||||
header.push(token);
|
||||
}
|
||||
token = new state.Token('bullet_item_close', '', -1);
|
||||
token = new state.Token("bullet_item_close", "", -1);
|
||||
header.push(token);
|
||||
}
|
||||
|
||||
@ -163,41 +182,41 @@ const rule = {
|
||||
|
||||
token.attrs = token.attrs || [];
|
||||
let md5Hash = md5(JSON.stringify([text]));
|
||||
token.attrs.push([DATA_PREFIX + 'option-id', md5Hash]);
|
||||
token.attrs.push([DATA_PREFIX + "option-id", md5Hash]);
|
||||
}
|
||||
|
||||
replaceToken(state.tokens, openToken, header);
|
||||
|
||||
// we got to correct the level on the state
|
||||
// we just resequenced
|
||||
state.level = state.tokens[state.tokens.length-1].level;
|
||||
state.level = state.tokens[state.tokens.length - 1].level;
|
||||
|
||||
state.push('poll_close', 'div', -1);
|
||||
state.push("poll_close", "div", -1);
|
||||
|
||||
token = state.push('poll_open', 'div', 1);
|
||||
token.attrs = [['class', 'poll-info']];
|
||||
token = state.push("poll_open", "div", 1);
|
||||
token.attrs = [["class", "poll-info"]];
|
||||
|
||||
state.push('paragraph_open', 'p', 1);
|
||||
state.push("paragraph_open", "p", 1);
|
||||
|
||||
token = state.push('span_open', 'span', 1);
|
||||
token = state.push("span_open", "span", 1);
|
||||
token.block = false;
|
||||
token.attrs = [['class', 'info-number']];
|
||||
token = state.push('text', '', 0);
|
||||
token.content = '0';
|
||||
state.push('span_close', 'span', -1);
|
||||
token.attrs = [["class", "info-number"]];
|
||||
token = state.push("text", "", 0);
|
||||
token.content = "0";
|
||||
state.push("span_close", "span", -1);
|
||||
|
||||
token = state.push('span_open', 'span', 1);
|
||||
token = state.push("span_open", "span", 1);
|
||||
token.block = false;
|
||||
token.attrs = [['class', 'info-label']];
|
||||
token = state.push('text', '', 0);
|
||||
token.attrs = [["class", "info-label"]];
|
||||
token = state.push("text", "", 0);
|
||||
token.content = I18n.t("poll.voters", { count: 0 });
|
||||
state.push('span_close', 'span', -1);
|
||||
state.push("span_close", "span", -1);
|
||||
|
||||
state.push('paragraph_close', 'p', -1);
|
||||
state.push("paragraph_close", "p", -1);
|
||||
|
||||
state.push('poll_close', 'div', -1);
|
||||
state.push('poll_close', 'div', -1);
|
||||
state.push('poll_close', 'div', -1);
|
||||
state.push("poll_close", "div", -1);
|
||||
state.push("poll_close", "div", -1);
|
||||
state.push("poll_close", "div", -1);
|
||||
}
|
||||
};
|
||||
|
||||
@ -208,27 +227,26 @@ function newApiInit(helper) {
|
||||
});
|
||||
|
||||
helper.registerPlugin(md => {
|
||||
md.block.bbcode.ruler.push('poll', rule);
|
||||
md.block.bbcode.ruler.push("poll", rule);
|
||||
});
|
||||
}
|
||||
|
||||
export function setup(helper) {
|
||||
helper.whiteList([
|
||||
'div.poll',
|
||||
'div.poll-info',
|
||||
'div.poll-container',
|
||||
'div.poll-buttons',
|
||||
'div[data-*]',
|
||||
'span.info-number',
|
||||
'span.info-text',
|
||||
'span.info-label',
|
||||
'a.button.cast-votes',
|
||||
'a.button.toggle-results',
|
||||
'li[data-*]'
|
||||
"div.poll",
|
||||
"div.poll-info",
|
||||
"div.poll-container",
|
||||
"div.poll-buttons",
|
||||
"div[data-*]",
|
||||
"span.info-number",
|
||||
"span.info-text",
|
||||
"span.info-label",
|
||||
"a.button.cast-votes",
|
||||
"a.button.toggle-results",
|
||||
"li[data-*]"
|
||||
]);
|
||||
|
||||
newApiInit(helper);
|
||||
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -243,7 +261,10 @@ export function setup(helper) {
|
||||
* http://www.opensource.org/licenses/bsd-license
|
||||
*/
|
||||
function md5cycle(x, k) {
|
||||
var a = x[0], b = x[1], c = x[2], d = x[3];
|
||||
var a = x[0],
|
||||
b = x[1],
|
||||
c = x[2],
|
||||
d = x[3];
|
||||
|
||||
a = ff(a, b, c, d, k[0], 7, -680876936);
|
||||
d = ff(d, a, b, c, k[1], 12, -389564586);
|
||||
@ -325,11 +346,11 @@ function cmn(q, a, b, x, s, t) {
|
||||
}
|
||||
|
||||
function ff(a, b, c, d, x, s, t) {
|
||||
return cmn((b & c) | ((~b) & d), a, b, x, s, t);
|
||||
return cmn((b & c) | (~b & d), a, b, x, s, t);
|
||||
}
|
||||
|
||||
function gg(a, b, c, d, x, s, t) {
|
||||
return cmn((b & d) | (c & (~d)), a, b, x, s, t);
|
||||
return cmn((b & d) | (c & ~d), a, b, x, s, t);
|
||||
}
|
||||
|
||||
function hh(a, b, c, d, x, s, t) {
|
||||
@ -337,7 +358,7 @@ function hh(a, b, c, d, x, s, t) {
|
||||
}
|
||||
|
||||
function ii(a, b, c, d, x, s, t) {
|
||||
return cmn(c ^ (b | (~d)), a, b, x, s, t);
|
||||
return cmn(c ^ (b | ~d), a, b, x, s, t);
|
||||
}
|
||||
|
||||
function md51(s) {
|
||||
@ -345,15 +366,17 @@ function md51(s) {
|
||||
if (/[\x80-\xFF]/.test(s)) {
|
||||
s = unescape(encodeURI(s));
|
||||
}
|
||||
var n = s.length, state = [1732584193, -271733879, -1732584194, 271733878], i;
|
||||
var n = s.length,
|
||||
state = [1732584193, -271733879, -1732584194, 271733878],
|
||||
i;
|
||||
for (i = 64; i <= s.length; i += 64) {
|
||||
md5cycle(state, md5blk(s.substring(i - 64, i)));
|
||||
}
|
||||
s = s.substring(i - 64);
|
||||
var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
for (i = 0; i < s.length; i++)
|
||||
tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);
|
||||
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
|
||||
tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);
|
||||
tail[i >> 2] |= 0x80 << (i % 4 << 3);
|
||||
if (i > 55) {
|
||||
md5cycle(state, tail);
|
||||
for (i = 0; i < 16; i++) tail[i] = 0;
|
||||
@ -363,35 +386,37 @@ function md51(s) {
|
||||
return state;
|
||||
}
|
||||
|
||||
function md5blk(s) { /* I figured global was faster. */
|
||||
var md5blks = [], i; /* Andy King said do it this way. */
|
||||
function md5blk(s) {
|
||||
/* I figured global was faster. */
|
||||
var md5blks = [],
|
||||
i; /* Andy King said do it this way. */
|
||||
for (i = 0; i < 64; i += 4) {
|
||||
md5blks[i >> 2] = s.charCodeAt(i) +
|
||||
(s.charCodeAt(i + 1) << 8) +
|
||||
(s.charCodeAt(i + 2) << 16) +
|
||||
(s.charCodeAt(i + 3) << 24);
|
||||
md5blks[i >> 2] =
|
||||
s.charCodeAt(i) +
|
||||
(s.charCodeAt(i + 1) << 8) +
|
||||
(s.charCodeAt(i + 2) << 16) +
|
||||
(s.charCodeAt(i + 3) << 24);
|
||||
}
|
||||
return md5blks;
|
||||
}
|
||||
|
||||
var hex_chr = '0123456789abcdef'.split('');
|
||||
var hex_chr = "0123456789abcdef".split("");
|
||||
|
||||
function rhex(n) {
|
||||
var s = '', j = 0;
|
||||
var s = "",
|
||||
j = 0;
|
||||
for (; j < 4; j++)
|
||||
s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] +
|
||||
hex_chr[(n >> (j * 8)) & 0x0F];
|
||||
s += hex_chr[(n >> (j * 8 + 4)) & 0x0f] + hex_chr[(n >> (j * 8)) & 0x0f];
|
||||
return s;
|
||||
}
|
||||
|
||||
function hex(x) {
|
||||
for (var i = 0; i < x.length; i++)
|
||||
x[i] = rhex(x[i]);
|
||||
return x.join('');
|
||||
for (var i = 0; i < x.length; i++) x[i] = rhex(x[i]);
|
||||
return x.join("");
|
||||
}
|
||||
|
||||
function add32(a, b) {
|
||||
return (a + b) & 0xFFFFFFFF;
|
||||
return (a + b) & 0xffffffff;
|
||||
}
|
||||
|
||||
function md5(s) {
|
||||
|
Reference in New Issue
Block a user