diff options
32 files changed, 111 insertions, 91 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e1920b27b6..7fbe6e47e24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -197,6 +197,10 @@ entry. - Clean up schema of the "merge_requests" table. +## 10.2.7 (2018-01-18) + +- No changes. + ## 10.2.6 (2018-01-11) ### Security (9 changes, 1 of them is from the community) @@ -478,6 +482,10 @@ entry. - Add Gitaly metrics to the performance bar. +## 10.1.7 (2018-01-18) + +- No changes. + ## 10.1.6 (2018-01-11) ### Security (8 changes, 1 of them is from the community) diff --git a/app/assets/javascripts/dispatcher.js b/app/assets/javascripts/dispatcher.js index b7b0162e307..4f8837251bc 100644 --- a/app/assets/javascripts/dispatcher.js +++ b/app/assets/javascripts/dispatcher.js @@ -9,11 +9,8 @@ import notificationsDropdown from './notifications_dropdown'; import groupAvatar from './group_avatar'; import GroupLabelSubscription from './group_label_subscription'; import LineHighlighter from './line_highlighter'; -import Project from './project'; -import projectAvatar from './project_avatar'; import MergeRequest from './merge_request'; import Compare from './compare'; -import ProjectNew from './project_new'; import Labels from './labels'; import LabelManager from './label_manager'; import Sidebar from './right_sidebar'; @@ -24,19 +21,16 @@ import SecretValues from './behaviors/secret_values'; import Group from './group'; import ProjectsList from './projects_list'; import UserCallout from './user_callout'; -import ShortcutsWiki from './shortcuts_wiki'; import BlobViewer from './blob/viewer/index'; import UsersSelect from './users_select'; import GfmAutoComplete from './gfm_auto_complete'; import Star from './star'; import TreeView from './tree'; -import Wikis from './wikis'; import ZenMode from './zen_mode'; import initSettingsPanels from './settings_panels'; import PerformanceBar from './performance_bar'; import initNotes from './init_notes'; import initIssuableSidebar from './init_issuable_sidebar'; -import initProjectVisibilitySelector from './project_visibility'; import NewGroupChild from './groups/new_group_child'; import { ajaxGet, convertPermissionToBoolean } from './lib/utils/common_utils'; import GlFieldErrors from './gl_field_errors'; @@ -311,7 +305,6 @@ import Activities from './activities'; window.mergeRequest = new MergeRequest({ action: mrShowNode.dataset.mrAction, }); - shortcut_handler = new ShortcutsIssuable(true); break; case 'dashboard:activity': @@ -647,57 +640,39 @@ import Activities from './activities'; .catch(fail); break; case 'projects': - new Project(); - projectAvatar(); + import('./pages/projects') + .then(callDefault) + .catch(fail); + shortcut_handler = true; switch (path[1]) { case 'compare': import('./pages/projects/compare') .then(callDefault) .catch(fail); break; - case 'edit': - shortcut_handler = new ShortcutsNavigation(); - new ProjectNew(); - import(/* webpackChunkName: 'project_permissions' */ './projects/permissions') + case 'create': + case 'new': + import('./pages/projects/new') .then(callDefault) .catch(fail); break; - case 'new': - new ProjectNew(); - initProjectVisibilitySelector(); - break; case 'show': new Star(); - new ProjectNew(); notificationsDropdown(); break; case 'wikis': - new Wikis(); - shortcut_handler = new ShortcutsWiki(); - new ZenMode(); - new GLForm($('.wiki-form'), true); + import('./pages/projects/wikis') + .then(callDefault) + .catch(fail); + shortcut_handler = true; break; case 'snippets': - shortcut_handler = new ShortcutsNavigation(); if (path[2] === 'show') { new ZenMode(); new LineHighlighter(); new BlobViewer(); } break; - case 'labels': - case 'graphs': - case 'compare': - case 'pipelines': - case 'forks': - case 'milestones': - case 'project_members': - case 'deploy_keys': - case 'builds': - case 'hooks': - case 'services': - case 'protected_branches': - shortcut_handler = new ShortcutsNavigation(); } break; } diff --git a/app/assets/javascripts/pages/projects/edit/index.js b/app/assets/javascripts/pages/projects/edit/index.js index 7f662ef6b6a..9edf36d66b1 100644 --- a/app/assets/javascripts/pages/projects/edit/index.js +++ b/app/assets/javascripts/pages/projects/edit/index.js @@ -1,8 +1,14 @@ import initSettingsPanels from '~/settings_panels'; import setupProjectEdit from '~/project_edit'; +import ProjectNew from '../shared/project_new'; +import projectAvatar from '../shared/project_avatar'; +import initProjectPermissionsSettings from '../shared/permissions'; export default () => { + new ProjectNew(); // eslint-disable-line no-new setupProjectEdit(); // Initialize expandable settings panels initSettingsPanels(); + projectAvatar(); + initProjectPermissionsSettings(); }; diff --git a/app/assets/javascripts/pages/projects/index.js b/app/assets/javascripts/pages/projects/index.js new file mode 100644 index 00000000000..9b1d52692a3 --- /dev/null +++ b/app/assets/javascripts/pages/projects/index.js @@ -0,0 +1,7 @@ +import Project from './project'; +import ShortcutsNavigation from '../../shortcuts_navigation'; + +export default () => { + new Project(); // eslint-disable-line no-new + new ShortcutsNavigation(); // eslint-disable-line no-new +}; diff --git a/app/assets/javascripts/pages/projects/new/index.js b/app/assets/javascripts/pages/projects/new/index.js new file mode 100644 index 00000000000..71c49deb9d0 --- /dev/null +++ b/app/assets/javascripts/pages/projects/new/index.js @@ -0,0 +1,9 @@ +import ProjectNew from '../shared/project_new'; +import initProjectVisibilitySelector from '../../../project_visibility'; +import initProjectNew from '../../../projects/project_new'; + +export default () => { + new ProjectNew(); // eslint-disable-line no-new + initProjectVisibilitySelector(); + initProjectNew.bindEvents(); +}; diff --git a/app/assets/javascripts/project.js b/app/assets/javascripts/pages/projects/project.js index d4f26b81f30..e30d558726b 100644 --- a/app/assets/javascripts/project.js +++ b/app/assets/javascripts/pages/projects/project.js @@ -1,8 +1,8 @@ /* eslint-disable func-names, space-before-function-paren, no-var, consistent-return, no-new, prefer-arrow-callback, no-return-assign, one-var, one-var-declaration-per-line, object-shorthand, no-else-return, newline-per-chained-call, no-shadow, vars-on-top, prefer-template, max-len */ import Cookies from 'js-cookie'; -import { visitUrl } from './lib/utils/url_utility'; -import projectSelect from './project_select'; +import { visitUrl } from '../../lib/utils/url_utility'; +import projectSelect from '../../project_select'; export default class Project { constructor() { diff --git a/app/assets/javascripts/projects/permissions/components/project_feature_setting.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/project_feature_setting.vue index 3ebfe82597a..9b13b2a524f 100644 --- a/app/assets/javascripts/projects/permissions/components/project_feature_setting.vue +++ b/app/assets/javascripts/pages/projects/shared/permissions/components/project_feature_setting.vue @@ -1,5 +1,5 @@ <script> - import projectFeatureToggle from '../../../vue_shared/components/toggle_button.vue'; + import projectFeatureToggle from '../../../../../vue_shared/components/toggle_button.vue'; export default { components: { diff --git a/app/assets/javascripts/projects/permissions/components/project_setting_row.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/project_setting_row.vue index 25a88f846eb..25a88f846eb 100644 --- a/app/assets/javascripts/projects/permissions/components/project_setting_row.vue +++ b/app/assets/javascripts/pages/projects/shared/permissions/components/project_setting_row.vue diff --git a/app/assets/javascripts/projects/permissions/components/settings_panel.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue index c96ce12d9fb..380c6c3ea7d 100644 --- a/app/assets/javascripts/projects/permissions/components/settings_panel.vue +++ b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue @@ -1,6 +1,6 @@ <script> import projectFeatureSetting from './project_feature_setting.vue'; - import projectFeatureToggle from '../../../vue_shared/components/toggle_button.vue'; + import projectFeatureToggle from '../../../../../vue_shared/components/toggle_button.vue'; import projectSettingRow from './project_setting_row.vue'; import { visibilityOptions, visibilityLevelDescriptions } from '../constants'; import { toggleHiddenClassBySelector } from '../external'; diff --git a/app/assets/javascripts/projects/permissions/constants.js b/app/assets/javascripts/pages/projects/shared/permissions/constants.js index ce47562f259..ce47562f259 100644 --- a/app/assets/javascripts/projects/permissions/constants.js +++ b/app/assets/javascripts/pages/projects/shared/permissions/constants.js diff --git a/app/assets/javascripts/projects/permissions/external.js b/app/assets/javascripts/pages/projects/shared/permissions/external.js index 460af4a2111..460af4a2111 100644 --- a/app/assets/javascripts/projects/permissions/external.js +++ b/app/assets/javascripts/pages/projects/shared/permissions/external.js diff --git a/app/assets/javascripts/projects/permissions/index.js b/app/assets/javascripts/pages/projects/shared/permissions/index.js index dbde8dda634..dbde8dda634 100644 --- a/app/assets/javascripts/projects/permissions/index.js +++ b/app/assets/javascripts/pages/projects/shared/permissions/index.js diff --git a/app/assets/javascripts/project_avatar.js b/app/assets/javascripts/pages/projects/shared/project_avatar.js index 56627aa155c..56627aa155c 100644 --- a/app/assets/javascripts/project_avatar.js +++ b/app/assets/javascripts/pages/projects/shared/project_avatar.js diff --git a/app/assets/javascripts/project_new.js b/app/assets/javascripts/pages/projects/shared/project_new.js index ca548d011b6..86faba0b910 100644 --- a/app/assets/javascripts/project_new.js +++ b/app/assets/javascripts/pages/projects/shared/project_new.js @@ -1,6 +1,6 @@ /* eslint-disable func-names, no-var, no-underscore-dangle, prefer-template, prefer-arrow-callback*/ -import VisibilitySelect from './visibility_select'; +import VisibilitySelect from '../../../visibility_select'; function highlightChanges($elm) { $elm.addClass('highlight-changes'); diff --git a/app/assets/javascripts/pages/projects/wikis/index.js b/app/assets/javascripts/pages/projects/wikis/index.js new file mode 100644 index 00000000000..eb14c7a0e78 --- /dev/null +++ b/app/assets/javascripts/pages/projects/wikis/index.js @@ -0,0 +1,11 @@ +import Wikis from './wikis'; +import ShortcutsWiki from '../../../shortcuts_wiki'; +import ZenMode from '../../../zen_mode'; +import GLForm from '../../../gl_form'; + +export default () => { + new Wikis(); // eslint-disable-line no-new + new ShortcutsWiki(); // eslint-disable-line no-new + new ZenMode(); // eslint-disable-line no-new + new GLForm($('.wiki-form'), true); // eslint-disable-line no-new +}; diff --git a/app/assets/javascripts/wikis.js b/app/assets/javascripts/pages/projects/wikis/wikis.js index 7a865587444..34a12ef76a1 100644 --- a/app/assets/javascripts/wikis.js +++ b/app/assets/javascripts/pages/projects/wikis/wikis.js @@ -1,5 +1,5 @@ -import bp from './breakpoints'; -import { slugify } from './lib/utils/text_utility'; +import bp from '../../../breakpoints'; +import { slugify } from '../../../lib/utils/text_utility'; export default class Wikis { constructor() { diff --git a/app/assets/javascripts/pipelines/components/pipelines_table.vue b/app/assets/javascripts/pipelines/components/pipelines_table.vue index c6638cdcf1e..6681b89e629 100644 --- a/app/assets/javascripts/pipelines/components/pipelines_table.vue +++ b/app/assets/javascripts/pipelines/components/pipelines_table.vue @@ -50,13 +50,13 @@ Pipeline </div> <div - class="table-section section-25 js-pipeline-commit pipeline-commit" + class="table-section section-20 js-pipeline-commit pipeline-commit" role="rowheader" > Commit </div> <div - class="table-section section-15 js-pipeline-stages pipeline-stages" + class="table-section section-20 js-pipeline-stages pipeline-stages" role="rowheader" > Stages diff --git a/app/assets/javascripts/pipelines/components/pipelines_table_row.vue b/app/assets/javascripts/pipelines/components/pipelines_table_row.vue index d87e24cc8a7..d0e4cf7ff40 100644 --- a/app/assets/javascripts/pipelines/components/pipelines_table_row.vue +++ b/app/assets/javascripts/pipelines/components/pipelines_table_row.vue @@ -239,7 +239,7 @@ :auto-devops-help-path="autoDevopsHelpPath" /> - <div class="table-section section-25"> + <div class="table-section section-20"> <div class="table-mobile-header" role="rowheader"> @@ -258,7 +258,7 @@ </div> </div> - <div class="table-section section-wrap section-15 stage-cell"> + <div class="table-section section-wrap section-20 stage-cell"> <div class="table-mobile-header" role="rowheader"> diff --git a/app/assets/javascripts/projects/project_new.js b/app/assets/javascripts/projects/project_new.js index 4710e70d619..f5133111d04 100644 --- a/app/assets/javascripts/projects/project_new.js +++ b/app/assets/javascripts/projects/project_new.js @@ -100,8 +100,6 @@ const bindEvents = () => { $projectImportUrl.keyup(() => deriveProjectPathFromUrl($projectImportUrl)); }; -document.addEventListener('DOMContentLoaded', bindEvents); - export default { bindEvents, deriveProjectPathFromUrl, diff --git a/app/assets/javascripts/shortcuts.js b/app/assets/javascripts/shortcuts.js index 5351873e945..cd5ab53eace 100644 --- a/app/assets/javascripts/shortcuts.js +++ b/app/assets/javascripts/shortcuts.js @@ -13,12 +13,10 @@ Mousetrap.stopCallback = (e, element, combo) => { }; export default class Shortcuts { - constructor(skipResetBindings) { + constructor() { this.onToggleHelp = this.onToggleHelp.bind(this); this.enabledHelp = []; - if (!skipResetBindings) { - Mousetrap.reset(); - } + Mousetrap.bind('?', this.onToggleHelp); Mousetrap.bind('s', Shortcuts.focusSearch); Mousetrap.bind('f', this.focusFilter.bind(this)); diff --git a/app/assets/javascripts/shortcuts_issuable.js b/app/assets/javascripts/shortcuts_issuable.js index 6aeae84cdc5..689befc742e 100644 --- a/app/assets/javascripts/shortcuts_issuable.js +++ b/app/assets/javascripts/shortcuts_issuable.js @@ -1,10 +1,10 @@ import Mousetrap from 'mousetrap'; import _ from 'underscore'; import Sidebar from './right_sidebar'; -import ShortcutsNavigation from './shortcuts_navigation'; +import Shortcuts from './shortcuts'; import { CopyAsGFM } from './behaviors/copy_as_gfm'; -export default class ShortcutsIssuable extends ShortcutsNavigation { +export default class ShortcutsIssuable extends Shortcuts { constructor(isMergeRequest) { super(); diff --git a/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.js b/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.js index 2075f8e4fec..98d33f9efaa 100644 --- a/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.js +++ b/app/assets/javascripts/vue_merge_request_widget/mr_widget_options.js @@ -1,4 +1,4 @@ -import Project from '~/project'; +import Project from '~/pages/projects/project'; import SmartInterval from '~/smart_interval'; import Flash from '../flash'; import { diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss index 766e02b12ea..db88d4a16b7 100644 --- a/app/assets/stylesheets/pages/pipelines.scss +++ b/app/assets/stylesheets/pages/pipelines.scss @@ -228,7 +228,7 @@ .stage-cell { &.table-section { @media (min-width: $screen-md-min) { - min-width: 148px; + min-width: 160px; /* Hack alert: Without this the mini graph pipeline won't work properly*/ margin-right: -4px; } } diff --git a/app/finders/labels_finder.rb b/app/finders/labels_finder.rb index 6de9eb89468..1427cdaa382 100644 --- a/app/finders/labels_finder.rb +++ b/app/finders/labels_finder.rb @@ -71,7 +71,7 @@ class LabelsFinder < UnionFinder end def projects? - params[:project_ids].present? + params[:project_ids] end def only_group_labels? diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb index 2668cf78afe..520a875238c 100644 --- a/app/helpers/issuables_helper.rb +++ b/app/helpers/issuables_helper.rb @@ -304,6 +304,12 @@ module IssuablesHelper issuable.model_name.human.downcase end + def selected_labels + Array(params[:label_name]).map do |label_name| + Label.new(title: label_name) + end + end + private def sidebar_gutter_collapsed? diff --git a/app/views/profiles/preferences/show.html.haml b/app/views/profiles/preferences/show.html.haml index aeae7455a1c..66d1d1e8d44 100644 --- a/app/views/profiles/preferences/show.html.haml +++ b/app/views/profiles/preferences/show.html.haml @@ -3,23 +3,6 @@ = render 'profiles/head' = form_for @user, url: profile_preferences_path, remote: true, method: :put, html: { class: 'row prepend-top-default js-preferences-form' } do |f| - .col-lg-4 - %h4.prepend-top-0 - Web IDE (Beta) - %p Enable the new web IDE on this device to make it possible to open and edit multiple files with a single commit - .col-lg-8.multi-file-editor-options - = label_tag do - .preview.append-bottom-10= image_tag "multi-editor-off.png" - = f.radio_button :multi_file, "off", checked: true - Off - = label_tag do - .preview.append-bottom-10= image_tag "multi-editor-on.png" - = f.radio_button :multi_file, "on", checked: false - On - - .col-sm-12 - %hr - .col-lg-4.application-theme %h4.prepend-top-0 GitLab navigation theme diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml index 2f56630c22e..61ae0ebbce6 100644 --- a/app/views/projects/new.html.haml +++ b/app/views/projects/new.html.haml @@ -4,8 +4,6 @@ - page_title 'New Project' - header_title "Projects", dashboard_projects_path - visibility_level = params.dig(:project, :visibility_level) || default_project_visibility -- content_for :page_specific_javascripts do - = webpack_bundle_tag 'project_new' .project-edit-container .project-edit-errors diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml index 8442d7ff4a2..7704c88905b 100644 --- a/app/views/shared/issuable/_filter.html.haml +++ b/app/views/shared/issuable/_filter.html.haml @@ -22,7 +22,7 @@ = render "shared/issuable/milestone_dropdown", selected: finder.milestones.try(:first), name: :milestone_title, show_any: true, show_upcoming: true, show_started: true .filter-item.inline.labels-filter - = render "shared/issuable/label_dropdown", selected: finder.labels.select(:title).uniq, use_id: false, selected_toggle: params[:label_name], data_options: { field_name: "label_name[]" } + = render "shared/issuable/label_dropdown", selected: selected_labels, use_id: false, selected_toggle: params[:label_name], data_options: { field_name: "label_name[]" } - if issuable_filter_present? .filter-item.inline.reset-filters diff --git a/changelogs/unreleased/issue_37143_2.yml b/changelogs/unreleased/issue_37143_2.yml new file mode 100644 index 00000000000..38125f666b2 --- /dev/null +++ b/changelogs/unreleased/issue_37143_2.yml @@ -0,0 +1,5 @@ +--- +title: Remove unecessary query from labels filter +merge_request: +author: +type: performance diff --git a/config/webpack.config.js b/config/webpack.config.js index 95fa79990e2..23784dd2a29 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -66,7 +66,6 @@ var config = { pipelines_times: './pipelines/pipelines_times.js', profile: './profile/profile_bundle.js', project_import_gl: './projects/project_import_gitlab_project.js', - project_new: './projects/project_new.js', prometheus_metrics: './prometheus_metrics', protected_branches: './protected_branches', protected_tags: './protected_tags', diff --git a/spec/features/profiles/user_visits_profile_preferences_page_spec.rb b/spec/features/profiles/user_visits_profile_preferences_page_spec.rb index 266af8f4e3d..90d6841af0e 100644 --- a/spec/features/profiles/user_visits_profile_preferences_page_spec.rb +++ b/spec/features/profiles/user_visits_profile_preferences_page_spec.rb @@ -32,18 +32,6 @@ describe 'User visits the profile preferences page' do end end - describe 'User changes their multi file editor preferences', :js do - it 'set the new_repo cookie when the option is ON' do - choose 'user_multi_file_on' - expect(get_cookie('new_repo')).not_to be_nil - end - - it 'deletes the new_repo cookie when the option is OFF' do - choose 'user_multi_file_off' - expect(get_cookie('new_repo')).to be_nil - end - end - describe 'User changes their default dashboard', :js do it 'creates a flash message' do select 'Starred Projects', from: 'user_dashboard' diff --git a/spec/helpers/issuables_helper_spec.rb b/spec/helpers/issuables_helper_spec.rb index d601cbdb39b..c8d64d64cf4 100644 --- a/spec/helpers/issuables_helper_spec.rb +++ b/spec/helpers/issuables_helper_spec.rb @@ -192,4 +192,33 @@ describe IssuablesHelper do expect(JSON.parse(helper.issuable_initial_data(issue))).to eq(expected_data) end end + + describe '#selected_labels' do + context 'if label_name param is a string' do + it 'returns a new label with title' do + allow(helper).to receive(:params) + .and_return(ActionController::Parameters.new(label_name: 'test label')) + + labels = helper.selected_labels + + expect(labels).to be_an(Array) + expect(labels.size).to eq(1) + expect(labels.first.title).to eq('test label') + end + end + + context 'if label_name param is an array' do + it 'returns a new label with title for each element' do + allow(helper).to receive(:params) + .and_return(ActionController::Parameters.new(label_name: ['test label 1', 'test label 2'])) + + labels = helper.selected_labels + + expect(labels).to be_an(Array) + expect(labels.size).to eq(2) + expect(labels.first.title).to eq('test label 1') + expect(labels.second.title).to eq('test label 2') + end + end + end end |