rhosync 2.0.8 → 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. data/CHANGELOG +9 -0
  2. data/Rakefile +1 -5
  3. data/doc/protocol.html +397 -156
  4. data/lib/rhosync/console/app/public/ThickBox.css +649 -0
  5. data/lib/rhosync/console/app/public/home.css +433 -0
  6. data/lib/rhosync/console/app/public/images/header_halo copy.jpg +0 -0
  7. data/lib/rhosync/console/app/public/images/header_halo.jpg +0 -0
  8. data/lib/rhosync/console/app/public/images/land_separator.gif +0 -0
  9. data/lib/rhosync/console/app/public/images/landing_header.jpg +0 -0
  10. data/lib/rhosync/console/app/public/images/logo_rhosync.png +0 -0
  11. data/lib/rhosync/console/app/public/images/rhomobile_rhohub_logo.png +0 -0
  12. data/lib/rhosync/console/app/public/images/tabs_separator.png +0 -0
  13. data/lib/rhosync/console/app/public/reset.css +76 -0
  14. data/lib/rhosync/console/app/public/style.css +2201 -0
  15. data/lib/rhosync/console/app/routes/auth.rb +1 -1
  16. data/lib/rhosync/console/app/routes/client.rb +1 -1
  17. data/lib/rhosync/console/app/routes/docs.rb +98 -55
  18. data/lib/rhosync/console/app/routes/home.rb +47 -8
  19. data/lib/rhosync/console/app/routes/timing.rb +26 -0
  20. data/lib/rhosync/console/app/routes/user.rb +58 -21
  21. data/lib/rhosync/console/app/views/client.erb +2 -2
  22. data/lib/rhosync/console/app/views/content.erb +14 -0
  23. data/lib/rhosync/console/app/views/docdata.erb +1 -1
  24. data/lib/rhosync/console/app/views/docs.erb +2 -2
  25. data/lib/rhosync/console/app/views/headermenu.erb +41 -0
  26. data/lib/rhosync/console/app/views/home.erb +22 -0
  27. data/lib/rhosync/console/app/views/index.erb +1 -1
  28. data/lib/rhosync/console/app/views/layout.erb +82 -7
  29. data/lib/rhosync/console/app/views/login.erb +26 -0
  30. data/lib/rhosync/console/app/views/newuser.erb +1 -1
  31. data/lib/rhosync/console/app/views/result.erb +1 -1
  32. data/lib/rhosync/console/app/views/rightboxlinks.erb +15 -0
  33. data/lib/rhosync/console/app/views/select_doc.erb +1 -3
  34. data/lib/rhosync/console/app/views/user.erb +3 -6
  35. data/lib/rhosync/console/app/views/users.erb +2 -4
  36. data/lib/rhosync/console/server.rb +6 -0
  37. data/lib/rhosync/jobs/bulk_data_job.rb +17 -4
  38. data/lib/rhosync/ping/android.rb +38 -0
  39. data/lib/rhosync/ping.rb +2 -1
  40. data/lib/rhosync/server/views/index.erb +3 -0
  41. data/lib/rhosync/server.rb +25 -6
  42. data/lib/rhosync/source_sync.rb +14 -6
  43. data/lib/rhosync/stats/middleware.rb +22 -0
  44. data/lib/rhosync/stats/record.rb +83 -0
  45. data/lib/rhosync/version.rb +1 -1
  46. data/lib/rhosync.rb +4 -2
  47. data/spec/ping/android_spec.rb +45 -0
  48. data/spec/rhosync_spec.rb +1 -0
  49. data/spec/server/server_spec.rb +8 -0
  50. data/spec/spec.opts +3 -0
  51. data/spec/spec_helper.rb +4 -3
  52. data/spec/stats/middleware_spec.rb +32 -0
  53. data/spec/stats/record_spec.rb +71 -0
  54. metadata +31 -7
  55. data/lib/rhosync/monitoring/record.rb +0 -28
  56. data/spec/monitoring/record_spec.rb +0 -21
