From 2c3637e9b4d1ccadf6a4ec08a082d72a69743482 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Fri, 11 May 2012 15:27:16 +0800 Subject: [PATCH] very important update for widgets management.. --- app/assets/javascripts/orbitdesktop.js | 108 ++++++++++++++++-- app/assets/javascripts/orbitdesktopAPI.js | 7 ++ .../desktop_appstore_controller.rb | 85 +++++++++++++- app/models/desktop.rb | 1 + app/models/desktop_widget.rb | 6 +- app/models/user/user.rb | 2 +- app/views/desktop/appstore/widgets.html.erb | 4 +- config/routes.rb | 2 + 8 files changed, 200 insertions(+), 15 deletions(-) diff --git a/app/assets/javascripts/orbitdesktop.js b/app/assets/javascripts/orbitdesktop.js index fa20b1cc..d83cfa06 100755 --- a/app/assets/javascripts/orbitdesktop.js +++ b/app/assets/javascripts/orbitdesktop.js @@ -55,7 +55,7 @@ var orbitDesktop = function(dom){ $(document).ready(function(){o.loadWallpaper(customwallpaper);o.bindDesktopEvents();o.loadIconCache();o.initializeDesktop();}); }) } - }; + } this.changeTheme = function(theme){ // this function is used for changing theme o.theme = theme; $.getJSON("/"+o.themefolder+"/"+theme+"/settings/"+theme+".json",function(ts){ @@ -1098,24 +1098,116 @@ var orbitDesktop = function(dom){ } var widgets = function(){ var bindHandlers = function(){ - + $("#widget_list a").click(function(){ + var sectionid = $(this).attr("for"); + var widgetid = $(this).parent().parent().attr("for"); + switch($(this).attr("href")){ + case "addthis": + $this = $(this); + o.confirm({ + message: "Are you sure you want to add this widget?", + buttons: ['Yes','No'], + highlighted: 1 + },function(reply){ + if(reply){ + $.post("desktop_appstore/widgets_settings",{section:sectionid, widget:widgetid, what:"add"},function(result){ + if(result[0].success){ + $this.attr("href","removethis"); + $targetDom = $this.parent().parent().find("div.status"); + $parentDom = $this.parent(); + if($targetDom.find("a").length == 0) + $targetDom.html("Status : Installed on"); + $targetDom.append(" ").append($this); + if($parentDom.find("a").length == 0) + $parentDom.empty(); + o.desktopData["home"]=""; + o.notify("Widget added.","success",2); + }else{ + o.notify(result[0].error,"imp",2); + } + }) + } + }) + break; + case "removethis": + $this = $(this); + o.confirm({ + message: "Are you sure you want to remove this widget?", + buttons: ['Yes','No'], + highlighted: 2 + },function(reply){ + if(reply){ + $.post("desktop_appstore/widgets_settings",{section:sectionid, widget:widgetid, what:"remove"},function(result){ + if(result[0].success){ + $this.attr("href","addthis"); + $targetDom = $this.parent().parent().find("div.not_status"); + $parentDom = $this.parent(); + if($targetDom.html()=="") + $targetDom.html("Install on"); + $targetDom.append(" ").append($this); + if($parentDom.find("a").length == 0) + $parentDom.html("Status : Downloaded"); + o.desktopData["home"]=""; + o.notify("Widget removed.","success",2); + } + }) + } + }) + break; + } + return false; + }) } $("div#apps_store div#panel_r").load("/desktop_appstore/widgets",function(){ $.getJSON("/desktop_appstore/getuserwidgets",function(userwidgets){ - var column = $('
'), + var column = $('
'), counter = 1, li; $.each(userwidgets,function(i,widge){ - li = $('
  • '+widge.name+'
    '+widge.shape+'
  • '); + if(!widge.status)widge.status = "Downloaded"; + var brick = widge.shape.split(' '), + bw = parseInt(brick[0].substr(1)), + bh = parseInt(brick[1].substr(1)), + shp = bw+" X "+bh; + li = $('
  • '+widge.name+'
    Author : '+widge.author+'
    Shape : '+shp+'
    Status : '+widge.status+'
  • '); + var cur_section_names = new Array(); + var section_names = new Array(); + var section_links = new Array(); + if(widge.section){ + var s_name_list = ""; + $.each(widge.section,function(x,sec){ + $.each(o.sectionList,function(j,s){ + if(s._id==sec){ + cur_section_names.push(s.name); + s_name_list+= ""+s.name +" "; + } + }) + }) + var section_names = o.getArrayfromJson(o.sectionList,"name"); + var section_links = o.getArrayfromJson(o.sectionList,"_id"); + var s_name_list_not = ""; + $.each(section_names,function(j,sec_name){ + if($.inArray(sec_name,cur_section_names)==-1){ + var sec_link = section_links[j]; + s_name_list_not+= ""+sec_name+" "; + } + }) + li.find("div.status").html("Status : Installed on "+s_name_list); + if(s_name_list_not) + li.find("div.not_status").html("Install on "+s_name_list_not); + }else{ + li.find("div.not_status").html("Install on "+o.sectionList[0].name+", "+o.sectionList[1].name+", "+o.sectionList[2].name+", "+o.sectionList[3].name); + } + //console.log(section_names); column.find("ul").append(li); - if(counter%5==0){ - $("#journal_p div#paper_list div.overview").append(column); - column = $('
    '); + if(counter%4==0){ + $("#apps_store div#widget_list").append(column); + column = $('
    '); } counter++; }) - //alert(column); $("#apps_store div#widget_list").append(column); + bindHandlers(); }) }) } diff --git a/app/assets/javascripts/orbitdesktopAPI.js b/app/assets/javascripts/orbitdesktopAPI.js index 51eed919..de093973 100644 --- a/app/assets/javascripts/orbitdesktopAPI.js +++ b/app/assets/javascripts/orbitdesktopAPI.js @@ -79,6 +79,13 @@ var orbitDesktopAPI = function(){ }); $confirm.stop(1,1).fadeIn(); }; + this.getArrayfromJson = function(tjson,key){ + var tempArray = new Array; + $.each(tjson,function(i,val){ + tempArray.push(val[key]); + }) + return tempArray; + } }; orbitDesktopAPI.prototype.notifyImgPath = "temp"; orbitDesktopAPI.prototype.wallpaperPath = "temp"; diff --git a/app/controllers/desktop_appstore_controller.rb b/app/controllers/desktop_appstore_controller.rb index 82e27412..d05160c2 100644 --- a/app/controllers/desktop_appstore_controller.rb +++ b/app/controllers/desktop_appstore_controller.rb @@ -9,8 +9,89 @@ class DesktopAppstoreController< ApplicationController end def getuserwidgets - @widgets = current_user.desktop_widgets + @widgets = current_user.desktop.desktop_widgets + @groups = Array.new + @sections = current_user.desktop.sections + + @sections.each do |section| + @groups << section.groups + end + + @widgets.each do |widget| + @count = 0; + @sectionids = Array.new + @groups.each do |group| + group.each do |grp| + @widge = 0 + @gid = widget.id.to_s + @widge = grp.tiles.where(:data_content.all => [@gid]).count + @count = @count + @widge + if @widge > 0 + @sectionids << grp.section_id + end + end + end + if @count > 0 + widget.status = "Installed" + widget.section = @sectionids + else + widget.status = "Downloaded" + end + end render :json=>@widgets.to_json end -end \ No newline at end of file + def widgets_settings + what = params["what"] + @widgetid = params["widget"] + @sectionid = params["section"] + @msg = Array.new + case what + when "remove" + @section = Section.find(@sectionid) + @groups = @section.groups + @groups.each do |group| + @tile = group.tiles.where(:data_content.all => [@widgetid]) + if @tile.count > 0 + @thistile = @tile + end + end + @t = Tile.find(@thistile.first.id) + @t.delete + @msg << {"success"=>true} + when "add" + @widget = current_user.desktop.desktop_widgets.find(@widgetid) + @section = Section.find(@sectionid) + @groups = @section.groups + @totalwidgets = 0 + @groups.each do |group| + @tile = group.tiles.where(:data_content.all => [@widgetid]).count + if @tile > 0 + @msg << {"success"=>false,"error"=>"Duplicate widget"} + else + no_of_widgets = group.tiles.where(:data_category.all => ["widget"]).count + @totalwidgets = @totalwidgets + no_of_widgets + end + end + if @totalwidgets >= 12 + @msg << {"success"=>false,"error"=>"Section full"} + else + wshape = @widget.shape + wdata_content = @widgetid + wdata_category = "widget" + wname = @widget.name + if @groups.first.tiles.where(:data_category.all => ["widget"]).count >= 6 + groupid = @groups.last.id + else + groupid = @groups.first.id + end + Tile.create(data_category: wdata_category,data_content: wdata_content, group_id: groupid, position: 10, title: wname, shape: wshape) + @msg << {"success"=>true} + end + end + + render :json=>@msg.to_json + end + +end + diff --git a/app/models/desktop.rb b/app/models/desktop.rb index e2918adc..e8c1e9c4 100644 --- a/app/models/desktop.rb +++ b/app/models/desktop.rb @@ -9,6 +9,7 @@ class Desktop belongs_to :user has_many :sections, :autosave => true, :dependent => :destroy + has_many :desktop_widgets, :autosave => true, :dependent => :destroy before_create :initialize_section diff --git a/app/models/desktop_widget.rb b/app/models/desktop_widget.rb index b0c0699e..eb0446de 100644 --- a/app/models/desktop_widget.rb +++ b/app/models/desktop_widget.rb @@ -5,7 +5,9 @@ class DesktopWidget field :name field :author field :shape - field :user_id + field :desktop_id + field :status + field :section - belongs_to :user + belongs_to :desktop end \ No newline at end of file diff --git a/app/models/user/user.rb b/app/models/user/user.rb index aca7959b..c33d64fc 100644 --- a/app/models/user/user.rb +++ b/app/models/user/user.rb @@ -19,7 +19,7 @@ class User has_one :desktop, :autosave => true, :dependent => :destroy has_many :other_accounts, :autosave => true, :dependent => :destroy has_many :journals, :autosave => true, :dependent => :destroy - has_many :desktop_widgets, :autosave => true, :dependent => :destroy + belongs_to :role has_and_belongs_to_many :sub_roles accepts_nested_attributes_for :attribute_values, :allow_destroy => true diff --git a/app/views/desktop/appstore/widgets.html.erb b/app/views/desktop/appstore/widgets.html.erb index 5cbb049b..4fd150c4 100644 --- a/app/views/desktop/appstore/widgets.html.erb +++ b/app/views/desktop/appstore/widgets.html.erb @@ -1,8 +1,8 @@ +
    Your Widgets
    -
    -
    Your Widgets
    +
    diff --git a/config/routes.rb b/config/routes.rb index 08320cd2..10a73b21 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -130,6 +130,8 @@ Orbit::Application.routes.draw do match '/desktop_appstore/appstore'=>'desktop_appstore#appstore' match '/desktop_appstore/widgets'=>'desktop_appstore#widgets' match '/desktop_appstore/getuserwidgets'=>'desktop_appstore#getuserwidgets' + match '/desktop_appstore/widgets_settings'=>'desktop_appstore#widgets_settings' + match '/desktop/temp_func/'=>'desktop#temp_func'