diff options
author | Mike Greiling <mike@pixelcog.com> | 2017-09-07 10:27:11 -0500 |
---|---|---|
committer | Mike Greiling <mike@pixelcog.com> | 2017-09-07 10:27:11 -0500 |
commit | 3e458e592b3e551691a4d301d5a1ead6db2ec62f (patch) | |
tree | c18b7e57ee10c82281b5e7ee6a8e63189eb02816 | |
parent | bc9d2eeea0a54ee6140030463d8cd1be7724cf47 (diff) | |
download | gitlab-ce-32665-refactor-project-visibility-settings.tar.gz |
make external show/hide toggle more generic32665-refactor-project-visibility-settings
-rw-r--r-- | app/assets/javascripts/projects/permissions/components/settings_panel.vue | 15 | ||||
-rw-r--r-- | app/assets/javascripts/projects/permissions/external.js | 23 |
2 files changed, 19 insertions, 19 deletions
diff --git a/app/assets/javascripts/projects/permissions/components/settings_panel.vue b/app/assets/javascripts/projects/permissions/components/settings_panel.vue index 601705f671d..326d9105666 100644 --- a/app/assets/javascripts/projects/permissions/components/settings_panel.vue +++ b/app/assets/javascripts/projects/permissions/components/settings_panel.vue @@ -3,7 +3,7 @@ import projectFeatureSetting from './project_feature_setting.vue'; import projectFeatureToggle from './project_feature_toggle.vue'; import projectSettingRow from './project_setting_row.vue'; import { visibilityOptions, visibilityLevelDescriptions } from '../constants'; -import { handleMergeRequestsToggle, handlePipelinesToggle } from '../external'; +import { toggleHiddenClassBySelector } from '../external'; export default { props: { @@ -150,14 +150,19 @@ export default { } }, + issuesAccessLevel(value, oldValue) { + if (value === 0) toggleHiddenClassBySelector('.issues-feature', true); + else if (oldValue === 0) toggleHiddenClassBySelector('.issues-feature', false); + }, + mergeRequestsAccessLevel(value, oldValue) { - if (value === 0) handleMergeRequestsToggle(false); - else if (oldValue === 0) handleMergeRequestsToggle(true); + if (value === 0) toggleHiddenClassBySelector('.merge-requests-feature', true); + else if (oldValue === 0) toggleHiddenClassBySelector('.merge-requests-feature', false); }, buildsAccessLevel(value, oldValue) { - if (value === 0) handlePipelinesToggle(false); - else if (oldValue === 0) handlePipelinesToggle(true); + if (value === 0) toggleHiddenClassBySelector('.builds-feature', true); + else if (oldValue === 0) toggleHiddenClassBySelector('.builds-feature', false); }, }, }; diff --git a/app/assets/javascripts/projects/permissions/external.js b/app/assets/javascripts/projects/permissions/external.js index 5e28cd3bf59..460af4a2111 100644 --- a/app/assets/javascripts/projects/permissions/external.js +++ b/app/assets/javascripts/projects/permissions/external.js @@ -1,23 +1,18 @@ -let mergeRequestSettings; -let pipelinesSettings; +const selectorCache = []; // workaround since we don't have a polyfill for classList.toggle 2nd parameter -function toggleHiddenClass(element, hide) { - if (hide) { +export function toggleHiddenClass(element, hidden) { + if (hidden) { element.classList.add('hidden'); } else { element.classList.remove('hidden'); } } -// hide external merge request-specific settings when merge request feature is disabled -export function handleMergeRequestsToggle(enabled) { - if (!mergeRequestSettings) mergeRequestSettings = document.querySelectorAll('.merge-requests-feature'); - mergeRequestSettings.forEach(elm => toggleHiddenClass(elm, !enabled)); -} - -// hide external pipelines-specific settings when pipelines feature is disabled -export function handlePipelinesToggle(enabled) { - if (!pipelinesSettings) pipelinesSettings = document.querySelectorAll('.builds-feature'); - pipelinesSettings.forEach(elm => toggleHiddenClass(elm, !enabled)); +// hide external feature-specific settings when a given feature is disabled +export function toggleHiddenClassBySelector(selector, hidden) { + if (!selectorCache[selector]) { + selectorCache[selector] = document.querySelectorAll(selector); + } + selectorCache[selector].forEach(elm => toggleHiddenClass(elm, hidden)); } |