Разработка dpos.space 2.0, день 1: файл конфигов и файл функций
Здравствуйте. Здесь будет минимум моих слов и мыслей, так как код достаточно откомментирован. Если будут вопросы, пишите их в комментариях.
1. config.js
// Функция получения GET параметров:
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
// Присваиваем переменной chain значение get параметра blockchain, а переменной user - соответствующего GET параметра:
var blockchain = getUrlVars()['blockchain'];
var user = getUrlVars()['user'];
// Проверка на наличие chain. Если есть, отправить в localStorage имя блокчейна:
if (blockchain) {
localStorage.setItem('blockchain', blockchain);
}
// Проверяем, есть ли в localStorage элемент blockchain: если есть, получаем его значение; Если нет - оставляем пустым.
if(localStorage.getItem('blockchain')) {
var chain = localStorage.getItem('blockchain');
} else {
var chain = '';
}
// Параметры для блокчейнов:
SETTINGS = {
viz: {
url: 'viz.world',
currency1: 'VIZ',
currency2: 'SHARES',
noda: viz.config.set('websocket','wss://ws.viz.ropox.tools'),
lib: 'https://cdn.jsdelivr.net/npm/viz-world-js@latest/dist/viz.min.js',
api: viz.api,
getDiscussionsAuthors: select_authors
},
golos: {
url: 'golos.io',
currency1: 'GOLOS',
currency2: 'СГ',
currency3: 'GBG',
noda: golos.config.set('websocket','wss://ws.golos.io'),
lib: 'https://cdn.jsdelivr.net/npm/golos-js@latest/dist/golos.min.js',
api: golos.api,
hidden: 'GESTS',
getDiscussionsAuthors: select_authors
},
steem: {
url: 'steemit.com',
currency1: 'STEEM',
currency2: 'SP',
currency3: 'SBD',
noda: steem.api.setOptions({ url: 'https://api.steemit.com' }),
lib: 'https://cdn.steemjs.com/lib/latest/steem.min.js'
api: steem.api,
hidden: 'VESTS',
getDiscussionsAuthors: tag
},
vox: {
url: 'vox.community',
currency1: 'VOX',
currency2: 'MANA',
currency3: 'GOLD',
noda: steem.api.setOptions({ url: 'wss://vox.community/ws' }),
lib: 'https://cdn.steemjs.com/lib/latest/steem.min.js',
api: steem.api
getDiscussionsAuthors: tag
}
};
// Добавляем в секцию head наши подключения в зависимости от блокчейна:
$('head').append('<script src="' + SETTINGS[chain].lib + '" type="text/javascript"></script>\
<script>' + SETTINGS[chain].noda + '</script>');
// Назначаем id элементам для вывода значений конфигов:
$('#url').html(SETTINGS[chain].url);
$('#currency1').html(SETTINGS[chain].currency1);
$('#currency2').html(SETTINGS[chain].currency2);
$('#currency3').html(SETTINGS[chain].currency3);
$('#hidden_param').html(SETTINGS[chain].hidden);
По мере увеличения количества блокчейнов в файл будут добавляться всё новые параметры.
2. functions.js
Файл не доделан до конца. Осталось реализовать функции следующих методов:
- get_account_history
- getRewardFund (будет работать только если выбран steem/vox);
- Get_Followers.
Код файла:
// Функция замена строк и перевода времени в локальное:
function fast_str_replace(search,replace,str){
return str.split(search).join(replace);
}
function date_str(timestamp,add_time,add_seconds,remove_today=false){
if(-1==timestamp){
var d=new Date();
}
else{
var d=new Date(timestamp);
}
var day=d.getDate();
if(day<10){
day='0'+day;
}
var month=d.getMonth()+1;
if(month<10){
month='0'+month;
}
var minutes=d.getMinutes();
if(minutes<10){
minutes='0'+minutes;
}
var hours=d.getHours();
if(hours<10){
hours='0'+hours;
}
var seconds=d.getSeconds();
if(seconds<10){
seconds='0'+seconds;
}
var datetime_str=day+'.'+month+'.'+d.getFullYear();
if(add_time){
datetime_str=datetime_str+' '+hours+':'+minutes;
if(add_seconds){
datetime_str=datetime_str+':'+seconds;
}
}
if(remove_today){
datetime_str=fast_str_replace(date_str(-1)+' ','',datetime_str);
}
return datetime_str;
}
// Функция метода getDiscussionsByBlog:
function getDiscussionsByBlog(author, limit, start_author, start_permlink) {
var query = {
SETTINGS[chain].getDiscussionsAuthors: [author],
limit: limit
};
if (start_author && start_permlink) {
query.start_author = start_author;
query.start_permlink = start_permlink;
}
function postResults(err, result) {
return result;
}
return SETTINGS[chain].api.getDiscussionsByBlog(query, function(err, result) {
postResults(err, result);
});
/*
result.forEach(function(item) {
var get_time = Date.parse(item.timestamp);
var post_datetime = date_str(get_time-(new Date().getTimezoneOffset()*60000),true,false,true);
const [day, month, year] = niceView.split('.')
});
*/
}
// Функция метода getDiscussionsByFeed:
function getDiscussionsByFeed(author, limit, start_author, start_permlink) {
var query = {
SETTINGS[chain].getDiscussionsAuthors: [author],
limit: limit
};
if (start_author && start_permlink) {
query.start_author = start_author;
query.start_permlink = start_permlink;
}
function postResults(err, result) {
return result;
}
return SETTINGS[chain].api.getDiscussionsByFeed(query, function(err, result) {
postResults(err, result);
});
}
// Функция метода get_accounts:
function getAccounts(author) {
function accountsResults(err, result) {
return result;
}
return SETTINGS[chain].api.getAccounts(accounts, function(err, result) {
accountsResults(err, result);
});
}
// Функция метода get_config:
function getconfig() {
function configResults(err, result) {
return result;
}
return SETTINGS[chain].api.getConfig(function(err, result) {
configResults(err, result);
});
}
// Функция метода Get_Dynamic_Global_Properties:
function getDynamicGlobalProperties() {
function getDynamicGlobalPropertiesResults(err, result) {
return result;
}
return SETTINGS[chain].api.getDynamicGlobalProperties(function(err, result) {
getDynamicGlobalPropertiesResults(err, result);
});
}
// Функция метода get_Follow_Count:
function getFollowCount(account) {
function getFollowCountResults(err, result) {
return result;
}
return SETTINGS[chain].api.getFollowCount(account, function(err, result) {
getFollowCountResults(err, result);
});
}
// Функция метода get_Follow_Count:
function getDiscussionsByComments(author, limit, start_author, start_permlink) {
var query = {
SETTINGS[chain].getDiscussionsAuthors: [author],
limit: limit
};
if (start_author && start_permlink) {
query.start_author = start_author;
query.start_permlink = start_permlink;
}
function postResults(err, result) {
return result;
}
return SETTINGS[chain].api.getDiscussionsByComments(query, function(err, result) {
postResults(err, result);
});
}
// Функция метода getFeedHistory:
function getFeedHistory() {
function getFeedHistoryResults(err, result) {
return result;
}
return steem.api.getFeedHistory(function(err, result) {
getFeedHistoryResults(err, result);
});
}
После завершения второго файла начну делать сервис профилей: файл profiles.html.
P.S. В ide visual studio code я сделал проверку на ошибки: есть одного типа, но пока не разобрался, как их исправить.
Всё.
По окончании работ код будет выложен на github, а на обновлённом сайте будет дана ссылка на скачивание.
Благодарю за внимание.
Мне важно знать, интересно ли наблюдать за разработкой в таком формате? От этого зависит, буду ли дальше выкладывать подобные посты.
Внимание:
Я - делегат.
Прошу проголосовать за меня тут: https://golos.io/~witnesses