'use strict'; var csrf; var suburl; function initCommentPreviewTab($form) { var $tab_menu = $form.find('.tabular.menu'); $tab_menu.find('.item').tab(); $tab_menu.find('.item[data-tab="' + $tab_menu.data('preview') + '"]').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 initCommentForm() { if ($('.comment.form').length == 0) { return } initCommentPreviewTab($('.comment.form')); // Labels var $list = $('.ui.labels.list'); var $no_select = $list.find('.no-select'); var $label_menu = $('.select-label .menu'); var has_label_update_action = $label_menu.data('action') == 'update'; function updateIssueMeta(url, action, id) { $.post(url, { "_csrf": csrf, "action": action, "id": id }); } $label_menu.find('.item:not(.no-select)').click(function () { if ($(this).hasClass('checked')) { $(this).removeClass('checked'); $(this).find('.octicon').removeClass('octicon-check'); if (has_label_update_action) { updateIssueMeta($label_menu.data('update-url'), "detach", $(this).data('id')); } } else { $(this).addClass('checked'); $(this).find('.octicon').addClass('octicon-check'); if (has_label_update_action) { updateIssueMeta($label_menu.data('update-url'), "attach", $(this).data('id')); } } var label_ids = ""; $(this).parent().find('.item').each(function () { if ($(this).hasClass('checked')) { label_ids += $(this).data('id') + ","; $($(this).data('id-selector')).removeClass('hide'); } else { $($(this).data('id-selector')).addClass('hide'); } }); if (label_ids.length == 0) { $no_select.removeClass('hide'); } else { $no_select.addClass('hide'); } $($(this).parent().data('id')).val(label_ids); return false; }); $label_menu.find('.no-select.item').click(function () { if (has_label_update_action) { updateIssueMeta($label_menu.data('update-url'), "clear", ''); } $(this).parent().find('.item').each(function () { $(this).removeClass('checked'); $(this).find('.octicon').removeClass('octicon-check'); }); $list.find('.item').each(function () { $(this).addClass('hide'); }); $no_select.removeClass('hide'); $($(this).parent().data('id')).val(''); }); function selectItem(select_id, input_id) { var $menu = $(select_id + ' .menu'); var $list = $('.ui' + select_id + '.list'); var has_update_action = $menu.data('action') == 'update'; $menu.find('.item:not(.no-select)').click(function () { $(this).parent().find('.item').each(function () { $(this).removeClass('selected active') }); $(this).addClass('selected active'); if (has_update_action) { updateIssueMeta($menu.data('update-url'), '', $(this).data('id')); } switch (input_id) { case '#milestone_id': $list.find('.selected').html('' + $(this).text() + ''); break; case '#assignee_id': $list.find('.selected').html('' + '' + $(this).text() + ''); } $('.ui' + select_id + '.list .no-select').addClass('hide'); $(input_id).val($(this).data('id')); }); $menu.find('.no-select.item').click(function () { $(this).parent().find('.item:not(.no-select)').each(function () { $(this).removeClass('selected active') }); if (has_update_action) { updateIssueMeta($menu.data('update-url'), '', ''); } $list.find('.selected').html(''); $list.find('.no-select').removeClass('hide'); $(input_id).val(''); }); } // Milestone and assignee selectItem('.select-milestone', '#milestone_id'); selectItem('.select-assignee', '#assignee_id'); } function initInstall() { if ($('.install').length == 0) { return; } // Database type change detection. $("#db_type").change(function () { var sqlite_default = 'data/gogs.db'; var tidb_default = 'data/gogs_tidb'; var db_type = $(this).val(); if (db_type === "SQLite3" || db_type === "TiDB") { $('#sql_settings').hide(); $('#pgsql_settings').hide(); $('#sqlite_settings').show(); if (db_type === "SQLite3" && $('#db_path').val() == tidb_default) { $('#db_path').val(sqlite_default); } else if (db_type === "TiDB" && $('#db_path').val() == sqlite_default) { $('#db_path').val(tidb_default); } return; } var mysql_default = '127.0.0.1:3306'; var postgres_default = '127.0.0.1:5432'; $('#sqlite_settings').hide(); $('#sql_settings').show(); if (db_type === "PostgreSQL") { $('#pgsql_settings').show(); if ($('#db_host').val() == mysql_default) { $('#db_host').val(postgres_default); } } else { $('#pgsql_settings').hide(); if ($('#db_host').val() == postgres_default) { $('#db_host').val(mysql_default); } } }); // TODO: better handling of exclusive relations. $('#offline-mode input').change(function () { if ($(this).is(':checked')) { $('#disable-gravatar').checkbox('check'); $('#federated-avatar-lookup').checkbox('uncheck'); } }); $('#disable-gravatar input').change(function () { if ($(this).is(':checked')) { $('#federated-avatar-lookup').checkbox('uncheck'); } else { $('#offline-mode').checkbox('uncheck'); } }); $('#federated-avatar-lookup input').change(function () { if ($(this).is(':checked')) { $('#disable-gravatar').checkbox('uncheck'); $('#offline-mode').checkbox('uncheck'); } }); $('#disable-registration input').change(function () { if ($(this).is(':checked')) { $('#enable-captcha').checkbox('uncheck'); } }); $('#enable-captcha input').change(function () { if ($(this).is(':checked')) { $('#disable-registration').checkbox('uncheck'); } }); } function initRepository() { if ($('.repository').length == 0) { return; } function initFilterSearchDropdown(selector) { var $dropdown = $(selector); $dropdown.dropdown({ fullTextSearch: true, onChange: function (text, value, $choice) { window.location.href = $choice.data('url'); console.log($choice.data('url')) }, message: {noResults: $dropdown.data('no-results')} }); } // File list and commits if ($('.repository.file.list').length > 0 || ('.repository.commits').length > 0) { initFilterSearchDropdown('.choose.reference .dropdown'); $('.reference.column').click(function () { $('.choose.reference .scrolling.menu').css('display', 'none'); $('.choose.reference .text').removeClass('black'); $($(this).data('target')).css('display', 'block'); $(this).find('.text').addClass('black'); return false; }); } // Wiki if ($('.repository.wiki.view').length > 0) { initFilterSearchDropdown('.choose.page .dropdown'); } // Options if ($('.repository.settings.options').length > 0) { $('#repo_name').keyup(function () { var $prompt_span = $('#repo-name-change-prompt'); if ($(this).val().toString().toLowerCase() != $(this).data('repo-name').toString().toLowerCase()) { $prompt_span.show(); } else { $prompt_span.hide(); } }); // Enable or select internal/external wiki system and issue tracker. $('.enable-system').change(function () { if (this.checked) { $($(this).data('target')).removeClass('disabled'); } else { $($(this).data('target')).addClass('disabled'); } }); $('.enable-system-radio').change(function () { if (this.value == 'false') { $($(this).data('target')).addClass('disabled'); } else if (this.value == 'true') { $($(this).data('target')).removeClass('disabled'); } }); } // Labels if ($('.repository.labels').length > 0) { // Create label var $new_label_panel = $('.new-label.segment'); $('.new-label.button').click(function () { $new_label_panel.show(); }); $('.new-label.segment .cancel').click(function () { $new_label_panel.hide(); }); $('.color-picker').each(function () { $(this).minicolors(); }); $('.precolors .color').click(function () { var color_hex = $(this).data('color-hex'); $('.color-picker').val(color_hex); $('.minicolors-swatch-color').css("background-color", color_hex); }); $('.edit-label-button').click(function () { $('#label-modal-id').val($(this).data('id')); $('.edit-label .new-label-input').val($(this).data('title')); $('.edit-label .color-picker').val($(this).data('color')); $('.minicolors-swatch-color').css("background-color", $(this).data('color')); $('.edit-label.modal').modal({ onApprove: function () { $('.edit-label.form').submit(); } }).modal('show'); return false; }); } // Milestones if ($('.repository.milestones').length > 0) { } if ($('.repository.new.milestone').length > 0) { var $datepicker = $('.milestone.datepicker'); $datepicker.datetimepicker({ lang: $datepicker.data('lang'), inline: true, timepicker: false, startDate: $datepicker.data('start-date'), formatDate: 'Y-m-d', onSelectDate: function (ct) { $('#deadline').val(ct.dateFormat('Y-m-d')); } }); $('#clear-date').click(function () { $('#deadline').val(''); return false; }); } // Issues if ($('.repository.view.issue').length > 0) { // Edit issue title var $issue_title = $('#issue-title'); var $edit_input = $('#edit-title-input input'); var editTitleToggle = function () { $issue_title.toggle(); $('.not-in-edit').toggle(); $('#edit-title-input').toggle(); $('.in-edit').toggle(); $edit_input.focus(); return false; }; $('#edit-title').click(editTitleToggle); $('#cancel-edit-title').click(editTitleToggle); $('#save-edit-title').click(editTitleToggle).click(function () { if ($edit_input.val().length == 0 || $edit_input.val() == $issue_title.text()) { $edit_input.val($issue_title.text()); return false; } $.post($(this).data('update-url'), { "_csrf": csrf, "title": $edit_input.val() }, function (data) { $edit_input.val(data.title); $issue_title.text(data.title); }); return false; }); // Edit issue or comment content $('.edit-content').click(function () { var $segment = $(this).parent().parent().parent().next(); var $edit_content_zone = $segment.find('.edit-content-zone'); var $render_content = $segment.find('.render-content'); var $raw_content = $segment.find('.raw-content'); var $textarea; // Setup new form if ($edit_content_zone.html().length == 0) { $edit_content_zone.html($('#edit-content-form').html()); $textarea = $segment.find('textarea'); // Give new write/preview data-tab name to distinguish from others var $edit_content_form = $edit_content_zone.find('.ui.comment.form'); var $tabular_menu = $edit_content_form.find('.tabular.menu'); $tabular_menu.attr('data-write', $edit_content_zone.data('write')); $tabular_menu.attr('data-preview', $edit_content_zone.data('preview')); $tabular_menu.find('.write.item').attr('data-tab', $edit_content_zone.data('write')); $tabular_menu.find('.preview.item').attr('data-tab', $edit_content_zone.data('preview')); $edit_content_form.find('.write.segment').attr('data-tab', $edit_content_zone.data('write')); $edit_content_form.find('.preview.segment').attr('data-tab', $edit_content_zone.data('preview')); initCommentPreviewTab($edit_content_form); $edit_content_zone.find('.cancel.button').click(function () { $render_content.show(); $edit_content_zone.hide(); }); $edit_content_zone.find('.save.button').click(function () { $render_content.show(); $edit_content_zone.hide(); $.post($edit_content_zone.data('update-url'), { "_csrf": csrf, "content": $textarea.val(), "context": $edit_content_zone.data('context') }, function (data) { if (data.length == 0) { $render_content.html($('#no-content').html()); } else { $render_content.html(data.content); emojify.run($render_content[0]); $('pre code', $render_content[0]).each(function (i, block) { hljs.highlightBlock(block); }); } }); }); } else { $textarea = $segment.find('textarea'); } // Show write/preview tab and copy raw content as needed $edit_content_zone.show(); $render_content.hide(); if ($textarea.val().length == 0) { $textarea.val($raw_content.text()); } $textarea.focus(); return false; }); // Delete comment $('.delete-comment').click(function () { var $this = $(this); if (confirm($this.data('locale'))) { $.post($this.data('url'), { "_csrf": csrf }).success(function () { $('#' + $this.data('comment-id')).remove(); }); } return false; }); // Change status var $status_btn = $('#status-button'); $('#content').keyup(function () { if ($(this).val().length == 0) { $status_btn.text($status_btn.data('status')) } else { $status_btn.text($status_btn.data('status-and-comment')) } }); $status_btn.click(function () { $('#status').val($status_btn.data('status-val')); $('#comment-form').submit(); }); } // Diff if ($('.repository.diff').length > 0) { var $counter = $('.diff-counter'); if ($counter.length >= 1) { $counter.each(function (i, item) { var $item = $(item); var addLine = $item.find('span[data-line].add').data("line"); var delLine = $item.find('span[data-line].del').data("line"); var addPercent = parseFloat(addLine) / (parseFloat(addLine) + parseFloat(delLine)) * 100; $item.find(".bar .add").css("width", addPercent + "%"); }); } } // Quick start and repository home $('#repo-clone-ssh').click(function () { $('.clone-url').text($(this).data('link')); $('#repo-clone-url').val($(this).data('link')); $(this).addClass('blue'); $('#repo-clone-https').removeClass('blue'); localStorage.setItem('repo-clone-protocol', 'ssh'); }); $('#repo-clone-https').click(function () { $('.clone-url').text($(this).data('link')); $('#repo-clone-url').val($(this).data('link')); $(this).addClass('blue'); $('#repo-clone-ssh').removeClass('blue'); localStorage.setItem('repo-clone-protocol', 'https'); }); $('#repo-clone-url').click(function () { $(this).select(); }); // Pull request if ($('.repository.compare.pull').length > 0) { initFilterSearchDropdown('.choose.branch .dropdown'); } } function initRepositoryCollaboration() { console.log('initRepositoryCollaboration'); // Change collaborator access mode $('.access-mode.menu .item').click(function () { var $menu = $(this).parent(); $.post($menu.data('url'), { "_csrf": csrf, "uid": $menu.data('uid'), "mode": $(this).data('value') }) }); } function initWiki() { if ($('.repository.wiki').length == 0) { return; } if ($('.repository.wiki.new').length > 0) { var $edit_area = $('#edit-area'); var simplemde = 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 = '