@@ -8,7 +8,7 @@ class RhosyncConsole::Server
8
8
  session[:server] = params[:connect] == 'direct' ? nil : params[:server]
9
9
 
10
10
  #verify_presence_of :server, "Server is not provaided."
11
- verify_presence_of :login, "Login is not provaided."
11
+ verify_presence_of :login, "Login is not provided."
12
12
 
13
13
  unless session[:errors]
14
14
  session[:token] = RhosyncApi::get_token(session[:server],params[:login],params[:password])
@@ -17,7 +17,7 @@ class RhosyncConsole::Server
17
17
  handle_api_error("Can't load list of sources") do
18
18
  @sources = RhosyncApi::list_sources(session[:server],session[:token],:all)
19
19
  end
20
- erb :client
20
+ erb :client, :layout => false
21
21
  end
22
22
 
23
23
  get '/device/delete' do
@@ -1,74 +1,117 @@
1
1
  class RhosyncConsole::Server
2
- get '/docs' do
3
- @src_params = []
4
- handle_api_error("Can't load list of source attributes") do
5
- @src_params = RhosyncApi::get_source_params(
6
- session[:server],session[:token],params[:source_id])
2
+ def docs_render_page(contenturl)
3
+ @currentpage = "Console"
4
+ @initialcontent = contenturl
5
+ @pagetitle = "Rhosync Console" #H1 title
6
+ @locals = {
7
+ :div => "main_box",
8
+ :links => [
9
+ { :url => url('/homepage'), :title => 'Info' },
10
+ { :url => url('/doc/select'), :selected => true, :title => 'Server Document' },
11
+ { :url => url('/users'), :title => 'Users' }
12
+ ]
13
+ }
14
+ erb :content
15
+ end
16
+
17
+ def hash_to_params(inhash)
18
+ outstring = "?"
19
+ inhash.each do |k,v|
20
+ outstring << "#{k}=#{CGI.escape(v)}&"
7
21
  end
8
- @docs = []
9
- @docs_name = ''
10
- @back_href = ''
11
- @doc_params = doc_params
12
- handle_api_error("Can't load list of the documents") do
13
- if params[:device_id]
14
- @docs_name = "device #{params[:device_id]}"
15
- @back_href = url("device?user_id=#{CGI.escape(params[:user_id])}&device_id=#{CGI.escape(params[:device_id])}")
16
- @docs = RhosyncApi::list_client_docs(session[:server],session[:token],params[:source_id],params[:device_id])
17
- else
18
- if params[:user_id]=='*'
19
- @docs_name = "app partition"
20
- @back_href = url('/')
21
- else
22
- @docs_name = "user #{params[:user_id]} partition"
23
- @back_href = url("user?user_id=#{CGI.escape(params[:user_id])}")
24
- end
25
- @docs = RhosyncApi::list_source_docs(session[:server],
26
- session[:token],params[:source_id],params[:user_id])
27
- end
22
+ outstring
23
+ end
24
+
25
+ get '/docs' do
26
+ if params[:xhr] or request.xhr?
27
+
28
+ @src_params = []
29
+ handle_api_error("Can't load list of source attributes") do
30
+ @src_params = RhosyncApi::get_source_params(
31
+ session[:server],session[:token],params[:source_id])
32
+ end
33
+ @docs = []
34
+ @docs_name = ''
35
+ @back_href = ''
36
+ @doc_params = doc_params
37
+ handle_api_error("Can't load list of the documents") do
38
+ if params[:device_id]
39
+ @docs_name = "device #{params[:device_id]}"
40
+ @back_href = url("device?user_id=#{CGI.escape(params[:user_id])}&device_id=#{CGI.escape(params[:device_id])}")
41
+ @docs = RhosyncApi::list_client_docs(session[:server],session[:token],params[:source_id],params[:device_id])
42
+ else
43
+ if params[:user_id]=='*'
44
+ @docs_name = "app partition"
45
+ @back_href = url('/')
46
+ else
47
+ @docs_name = "user #{params[:user_id]} partition"
48
+ @back_href = url("user?user_id=#{CGI.escape(params[:user_id])}")
49
+ end
50
+ @docs = RhosyncApi::list_source_docs(session[:server],
51
+ session[:token],params[:source_id],params[:user_id])
52
+ end
53
+ end
54
+ erb :docs, :layout => false
55
+ else
56
+ docs_render_page url("/docs" + hash_to_params(params))
57
+
28
58
  end
