Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
denis-skripnik
5 лет назад

Разработка 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

Файл не доделан до конца. Осталось реализовать функции следующих методов:

  1. get_account_history
  2. getRewardFund (будет работать только если выбран steem/vox);
  3. 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

1
145.352 GOLOS
На Golos с November 2017
Комментарии (11)
Сортировать по:
Сначала старые