|
@@ -4,6 +4,7 @@
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
var hljs = require('highlight.js');
|
|
var hljs = require('highlight.js');
|
|
|
|
|
+var jsdiff = require('diff');
|
|
|
var marked = require('marked');
|
|
var marked = require('marked');
|
|
|
var Crowi = {};
|
|
var Crowi = {};
|
|
|
|
|
|
|
@@ -321,6 +322,35 @@ $(function() {
|
|
|
|
|
|
|
|
if (pageId) {
|
|
if (pageId) {
|
|
|
|
|
|
|
|
|
|
+ // if page exists
|
|
|
|
|
+ var $rawTextOriginal = $('#raw-text-original');
|
|
|
|
|
+ if ($rawTextOriginal.length > 0) {
|
|
|
|
|
+ var renderer = new Crowi.renderer($('#raw-text-original').html());
|
|
|
|
|
+ renderer.render();
|
|
|
|
|
+ Crowi.correctHeaders('#revision-body-content');
|
|
|
|
|
+ Crowi.revisionToc('#revision-body-content', '#revision-toc');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // header
|
|
|
|
|
+ var $header = $('#page-header');
|
|
|
|
|
+ if ($header.length > 0) {
|
|
|
|
|
+ var headerHeight = $header.outerHeight(true);
|
|
|
|
|
+ $('.header-wrap').css({height: (headerHeight + 16) + 'px'});
|
|
|
|
|
+ $header.affix({
|
|
|
|
|
+ offset: {
|
|
|
|
|
+ top: function() {
|
|
|
|
|
+ return headerHeight + 86; // (54 header + 16 header padding-top + 16 content padding-top)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ $('[data-affix-disable]').on('click', function(e) {
|
|
|
|
|
+ $elm = $($(this).data('affix-disable'));
|
|
|
|
|
+ $(window).off('.affix');
|
|
|
|
|
+ $elm.removeData('affix').removeClass('affix affix-top affix-bottom');
|
|
|
|
|
+ return false;
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// omg
|
|
// omg
|
|
|
function createCommentHTML(revision, creator, comment, commentedAt) {
|
|
function createCommentHTML(revision, creator, comment, commentedAt) {
|
|
|
var $comment = $('<div>');
|
|
var $comment = $('<div>');
|
|
@@ -549,7 +579,8 @@ $(function() {
|
|
|
|
|
|
|
|
var $seenUserList = $("#seen-user-list");
|
|
var $seenUserList = $("#seen-user-list");
|
|
|
var seenUsers = $seenUserList.data('seen-users');
|
|
var seenUsers = $seenUserList.data('seen-users');
|
|
|
- if (seenUsers && seenUsers.length > 0 && seenUsers.length <= 10) {
|
|
|
|
|
|
|
+ var seenUsersArray = seenUsers.split(',');
|
|
|
|
|
+ if (seenUsers && seenUsersArray.length > 0 && seenUsersArray.length <= 10) {
|
|
|
// FIXME: user data cache
|
|
// FIXME: user data cache
|
|
|
$.get('/_api/users.list', {user_ids: seenUsers}, function(res) {
|
|
$.get('/_api/users.list', {user_ids: seenUsers}, function(res) {
|
|
|
// ignore unless response has error
|
|
// ignore unless response has error
|
|
@@ -578,6 +609,78 @@ $(function() {
|
|
|
$seenUserList.append(CreateUserLinkWithPicture(user));
|
|
$seenUserList.append(CreateUserLinkWithPicture(user));
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // History Diff
|
|
|
|
|
+ var allRevisionIds = [];
|
|
|
|
|
+ $.each($('.diff-view'), function() {
|
|
|
|
|
+ allRevisionIds.push($(this).data('revisionId'));
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ $('.diff-view').on('click', function(e) {
|
|
|
|
|
+ e.preventDefault();
|
|
|
|
|
+
|
|
|
|
|
+ var getBeforeRevisionId = function(revisionId) {
|
|
|
|
|
+ var currentPos = $.inArray(revisionId, allRevisionIds);
|
|
|
|
|
+ if (currentPos < 0) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var beforeRevisionId = allRevisionIds[currentPos + 1];
|
|
|
|
|
+ if (typeof beforeRevisionId === 'undefined') {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return beforeRevisionId;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ var revisionId = $(this).data('revisionId');
|
|
|
|
|
+ var beforeRevisionId = getBeforeRevisionId(revisionId);
|
|
|
|
|
+ var $diffDisplay = $('#diff-display-' + revisionId);
|
|
|
|
|
+ var $diffIcon = $('#diff-icon-' + revisionId);
|
|
|
|
|
+
|
|
|
|
|
+ if ($diffIcon.hasClass('fa-arrow-circle-right')) {
|
|
|
|
|
+ $diffIcon.removeClass('fa-arrow-circle-right');
|
|
|
|
|
+ $diffIcon.addClass('fa-arrow-circle-down');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ $diffIcon.removeClass('fa-arrow-circle-down');
|
|
|
|
|
+ $diffIcon.addClass('fa-arrow-circle-right');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (beforeRevisionId === false) {
|
|
|
|
|
+ $diffDisplay.text('差分はありません');
|
|
|
|
|
+ $diffDisplay.slideToggle();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ var revisionIds = revisionId + ',' + beforeRevisionId;
|
|
|
|
|
+
|
|
|
|
|
+ $.ajax({
|
|
|
|
|
+ type: 'GET',
|
|
|
|
|
+ url: '/_api/revisions.list?revision_ids=' + revisionIds,
|
|
|
|
|
+ dataType: 'json'
|
|
|
|
|
+ }).done(function(res) {
|
|
|
|
|
+ var currentText = res[0].body;
|
|
|
|
|
+ var previousText = res[1].body;
|
|
|
|
|
+
|
|
|
|
|
+ $diffDisplay.text('');
|
|
|
|
|
+
|
|
|
|
|
+ var diff = jsdiff.diffLines(previousText, currentText);
|
|
|
|
|
+ diff.forEach(function(part) {
|
|
|
|
|
+ var color = part.added ? 'green' : part.removed ? 'red' : 'grey';
|
|
|
|
|
+ var $span = $('<span>');
|
|
|
|
|
+ $span.css('color', color);
|
|
|
|
|
+ $span.text(part.value);
|
|
|
|
|
+ $diffDisplay.append($span);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ $diffDisplay.slideToggle();
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // default open
|
|
|
|
|
+ $('.diff-view').each(function(i, diffView) {
|
|
|
|
|
+ if (i < 2) {
|
|
|
|
|
+ $(diffView).click();
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
-
|
|
|