29
- erb :docs
30
59
  end
31
60
 
32
61
  get '/doc/select' do
33
- if params[:dbkey].nil?
34
- @dbkey = ''
35
- @data = {}
62
+ if params[:xhr] or request.xhr?
63
+ if params[:dbkey].nil?
64
+ @dbkey = ''
65
+ @data = {}
66
+ else
67
+ @dbkey = params[:dbkey]
68
+ @is_string = doc_is_string
69
+ handle_api_error("Can't load document") do
70
+ @data = RhosyncApi::get_db_doc(session[:server],
71
+ session[:token],params[:dbkey],@is_string ? :string : '')
72
+ end
73
+ end
74
+ erb :select_doc, :layout => false
36
75
  else
37
- @dbkey = params[:dbkey]
38
- @is_string = doc_is_string
76
+ docs_render_page url("/doc/select" + hash_to_params(params))
77
+ end
78
+ end
79
+
80
+ get '/doc' do
81
+ if params[:xhr] or request.xhr?
82
+
83
+ @data = {}
84
+ @is_string = doc_is_string
39
85
  handle_api_error("Can't load document") do
40
86
  @data = RhosyncApi::get_db_doc(session[:server],
41
87
  session[:token],params[:dbkey],@is_string ? :string : '')
42
88
  end
43
- end
44
- erb :select_doc
45
- end
46
-
47
- get '/doc' do
48
- @data = {}
49
- @is_string = doc_is_string
50
- handle_api_error("Can't load document") do
51
- @data = RhosyncApi::get_db_doc(session[:server],
52
- session[:token],params[:dbkey],@is_string ? :string : '')
89
+ @back_params = "source_id=#{CGI.escape(params[:source_id])}&user_id=#{CGI.escape(params[:user_id])}"
90
+ @back_params += "&device_id=#{CGI.escape(params[:device_id])}" if params[:device_id]
91
+ @back_href = url("docs?#{doc_params}")
92
+ erb :doc, :layout => false
93
+ else
94
+ docs_render_page url("/doc" + hash_to_params(params))
53
95
  end
54
- @back_params = "source_id=#{CGI.escape(params[:source_id])}&user_id=#{CGI.escape(params[:user_id])}"
55
- @back_params += "&device_id=#{CGI.escape(params[:device_id])}" if params[:device_id]
56
- @back_href = url("docs?#{doc_params}")
57
- erb :doc
96
+
58
97
  end
59
98
 
60
99
  get '/doc/clear' do
61
- is_string = doc_is_string
62
- handle_api_error("Can't clear document") do
63
- RhosyncApi::set_db_doc(session[:server],session[:token],params[:dbkey],
64
- is_string ? '' : {}, is_string ? :string : '')
100
+ if params[:xhr] or request.xhr?
101
+ is_string = doc_is_string
102
+ handle_api_error("Can't clear document") do
103
+ RhosyncApi::set_db_doc(session[:server],session[:token],params[:dbkey],
104
+ is_string ? '' : {}, is_string ? :string : '')
105
+ end
106
+ @result_name = "Clear result"
107
+ @status = "Successfully cleared: [#{CGI.unescape(params[:dbkey])}]"
108
+ @back_href = params[:user_id] ?
109
+ url("doc?#{doc_params}&dbkey=#{CGI.escape(params[:dbkey])}") :
110
+ url("doc/select?dbkey=#{CGI.escape(params[:dbkey])}")
111
+ erb :result, :layout => false
112
+ else
113
+ docs_render_page url("/doc/clear" + hash_to_params(params))
65
114
  end
66
- @result_name = "Clear result"
67
- @status = "Successfully cleared: [#{CGI.unescape(params[:dbkey])}]"
68
- @back_href = params[:user_id] ?
69
- url("doc?#{doc_params}&dbkey=#{CGI.escape(params[:dbkey])}") :
70
- url("doc/select?dbkey=#{CGI.escape(params[:dbkey])}")
71
- erb :result
72
115
  end
73
116
 
74
117
  post '/doc/upload' do
@@ -1,16 +1,55 @@
1
1
  class RhosyncConsole::Server
2
2
  get '/' do
3
- unless login_required
4
- @license = nil
5
- handle_api_error("Can't get license information") do
6
- @license = RhosyncApi::get_license_info(session[:server],session[:token])
3
+ if params[:xhr] or request.xhr?
4
+ if login_required
5
+ redirect url('/loginpage')
6
+ else
7
+ redirect url('/homepage')
7
8
  end
8
- @sources = nil
9
- handle_api_error("Can't load list of application partition sources") do
10
- @sources = RhosyncApi::list_sources(session[:server],session[:token],:app)
9
+ else
10
+ @currentpage = "Console" #which page in menu
11
+ if login_required
12
+ @pagetitle = "Login" #H1 title
13
+ @initialcontent = url('/loginpage')
14
+
15
+ @locals = {
16
+ :div => "main_box",
17
+ :links => [
18
+ # { :url => url('/timing/bydevice'), :selected => true, :title => 'By Device' },
19
+ # { :url => url('/timing/bysource'), :title => 'By Source' }
20
+ ]
21
+ }
22
+ else
23
+ @pagetitle = "Rhosync Console" #H1 title
24
+ @initialcontent = url('/homepage')
25
+
26
+ @locals = {
27
+ :div => "main_box",
28
+ :links => [
29
+ { :url => url('/homepage'), :selected => true, :title => 'Info' },
30
+ { :url => url('/doc/select'), :title => 'Server Document' },
31
+ { :url => url('/users'), :title => 'Users' }
32
+ ]
33
+ }
11
34
  end
35
+ erb :content
12
36
  end
13
- erb :index
37
+ end
38
+
39
+ get '/loginpage' do
40
+ erb :login, :layout => :false
41
+ end
42
+
43
+ get '/homepage' do
44
+ @license = nil
45
+ handle_api_error("Can't get license information") do
46
+ @license = RhosyncApi::get_license_info(session[:server],session[:token])
47
+ end
48
+ @sources = nil
49
+ handle_api_error("Can't load list of application partition sources") do
50
+ @sources = RhosyncApi::list_sources(session[:server],session[:token],:app)
51
+ end
52
+ erb :home, :layout => false
14
53
  end
15
54
 
16
55
  get '/reset' do
@@ -0,0 +1,26 @@
1
+ class RhosyncConsole::Server
2
+ get '/timing' do
3
+ @currentpage = "Timing"
4
+ @pagetitle = "Timing" #H1 title
5
+
6
+ @initialcontent = url('/timing/bydevice')
7
+
8
+ @locals = {
9
+ :div => "main_box",
10
+ :links => [
11
+ { :url => url('/timing/bydevice'), :selected => true, :title => 'By Device' },
12
+ { :url => url('/timing/bysource'), :title => 'By Source' }
13
+ ]
14
+ }
15
+
16
+ erb :content
17
+ end
18
+
19
+ get '/timing/bydevice' do
20
+ "testing device"
21
+ end
22
+
23
+ get '/timing/bysource' do
24
+ "testing source<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>"
25
+ end
26
+ end
@@ -1,19 +1,44 @@
1
1
  class RhosyncConsole::Server
2
+ def render_page(contenturl)
3
+ @currentpage = "Console"
4
+ @initialcontent = contenturl
5
+ @pagetitle = "Rhosync Console" #H1 title
6
+ @locals = {
7
+ :div => "main_box",
8
+ :links => [
9
+ { :url => url('/homepage'), :title => 'Info' },
10
+ { :url => url('/doc/select'), :title => 'Server Document' },
11
+ { :url => url('/users'), :selected => true, :title => 'Users' }
12
+ ]
13
+ }
14
+ erb :content
15
+ end
16
+
2
17
  get '/users' do
