From 3c0975641762ec42132619892f4455b6492387db Mon Sep 17 00:00:00 2001 From: Benjamin Neff Date: Sun, 26 Apr 2015 02:25:49 +0200 Subject: [PATCH] refactoring javascript and controller - move to contacts.js - use json - move to aspects_controller - add route - rewrite test - fix css in chrome --- app/assets/javascripts/app/pages/contacts.js | 14 ++++++++++++++ app/assets/javascripts/aspects-sorting.js | 17 ----------------- app/assets/javascripts/main.js | 1 - app/assets/stylesheets/contacts.scss | 1 + app/controllers/aspects_controller.rb | 7 +++++++ app/controllers/users_controller.rb | 4 +--- app/models/user.rb | 8 -------- config/routes.rb | 1 + spec/controllers/aspects_controller_spec.rb | 13 +++++++++++++ spec/controllers/users_controller_spec.rb | 17 ----------------- 10 files changed, 37 insertions(+), 46 deletions(-) delete mode 100644 app/assets/javascripts/aspects-sorting.js diff --git a/app/assets/javascripts/app/pages/contacts.js b/app/assets/javascripts/app/pages/contacts.js index 4ae44878b..9753825b6 100644 --- a/app/assets/javascripts/app/pages/contacts.js +++ b/app/assets/javascripts/app/pages/contacts.js @@ -22,6 +22,8 @@ app.pages.Contacts = Backbone.View.extend({ this.aspectCreateView = new app.views.AspectCreate({ el: $("#newAspectContainer") }); this.aspectCreateView.render(); + + this.setupAspectSorting(); }, toggleChatPrivilege: function() { @@ -73,6 +75,18 @@ app.pages.Contacts = Backbone.View.extend({ searchContactList: function(e) { this.stream.search($(e.target).val()); + }, + + setupAspectSorting: function() { + $("#aspect_nav .nav").sortable({ + items: "li.aspect[data-aspect-id]", + update: function() { + var data = JSON.stringify({ ordered_aspect_ids: $(this).sortable("toArray", { attribute: "data-aspect-id" }) }); + $.ajax("/aspects/order", { type: "put", dataType: "text", contentType: "application/json", data: data }); + }, + revert: true, + helper: "clone" + }); } }); // @license-end diff --git a/app/assets/javascripts/aspects-sorting.js b/app/assets/javascripts/aspects-sorting.js deleted file mode 100644 index c6422f5a6..000000000 --- a/app/assets/javascripts/aspects-sorting.js +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright (c) 2010-2011, Diaspora Inc. This file is - * licensed under the Affero General Public License version 3 or later. See - * the COPYRIGHT file. - */ - -$(document).ready(function() { - $('#aspect_nav .nav').sortable({ - items: "li.aspect[data-aspect-id]", - update: function(event, ui) { - var order = $(this).sortable("toArray", {attribute: "data-aspect-id"}), - obj = { 'aspect_order': order }; - $.ajax('/user', { type: 'put', dataType: 'text', data: obj }); - }, - revert: true, - helper: 'clone' - }); -}); diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index 1e5af284c..cc3a4f440 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -43,7 +43,6 @@ //= require_tree ./widgets //= require view //= require aspects-dropdown -//= require aspects-sorting //= require mentions //= require bootstrap-tooltip //= require bootstrap-popover diff --git a/app/assets/stylesheets/contacts.scss b/app/assets/stylesheets/contacts.scss index d43bd6eb7..9a356689d 100644 --- a/app/assets/stylesheets/contacts.scss +++ b/app/assets/stylesheets/contacts.scss @@ -64,6 +64,7 @@ #aspect_nav { li.aspect > a { padding-left: 30px; } li.new_aspect > a { padding-left: 30px; } + li.aspect.ui-sortable-handle.ui-sortable-helper { background: #FFF; } } #no_contacts { diff --git a/app/controllers/aspects_controller.rb b/app/controllers/aspects_controller.rb index 77e8bfc4a..5c6f5de79 100644 --- a/app/controllers/aspects_controller.rb +++ b/app/controllers/aspects_controller.rb @@ -64,6 +64,13 @@ class AspectsController < ApplicationController render :json => { :id => @aspect.id, :name => @aspect.name } end + def update_order + params[:ordered_aspect_ids].each_with_index do |id, i| + current_user.aspects.find(id).update_attributes(order_id: i) + end + render nothing: true + end + def toggle_chat_privilege @aspect = current_user.aspects.where(:id => params[:aspect_id]).first diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index aed49c31a..00932312a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -20,9 +20,7 @@ class UsersController < ApplicationController password_changed = false @user = current_user - if aspect_order = params[:aspect_order] - @user.reorder_aspects(aspect_order) - elsif u = user_params + if u = user_params # change email notifications if u[:email_preferences] diff --git a/app/models/user.rb b/app/models/user.rb index f9c83c4ff..b318465a2 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -486,14 +486,6 @@ class User < ActiveRecord::Base end end - def reorder_aspects(aspect_order) - i = 0 - aspect_order.each do |id| - self.aspects.find(id).update_attributes({ :order_id => i }) - i += 1 - end - end - # Generate public/private keys for User and associated Person def generate_keys key_size = (Rails.env == 'test' ? 512 : 4096) diff --git a/config/routes.rb b/config/routes.rb index c7f924bae..140ae49af 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -63,6 +63,7 @@ Diaspora::Application.routes.draw do get "commented" => "streams#commented", :as => "commented_stream" get "aspects" => "streams#aspects", :as => "aspects_stream" + put "aspects/order" => "aspects#update_order" resources :aspects do put :toggle_contact_visibility put :toggle_chat_privilege diff --git a/spec/controllers/aspects_controller_spec.rb b/spec/controllers/aspects_controller_spec.rb index 65d413fde..779e510de 100644 --- a/spec/controllers/aspects_controller_spec.rb +++ b/spec/controllers/aspects_controller_spec.rb @@ -96,6 +96,19 @@ describe AspectsController, :type => :controller do end end + describe "update_order" do + it "updates the aspect order" do + @alices_aspect_1.update_attributes(order_id: 10) + @alices_aspect_2.update_attributes(order_id: 20) + ordered_aspect_ids = [@alices_aspect_2.id, @alices_aspect_1.id] + + put(:update_order, ordered_aspect_ids: ordered_aspect_ids) + + expect(Aspect.find(@alices_aspect_1.id).order_id).to eq(1) + expect(Aspect.find(@alices_aspect_2.id).order_id).to eq(0) + end + end + describe "#destroy" do before do @alices_aspect_1 = alice.aspects.create(name: "Contacts") diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index 9d1d6c2bc..40006a3af 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -121,23 +121,6 @@ describe UsersController, :type => :controller do expect(response.status).to eq(204) end - describe 'aspect_order' do - it 'updates the aspect order' do - aspect_order = [] - @user.aspects.each do |aspect| - aspect.update_attributes({ :order_id => nil }) - aspect_order.push(aspect.id) - end - - put(:update, :id => @user.id, :aspect_order => aspect_order) - - @user.reload - @user.aspects.each do |aspect| - expect(aspect.order_id).not_to eq(nil) - end - end - end - describe 'password updates' do let(:password_params) do {:current_password => 'bluepin7',