- breadcrumb_title s_("Profiles|Edit Profile") - page_title s_("Profiles|Edit Profile") - @content_class = "limit-container-width" unless fluid_layout - gravatar_link = link_to Gitlab.config.gravatar.host, 'https://' + Gitlab.config.gravatar.host - availability = availability_values - custom_emoji = @user.status&.customized? = gitlab_ui_form_for @user, url: profile_path, method: :put, html: { multipart: true, class: 'edit-user js-edit-user gl-mt-3 js-quick-submit gl-show-field-errors js-password-prompt-form', remote: true }, authenticity_token: true do |f| .row.js-search-settings-section .col-lg-4.profile-settings-sidebar %h4.gl-mt-0 = s_("Profiles|Public avatar") %p - if @user.avatar? - if gravatar_enabled? = s_("Profiles|You can change your avatar here or remove the current avatar to revert to %{gravatar_link}").html_safe % { gravatar_link: gravatar_link } - else = s_("Profiles|You can change your avatar here") - else - if gravatar_enabled? = s_("Profiles|You can upload your avatar here or change it at %{gravatar_link}").html_safe % { gravatar_link: gravatar_link } - else = s_("Profiles|You can upload your avatar here") - if current_appearance&.profile_image_guidelines? .md = brand_profile_image_guidelines .col-lg-8 .avatar-image = link_to avatar_icon_for_user(@user, 400), target: '_blank', rel: 'noopener noreferrer' do = image_tag avatar_icon_for_user(@user, 96), alt: '', class: 'avatar s96' %h5.gl-mt-0= s_("Profiles|Upload new avatar") .gl-my-3 %button.gl-button.btn.btn-default.js-choose-user-avatar-button{ type: 'button' }= s_("Profiles|Choose file...") %span.avatar-file-name.gl-ml-3.js-avatar-filename= s_("Profiles|No file chosen.") = f.file_field :avatar, class: 'js-user-avatar-input hidden', accept: 'image/*' .gl-text-gray-500= s_("Profiles|The maximum file size allowed is 200KB.") - if @user.avatar? = link_to s_("Profiles|Remove avatar"), profile_avatar_path, data: { confirm: s_("Profiles|Avatar will be removed. Are you sure?") }, method: :delete, class: 'gl-button btn btn-danger-secondary btn-sm gl-mt-5' .col-lg-12 %hr .row.js-search-settings-section .col-lg-4.profile-settings-sidebar %h4.gl-mt-0= s_("Profiles|Current status") %p= s_("Profiles|This emoji and message will appear on your profile and throughout the interface.") .col-lg-8 = f.fields_for :status, @user.status do |status_form| - emoji_button = render Pajamas::ButtonComponent.new(button_options: { title: s_("Profiles|Add status emoji"), class: 'js-toggle-emoji-menu emoji-menu-toggle-button has-tooltip' } ) do - if custom_emoji = emoji_icon(@user.status.emoji, class: 'gl-mr-0!') %span#js-no-emoji-placeholder.no-emoji-placeholder{ class: ('hidden' if custom_emoji) } = sprite_icon('slight-smile', css_class: 'award-control-icon-neutral') = sprite_icon('smiley', css_class: 'award-control-icon-positive') = sprite_icon('smile', css_class: 'award-control-icon-super-positive') - reset_message_button = render Pajamas::ButtonComponent.new(icon: 'close', button_options: { id: 'js-clear-user-status-button', class: 'has-tooltip', title: s_("Profiles|Clear status") } ) = status_form.hidden_field :emoji, id: 'js-status-emoji-field' .form-group.gl-form-group = status_form.label :message, s_("Profiles|Your status") .input-group{ role: 'group' } .input-group-prepend = emoji_button = status_form.text_field :message, id: 'js-status-message-field', class: 'form-control gl-form-input input-lg', placeholder: s_("Profiles|What's your status?") .input-group-append = reset_message_button .form-group.gl-form-group = status_form.gitlab_ui_checkbox_component :availability, s_("Profiles|Busy"), help_text: s_('Profiles|An indicator appears next to your name and avatar.'), checkbox_options: { data: { testid: "user-availability-checkbox" } }, checked_value: availability["busy"], unchecked_value: availability["not_set"] .col-lg-12 %hr .row.user-time-preferences.js-search-settings-section .col-lg-4.profile-settings-sidebar %h4.gl-mt-0= s_("Profiles|Time settings") %p= s_("Profiles|Set your local time zone.") .col-lg-8 %h5= _("Time zone") = dropdown_tag(_("Select a time zone"), options: { toggle_class: 'gl-button btn js-timezone-dropdown input-lg gl-w-full!', title: _("Select a time zone"), filter: true, placeholder: s_("OfSearchInADropdown|Filter"), data: { data: timezone_data } } ) %input.hidden{ :type => 'hidden', :id => 'user_timezone', :name => 'user[timezone]', value: @user.timezone } .col-lg-12 %hr .row.js-search-settings-section .col-lg-4.profile-settings-sidebar %h4.gl-mt-0 = s_("Profiles|Main settings") %p = s_("Profiles|This information will appear on your profile.") - if current_user.ldap_user? = s_("Profiles|Some options are unavailable for LDAP accounts") .col-lg-8 .row .form-group.gl-form-group.col-md-9.rspec-full-name = render 'profiles/name', form: f, user: @user .form-group.gl-form-group.col-md-3 = f.label :id, s_('Profiles|User ID') = f.text_field :id, class: 'gl-form-input form-control', readonly: true .form-group.gl-form-group = f.label :pronouns, s_('Profiles|Pronouns') = f.text_field :pronouns, class: 'gl-form-input form-control gl-md-form-input-lg' %small.form-text.text-gl-muted = s_("Profiles|Enter your pronouns to let people know how to refer to you.") .form-group.gl-form-group = f.label :pronunciation, s_('Profiles|Pronunciation') = f.text_field :pronunciation, class: 'gl-form-input form-control gl-md-form-input-lg' %small.form-text.text-gl-muted = s_("Profiles|Enter how your name is pronounced to help people address you correctly.") = render_if_exists 'profiles/extra_settings', form: f = render_if_exists 'profiles/email_settings', form: f .form-group.gl-form-group = f.label :skype = f.text_field :skype, class: 'gl-form-input form-control gl-md-form-input-lg', placeholder: s_("Profiles|username") .form-group.gl-form-group = f.label :linkedin = f.text_field :linkedin, class: 'gl-form-input form-control gl-md-form-input-lg' %small.form-text.text-gl-muted = s_("Profiles|Your LinkedIn profile name from linkedin.com/in/profilename") .form-group.gl-form-group = f.label :twitter = f.text_field :twitter, class: 'gl-form-input form-control gl-md-form-input-lg', placeholder: s_("Profiles|@username") .form-group.gl-form-group = f.label :website_url, s_('Profiles|Website url') = f.text_field :website_url, class: 'gl-form-input form-control gl-md-form-input-lg', placeholder: s_("Profiles|https://website.com") .form-group.gl-form-group = f.label :location, s_('Profiles|Location') - if @user.read_only_attribute?(:location) = f.text_field :location, class: 'gl-form-input form-control gl-md-form-input-lg', readonly: true %small.form-text.text-gl-muted = s_("Profiles|Your location was automatically set based on your %{provider_label} account") % { provider_label: attribute_provider_label(:location) } - else = f.text_field :location, class: 'gl-form-input form-control gl-md-form-input-lg', placeholder: s_("Profiles|City, country") .form-group.gl-form-group = f.label :job_title, s_('Profiles|Job title') = f.text_field :job_title, class: 'gl-form-input form-control gl-md-form-input-lg' .form-group.gl-form-group = f.label :organization, s_('Profiles|Organization') = f.text_field :organization, class: 'gl-form-input form-control gl-md-form-input-lg' %small.form-text.text-gl-muted = s_("Profiles|Who you represent or work for.") .form-group.gl-form-group = f.label :bio, s_('Profiles|Bio') = f.text_area :bio, class: 'gl-form-input gl-form-textarea form-control', rows: 4, maxlength: 250 %small.form-text.text-gl-muted = s_("Profiles|Tell us about yourself in fewer than 250 characters.") %hr %fieldset.form-group.gl-form-group %legend.col-form-label.col-form-label = _('Private profile') - private_profile_label = s_("Profiles|Don't display activity-related personal information on your profile.") - private_profile_help_link = link_to sprite_icon('question-o'), help_page_path('user/profile/index.md', anchor: 'make-your-user-profile-page-private') = f.gitlab_ui_checkbox_component :private_profile, '%{private_profile_label} %{private_profile_help_link}'.html_safe % { private_profile_label: private_profile_label, private_profile_help_link: private_profile_help_link.html_safe } %fieldset.form-group.gl-form-group %legend.col-form-label.col-form-label = s_("Profiles|Private contributions") = f.gitlab_ui_checkbox_component :include_private_contributions, s_('Profiles|Include private contributions on my profile'), help_text: s_("Profiles|Choose to show contributions of private projects on your public profile without any project, repository or organization information.") %hr = f.submit s_("Profiles|Update profile settings"), class: 'gl-button btn btn-confirm gl-mr-3 js-password-prompt-btn' = link_to _("Cancel"), user_path(current_user), class: 'gl-button btn btn-default btn-cancel' #password-prompt-modal .modal.modal-profile-crop{ data: { cropper_css_path: ActionController::Base.helpers.stylesheet_path('lazy_bundles/cropper.css') } } .modal-dialog .modal-content .modal-header %h4.modal-title = s_("Profiles|Position and size your new avatar") %button.close{ type: "button", "data-dismiss": "modal", "aria-label" => _("Close") } %span{ "aria-hidden": "true" } × .modal-body .profile-crop-image-container %img.modal-profile-crop-image{ alt: s_("Profiles|Avatar cropper") } .crop-controls .btn-group %button.btn.gl-button.btn-default{ data: { method: 'zoom', option: '-0.1' } } %span = sprite_icon('search-minus') %button.btn.gl-button.btn-default{ data: { method: 'zoom', option: '0.1' } } %span = sprite_icon('search-plus') .modal-footer %button.btn.gl-button.btn-confirm.js-upload-user-avatar{ type: 'button' } = s_("Profiles|Set new profile picture")