3
- @users = []
4
- handle_api_error("Can't load list of users") do
5
- @users = RhosyncApi::list_users(session[:server],session[:token])
6
- end
7
- erb :users
18
+ if params[:xhr] or request.xhr?
19
+ @users = []
20
+ handle_api_error("Can't load list of users") do
21
+ @users = RhosyncApi::list_users(session[:server],session[:token])
22
+ end
23
+ erb :users, :layout => false
24
+
25
+ else
26
+ render_page url("/users")
27
+ end
8
28
  end
9
29
 
10
30
  get '/user/new' do
11
- erb :newuser
31
+ if params[:xhr] or request.xhr?
32
+ erb :newuser, :layout => false
33
+ else
34
+ render_page url("/user/new")
35
+ end
36
+
12
37
  end
13
38
 
14
39
  post '/user/create' do
15
40
  session[:errors] = nil
16
- verify_presence_of :login, "Login is not provaided."
41
+ verify_presence_of :login, "Login is not provided."
17
42
  unless session[:errors]
18
43
  handle_api_error("Can't create new user") do
19
44
  RhosyncApi::create_user(session[:server],
@@ -24,16 +49,22 @@ class RhosyncConsole::Server
24
49
  end
25
50
 
26
51
  get '/user' do
27
- @devices = []
28
- handle_api_error("Can't load list of devices") do
29
- @devices = RhosyncApi::list_clients(
30
- session[:server],session[:token],params[:user_id])
31
- end
32
- @sources = []
33
- handle_api_error("Can't load list of user partition sources") do
34
- @sources = RhosyncApi::list_sources(session[:server],session[:token],:user)
35
- end
36
- erb :user
52
+ if params[:xhr] or request.xhr?
53
+
54
+ @devices = []
55
+ handle_api_error("Can't load list of devices") do
56
+ @devices = RhosyncApi::list_clients(
57
+ session[:server],session[:token],params[:user_id])
58
+ end
59
+ @sources = []
60
+ handle_api_error("Can't load list of user partition sources") do
61
+ @sources = RhosyncApi::list_sources(session[:server],session[:token],:user)
62
+ end
63
+ erb :user, :layout => false
64
+ else
65
+ params[:user_id] = CGI::escape(params[:user_id]) if params[:user_id]
66
+ render_page url("/user?user_id=#{params[:user_id]}")
67
+ end
37
68
  end
38
69
 
39
70
  get '/user/delete' do
@@ -44,11 +75,17 @@ class RhosyncConsole::Server
44
75
  end
45
76
 
46
77
  get '/user/ping' do
47
- @sources = []
48
- handle_api_error("Can't load list of user partition sources") do
49
- @sources = RhosyncApi::list_sources(session[:server],session[:token],:all)
78
+ if params[:xhr] or request.xhr?
79
+
80
+ @sources = []
81
+ handle_api_error("Can't load list of user partition sources") do
82
+ @sources = RhosyncApi::list_sources(session[:server],session[:token],:all)
83
+ end
84
+ erb :ping, :layout => false
85
+ else
86
+ render_page url("/user/ping?user_id=#{CGI.escape(params[:user_id])}")
50
87
  end
51
- erb :ping
88
+
52
89
  end
53
90
 
54
91
  post '/user/ping' do
@@ -1,6 +1,6 @@
1
1
  <h1>Device: <%=params[:device_id]%></h1>
2
2
  <%=show_errors%>
3
- <a href="<%=url("user?user_id=#{CGI.escape(params[:user_id])}")%>" class='nav_button'>Back</a>
3
+ <a href="javascript:void(0);" onclick="loadXMLDoc('<%=url("user?user_id=#{CGI.escape(params[:user_id])}")%>','main_box');" class='nav_button'>Back</a>
4
4
  <a href='<%=url("device/delete?user_id=#{CGI.escape(params[:user_id])}&device_id=#{CGI.escape(params[:device_id])}")%>' class='nav_button'>
5
5
  Delete device
6
6
  </a>
@@ -23,7 +23,7 @@
23
23
 
24
24
  [
25
25
  <%@sources.each_index do |i|%>
26
- <a href="<%=url("docs?source_id=#{@sources[i]}&device_id=#{CGI.escape(params[:device_id])}&user_id=#{CGI.escape(params[:user_id])}")%>">
26
+ <a href='javascript:void(0);' onclick="loadXMLDoc('<%=url("docs?source_id=#{@sources[i]}&device_id=#{CGI.escape(params[:device_id])}&user_id=#{CGI.escape(params[:user_id])}")%>','main_box');">
27
27
  <%=i==0?'':','%>"<%=@sources[i]%>"
28
28
  </a>
29
29
  <%end%>
@@ -0,0 +1,14 @@
1
+ <h1><%=@pagetitle%></h1>
2
+
3
+
4
+
5
+ <div id="left" >
6
+ <div class="boxes" id="main_box">
7
+ </div>
8
+ </div>
9
+
10
+ <%= erb(:rightboxlinks, :layout => false, :locals => @locals)%>
11
+
12
+ <script type="text/javascript">
13
+ loadXMLDoc('<%= @initialcontent %>','main_box');
14
+ </script>
@@ -2,7 +2,7 @@
2
2
  <div class='panel'>
3
3
  <%if @data.size > 0%>
4
4
  <div class='panel'>
5
- <a href='<%=url("doc/clear?#{@back_params}&dbkey=#{CGI.escape(params[:dbkey])}")%>' class='nav_button'>Clear document</a>
5
+ <a href='javascript:void(0);' onclick="loadXMLDoc('<%=url("doc/clear?#{@back_params}&dbkey=#{CGI.escape(params[:dbkey])}")%>','main_box');" class='nav_button'>Clear document</a>
6
6
  </div>
7
7
  <%if @is_string%>
8
8
  <p>[<%=@data%>]</p>
@@ -1,7 +1,7 @@
1
1
  <h1><%=params[:source_id]%></h1>
2
2
  <%=show_errors%>
3
3
  <div class='panel'>
4
- <a href='<%= @back_href%>' class='nav_button'>Back</a>
4
+ <a href='javascript:void(0);' onclick="loadXMLDoc('<%= @back_href%>','main_box');" class='nav_button'>Back</a>
5
5
  </div>
6
6
  <h2>Source attributes</h2>
7
7
  <div class='panel'>
@@ -22,7 +22,7 @@
22
22
  <%@docs.each do |name,dbkey|%>
23
23
  <tr>
24
24
  <td>:<%=name%></td>
25
- <td><a href='<%=url("doc?dbkey=#{CGI.escape(dbkey)}&#{@doc_params}")%>' class='nav_button'><%=dbkey%></a></td>
25
+ <td><a href='javascript:void(0);' onclick="loadXMLDoc('<%=url("doc?dbkey=#{CGI.escape(dbkey)}&#{@doc_params}")%>','main_box');" class='nav_button'><%=dbkey%></a></td>
26
26
  </tr>
27
27
  <%end%>
28
28
  </table>
@@ -0,0 +1,41 @@
1
+ <ul>
2
+ <% currentpage = "Console" if currentpage.nil? %>
3
+ <% if currentpage == "Resque" %>
4
+ <li id="current"><a href="/resque" class="current">Resque</a></li>
5
+ <% else %>
6
+ <li ><a href="/resque" >Resque</a></li>
7
+ <% end %>
8
+
9
+ <% if currentpage == "Console" %>
10
+ <li id="current"><a href="<%=url("")%>" class="current">Console</a></li>
11
+ <% else %>
12
+ <li ><a href="<%=url("")%>" >Console</a></li>
13
+ <% end %>
14
+ <!--
15
+ <% if currentpage == "Timing" %>
16
+ <li id="current"><a href="<%=url("timing")%>" class="current">Timing</a></li>
17
+ <% else %>
18
+ <li ><a href="<%=url("timing")%>" class="">Timing</a></li>
19
+ <% end %>
20
+
21
+ <% if currentpage == "Storage" %>
22
+ <li id="current"><a href="/pricing" class="current">Storage</a></li>
23
+ <% else %>
24
+ <li ><a href="/pricing" class="">Storage</a></li>
25
+ <% end %>
26
+
27
+ <% if currentpage == "Counts" %>
28
+ <li id="current"><a href="/pricing" class="current">Counts</a></li>
29
+ <% else %>
30
+ <li ><a href="/pricing" class="">Counts</a></li>
31
+ <% end %>
32
+ -->
33
+ <li class="separator">
34
+ <img src="/console/images/tabs_separator.png"/>
35
+ </li>
36
+ <% if session[:token] != nil %>
37
+ <li><a href="<%=url("logout")%>" class="logout">Logout</a></li>
38
+ <% else %>
39
+ <li><a href="<%=url("")%>" class="login">Login</a></li>
40
+ <% end %>
41
+ </ul>
@@ -0,0 +1,22 @@
1
+ <%if is_errors? or @sources.nil? %>
2
+ <%= show_errors%>
3
+ <%end%>
4
+ <%unless @license.nil? %>
5
+ <%="Licensed to #{@license['licensee']} on #{@license['issued']}, available #{@license['available']} of #{@license['seats']} devices"%>
6
+ <%end%>
7
+
8
+ <div class='panel'>
9
+ <a href="<%=url('reset')%>" class='nav_button' onclick="return confirm('Are you sure? Resetting will remove all data. It will also return an error code to all existing devices when they connect!')">Reset</a>
10
+
11
+ </div>
12
+
13
+ <h2>App partition sources</h2>
14
+ <div class='panel'>
15
+ <%unless @sources.nil? %>
16
+ [
17
+ <%@sources.each_index do |i|%>
18
+ <a href='javascript:void(0);' onclick="loadXMLDoc('<%=url("docs?source_id=#{@sources[i]}&user_id=*")%>','main_box');"><%=i==0?'':','%>"<%=@sources[i]%>"</a>
19
+ <%end%>
20
+ ]
21
+ <%end%>
22
+ </div>
@@ -1,5 +1,5 @@
1
1
  <%if not login_required %>
2
- <h1>Application</h1>
2
+ <h1>Rhosync Console</h1>
3
3
  <%if is_errors? or @sources.nil? %>
4
4
  <%= show_errors%>
5
5
  <%end%>
@@ -1,12 +1,87 @@
1
1
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
3
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
4
  <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
- <title>Rhosync Console</title>
7
- <link rel="stylesheet" href="<%=url('main.css')%>" type="text/css" media="screen" />
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>Rhosync Console</title>
7
+ <!--<link rel="stylesheet" href="<%=url('main.css')%>" type="text/css" media="screen" /> -->
8
+ <link rel="stylesheet" href="<%=url('reset.css')%>" type="text/css" media="screen" />
9
+ <link rel="stylesheet" href="<%=url('home.css')%>" type="text/css" media="screen" />
10
+ <link rel="stylesheet" href="<%=url('style.css')%>" type="text/css" media="screen" />
11
+ <link rel="stylesheet" href="<%=url('ThickBox.css')%>" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+
14
+ function loadXMLDoc(url,id)
15
+ {
16
+ if(url.indexOf('?') != -1) {
17
+ url = url + "&xhr=true";
18
+ } else {
19
+ url = url + "?xhr=true";
20
+ }
21
+ if (window.XMLHttpRequest)
22
+ {// code for IE7+, Firefox, Chrome, Opera, Safari
23
+ xmlhttp=new XMLHttpRequest();
24
+
25
+ xmlhttp.open("GET",url,false);
26
+ xmlhttp.send(null);
27
+ if (xmlhttp.responseText != null)
28
+ {
29
+ element = document.getElementById(id);
30
+ if (element != null)
31
+ {
32
+ element.innerHTML=xmlhttp.responseText;
33
+ }
34
+ }
35
+ }
36
+ }
37
+
38
+ function switch_tab(elem)
39
+ {
40
+ if(document.getElementById('link1') != null)document.getElementById('link1').className = "no_class";
41
+ if(document.getElementById('link2') != null)document.getElementById('link2').className = "no_class";
42
+ if(document.getElementById('link3') != null)document.getElementById('link3').className = "no_class";
43
+ if(document.getElementById('link4') != null)document.getElementById('link4').className = "no_class";
44
+ if(document.getElementById('link5') != null)document.getElementById('link5').className = "no_class";
45
+ if(document.getElementById('link6') != null)document.getElementById('link6').className = "no_class";
46
+ if(document.getElementById('link7') != null)document.getElementById('link7').className = "no_class";
47
+ document.getElementById(elem).className = "selected";
48
+ }
49
+
50
+
51
+ </script>
52
+
8
53
  </head>
9
- <body>
10
- <%= yield%>
11
- <body>
54
+ <body>
55
+ <div class="container">
56
+ <div class="wrapper">
57
+ <div class="header">
58
+ <div class="logos">
59
+ <a href="" class="logo_rhomobile">RhoMobile</a>
60
+ <a href="" class="logo_rhohub">RhoHub</a>
61
+ </div>
62
+ <div id="menu">
63
+ <%= erb(:headermenu,:layout => false, :locals => {:currentpage => @currentpage})%>
64
+ </div>
65
+ <div class="header_landing">
66
+ <div class="col_1">
67
+ <%= yield%>
68
+ </div><!--END col_1 -->
69
+ <div class="land_separator"></div>
70
+ </div><!--END header_landing -->
71
+ <div style="float:left">
72
+ <%unless login_required %>
73
+ <% license = {}
74
+ handle_api_error("Can't get license information") do
75
+ license = RhosyncApi::get_license_info(session[:server],session[:token])
76
+ end
77
+ %>
78
+ <%="Licensed to #{license['licensee']}: #{license['available']}/#{license['seats']} devices available"%>
79
+ <%end%>
80
+ <br/>Rhosync v<%=Rhosync::VERSION%><br/>
81
+ </div>
82
+ </div><!--END header -->
83
+ </div><!--END wrapper -->
84
+ </div><!-- END container -->
85
+
86
+ </body>
12
87
  </html>
@@ -0,0 +1,26 @@
1
+ <form action="<%=url('login')%>" method='POST'>
2
+ <table>
3
+ <tr>
4
+ <td>Connect to RhoSync:</td>
5
+ <td>
6
+ <input type="radio" name="connect" value="direct"
7
+ <%= 'checked' if session[:connect] == 'direct' or session[:connect].nil?%>> Directly</input><br>
8
+ <input type="radio" name="connect" value="remote" <%= 'checked' if session[:connect] == 'remote'%>> Using REST API</input><br>
9
+ </td>
10
+ </tr>
11
+ <tr>
12
+ <td>REST Server address:</td>
13
+ <td><input name='server' value='<%=session[:server_url] || 'http://localhost:9292'%>' size=64/></td>
14
+ </tr>
15
+ <tr>
16
+ <td>Login:</td>
17
+ <td><input name='login' value='<%=session[:login] || 'rhoadmin'%>'/></td>
18
+ </tr>
19
+ <tr>
20
+ <td>Password:</td>
21
+ <td><input name='password' type='password' value=''/></td>
22
+ </tr>
23
+ </table>
24
+ <br/>
25
+ <input type='submit' value='Submit'/>
26
+ </form>
@@ -13,5 +13,5 @@
13
13
  </table>
14
14
  <br/>
15
15
  <input type='submit' value='Add'/>
16
- <a href="<%=url('users')%>">Back</a>
16
+ <a href='javascript:void(0);' onclick="loadXMLDoc('<%=url('users')%>','main_box')">Back</a>
17
17
  </form>