Multipost для Vk
// ==UserScript==
// @name Multipost VK
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Multipost для Vk
// @author ʄɛռɨx
// @match https://vk.com/(Ваша страничка)
// @grant none
// @license GPL
// ==/UserScript==
(function() {
'use strict';
let wide_column = document.querySelector('#wide_column');
let page_blocks = document.querySelectorAll('#wide_column > div');
let future_post_module = createFuturePost();
wide_column.insertBefore(future_post_module,page_blocks[1]);
})();
/**
* Эмуляция нажатия на элемент
* @param {DOMElement} element - узел на странице
* @return {boolean} - признак прохода события
*/
function simulateClick(element) {
var event = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': true
});
var canceled = !element.dispatchEvent(event);
return canceled;
}
/**
* Отправка отложенного сообщения на стене ВК
* @param {string} text - Текст для отправки на свою стену
* @param {number} date - timestamp в миллисекундах от 1970
*/
function sendPost(text = 'test post from #userscript with #tampermonkey',date = new Date(2018,10,26,10,1).getTime() ){
//let text = 'test with #tampermonkey #userscript',
// date = new Date(2018,10,26,10,1).getTime()/1000;
let send_post = document.querySelector('#send_post');
let post_field = document.querySelector('#post_field');
let post_action_btn_layout = document.querySelectorAll('.post_action_btn_layout')[1];
date /= 1000;
post_field.focus();
post_field.innerHTML = text;
simulateClick(post_action_btn_layout);
let postpone_date = document.querySelector('[id^=postpone_date]');
postpone_date.value = date;
send_post.click();
}
/**
* Создание вспомогательного блока для будущих новостей
*/
function createFuturePost(){
let page_block = document.createElement('div');
page_block.className = 'page_block';
page_block.innerHTML = `<div class="module clear future_post_module" id="profile_future_post_module">
<a class="header_right_link fl_r" onclick="return false">вспомогательная ссылка</a>
<a href="#" onclick="return false" class="module_header">
<div class="header_top clear_fix">
<span class="header_label fl_l">Мои будущие новости</span>
<span class="header_count fl_l">0</span>
</div>
</a>
<div id="page_future_post_module" class="page_future_post_module" style="padding: 13px 20px 20px;">
<textarea id='future_post' style="width:500px;min-height:200px"></textarea>
<div class="add_future_post_button_wrap" >
<button class="flat_button add_future_post_button" id="send_future_post" >Разместить</button>
</div>
</div>
</div>`;
const future_post = page_block.getElementsByTagName('textarea')[0];
future_post.addEventListener('keyup', e => {
let header_count = page_block.getElementsByTagName('span')[1];
let posts = e.target.value.split(/\n/gi);
header_count.innerHTML = posts.length;
} );
const send_future_post = page_block.getElementsByTagName('button')[0];
send_future_post.addEventListener('click', e => {
const future_post = document.querySelector('#future_post');
let posts = future_post.value.split(/\n/gi);
let current = new Date();
current.setHours(8);
current.setMinutes(Math.round(Math.random()*30));
let k = 1000 * 3600 * 24;
posts.forEach( (post, i) => {
let tmp = new Date(current.getTime() + (i+1)*k);
sendPost(post, tmp.getTime());
});
});
return page_block;
}