Commit d2d634a9 authored by Phil Hughes's avatar Phil Hughes

Merge branch 'move-markdown-preview' into 'master'

Remove preview_markdown from the global obj

See merge request gitlab-org/gitlab-ce!16025
parents 6e932fa0 7114faf1
...@@ -7,6 +7,7 @@ import installGlEmojiElement from './gl_emoji'; ...@@ -7,6 +7,7 @@ import installGlEmojiElement from './gl_emoji';
import './quick_submit'; import './quick_submit';
import './requires_input'; import './requires_input';
import './toggler_behavior'; import './toggler_behavior';
import '../preview_markdown';
installGlEmojiElement(); installGlEmojiElement();
initCopyAsGFM(); initCopyAsGFM();
......
...@@ -46,7 +46,6 @@ import LazyLoader from './lazy_loader'; ...@@ -46,7 +46,6 @@ import LazyLoader from './lazy_loader';
import './line_highlighter'; import './line_highlighter';
import initLogoAnimation from './logo'; import initLogoAnimation from './logo';
import './milestone_select'; import './milestone_select';
import './preview_markdown';
import './projects_dropdown'; import './projects_dropdown';
import './render_gfm'; import './render_gfm';
import initBreadcrumbs from './breadcrumb'; import initBreadcrumbs from './breadcrumb';
......
...@@ -6,195 +6,193 @@ ...@@ -6,195 +6,193 @@
// (including the explanation of quick actions), and showing a warning when // (including the explanation of quick actions), and showing a warning when
// more than `x` users are referenced. // more than `x` users are referenced.
// //
(function () {
var lastTextareaPreviewed;
var lastTextareaHeight = null;
var markdownPreview;
var previewButtonSelector;
var writeButtonSelector;
window.MarkdownPreview = (function () {
function MarkdownPreview() {}
// Minimum number of users referenced before triggering a warning
MarkdownPreview.prototype.referenceThreshold = 10;
MarkdownPreview.prototype.emptyMessage = 'Nothing to preview.';
MarkdownPreview.prototype.ajaxCache = {};
MarkdownPreview.prototype.showPreview = function ($form) {
var mdText;
var preview = $form.find('.js-md-preview');
var url = preview.data('url');
if (preview.hasClass('md-preview-loading')) {
return;
}
mdText = $form.find('textarea.markdown-area').val();
if (mdText.trim().length === 0) {
preview.text(this.emptyMessage);
this.hideReferencedUsers($form);
} else {
preview.addClass('md-preview-loading').text('Loading...');
this.fetchMarkdownPreview(mdText, url, (function (response) {
var body;
if (response.body.length > 0) {
body = response.body;
} else {
body = this.emptyMessage;
}
preview.removeClass('md-preview-loading').html(body);
preview.renderGFM();
this.renderReferencedUsers(response.references.users, $form);
if (response.references.commands) {
this.renderReferencedCommands(response.references.commands, $form);
}
}).bind(this));
}
};
MarkdownPreview.prototype.fetchMarkdownPreview = function (text, url, success) { var lastTextareaPreviewed;
if (!url) { var lastTextareaHeight = null;
return; var markdownPreview;
} var previewButtonSelector;
if (text === this.ajaxCache.text) { var writeButtonSelector;
success(this.ajaxCache.response);
return; function MarkdownPreview() {}
}
$.ajax({ // Minimum number of users referenced before triggering a warning
type: 'POST', MarkdownPreview.prototype.referenceThreshold = 10;
url: url, MarkdownPreview.prototype.emptyMessage = 'Nothing to preview.';
data: {
text: text MarkdownPreview.prototype.ajaxCache = {};
},
dataType: 'json', MarkdownPreview.prototype.showPreview = function ($form) {
success: (function (response) { var mdText;
this.ajaxCache = { var preview = $form.find('.js-md-preview');
text: text, var url = preview.data('url');
response: response if (preview.hasClass('md-preview-loading')) {
}; return;
success(response); }
}).bind(this) mdText = $form.find('textarea.markdown-area').val();
});
}; if (mdText.trim().length === 0) {
preview.text(this.emptyMessage);
MarkdownPreview.prototype.hideReferencedUsers = function ($form) { this.hideReferencedUsers($form);
$form.find('.referenced-users').hide(); } else {
}; preview.addClass('md-preview-loading').text('Loading...');
this.fetchMarkdownPreview(mdText, url, (function (response) {
MarkdownPreview.prototype.renderReferencedUsers = function (users, $form) { var body;
var referencedUsers; if (response.body.length > 0) {
referencedUsers = $form.find('.referenced-users'); body = response.body;
if (referencedUsers.length) {
if (users.length >= this.referenceThreshold) {
referencedUsers.show();
referencedUsers.find('.js-referenced-users-count').text(users.length);
} else {
referencedUsers.hide();
}
}
};
MarkdownPreview.prototype.hideReferencedCommands = function ($form) {
$form.find('.referenced-commands').hide();
};
MarkdownPreview.prototype.renderReferencedCommands = function (commands, $form) {
var referencedCommands;
referencedCommands = $form.find('.referenced-commands');
if (commands.length > 0) {
referencedCommands.html(commands);
referencedCommands.show();
} else { } else {
referencedCommands.html(''); body = this.emptyMessage;
referencedCommands.hide();
} }
};
return MarkdownPreview;
}());
markdownPreview = new window.MarkdownPreview();
previewButtonSelector = '.js-md-preview-button';
writeButtonSelector = '.js-md-write-button';
lastTextareaPreviewed = null;
const markdownToolbar = $('.md-header-toolbar');
$.fn.setupMarkdownPreview = function () {
var $form = $(this);
$form.find('textarea.markdown-area').on('input', function () {
markdownPreview.hideReferencedUsers($form);
});
};
$(document).on('markdown-preview:show', function (e, $form) {
if (!$form) {
return;
}
lastTextareaPreviewed = $form.find('textarea.markdown-area');
lastTextareaHeight = lastTextareaPreviewed.height();
// toggle tabs
$form.find(writeButtonSelector).parent().removeClass('active');
$form.find(previewButtonSelector).parent().addClass('active');
// toggle content preview.removeClass('md-preview-loading').html(body);
$form.find('.md-write-holder').hide(); preview.renderGFM();
$form.find('.md-preview-holder').show(); this.renderReferencedUsers(response.references.users, $form);
markdownToolbar.removeClass('active');
markdownPreview.showPreview($form);
});
$(document).on('markdown-preview:hide', function (e, $form) {
if (!$form) {
return;
}
lastTextareaPreviewed = null;
if (lastTextareaHeight) {
$form.find('textarea.markdown-area').height(lastTextareaHeight);
}
// toggle tabs
$form.find(writeButtonSelector).parent().addClass('active');
$form.find(previewButtonSelector).parent().removeClass('active');
// toggle content
$form.find('.md-write-holder').show();
$form.find('textarea.markdown-area').focus();
$form.find('.md-preview-holder').hide();
markdownToolbar.addClass('active');
markdownPreview.hideReferencedCommands($form); if (response.references.commands) {
this.renderReferencedCommands(response.references.commands, $form);
}
}).bind(this));
}
};
MarkdownPreview.prototype.fetchMarkdownPreview = function (text, url, success) {
if (!url) {
return;
}
if (text === this.ajaxCache.text) {
success(this.ajaxCache.response);
return;
}
$.ajax({
type: 'POST',
url: url,
data: {
text: text
},
dataType: 'json',
success: (function (response) {
this.ajaxCache = {
text: text,
response: response
};
success(response);
}).bind(this)
}); });
};
$(document).on('markdown-preview:toggle', function (e, keyboardEvent) {
var $target; MarkdownPreview.prototype.hideReferencedUsers = function ($form) {
$target = $(keyboardEvent.target); $form.find('.referenced-users').hide();
if ($target.is('textarea.markdown-area')) { };
$(document).triggerHandler('markdown-preview:show', [$target.closest('form')]);
keyboardEvent.preventDefault(); MarkdownPreview.prototype.renderReferencedUsers = function (users, $form) {
} else if (lastTextareaPreviewed) { var referencedUsers;
$target = lastTextareaPreviewed; referencedUsers = $form.find('.referenced-users');
$(document).triggerHandler('markdown-preview:hide', [$target.closest('form')]); if (referencedUsers.length) {
keyboardEvent.preventDefault(); if (users.length >= this.referenceThreshold) {
referencedUsers.show();
referencedUsers.find('.js-referenced-users-count').text(users.length);
} else {
referencedUsers.hide();
} }
}
};
MarkdownPreview.prototype.hideReferencedCommands = function ($form) {
$form.find('.referenced-commands').hide();
};
MarkdownPreview.prototype.renderReferencedCommands = function (commands, $form) {
var referencedCommands;
referencedCommands = $form.find('.referenced-commands');
if (commands.length > 0) {
referencedCommands.html(commands);
referencedCommands.show();
} else {
referencedCommands.html('');
referencedCommands.hide();
}
};
markdownPreview = new MarkdownPreview();
previewButtonSelector = '.js-md-preview-button';
writeButtonSelector = '.js-md-write-button';
lastTextareaPreviewed = null;
const markdownToolbar = $('.md-header-toolbar');
$.fn.setupMarkdownPreview = function () {
var $form = $(this);
$form.find('textarea.markdown-area').on('input', function () {
markdownPreview.hideReferencedUsers($form);
}); });
};
$(document).on('markdown-preview:show', function (e, $form) {
if (!$form) {
return;
}
lastTextareaPreviewed = $form.find('textarea.markdown-area');
lastTextareaHeight = lastTextareaPreviewed.height();
// toggle tabs
$form.find(writeButtonSelector).parent().removeClass('active');
$form.find(previewButtonSelector).parent().addClass('active');
// toggle content
$form.find('.md-write-holder').hide();
$form.find('.md-preview-holder').show();
markdownToolbar.removeClass('active');
markdownPreview.showPreview($form);
});
$(document).on('markdown-preview:hide', function (e, $form) {
if (!$form) {
return;
}
lastTextareaPreviewed = null;
$(document).on('click', previewButtonSelector, function (e) { if (lastTextareaHeight) {
var $form; $form.find('textarea.markdown-area').height(lastTextareaHeight);
e.preventDefault(); }
$form = $(this).closest('form');
$(document).triggerHandler('markdown-preview:show', [$form]); // toggle tabs
}); $form.find(writeButtonSelector).parent().addClass('active');
$form.find(previewButtonSelector).parent().removeClass('active');
$(document).on('click', writeButtonSelector, function (e) {
var $form; // toggle content
e.preventDefault(); $form.find('.md-write-holder').show();
$form = $(this).closest('form'); $form.find('textarea.markdown-area').focus();
$(document).triggerHandler('markdown-preview:hide', [$form]); $form.find('.md-preview-holder').hide();
}); markdownToolbar.addClass('active');
}());
markdownPreview.hideReferencedCommands($form);
});
$(document).on('markdown-preview:toggle', function (e, keyboardEvent) {
var $target;
$target = $(keyboardEvent.target);
if ($target.is('textarea.markdown-area')) {
$(document).triggerHandler('markdown-preview:show', [$target.closest('form')]);
keyboardEvent.preventDefault();
} else if (lastTextareaPreviewed) {
$target = lastTextareaPreviewed;
$(document).triggerHandler('markdown-preview:hide', [$target.closest('form')]);
keyboardEvent.preventDefault();
}
});
$(document).on('click', previewButtonSelector, function (e) {
var $form;
e.preventDefault();
$form = $(this).closest('form');
$(document).triggerHandler('markdown-preview:show', [$form]);
});
$(document).on('click', writeButtonSelector, function (e) {
var $form;
e.preventDefault();
$form = $(this).closest('form');
$(document).triggerHandler('markdown-preview:hide', [$form]);
});
export default MarkdownPreview;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment