hexo-theme-kratos-rebirth
Version:
A transplanted theme for Hexo, with many new features built with love.
307 lines (265 loc) • 14.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _icons = require('../icons');
var _constants = require('../constants');
function renderHeader(_ref, instance) {
var meta = _ref.meta,
user = _ref.user,
reactions = _ref.reactions;
var container = document.createElement('div');
container.lang = "en-US";
container.className = 'gitment-container gitment-header-container';
var likeButton = document.createElement('span');
var likedReaction = reactions.find(function (reaction) {
return reaction.content === 'heart' && reaction.user.login === user.login;
});
likeButton.className = 'gitment-header-like-btn';
likeButton.innerHTML = '\n ' + _icons.heart + '\n ' + (likedReaction ? 'Unlike' : 'Like') + '\n ' + (meta.reactions && meta.reactions.heart ? ' \u2022 <strong>' + meta.reactions.heart + '</strong> Liked' : '') + '\n ';
if (likedReaction) {
likeButton.classList.add('liked');
likeButton.onclick = function () {
return instance.unlike();
};
} else {
likeButton.classList.remove('liked');
likeButton.onclick = function () {
return instance.like();
};
}
container.appendChild(likeButton);
var commentsCount = document.createElement('span');
commentsCount.innerHTML = '\n ' + (meta.comments ? ' \u2022 <strong>' + meta.comments + '</strong> Comments' : '') + '\n ';
container.appendChild(commentsCount);
var issueLink = document.createElement('a');
issueLink.className = 'gitment-header-issue-link';
issueLink.href = meta.html_url;
issueLink.target = '_blank';
issueLink.innerText = 'Issue Page';
container.appendChild(issueLink);
return container;
}
function renderComments(_ref2, instance) {
var meta = _ref2.meta,
comments = _ref2.comments,
commentReactions = _ref2.commentReactions,
currentPage = _ref2.currentPage,
user = _ref2.user,
error = _ref2.error;
var container = document.createElement('div');
container.lang = "en-US";
container.className = 'gitment-container gitment-comments-container';
if (error) {
var errorBlock = document.createElement('div');
errorBlock.className = 'gitment-comments-error';
if (error === _constants.NOT_INITIALIZED_ERROR && user.login && user.login.toLowerCase() === instance.owner.toLowerCase()) {
var initHint = document.createElement('div');
var initButton = document.createElement('button');
initButton.className = 'gitment-comments-init-btn';
initButton.onclick = function () {
initButton.setAttribute('disabled', true);
instance.init().catch(function (e) {
initButton.removeAttribute('disabled');
alert(e);
});
};
initButton.innerText = 'Initialize Comments';
initHint.appendChild(initButton);
errorBlock.appendChild(initHint);
} else {
errorBlock.innerText = error;
}
container.appendChild(errorBlock);
return container;
} else if (comments === undefined) {
var loading = document.createElement('div');
loading.innerText = 'Loading comments...';
loading.className = 'gitment-comments-loading';
container.appendChild(loading);
return container;
} else if (!comments.length) {
var emptyBlock = document.createElement('div');
emptyBlock.className = 'gitment-comments-empty';
emptyBlock.innerText = 'No Comment Yet';
container.appendChild(emptyBlock);
return container;
}
var commentsList = document.createElement('ul');
commentsList.className = 'gitment-comments-list';
comments.forEach(function (comment) {
var createDate = new Date(comment.created_at);
var updateDate = new Date(comment.updated_at);
var commentItem = document.createElement('li');
commentItem.className = 'gitment-comment';
commentItem.innerHTML = '\n <a class="gitment-comment-avatar" href="' + comment.user.html_url + '" target="_blank">\n <img class="gitment-comment-avatar-img" src="' + comment.user.avatar_url + '"/>\n </a>\n <div class="gitment-comment-main">\n <div class="gitment-comment-header">\n <a class="gitment-comment-name" href="' + comment.user.html_url + '" target="_blank">\n ' + comment.user.login + '\n </a>\n commented on\n <span title="' + createDate + '">' + createDate.toDateString() + '</span>\n ' + (createDate.toString() !== updateDate.toString() ? ' \u2022 <span title="comment was edited at ' + updateDate + '">edited</span>' : '') + '\n <div class="gitment-comment-like-btn">' + _icons.heart + ' ' + (comment.reactions.heart || '') + '</div>\n </div>\n <div class="gitment-comment-body gitment-markdown">' + comment.body_html + '</div>\n </div>\n ';
var likeButton = commentItem.querySelector('.gitment-comment-like-btn');
var likedReaction = commentReactions[comment.id] && commentReactions[comment.id].find(function (reaction) {
return reaction.content === 'heart' && reaction.user.login === user.login;
});
if (likedReaction) {
likeButton.classList.add('liked');
likeButton.onclick = function () {
return instance.unlikeAComment(comment.id);
};
} else {
likeButton.classList.remove('liked');
likeButton.onclick = function () {
return instance.likeAComment(comment.id);
};
}
// dirty
// use a blank image to trigger height calculating when element rendered
var imgTrigger = document.createElement('img');
var markdownBody = commentItem.querySelector('.gitment-comment-body');
imgTrigger.className = 'gitment-hidden';
imgTrigger.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
imgTrigger.onload = function () {
if (markdownBody.clientHeight > instance.maxCommentHeight) {
markdownBody.classList.add('gitment-comment-body-folded');
markdownBody.style.maxHeight = instance.maxCommentHeight + 'px';
markdownBody.title = 'Click to Expand';
markdownBody.onclick = function () {
markdownBody.classList.remove('gitment-comment-body-folded');
markdownBody.style.maxHeight = '';
markdownBody.title = '';
markdownBody.onclick = null;
};
}
};
commentItem.appendChild(imgTrigger);
commentsList.appendChild(commentItem);
});
container.appendChild(commentsList);
if (meta) {
var pageCount = Math.ceil(meta.comments / instance.perPage);
if (pageCount > 1) {
var pagination = document.createElement('ul');
pagination.className = 'gitment-comments-pagination';
if (currentPage > 1) {
var previousButton = document.createElement('li');
previousButton.className = 'gitment-comments-page-item';
previousButton.innerText = 'Previous';
previousButton.onclick = function () {
return instance.goto(currentPage - 1);
};
pagination.appendChild(previousButton);
}
var _loop = function _loop(i) {
var pageItem = document.createElement('li');
pageItem.className = 'gitment-comments-page-item';
pageItem.innerText = i;
pageItem.onclick = function () {
return instance.goto(i);
};
if (currentPage === i) pageItem.classList.add('gitment-selected');
pagination.appendChild(pageItem);
};
for (var i = 1; i <= pageCount; i++) {
_loop(i);
}
if (currentPage < pageCount) {
var nextButton = document.createElement('li');
nextButton.className = 'gitment-comments-page-item';
nextButton.innerText = 'Next';
nextButton.onclick = function () {
return instance.goto(currentPage + 1);
};
pagination.appendChild(nextButton);
}
container.appendChild(pagination);
}
}
return container;
}
function renderEditor(_ref3, instance) {
var user = _ref3.user,
error = _ref3.error;
var container = document.createElement('div');
container.lang = "en-US";
container.className = 'gitment-container gitment-editor-container';
var shouldDisable = user.login && !error ? '' : 'disabled';
var disabledTip = user.login ? '' : 'Login to Comment';
container.innerHTML = '\n ' + (user.login ? '<a class="gitment-editor-avatar" href="' + user.html_url + '" target="_blank">\n <img class="gitment-editor-avatar-img" src="' + user.avatar_url + '"/>\n </a>' : user.isLoggingIn ? '<div class="gitment-editor-avatar">' + _icons.spinner + '</div>' : '<a class="gitment-editor-avatar" href="' + instance.loginLink + '" title="login with GitHub">\n ' + _icons.github + '\n </a>') + '\n </a>\n <div class="gitment-editor-main">\n <div class="gitment-editor-header">\n <nav class="gitment-editor-tabs">\n <button class="gitment-editor-tab gitment-selected">Write</button>\n <button class="gitment-editor-tab">Preview</button>\n </nav>\n <div class="gitment-editor-login">\n ' + (user.login ? '<a class="gitment-editor-logout-link">Logout</a>' : user.isLoggingIn ? 'Logging in...' : '<a class="gitment-editor-login-link" href="' + instance.loginLink + '">Login</a> with GitHub') + '\n </div>\n </div>\n <div class="gitment-editor-body">\n <div class="gitment-editor-write-field">\n <textarea placeholder="Leave a comment" title="' + disabledTip + '" ' + shouldDisable + '></textarea>\n </div>\n <div class="gitment-editor-preview-field gitment-hidden">\n <div class="gitment-editor-preview gitment-markdown"></div>\n </div>\n </div>\n </div>\n <div class="gitment-editor-footer">\n <a class="gitment-editor-footer-tip" href="https://guides.github.com/features/mastering-markdown/" target="_blank">\n Styling with Markdown is supported\n </a>\n <button class="gitment-editor-submit" title="' + disabledTip + '" ' + shouldDisable + '>Comment</button>\n </div>\n ';
if (user.login) {
container.querySelector('.gitment-editor-logout-link').onclick = function () {
return instance.logout();
};
}
var writeField = container.querySelector('.gitment-editor-write-field');
var previewField = container.querySelector('.gitment-editor-preview-field');
var textarea = writeField.querySelector('textarea');
textarea.oninput = function () {
textarea.style.height = 'auto';
var style = window.getComputedStyle(textarea, null);
var height = parseInt(style.height, 10);
var clientHeight = textarea.clientHeight;
var scrollHeight = textarea.scrollHeight;
if (clientHeight < scrollHeight) {
textarea.style.height = height + scrollHeight - clientHeight + 'px';
}
};
var _container$querySelec = container.querySelectorAll('.gitment-editor-tab'),
_container$querySelec2 = _slicedToArray(_container$querySelec, 2),
writeTab = _container$querySelec2[0],
previewTab = _container$querySelec2[1];
writeTab.onclick = function () {
writeTab.classList.add('gitment-selected');
previewTab.classList.remove('gitment-selected');
writeField.classList.remove('gitment-hidden');
previewField.classList.add('gitment-hidden');
textarea.focus();
};
previewTab.onclick = function () {
previewTab.classList.add('gitment-selected');
writeTab.classList.remove('gitment-selected');
previewField.classList.remove('gitment-hidden');
writeField.classList.add('gitment-hidden');
var preview = previewField.querySelector('.gitment-editor-preview');
var content = textarea.value.trim();
if (!content) {
preview.innerText = 'Nothing to preview';
return;
}
preview.innerText = 'Loading preview...';
instance.markdown(content).then(function (html) {
return preview.innerHTML = html;
});
};
var submitButton = container.querySelector('.gitment-editor-submit');
submitButton.onclick = function () {
submitButton.innerText = 'Submitting...';
submitButton.setAttribute('disabled', true);
instance.post(textarea.value.trim()).then(function (data) {
textarea.value = '';
textarea.style.height = 'auto';
submitButton.removeAttribute('disabled');
submitButton.innerText = 'Comment';
}).catch(function (e) {
alert(e);
submitButton.removeAttribute('disabled');
submitButton.innerText = 'Comment';
});
};
return container;
}
function renderFooter() {
var container = document.createElement('div');
container.lang = "en-US";
container.className = 'gitment-container gitment-footer-container';
container.innerHTML = '\n Powered by\n <a class="gitment-footer-project-link" href="https://github.com/imsun/gitment" target="_blank">\n Gitment\n </a>\n ';
return container;
}
function render(state, instance) {
var container = document.createElement('div');
container.lang = "en-US";
container.className = 'gitment-container gitment-root-container';
container.appendChild(instance.renderHeader(state, instance));
container.appendChild(instance.renderComments(state, instance));
container.appendChild(instance.renderEditor(state, instance));
container.appendChild(instance.renderFooter(state, instance));
return container;
}
exports.default = { render: render, renderHeader: renderHeader, renderComments: renderComments, renderEditor: renderEditor, renderFooter: renderFooter };
//# sourceMappingURL=default.js.map