|
@@ -0,0 +1,270 @@
|
|
|
+
|
|
|
+var ACTIVE_USER = null;
|
|
|
+
|
|
|
+steem.api.setOptions({ url: STEEMIT_API_URL});
|
|
|
+
|
|
|
+function loadDataAnon (pendingLogin) {
|
|
|
+ if (!pendingLogin) {
|
|
|
+ populateVotes();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function loadDataAuthenticated () {
|
|
|
+ populateVotes();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+$(document).ready(function () {
|
|
|
+ console.log('ready');
|
|
|
+ var isPendingLogin = window.sessionStorage && window.sessionStorage.getItem('steemit-active-user') != null;
|
|
|
+
|
|
|
+ loadDataAnon(isPendingLogin);
|
|
|
+});
|
|
|
+
|
|
|
+sessionLogin();
|
|
|
+
|
|
|
+function sessionLogin () {
|
|
|
+ if (window.sessionStorage) {
|
|
|
+ var s = window.sessionStorage;
|
|
|
+ var activeUser = s.getItem('steemit-active-user');
|
|
|
+
|
|
|
+ if (activeUser) {
|
|
|
+ activeUser = JSON.parse(activeUser);
|
|
|
+ login(activeUser.username, activeUser.postingKey, function (err, account) {
|
|
|
+ if (err) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ loadDataAuthenticated();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function storeSessionLogin() {
|
|
|
+ if (window.sessionStorage) {
|
|
|
+ var s = window.sessionStorage;
|
|
|
+ s.setItem('steemit-active-user', JSON.stringify({username: ACTIVE_USER.username, postingKey: ACTIVE_USER.postingKey}));
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function login (username, postingKey, cb) {
|
|
|
+
|
|
|
+ if (!steem.auth.isWif(postingKey)) {
|
|
|
+ cb('login-invalid-postingKey');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ steem.api.getAccounts([username], function (err, accounts) {
|
|
|
+ if (err) {
|
|
|
+ console.log('could not login: ' + err);
|
|
|
+ if (cb) {
|
|
|
+ cb('login-unknown');
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (accounts.length > 1) {
|
|
|
+ console.log('multiple accounts are not implemented... not picking a default. bug me or send a pull request');
|
|
|
+ if (cb) {
|
|
|
+ cb('login-multiple-accounts-not-implemented');
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var account = accounts[0];
|
|
|
+
|
|
|
+
|
|
|
+ var pubWif = account.posting.key_auths[0][0];
|
|
|
+ var isValid = steem.auth.wifIsValid(postingKey, pubWif);
|
|
|
+
|
|
|
+ if (!isValid) {
|
|
|
+ cb('login-invalid');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ ACTIVE_USER = {
|
|
|
+ username: username,
|
|
|
+ postingKey: postingKey,
|
|
|
+ account: account
|
|
|
+ };
|
|
|
+
|
|
|
+ if (cb) {
|
|
|
+ cb(null, ACTIVE_USER);
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+function postsByTag (tag, limit) {
|
|
|
+ limit = limit || 5; // todo: is 0 valid/no limit/default limit?
|
|
|
+ steem.api.getDiscussionsByBlog({tag: tag, limit: limit}, function(err, result) {
|
|
|
+ console.log(err, result);
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+function votes (cb) {
|
|
|
+ steem.api.getActiveVotes(STEEMIT_AUTHOR, STEEMIT_PERMLINK, function (err, votes) {
|
|
|
+ if (err) {
|
|
|
+ console.log('error getting votes: ' + err);
|
|
|
+ if (cb) {
|
|
|
+ cb('votes-unknown');
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cb) {
|
|
|
+ cb(null, votes);
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+function vote (weight, power, cb) {
|
|
|
+ if (!ACTIVE_USER) {
|
|
|
+ console.err('could not vote because not logged in');
|
|
|
+ if (cb) {
|
|
|
+ cb('vote-not-logged-in');
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ weight = weight || 100;
|
|
|
+ power = power || 100;
|
|
|
+
|
|
|
+ var voter = ACTIVE_USER.account.name;
|
|
|
+ var voteWeight = power * weight;
|
|
|
+
|
|
|
+ steem.broadcast.vote(ACTIVE_USER.postingKey, voter, STEEMIT_AUTHOR, STEEMIT_PERMLINK, voteWeight, function (err, result) {
|
|
|
+ if (err) {
|
|
|
+ console.error('could not vote: ' + err);
|
|
|
+ if (cb) {
|
|
|
+ cb('vote-unknown');
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cb) {
|
|
|
+ cb();
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+function logoutUser (loginFormId) {
|
|
|
+ if (window.sessionStorage) {
|
|
|
+ var s = window.sessionStorage;
|
|
|
+ s.removeItem('steemit-active-user');
|
|
|
+ }
|
|
|
+
|
|
|
+ ACTIVE_USER = null;
|
|
|
+
|
|
|
+ loadDataAuthenticated();
|
|
|
+ cancelLoginUser(loginFormId);
|
|
|
+}
|
|
|
+
|
|
|
+function cancelLoginUser (loginFormId) {
|
|
|
+ $('#' + loginFormId + '-container').hide();
|
|
|
+ $('#' + loginFormId + '-button').show();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function loginUser (loginFormId) {
|
|
|
+ var loginForm = $('#' + loginFormId);
|
|
|
+ var username = $('.username', loginForm).val();
|
|
|
+ var postingKey = $('.postingKey', loginForm).val();
|
|
|
+
|
|
|
+ var errorMessageBox = $('.error-message', loginForm);
|
|
|
+
|
|
|
+ if (!username || !postingKey) {
|
|
|
+ errorMessageBox.text('Enter values into the fields');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ login(username, postingKey, function (err, activeUser) {
|
|
|
+ if (err) {
|
|
|
+ if (err == 'login-invalid') {
|
|
|
+ errorMessageBox.text('Invalid login');
|
|
|
+ } else if (err == 'login-invalid-postingKey') {
|
|
|
+ errorMessageBox.text('Invalid private posting key');
|
|
|
+ } else {
|
|
|
+ errorMessageBox.text('Unknown error');
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ errorMessageBox.text('');
|
|
|
+ storeSessionLogin();
|
|
|
+ loadDataAuthenticated();
|
|
|
+
|
|
|
+ cancelLoginUser(loginFormId);
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+// permlink = permlink for article (add to post)
|
|
|
+// author = author for article (add to post)
|
|
|
+
|
|
|
+// wif = wif(username, postingKey)
|
|
|
+// voter = accounts(username)[0] // multiple accounts (dialog)
|
|
|
+// weight = dialog for voting weight
|
|
|
+
|
|
|
+// vote(wif, voter, author, permlink, weight)
|
|
|
+
|
|
|
+// postsByTag('{{ steemit-tag }}', 5)
|
|
|
+
|
|
|
+function voteUp () {
|
|
|
+ console.log("voteUp");
|
|
|
+ vote(100, null, populateVotes);
|
|
|
+}
|
|
|
+
|
|
|
+function voteDown () {
|
|
|
+ console.log("voteDown");
|
|
|
+ vote(-100, null, populateVotes);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+function populateVotes () {
|
|
|
+ votes(function(err, activeVotes) {
|
|
|
+ if (err) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var ups = [], downs = [], activeUserVote = null;
|
|
|
+ activeVotes.forEach(function (v) {
|
|
|
+ if (ACTIVE_USER && ACTIVE_USER.account.name == v.voter) {
|
|
|
+ activeUserVote = v;
|
|
|
+ }
|
|
|
+ if (v.percent > 0) {
|
|
|
+ ups.push(v);
|
|
|
+ } else if (v.percent < 0) {
|
|
|
+ downs.push(v);
|
|
|
+ } else {
|
|
|
+ console.log('0 weight vote... not counting');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ var voteEl = $('#vote-video');
|
|
|
+
|
|
|
+ if (ups.length) {
|
|
|
+ $('.vote-up .count', voteEl).text('(' + ups.length + ')');
|
|
|
+ } else {
|
|
|
+ $('.vote-up .count', voteEl).text('');
|
|
|
+ }
|
|
|
+
|
|
|
+ if (downs.length) {
|
|
|
+ $('.vote-down .count', voteEl).text('(' + downs.length + ')');
|
|
|
+ } else {
|
|
|
+ $('.vote-down .count', voteEl).text('');
|
|
|
+ }
|
|
|
+
|
|
|
+ if (activeUserVote) {
|
|
|
+ if (activeUserVote.percent > 0) {
|
|
|
+ $('.vote-up .count', voteEl).css('font-weight', 'bold');
|
|
|
+ $('.vote-down .count', voteEl).css('font-weight', 'normal');
|
|
|
+ } else {
|
|
|
+ $('.vote-up .count', voteEl).css('font-weight', 'normal');
|
|
|
+ $('.vote-down .count', voteEl).css('font-weight', 'bold');
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ $('.vote-up .count', voteEl).css('font-weight', 'normal');
|
|
|
+ $('.vote-down .count', voteEl).css('font-weight', 'normal') }
|
|
|
+ });
|
|
|
+}
|