Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/behaviors/toggler_behavior.coffee8
-rw-r--r--app/assets/javascripts/extensions/jquery.js.coffee9
-rw-r--r--app/assets/javascripts/main.js.coffee2
-rw-r--r--app/assets/javascripts/profile.js.coffee6
-rw-r--r--app/controllers/notifications_controller.rb4
-rw-r--r--app/views/notifications/show.html.haml52
-rw-r--r--app/views/notifications/update.js.haml7
-rw-r--r--spec/requests/notifications_spec.rb11
8 files changed, 80 insertions, 19 deletions
diff --git a/app/assets/javascripts/behaviors/toggler_behavior.coffee b/app/assets/javascripts/behaviors/toggler_behavior.coffee
index 3fefbf8e121..d2181e7b759 100644
--- a/app/assets/javascripts/behaviors/toggler_behavior.coffee
+++ b/app/assets/javascripts/behaviors/toggler_behavior.coffee
@@ -3,3 +3,11 @@ $ ->
container = $(@).closest(".js-toggler-container")
container.toggleClass("on")
+
+ $("body").on "click", ".js-toggle-visibility-link", (e) ->
+ $(@).find('i').
+ toggleClass('icon-chevron-down').
+ toggleClass('icon-chevron-up')
+ container = $(".js-toggle-visibility-container")
+ container.toggleClass("hide")
+ e.preventDefault()
diff --git a/app/assets/javascripts/extensions/jquery.js.coffee b/app/assets/javascripts/extensions/jquery.js.coffee
new file mode 100644
index 00000000000..8a997fe318e
--- /dev/null
+++ b/app/assets/javascripts/extensions/jquery.js.coffee
@@ -0,0 +1,9 @@
+$.fn.showAndHide = ->
+ $(@).show().
+ delay(3000).
+ fadeOut()
+
+$.fn.enableButton = ->
+ $(@).removeAttr('disabled').
+ removeClass('disabled')
+
diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee
index b61df846c7a..39ec86e623f 100644
--- a/app/assets/javascripts/main.js.coffee
+++ b/app/assets/javascripts/main.js.coffee
@@ -7,6 +7,8 @@ window.slugify = (text) ->
window.ajaxGet = (url) ->
$.ajax({type: "GET", url: url, dataType: "script"})
+window.showAndHide = (selector) ->
+
window.errorMessage = (message) ->
ehtml = $("<p>")
ehtml.addClass("error_message")
diff --git a/app/assets/javascripts/profile.js.coffee b/app/assets/javascripts/profile.js.coffee
index 42207a390b3..213133bc965 100644
--- a/app/assets/javascripts/profile.js.coffee
+++ b/app/assets/javascripts/profile.js.coffee
@@ -15,6 +15,8 @@ $ ->
$(this).find('.update-failed').hide()
$('.update-username form').on 'ajax:complete', ->
- $(this).find('.save-btn').removeAttr('disabled')
- $(this).find('.save-btn').removeClass('disabled')
+ $(this).find('.btn-save').enableButton()
$(this).find('.loading-gif').hide()
+
+ $('.update-notifications').on 'ajax:complete', ->
+ $(this).find('.btn-save').enableButton()
diff --git a/app/controllers/notifications_controller.rb b/app/controllers/notifications_controller.rb
index d2edb6a69e8..e44e0aa845e 100644
--- a/app/controllers/notifications_controller.rb
+++ b/app/controllers/notifications_controller.rb
@@ -3,9 +3,11 @@ class NotificationsController < ApplicationController
def show
@notification = current_user.notification
+ @projects = current_user.authorized_projects
end
def update
- @notification = current_user.notification
+ current_user.notification_level = params[:notification_level]
+ @saved = current_user.save
end
end
diff --git a/app/views/notifications/show.html.haml b/app/views/notifications/show.html.haml
index 7ceb1926f1d..d8ab93b8d1f 100644
--- a/app/views/notifications/show.html.haml
+++ b/app/views/notifications/show.html.haml
@@ -1,15 +1,25 @@
%h3.page_title Setup your notification level
-%hr
+%br
-= form_tag profile_notifications_path do
+%p.light
+ %strong Disabled
+ &ndash; You will not get any notifications via email
+%p.light
+ %strong Participating
+ &ndash; You will receive only notifications from related resources(ex. from assigned issue or your commit)
+%p.light
+ %strong Watch
+ &ndash; You will receive all notifications from projects in which you participate
+%hr
- %ul.unstyled
+= form_tag profile_notifications_path, method: :put, remote: true, class: 'update-notifications' do
+ %ul.well-list
%li
.row
- .span3
+ .span4
%h5 Global
- .span9
+ .span7
= label_tag do
= radio_button_tag :notification_level, Notification::N_DISABLED, @notification.disabled?
%span Disabled
@@ -22,5 +32,37 @@
= radio_button_tag :notification_level, Notification::N_WATCH, @notification.watch?
%span Watch
+
+ = link_to '#', class: 'js-toggle-visibility-link' do
+ %h6.btn.btn-tiny
+ %i.icon-chevron-down
+ %span Per project notifications settings
+ %ul.well-list.js-toggle-visibility-container.hide
+ - @projects.each do |project|
+ %li
+ .row
+ .span4
+ %span
+ = project.name_with_namespace
+ .span7
+ = label_tag do
+ = radio_button_tag :"notification_level[#{project.id}]", Notification::N_DISABLED, @notification.disabled?, disabled: true
+ %span Disabled
+
+ = label_tag do
+ = radio_button_tag :"notification_level[#{project.id}]", Notification::N_PARTICIPATING, @notification.participating?, disabled: true
+ %span Participating
+
+ = label_tag do
+ = radio_button_tag :"notification_level[#{project.id}]", Notification::N_WATCH, @notification.watch?, disabled: true
+ %span Watch
+
+
.form-actions
= submit_tag 'Save', class: 'btn btn-save'
+ %span.update-success.cgreen.hide
+ %i.icon-ok
+ Saved
+ %span.update-failed.cred.hide
+ %i.icon-remove
+ Failed
diff --git a/app/views/notifications/update.js.haml b/app/views/notifications/update.js.haml
new file mode 100644
index 00000000000..4468004a5c2
--- /dev/null
+++ b/app/views/notifications/update.js.haml
@@ -0,0 +1,7 @@
+- if @saved
+ :plain
+ $('.update-notifications .update-success').showAndHide();
+- else
+ :plain
+ $('.update-notifications .update-failed').showAndHide();
+
diff --git a/spec/requests/notifications_spec.rb b/spec/requests/notifications_spec.rb
deleted file mode 100644
index 07db7c05987..00000000000
--- a/spec/requests/notifications_spec.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-require 'spec_helper'
-
-describe "Notifications" do
- describe "GET /notifications" do
- it "works! (now write some real specs)" do
- # Run the generator again with the --webrat flag if you want to use webrat methods/matchers
- get notifications_path
- response.status.should be(200)
- end
- end
-end