Squashed commit of the following:
commit 0afcb843d7ffd596991c4885cab768273a6eb42c Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Sun Jul 31 17:13:29 2016 -0600 Removed Upload stats as the upload table is just a temporary table commit 7ecd73ff5535612d79d471409173ee7f1fcfa157 Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Sun Jul 31 08:42:41 2016 -0600 Fix for CodeMirror mode commit c29b9ab531e2e7af0fb5db24dc17e51027dd1174 Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Sun Jul 31 08:03:33 2016 -0600 Made tabbing in editor use spaces commit 23af384c53206a8a40e11e45bf49d7a149c4adcd Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Sun Jul 31 07:56:46 2016 -0600 Fix for data-url commit cfb8a97591cb6fc0a92e49563b7b764c524db0e9 Merge: 7fc8a89991ce42
Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Sun Jul 31 07:42:53 2016 -0600 Merge remote-tracking branch 'gogits/develop' into feature-create-and-edit-repo-file Conflicts: modules/bindata/bindata.go public/js/gogs.js commit 7fc8a89cb495478225b02d613e647f99a1489634 Merge: fd3d86c c03d040 Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Sun Jul 31 07:40:00 2016 -0600 Merge branch 'feature-create-and-edit-repo-file' of github.com:richmahn/gogs into feature-create-and-edit-repo-file commit fd3d86ca6bbc02cfda566a504ffd6b03db4f75ef Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Sun Jul 31 07:39:44 2016 -0600 Code cleanup commit c03d0401c1049eeeccc32ab1f9c3303c130be5ee Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Fri Jul 29 15:38:23 2016 -0600 Code cleanup commit 98e1206ccf9f9a4503c020e3a7830cf9f861dfae Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Thu Jul 28 18:36:01 2016 -0600 Code cleanup and fixes commit c2895dc742f25f8412879c9fa15e18f27f42f194 Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Thu Jul 28 18:24:04 2016 -0600 Fixes per Unknwon's requests commit 6aa7e46b21ad4c96e562daa2eac26a8fb408f8ef Merge: 889e9faad7ea88
Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Thu Jul 28 17:13:43 2016 -0600 Merge remote-tracking branch 'gogits/develop' into feature-create-and-edit-repo-file Conflicts: modules/bindata/bindata.go modules/setting/setting.go commit 889e9faf1bd8559a4979c8f46005d488c1a234d4 Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Fri Jul 22 14:09:18 2016 -0600 Fix in gogs.js commit 47603edf223f147b114be65f3bd27bc1e88827a5 Merge: bb57912cf85e9e
Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Fri Jul 22 14:07:36 2016 -0600 Merge remote-tracking branch 'gogits/develop' into feature-create-and-edit-repo-file Conflicts: modules/bindata/bindata.go public/js/gogs.js commit bb5791255867a71c11a77b639db050ad09c597a4 Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Fri Jul 22 14:02:18 2016 -0600 Update for using CodeMirror mode addon commit d10d128c51039be19e2af9c66c63db66a9f2ec6d Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Tue Jul 19 16:12:57 2016 -0600 Update for Edit commit 34a34982025144e3225e389f7849eb6273c1d576 Merge: fa1b7521c7dcdd
Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Tue Jul 19 11:52:02 2016 -0600 Merge remote-tracking branch 'gogits/develop' into feature-create-and-edit-repo-file Conflicts: modules/bindata/bindata.go commit fa1b752be29cd455c5184ddac2ffe80b3489763e Author: Richard Mahn <richard_mahn@wycliffeassociates.org> Date: Fri Jul 15 18:35:42 2016 -0600 Feature for editing, creating, uploading and deleting files
This commit is contained in:
parent
7e7613cdec
commit
d0a0239bac
34 changed files with 2509 additions and 208 deletions
|
@ -28,6 +28,61 @@ function initCommentPreviewTab($form) {
|
|||
buttonsClickOnEnter();
|
||||
}
|
||||
|
||||
var previewTab;
|
||||
var previewTabApis;
|
||||
|
||||
function initEditPreviewTab($form) {
|
||||
var $tab_menu = $form.find('.tabular.menu');
|
||||
$tab_menu.find('.item').tab();
|
||||
previewTab = $tab_menu.find('.item[data-tab="' + $tab_menu.data('preview') + '"]');
|
||||
|
||||
if (previewTab.length) {
|
||||
previewTabApis = previewTab.data('preview-apis').split(',');
|
||||
previewTab.click(function () {
|
||||
var $this = $(this);
|
||||
$.post($this.data('url'), {
|
||||
"_csrf": csrf,
|
||||
"mode": "gfm",
|
||||
"context": $this.data('context'),
|
||||
"text": $form.find('.tab.segment[data-tab="' + $tab_menu.data('write') + '"] textarea').val()
|
||||
},
|
||||
function (data) {
|
||||
var $preview_tab = $form.find('.tab.segment[data-tab="' + $tab_menu.data('preview') + '"]');
|
||||
$preview_tab.html(data);
|
||||
emojify.run($preview_tab[0]);
|
||||
$('pre code', $preview_tab[0]).each(function (i, block) {
|
||||
hljs.highlightBlock(block);
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
buttonsClickOnEnter();
|
||||
}
|
||||
|
||||
function initEditDiffTab($form) {
|
||||
var $tab_menu = $form.find('.tabular.menu');
|
||||
$tab_menu.find('.item').tab();
|
||||
$tab_menu.find('.item[data-tab="' + $tab_menu.data('diff') + '"]').click(function () {
|
||||
var $this = $(this);
|
||||
$.post($this.data('url'), {
|
||||
"_csrf": csrf,
|
||||
"context": $this.data('context'),
|
||||
"content": $form.find('.tab.segment[data-tab="' + $tab_menu.data('write') + '"] textarea').val()
|
||||
},
|
||||
function (data) {
|
||||
var $diff_tab = $form.find('.tab.segment[data-tab="' + $tab_menu.data('diff') + '"]');
|
||||
$diff_tab.html(data);
|
||||
emojify.run($diff_tab[0]);
|
||||
initCodeView()
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
buttonsClickOnEnter();
|
||||
}
|
||||
|
||||
function initCommentForm() {
|
||||
if ($('.comment.form').length == 0) {
|
||||
return
|
||||
|
@ -145,6 +200,11 @@ function initCommentForm() {
|
|||
selectItem('.select-assignee', '#assignee_id');
|
||||
}
|
||||
|
||||
function initEditForm() {
|
||||
initEditPreviewTab($('.edit.form'));
|
||||
initEditDiffTab($('.edit.form'));
|
||||
}
|
||||
|
||||
function initInstall() {
|
||||
if ($('.install').length == 0) {
|
||||
return;
|
||||
|
@ -450,7 +510,7 @@ function initRepository() {
|
|||
|
||||
// Change status
|
||||
var $status_btn = $('#status-button');
|
||||
$('#content').keyup(function () {
|
||||
$('#edit_area').keyup(function () {
|
||||
if ($(this).val().length == 0) {
|
||||
$status_btn.text($status_btn.data('status'))
|
||||
} else {
|
||||
|
@ -516,15 +576,10 @@ function initRepositoryCollaboration() {
|
|||
});
|
||||
}
|
||||
|
||||
function initWiki() {
|
||||
if ($('.repository.wiki').length == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if ($('.repository.wiki.new').length > 0) {
|
||||
var $edit_area = $('#edit-area');
|
||||
var simplemde = new SimpleMDE({
|
||||
function initWikiForm() {
|
||||
var $edit_area = $('.repository.wiki textarea#edit_area');
|
||||
if ($edit_area.length > 0) {
|
||||
new SimpleMDE({
|
||||
autoDownloadFontAwesome: false,
|
||||
element: $edit_area[0],
|
||||
forceSync: true,
|
||||
|
@ -549,18 +604,284 @@ function initWiki() {
|
|||
renderingConfig: {
|
||||
singleLineBreaks: false
|
||||
},
|
||||
spellChecker: false,
|
||||
indentWithTabs: false,
|
||||
tabSize: 4,
|
||||
spellChecker: false,
|
||||
toolbar: ["bold", "italic", "strikethrough", "|",
|
||||
"heading", "heading-1", "heading-2", "heading-3", "|",
|
||||
"heading-1", "heading-2", "heading-3", "heading-bigger", "heading-smaller", "|",
|
||||
"code", "quote", "|",
|
||||
"unordered-list", "ordered-list", "|",
|
||||
"link", "image", "horizontal-rule", "|",
|
||||
"preview", "fullscreen"]
|
||||
"link", "image", "table", "horizontal-rule", "|",
|
||||
"clean-block", "preview", "fullscreen", "side-by-side"]
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function initIssueForm() {
|
||||
var $edit_area = $('.repository.issue textarea.edit_area');
|
||||
if ($edit_area.length > 0) {
|
||||
$edit_area.each(function (i, edit_area) {
|
||||
new SimpleMDE({
|
||||
autoDownloadFontAwesome: false,
|
||||
element: edit_area[0],
|
||||
forceSync: true,
|
||||
previewRender: function (plainText, preview) { // Async method
|
||||
setTimeout(function () {
|
||||
// FIXME: still send render request when return back to edit mode
|
||||
$.post($edit_area.data('url'), {
|
||||
"_csrf": csrf,
|
||||
"mode": "gfm",
|
||||
"context": $edit_area.data('context'),
|
||||
"text": plainText
|
||||
},
|
||||
function (data) {
|
||||
preview.innerHTML = '<div class="markdown">' + data + '</div>';
|
||||
emojify.run($('.editor-preview')[0]);
|
||||
}
|
||||
);
|
||||
}, 0);
|
||||
|
||||
return "Loading...";
|
||||
},
|
||||
renderingConfig: {
|
||||
singleLineBreaks: false
|
||||
},
|
||||
indentWithTabs: false,
|
||||
tabSize: 4,
|
||||
spellChecker: false,
|
||||
toolbar: ["bold", "italic", "strikethrough", "|",
|
||||
"code", "quote", "|",
|
||||
"unordered-list", "ordered-list", "|",
|
||||
"link", "image", "table"]
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var editArea;
|
||||
var editFilename;
|
||||
var smdEditor;
|
||||
var cmEditor;
|
||||
var mdFileExtensions;
|
||||
var lineWrapExtensions;
|
||||
|
||||
// For IE
|
||||
String.prototype.endsWith = function (pattern) {
|
||||
var d = this.length - pattern.length;
|
||||
return d >= 0 && this.lastIndexOf(pattern) === d;
|
||||
};
|
||||
|
||||
// Adding function to get the cursor position in a text field to jquery objects
|
||||
(function ($, undefined) {
|
||||
$.fn.getCursorPosition = function () {
|
||||
var el = $(this).get(0);
|
||||
var pos = 0;
|
||||
if ('selectionStart' in el) {
|
||||
pos = el.selectionStart;
|
||||
} else if ('selection' in document) {
|
||||
el.focus();
|
||||
var Sel = document.selection.createRange();
|
||||
var SelLength = document.selection.createRange().text.length;
|
||||
Sel.moveStart('character', -el.value.length);
|
||||
pos = Sel.text.length - SelLength;
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
})(jQuery);
|
||||
|
||||
function initEditor() {
|
||||
editFilename = $("#file-name");
|
||||
editFilename.keyup(function (e) {
|
||||
var sections = $('.breadcrumb span.section');
|
||||
var dividers = $('.breadcrumb div.divider');
|
||||
if (e.keyCode == 8) {
|
||||
if ($(this).getCursorPosition() == 0) {
|
||||
if (sections.length > 0) {
|
||||
var value = sections.last().find('a').text();
|
||||
$(this).val(value + $(this).val());
|
||||
$(this)[0].setSelectionRange(value.length, value.length);
|
||||
sections.last().remove();
|
||||
dividers.last().remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (e.keyCode == 191) {
|
||||
var parts = $(this).val().split('/');
|
||||
for (var i = 0; i < parts.length; ++i) {
|
||||
var value = parts[i];
|
||||
if (i < parts.length - 1) {
|
||||
if (value.length) {
|
||||
$('<span class="section"><a href="#">' + value + '</a></span>').insertBefore($(this));
|
||||
$('<div class="divider"> / </div>').insertBefore($(this));
|
||||
}
|
||||
}
|
||||
else {
|
||||
$(this).val(value);
|
||||
}
|
||||
$(this)[0].setSelectionRange(0, 0);
|
||||
}
|
||||
}
|
||||
var parts = [];
|
||||
$('.breadcrumb span.section').each(function (i, element) {
|
||||
element = $(element);
|
||||
if (element.find('a').length) {
|
||||
parts.push(element.find('a').text());
|
||||
} else {
|
||||
parts.push(element.text());
|
||||
}
|
||||
});
|
||||
if ($(this).val())
|
||||
parts.push($(this).val());
|
||||
$('#tree-name').val(parts.join('/'));
|
||||
}).trigger('keyup');
|
||||
|
||||
editArea = $('.repository.edit textarea#edit_area');
|
||||
|
||||
if (!editArea.length)
|
||||
return;
|
||||
|
||||
mdFileExtensions = editArea.data("md-file-extensions").split(",");
|
||||
lineWrapExtensions = editArea.data("line-wrap-extensions").split(",");
|
||||
|
||||
editFilename.on("keyup", function (e) {
|
||||
var val = editFilename.val(), m, mode, spec, extension, extWithDot, previewLink, dataUrl, apiCall;
|
||||
extension = extWithDot = "";
|
||||
if (m = /.+\.([^.]+)$/.exec(val)) {
|
||||
extension = m[1];
|
||||
extWithDot = "." + extension;
|
||||
}
|
||||
|
||||
var info = CodeMirror.findModeByExtension(extension);
|
||||
previewLink = $('a[data-tab=preview]');
|
||||
if (info) {
|
||||
mode = info.mode;
|
||||
spec = info.mime;
|
||||
apiCall = mode;
|
||||
}
|
||||
else {
|
||||
apiCall = extension
|
||||
}
|
||||
|
||||
if (previewLink.length && apiCall && previewTabApis && previewTabApis.length && previewTabApis.indexOf(apiCall) >= 0) {
|
||||
dataUrl = previewLink.data('url');
|
||||
previewLink.data('url', dataUrl.replace(/(.*)\/.*/i, '$1/' + mode));
|
||||
previewLink.show();
|
||||
}
|
||||
else {
|
||||
previewLink.hide();
|
||||
}
|
||||
|
||||
// If this file is a Markdown extensions, we will load that editor and return
|
||||
if (mdFileExtensions.indexOf(extWithDot) >= 0) {
|
||||
if (setSimpleMDE()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Else we are going to use CodeMirror
|
||||
if (!cmEditor) {
|
||||
if (!setCodeMirror())
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode) {
|
||||
cmEditor.setOption("mode", spec);
|
||||
CodeMirror.autoLoadMode(cmEditor, mode);
|
||||
}
|
||||
|
||||
if (lineWrapExtensions.indexOf(extWithDot) >= 0) {
|
||||
cmEditor.setOption("lineWrapping", true);
|
||||
}
|
||||
else {
|
||||
cmEditor.setOption("lineWrapping", false);
|
||||
}
|
||||
}).trigger('keyup');
|
||||
}
|
||||
|
||||
function setSimpleMDE() {
|
||||
if (cmEditor) {
|
||||
cmEditor.toTextArea();
|
||||
cmEditor = null;
|
||||
}
|
||||
|
||||
if (smdEditor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
smdEditor = new SimpleMDE({
|
||||
autoDownloadFontAwesome: false,
|
||||
element: editArea[0],
|
||||
forceSync: true,
|
||||
renderingConfig: {
|
||||
singleLineBreaks: false
|
||||
},
|
||||
indentWithTabs: false,
|
||||
tabSize: 4,
|
||||
spellChecker: false,
|
||||
previewRender: function (plainText, preview) { // Async method
|
||||
setTimeout(function () {
|
||||
// FIXME: still send render request when return back to edit mode
|
||||
$.post(editArea.data('url'), {
|
||||
"_csrf": csrf,
|
||||
"mode": "gfm",
|
||||
"context": editArea.data('context'),
|
||||
"text": plainText
|
||||
},
|
||||
function (data) {
|
||||
preview.innerHTML = '<div class="markdown">' + data + '</div>';
|
||||
emojify.run($('.editor-preview')[0]);
|
||||
}
|
||||
);
|
||||
}, 0);
|
||||
|
||||
return "Loading...";
|
||||
},
|
||||
toolbar: ["bold", "italic", "strikethrough", "|",
|
||||
"heading-1", "heading-2", "heading-3", "heading-bigger", "heading-smaller", "|",
|
||||
"code", "quote", "|",
|
||||
"unordered-list", "ordered-list", "|",
|
||||
"link", "image", "table", "horizontal-rule", "|",
|
||||
"clean-block", "preview", "fullscreen", "side-by-side"]
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function setCodeMirror() {
|
||||
if (smdEditor) {
|
||||
smdEditor.toTextArea();
|
||||
smdEditor = null;
|
||||
}
|
||||
|
||||
if (cmEditor) {
|
||||
return true;
|
||||
}
|
||||
|
||||
cmEditor = CodeMirror.fromTextArea(editArea[0], {
|
||||
lineNumbers: true
|
||||
});
|
||||
cmEditor.on("change", function (cm, change) {
|
||||
editArea.val(cm.getValue());
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function initQuickPull() {
|
||||
$('.js-quick-pull-choice-option').change(function () {
|
||||
quickPullChoiceChange();
|
||||
});
|
||||
quickPullChoiceChange();
|
||||
}
|
||||
|
||||
function quickPullChoiceChange() {
|
||||
var radio = $('.js-quick-pull-choice-option:checked');
|
||||
if (radio.val() == 'commit-to-new-branch')
|
||||
$('.quick-pull-branch-name').show();
|
||||
else
|
||||
$('.quick-pull-branch-name').hide();
|
||||
}
|
||||
|
||||
function initOrganization() {
|
||||
if ($('.organization').length == 0) {
|
||||
return;
|
||||
|
@ -867,6 +1188,37 @@ function searchRepositories() {
|
|||
hideWhenLostFocus('#search-repo-box .results', '#search-repo-box');
|
||||
}
|
||||
|
||||
function initCodeView() {
|
||||
if ($('.code-view .linenums').length > 0) {
|
||||
$(document).on('click', '.lines-num span', function (e) {
|
||||
var $select = $(this);
|
||||
var $list = $select.parent().siblings('.lines-code').find('ol.linenums > li');
|
||||
selectRange($list, $list.filter('[rel=' + $select.attr('id') + ']'), (e.shiftKey ? $list.filter('.active').eq(0) : null));
|
||||
deSelect();
|
||||
});
|
||||
|
||||
$(window).on('hashchange', function (e) {
|
||||
var m = window.location.hash.match(/^#(L\d+)\-(L\d+)$/);
|
||||
var $list = $('.code-view ol.linenums > li');
|
||||
var $first;
|
||||
if (m) {
|
||||
$first = $list.filter('.' + m[1]);
|
||||
selectRange($list, $first, $list.filter('.' + m[2]));
|
||||
$("html, body").scrollTop($first.offset().top - 200);
|
||||
return;
|
||||
}
|
||||
m = window.location.hash.match(/^#(L\d+)$/);
|
||||
if (m) {
|
||||
$first = $list.filter('.' + m[1]);
|
||||
selectRange($list, $first);
|
||||
$("html, body").scrollTop($first.offset().top - 200);
|
||||
}
|
||||
}).trigger('hashchange');
|
||||
}
|
||||
}
|
||||
|
||||
var $dropz;
|
||||
|
||||
$(document).ready(function () {
|
||||
csrf = $('meta[name=_csrf]').attr("content");
|
||||
suburl = $('meta[name=_suburl]').attr("content");
|
||||
|
@ -916,12 +1268,12 @@ $(document).ready(function () {
|
|||
}
|
||||
|
||||
// Dropzone
|
||||
if ($('#dropzone').length > 0) {
|
||||
var $dropz = $('#dropzone');
|
||||
if ($dropz.length > 0) {
|
||||
// Disable auto discover for all elements:
|
||||
Dropzone.autoDiscover = false;
|
||||
|
||||
var filenameDict = {};
|
||||
var $dropz = $('#dropzone');
|
||||
$dropz.dropzone({
|
||||
url: $dropz.data('upload-url'),
|
||||
headers: {"X-Csrf-Token": csrf},
|
||||
|
@ -936,12 +1288,16 @@ $(document).ready(function () {
|
|||
init: function () {
|
||||
this.on("success", function (file, data) {
|
||||
filenameDict[file.name] = data.uuid;
|
||||
$('.attachments').append('<input id="' + data.uuid + '" name="attachments" type="hidden" value="' + data.uuid + '">');
|
||||
var input = $('<input id="' + data.uuid + '" name="files" type="hidden">').val(data.uuid);
|
||||
$('.files').append(input);
|
||||
});
|
||||
this.on("removedfile", function (file) {
|
||||
if (file.name in filenameDict) {
|
||||
$('#' + filenameDict[file.name]).remove();
|
||||
}
|
||||
if ($dropz.data('remove-url') && $dropz.data('csrf')) {
|
||||
$.post($dropz.data('remove-url'), {file: filenameDict[file.name], _csrf: $dropz.data('csrf')});
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
|
@ -975,6 +1331,15 @@ $(document).ready(function () {
|
|||
e.trigger.setAttribute('data-content', e.trigger.getAttribute('data-original'))
|
||||
});
|
||||
|
||||
// Clipboard for copying filename on edit page
|
||||
if ($('.clipboard-tree-name').length) {
|
||||
new Clipboard(document.querySelector('.clipboard-tree-name'), {
|
||||
text: function () {
|
||||
return $('#tree-name').val();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Helpers.
|
||||
$('.delete-button').click(function () {
|
||||
var $this = $(this);
|
||||
|
@ -1038,10 +1403,14 @@ $(document).ready(function () {
|
|||
initCommentForm();
|
||||
initInstall();
|
||||
initRepository();
|
||||
initWiki();
|
||||
initWikiForm();
|
||||
initIssueForm();
|
||||
initEditForm();
|
||||
initEditor();
|
||||
initOrganization();
|
||||
initWebhook();
|
||||
initAdmin();
|
||||
initQuickPull();
|
||||
|
||||
var routes = {
|
||||
'div.user.settings': initUserSettings,
|
||||
|
@ -1057,76 +1426,50 @@ $(document).ready(function () {
|
|||
}
|
||||
});
|
||||
|
||||
function changeHash(hash) {
|
||||
if (history.pushState) {
|
||||
history.pushState(null, null, hash);
|
||||
}
|
||||
else {
|
||||
location.hash = hash;
|
||||
}
|
||||
}
|
||||
|
||||
function deSelect() {
|
||||
if (window.getSelection) {
|
||||
window.getSelection().removeAllRanges();
|
||||
} else {
|
||||
document.selection.empty();
|
||||
}
|
||||
}
|
||||
|
||||
function selectRange($list, $select, $from) {
|
||||
$list.removeClass('active');
|
||||
if ($from) {
|
||||
var a = parseInt($select.attr('rel').substr(1));
|
||||
var b = parseInt($from.attr('rel').substr(1));
|
||||
var c;
|
||||
if (a != b) {
|
||||
if (a > b) {
|
||||
c = a;
|
||||
a = b;
|
||||
b = c;
|
||||
}
|
||||
var classes = [];
|
||||
for (var i = a; i <= b; i++) {
|
||||
classes.push('.L' + i);
|
||||
}
|
||||
$list.filter(classes.join(',')).addClass('active');
|
||||
changeHash('#L' + a + '-' + 'L' + b);
|
||||
return
|
||||
}
|
||||
}
|
||||
$select.addClass('active');
|
||||
changeHash('#' + $select.attr('rel'));
|
||||
}
|
||||
|
||||
$(window).load(function () {
|
||||
function changeHash(hash) {
|
||||
if (history.pushState) {
|
||||
history.pushState(null, null, hash);
|
||||
}
|
||||
else {
|
||||
location.hash = hash;
|
||||
}
|
||||
}
|
||||
|
||||
function deSelect() {
|
||||
if (window.getSelection) {
|
||||
window.getSelection().removeAllRanges();
|
||||
} else {
|
||||
document.selection.empty();
|
||||
}
|
||||
}
|
||||
|
||||
function selectRange($list, $select, $from) {
|
||||
$list.removeClass('active');
|
||||
if ($from) {
|
||||
var a = parseInt($select.attr('rel').substr(1));
|
||||
var b = parseInt($from.attr('rel').substr(1));
|
||||
var c;
|
||||
if (a != b) {
|
||||
if (a > b) {
|
||||
c = a;
|
||||
a = b;
|
||||
b = c;
|
||||
}
|
||||
var classes = [];
|
||||
for (var i = a; i <= b; i++) {
|
||||
classes.push('.L' + i);
|
||||
}
|
||||
$list.filter(classes.join(',')).addClass('active');
|
||||
changeHash('#L' + a + '-' + 'L' + b);
|
||||
return
|
||||
}
|
||||
}
|
||||
$select.addClass('active');
|
||||
changeHash('#' + $select.attr('rel'));
|
||||
}
|
||||
|
||||
// Code view.
|
||||
if ($('.code-view .linenums').length > 0) {
|
||||
$(document).on('click', '.lines-num span', function (e) {
|
||||
var $select = $(this);
|
||||
var $list = $select.parent().siblings('.lines-code').find('ol.linenums > li');
|
||||
selectRange($list, $list.filter('[rel=' + $select.attr('id') + ']'), (e.shiftKey ? $list.filter('.active').eq(0) : null));
|
||||
deSelect();
|
||||
});
|
||||
|
||||
$(window).on('hashchange', function (e) {
|
||||
var m = window.location.hash.match(/^#(L\d+)\-(L\d+)$/);
|
||||
var $list = $('.code-view ol.linenums > li');
|
||||
var $first;
|
||||
if (m) {
|
||||
$first = $list.filter('.' + m[1]);
|
||||
selectRange($list, $first, $list.filter('.' + m[2]));
|
||||
$("html, body").scrollTop($first.offset().top - 200);
|
||||
return;
|
||||
}
|
||||
m = window.location.hash.match(/^#(L\d+)$/);
|
||||
if (m) {
|
||||
$first = $list.filter('.' + m[1]);
|
||||
selectRange($list, $first);
|
||||
$("html, body").scrollTop($first.offset().top - 200);
|
||||
}
|
||||
}).trigger('hashchange');
|
||||
}
|
||||
initCodeView();
|
||||
|
||||
// Repo clone url.
|
||||
if ($('#repo-clone-url').length > 0) {
|
||||
|
@ -1135,7 +1478,6 @@ $(window).load(function () {
|
|||
if ($('#repo-clone-ssh').click().length === 0) {
|
||||
$('#repo-clone-https').click();
|
||||
}
|
||||
;
|
||||
break;
|
||||
default:
|
||||
$('#repo-clone-https').click();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue