var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
var sourceString = '(( @';
[...sourceString]
.map(char =>
(
sourceString.match(
RegExp(char.replace(reRegExpChar, '\\$&'), 'gi'),
) || []
).length <= 1
? '('
: ')',
)
.join('');
npm install animate.css --save
import 'animate/animate.css';
{
test: /\.css$/,
use: [
{
loader: 'style-loader'
},
{
loader: 'css-loader',
options: {
sourceMap: true,
},
}
]
},
@import '~bootstrap/scss/bootstrap.scss'
const http = new (function()
{
this.get = function(url)
{
return new Promise((resolve, reject) =>
{
const query = new XMLHttpRequest();
query.open('GET', url, true);
query.onload = function() {
if (query.status !== 200)
return reject(new Error(`End by error ${query.status}`));
return resolve(query.responseText);
};
query.send();
});
};
return this;
});
const posts = http.get('https://jsonplaceholder.typicode.com/posts');
posts
.then(console.log)
.catch(console.log)
function repeat(arr) {
let repeats = {},
maxValue,
maxIter;
for (let i = 0; i < arr.length; i++) {
let value = arr[i];
if (repeats[value] === undefined)
repeats[value] = 0;
++repeats[value];
if (maxValue === undefined
|| repeats[value] > maxIter) {
maxValue = value;
maxIter = repeats[value];
}
};
return maxValue;
}
var TemplateRow = (function() {
var $container;
var $containerImages;
var $containerSongs;
var $containerText;
this.create = function() {
$container = $("<div/>").addClass("single");
$containerText = $("<div/>").addClass("text");
$containerImages = $("<div/>").addClass("image");
$containerSongs = $("<div/>").addClass("doc");
$container.append($containerImages)
.append($containerText)
.append($containerSongs);
return this;
};
this.setTextAsHtml = function(value) {
$containerText.html(value);
return this;
};
this.addImage = function(url, title, alt) {
var $block = $("<div/>").addClass("postimage");
var $image = $("<img/>")
.attr("src", url)
.attr("title", title)
.attr("alt", alt);
$block.html($image);
$containerImages.append($block);
return this;
};
this.addSong = function(id, name) {
var $block = $("<div/>").addClass("song");
var $blockId = $("<div/>").addClass("numsong").text(id);
var $blockName = $("<div/>").addClass("namesong").text(name);
$block.append($blockId).append($blockName);
$containerSongs.append($block);
return this;
};
this.getContainer = function() {
return $container;
};
return this;
});
$.each(data, function(index, element) {
var container = new TemplateRow;
container.create().setTextAsHtml(element.text);
$.each(element.image, function(imageIndex, imageUrl) {
container.addImage(imageUrl, "", "");
});
$.each(element.song, function(songIndex, song) {
container.addSong(song.id, song.name);
});
container.getContainer().appendTo("#articles #innerarticles");
});
$( ".wo3" ).append([
'<span class="mb ch w">',
'<span class="w">我</span>',
'<span class="p1"> wǒ </span>',
'<span class="p2"> wɔ↝ </span>',
'<span class="p3"> wɔ3 </span>',
'<img class="an" src="/Strokeorder/grammar_hsk1/3-1-0-9/wo3.gif">',
'<a class="sound" data-sound="grammar_hsk1/3-1-0-9/ch/wo3.mp3"></a>',
'</span>',
].join(""));
$( ".wo3" ).append( '<span class="mb ch w">\
<span class="w">我</span>\
<span class="p1"> wǒ </span>\
<span class="p2"> wɔ↝ </span>\
<span class="p3"> wɔ3 </span>\
<img class="an" src="/Strokeorder/grammar_hsk1/3-1-0-9/wo3.gif">\
<a class="sound" data-sound="grammar_hsk1/3-1-0-9/ch/wo3.mp3"></a>\
</span>' );
handleSubmit = (values) => {
values = {...values, someField : values.someField !== undefined ? values.someField : ""};
return updateById(this.props.user.id, values)
.then(res => {
if (res.error)
throw new SubmissionError({_error:res.error,...res.errors});
return res;
});
}
initialValues={{
someField : ""
}}
client.getAsync('data')
.then((data) => {
if (data)
return [data.count, data.articles, true];
return [Article.count({}),
Article.find({}, '-_id title content slug')
.sort({_id: -1})
.limit(limit)
.skip((page - 1) * limit),
false]
})
.spread((count, articles, fromCache) => {
if (!fromCache) {
return new Promise((resolve, reject) => {
client.set('data', JSON.stringify({count, articles}), "EX", 20, (error) => {
if (error)
return reject(error);
return resolve([count, articles]);
});
});
}
return [count, articles];
})
.spread((count, articles) => {
return res.status(200)
.json({
count,
articles
})
})
.catch((err) => {
return next(err);
});