homepage redesign
2
Gemfile
@ -36,7 +36,7 @@ gem 'chronic'
|
|||||||
# gem 'ruby-debug'
|
# gem 'ruby-debug'
|
||||||
|
|
||||||
# assets
|
# assets
|
||||||
gem 'sass-rails', " ~> 4.0"
|
gem "sass-rails", "4.0.2"
|
||||||
gem 'coffee-rails', " ~> 4.0"
|
gem 'coffee-rails', " ~> 4.0"
|
||||||
gem 'uglifier'
|
gem 'uglifier'
|
||||||
|
|
||||||
|
33
Gemfile.lock
@ -1,18 +1,18 @@
|
|||||||
GIT
|
GIT
|
||||||
remote: git://github.com/gregbell/active_admin.git
|
remote: git://github.com/gregbell/active_admin.git
|
||||||
revision: 3fb7f03335b1ec5743c305f2c37103e2bfface97
|
revision: d11c0a56504a378d04a96a656ed1a545e9f165a7
|
||||||
specs:
|
specs:
|
||||||
activeadmin (1.0.0.pre)
|
activeadmin (1.0.0.pre)
|
||||||
arbre (~> 1.0)
|
arbre (~> 1.0)
|
||||||
bourbon
|
bourbon
|
||||||
coffee-rails
|
coffee-rails
|
||||||
devise (~> 3.2)
|
devise (~> 3.2)
|
||||||
formtastic (~> 2.3.0.rc2)
|
formtastic (~> 2.3.0.rc3)
|
||||||
inherited_resources (~> 1.3)
|
inherited_resources (~> 1.3)
|
||||||
jquery-rails
|
jquery-rails
|
||||||
jquery-ui-rails
|
jquery-ui-rails
|
||||||
kaminari (~> 0.15)
|
kaminari (~> 0.15)
|
||||||
rails (>= 3.2, < 4.1)
|
rails (>= 3.2, < 4.2)
|
||||||
ransack (~> 1.0)
|
ransack (~> 1.0)
|
||||||
sass-rails
|
sass-rails
|
||||||
|
|
||||||
@ -79,8 +79,8 @@ GEM
|
|||||||
bcrypt (3.1.7)
|
bcrypt (3.1.7)
|
||||||
bcrypt-ruby (3.1.5)
|
bcrypt-ruby (3.1.5)
|
||||||
bcrypt (>= 3.1.3)
|
bcrypt (>= 3.1.3)
|
||||||
bourbon (3.1.8)
|
bourbon (3.2.1)
|
||||||
sass (>= 3.2.0)
|
sass (~> 3.2)
|
||||||
thor
|
thor
|
||||||
builder (3.1.4)
|
builder (3.1.4)
|
||||||
capistrano (2.15.4)
|
capistrano (2.15.4)
|
||||||
@ -140,7 +140,7 @@ GEM
|
|||||||
i18n (~> 0.5)
|
i18n (~> 0.5)
|
||||||
faraday (0.8.9)
|
faraday (0.8.9)
|
||||||
multipart-post (~> 1.2.0)
|
multipart-post (~> 1.2.0)
|
||||||
formtastic (2.3.0.rc2)
|
formtastic (2.3.0.rc3)
|
||||||
actionpack (>= 3.0)
|
actionpack (>= 3.0)
|
||||||
geokit (1.8.4)
|
geokit (1.8.4)
|
||||||
multi_json (>= 1.3.2)
|
multi_json (>= 1.3.2)
|
||||||
@ -166,7 +166,7 @@ GEM
|
|||||||
jquery-rails (3.0.4)
|
jquery-rails (3.0.4)
|
||||||
railties (>= 3.0, < 5.0)
|
railties (>= 3.0, < 5.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
jquery-ui-rails (4.2.0)
|
jquery-ui-rails (4.2.1)
|
||||||
railties (>= 3.2.16)
|
railties (>= 3.2.16)
|
||||||
json (1.8.1)
|
json (1.8.1)
|
||||||
json_spec (1.1.1)
|
json_spec (1.1.1)
|
||||||
@ -200,7 +200,7 @@ GEM
|
|||||||
mini_portile (~> 0.5.0)
|
mini_portile (~> 0.5.0)
|
||||||
oauth (0.4.7)
|
oauth (0.4.7)
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
polyamorous (0.6.4)
|
polyamorous (1.0.0)
|
||||||
activerecord (>= 3.0)
|
activerecord (>= 3.0)
|
||||||
polyglot (0.3.4)
|
polyglot (0.3.4)
|
||||||
puma (2.8.1)
|
puma (2.8.1)
|
||||||
@ -230,10 +230,12 @@ GEM
|
|||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
thor (>= 0.18.1, < 2.0)
|
thor (>= 0.18.1, < 2.0)
|
||||||
rake (10.3.1)
|
rake (10.3.1)
|
||||||
ransack (1.1.0)
|
ransack (1.2.3)
|
||||||
actionpack (>= 3.0)
|
actionpack (>= 3.0)
|
||||||
activerecord (>= 3.0)
|
activerecord (>= 3.0)
|
||||||
polyamorous (~> 0.6.0)
|
activesupport (>= 3.0)
|
||||||
|
i18n
|
||||||
|
polyamorous (~> 1.0.0)
|
||||||
redis (3.0.7)
|
redis (3.0.7)
|
||||||
redis-namespace (1.4.1)
|
redis-namespace (1.4.1)
|
||||||
redis (~> 3.0.4)
|
redis (~> 3.0.4)
|
||||||
@ -270,10 +272,11 @@ GEM
|
|||||||
rspec-mocks (~> 2.14.0)
|
rspec-mocks (~> 2.14.0)
|
||||||
rufus-scheduler (2.0.24)
|
rufus-scheduler (2.0.24)
|
||||||
tzinfo (>= 0.3.22)
|
tzinfo (>= 0.3.22)
|
||||||
sass (3.2.13)
|
sass (3.2.19)
|
||||||
sass-rails (4.0.1)
|
sass-rails (4.0.2)
|
||||||
railties (>= 4.0.0, < 5.0)
|
railties (>= 4.0.0, < 5.0)
|
||||||
sass (>= 3.1.10)
|
sass (~> 3.2.0)
|
||||||
|
sprockets (~> 2.8, <= 2.11.0)
|
||||||
sprockets-rails (~> 2.0.0)
|
sprockets-rails (~> 2.0.0)
|
||||||
simple_oauth (0.2.0)
|
simple_oauth (0.2.0)
|
||||||
sinatra (1.4.4)
|
sinatra (1.4.4)
|
||||||
@ -281,7 +284,7 @@ GEM
|
|||||||
rack-protection (~> 1.4)
|
rack-protection (~> 1.4)
|
||||||
tilt (~> 1.3, >= 1.3.4)
|
tilt (~> 1.3, >= 1.3.4)
|
||||||
spork (0.9.2)
|
spork (0.9.2)
|
||||||
sprockets (2.12.1)
|
sprockets (2.11.0)
|
||||||
hike (~> 1.2)
|
hike (~> 1.2)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
rack (~> 1.0)
|
rack (~> 1.0)
|
||||||
@ -373,7 +376,7 @@ DEPENDENCIES
|
|||||||
resque-scheduler (= 2.3.1)
|
resque-scheduler (= 2.3.1)
|
||||||
resque-timeout
|
resque-timeout
|
||||||
rspec-rails (~> 2.14.1)
|
rspec-rails (~> 2.14.1)
|
||||||
sass-rails (~> 4.0)
|
sass-rails (= 4.0.2)
|
||||||
simplificator-rwebthumb!
|
simplificator-rwebthumb!
|
||||||
spork
|
spork
|
||||||
sqlite3-ruby (= 1.3.3)
|
sqlite3-ruby (= 1.3.3)
|
||||||
|
BIN
app/assets/images/thingspeak_logo_white.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
app/assets/images/thingspeak_stars_bg.jpg
Normal file
After Width: | Height: | Size: 122 KiB |
25
app/assets/javascripts/cheerlights.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// when the dom is ready
|
||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
// if the cheerlights row exists
|
||||||
|
if ($('#cheerlights_row').length > 0) {
|
||||||
|
// get the initial update
|
||||||
|
cheerlightsUpdate();
|
||||||
|
// check for new updates
|
||||||
|
setInterval('cheerlightsUpdate()', 15000);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// cheerlights update
|
||||||
|
function cheerlightsUpdate() {
|
||||||
|
// get the data with a webservice call
|
||||||
|
$.getJSON('https://api.thingspeak.com/channels/1417/feed/last.json', function(data) {
|
||||||
|
// if the field1 has data update the page
|
||||||
|
if (data.field1) {
|
||||||
|
if (data.field1 == "warmwhite") {data.field1 = "oldlace"}
|
||||||
|
$("#cheerlights_row").css("background-color", data.field1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
@ -20,5 +20,10 @@ $(document).ready(function() {
|
|||||||
$('#talkback_command_add_form').removeClass('hide');
|
$('#talkback_command_add_form').removeClass('hide');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// toggle contact form
|
||||||
|
$('#contact_link').click(function() {
|
||||||
|
$('#contact_form').toggle();
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
*= require ./bootstrap_custom.min.css
|
|
||||||
*= require ./bootstrap_overrides.css
|
|
||||||
*= require ./jquery-ui-1.8.24.custom.css
|
*= require ./jquery-ui-1.8.24.custom.css
|
||||||
*= require ./custom.css
|
*= require ./custom.css
|
||||||
*= require ./status.css
|
*= require ./status.css
|
||||||
|
@ -1,14 +1,29 @@
|
|||||||
/* bootstrap overrides */
|
/* bootstrap overrides */
|
||||||
|
code { word-wrap: break-word; white-space: normal; }
|
||||||
.navbar-collapse { max-height: 350px; }
|
.navbar-collapse { max-height: 350px; }
|
||||||
.breadcrumb { margin-top: 10px; margin-bottom: 20px; } /* margins to make sure breadcrumb and h4.breadcrumb line up properly */
|
.breadcrumb { margin-top: 10px; margin-bottom: 20px; } /* margins to make sure breadcrumb and h4.breadcrumb line up properly */
|
||||||
.table td { word-break: break-word; }
|
.table td { word-break: break-word; }
|
||||||
|
|
||||||
|
/* homepage */
|
||||||
|
#home-motto { font-size: 2em; padding-top: 100px; }
|
||||||
|
#home-motto h1 { font-size: 2em; color: #fff; }
|
||||||
|
#home-top { height: 500px; width: 100%; background: url('<%= asset_path("thingspeak_stars_bg.jpg") %>') no-repeat; background-size: 100% 500px; text-align: center; color: #fff; }
|
||||||
|
#home-top a { color: #fff; }
|
||||||
|
.panel-home { min-height: 180px; }
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
body { padding-top: 70px; }
|
body { padding-top: 70px; }
|
||||||
|
#cheerlights_row { text-align: center; height: 180px; }
|
||||||
|
#cheerlights_row img { margin-top: 40px; }
|
||||||
.break-word { word-break: break-word; }
|
.break-word { word-break: break-word; }
|
||||||
.col-pad { padding: 0 15px; }
|
.col-pad { padding: 0 15px; }
|
||||||
.dismiss { float: right; cursor: pointer; position: relative; top: -12px; left: 7px; }
|
.dismiss { float: right; cursor: pointer; position: relative; top: -12px; left: 7px; }
|
||||||
|
|
||||||
|
/* contact form */
|
||||||
|
#contact_form { display: none; }
|
||||||
|
#contact_link { cursor: pointer; }
|
||||||
|
#contact_link:hover { text-decoration: none; }
|
||||||
|
|
||||||
/* multiline forms */
|
/* multiline forms */
|
||||||
.form-horizontal .multiline-label { margin-top: -10px; }
|
.form-horizontal .multiline-label { margin-top: -10px; }
|
||||||
|
|
||||||
@ -305,11 +320,6 @@ input#upload_csv { padding-top:5px;margin:20px 0;}
|
|||||||
|
|
||||||
/* form styling */
|
/* form styling */
|
||||||
input.video_narrow {width:100px; }
|
input.video_narrow {width:100px; }
|
||||||
/* home page */
|
|
||||||
#feature_signup {}
|
|
||||||
#feature_signup a {border-bottom: 3px solid #d62020; text-decoration: none; font-weight: bold;}
|
|
||||||
#feature_signup a:hover {text-decoration: none;}
|
|
||||||
|
|
||||||
|
|
||||||
/* jQuery Nav */
|
/* jQuery Nav */
|
||||||
#nav { list-style: none; padding:0 10px 0 92px; margin: 0;}
|
#nav { list-style: none; padding:0 10px 0 92px; margin: 0;}
|
@ -1,9 +1,10 @@
|
|||||||
class PagesController < ApplicationController
|
class PagesController < ApplicationController
|
||||||
layout 'application', :except => [:social_home]
|
layout 'application', :except => [:home, :social_home]
|
||||||
|
|
||||||
def home
|
def home
|
||||||
@menu = 'home'
|
@menu = 'home'
|
||||||
@title = 'Internet of Things'
|
@title = 'Internet of Things'
|
||||||
|
render layout: 'home'
|
||||||
end
|
end
|
||||||
|
|
||||||
def social_home; ; end
|
def social_home; ; end
|
||||||
@ -19,5 +20,22 @@ class PagesController < ApplicationController
|
|||||||
def headers
|
def headers
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# post contact email
|
||||||
|
def contact_us
|
||||||
|
# if no email address
|
||||||
|
if params[:email].blank? || params[:email].index('@').blank?
|
||||||
|
flash[:alert] = t(:contact_us_no_email)
|
||||||
|
# if no message
|
||||||
|
elsif params[:message].blank?
|
||||||
|
flash[:alert] = t(:contact_us_no_message)
|
||||||
|
# else send email
|
||||||
|
else
|
||||||
|
Mailer.contact_us(params[:email], params[:message]).deliver
|
||||||
|
flash[:notice] = t(:contact_us_success)
|
||||||
|
end
|
||||||
|
|
||||||
|
redirect_to root_path
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ module PagesHelper
|
|||||||
if (i < 3)
|
if (i < 3)
|
||||||
blog += d.css("h2").to_s
|
blog += d.css("h2").to_s
|
||||||
blog += d.css("div.entry").to_s
|
blog += d.css("div.entry").to_s
|
||||||
blog += "<br /><br />"
|
blog += "<hr>" if i != 2
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -26,3 +26,4 @@ module PagesHelper
|
|||||||
blog
|
blog
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -8,4 +8,14 @@ class Mailer < ActionMailer::Base
|
|||||||
:subject => t(:password_reset_subject))
|
:subject => t(:password_reset_subject))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def contact_us(from_email, message)
|
||||||
|
mail(to: SUPPORT_EMAIL,
|
||||||
|
from: from_email,
|
||||||
|
reply_to: from_email,
|
||||||
|
body: message,
|
||||||
|
content_type: "text/html",
|
||||||
|
subject: "Contact Us Form")
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
7
app/views/layouts/_flash.html.erb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<% if notice.present? %>
|
||||||
|
<p class="flash alert alert-success"><%= notice %><span class="dismiss">X</span></p>
|
||||||
|
<% end %>
|
||||||
|
<% if alert.present? %>
|
||||||
|
<p class="flash alert alert-danger"><%= alert %><span class="dismiss">X</span></p>
|
||||||
|
<% end %>
|
||||||
|
|
@ -1,71 +1,20 @@
|
|||||||
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
|
<head>
|
||||||
<div class="container">
|
<title><%= @title.nil? ? (@menu.nil? ? 'ThingSpeak' : @menu.capitalize + ' - ThingSpeak') : @title + ' - ThingSpeak' %></title>
|
||||||
<div class="navbar-header">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootswatch/3.1.1/cerulean/bootstrap.min.css" />
|
||||||
<span class="sr-only">Toggle navigation</span>
|
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" media="screen" rel="stylesheet" />
|
||||||
<span class="icon-bar"></span>
|
<%= stylesheet_link_tag 'application' %>
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
</button>
|
|
||||||
<%= link_to root_path do %>
|
|
||||||
<%= image_tag 'thingspeak_logo.png', :size => '190x50', :style => 'padding: 0 8px;' %>
|
|
||||||
<% end %>
|
|
||||||
</div>
|
|
||||||
<div class="navbar-collapse collapse">
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
|
|
||||||
<% if current_user %>
|
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
|
||||||
|
<script type='text/javascript' src="//netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script>
|
||||||
|
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
|
||||||
|
<%= javascript_include_tag 'application' %>
|
||||||
|
|
||||||
<li class="<%= "active " if @menu == 'channels' %>dropdown">
|
<%= csrf_meta_tag %>
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%=t(:channels)%> <b class="caret"></b></a>
|
<% if Rails.env == 'production' %>
|
||||||
<ul class="dropdown-menu">
|
<%= render 'layouts/ga' %>
|
||||||
<li><%= link_to t(:channels_my), channels_path %></li>
|
<% end %>
|
||||||
<li><%= link_to t(:watched_channels), watched_channels_path %></li>
|
|
||||||
<li><%= link_to t(:channels_public), public_channels_path %></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li <%= "class=active" if @menu == 'plugins' %>><%= link_to t(:plugins), plugins_path %></li>
|
|
||||||
<li class="<%= "active " if @menu == 'account' %>dropdown">
|
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%=t(:account)%> <b class="caret"></b></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><%= link_to t(:myaccount), account_path %></li>
|
|
||||||
<li><%= link_to t(:account_edit), edit_account_path %></li>
|
|
||||||
<li><%= link_to t(:public_profile), user_profile_path(current_user.login) %></li>
|
|
||||||
<li><%= link_to t(:profile_edit), edit_profile_path %></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<% if current_admin_user.present? %>
|
|
||||||
<li><%= link_to t(:admin), "/admin" %></li>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<% else %>
|
<%= yield :head %>
|
||||||
<li <%= "class=active" if @menu == 'channels' %>><%= link_to t(:channels), public_channels_path %></li>
|
</head>
|
||||||
<li <%= "class=active" if @menu == 'features' %>><%= link_to t(:features), features_pages_path %></li>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
<ul class="nav navbar-nav navbar-right">
|
|
||||||
|
|
||||||
<li class="<%= "active " if @menu == 'support' %>dropdown">
|
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%=t(:support)%> <b class="caret"></b></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a href="/docs"><%= t(:documentation) %></a></li>
|
|
||||||
<li><a href="http://community.thingspeak.com/tutorials/"><%= t(:tutorials) %></a></li>
|
|
||||||
<li><a href="http://community.thingspeak.com/forum/"><%= t(:forum) %></a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li><a href="http://community.thingspeak.com/"><%= t(:blog)%></a></li>
|
|
||||||
|
|
||||||
<% if current_user %>
|
|
||||||
<li><%= link_to t(:signout), logout_path %></li>
|
|
||||||
<% else %>
|
|
||||||
<li><%= link_to t(:signin), login_path %></li>
|
|
||||||
<li><%= link_to t(:signup), new_user_registration_path %></li>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
</div><!--/.nav-collapse -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
70
app/views/layouts/_nav.html.erb
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<div class="navbar navbar-inverse navbar-default navbar-fixed-top" role="navigation">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="sr-only">Toggle navigation</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
<%= link_to root_path do %>
|
||||||
|
<%= image_tag 'thingspeak_logo_white.png', :size => '188x35', :style => 'padding: 0 8px; margin-top: 7px;' %>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
<div class="navbar-collapse collapse">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
|
||||||
|
<% if current_user %>
|
||||||
|
|
||||||
|
<li class="<%= "active " if @menu == 'channels' %>dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%=t(:channels)%> <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><%= link_to t(:channels_my), channels_path %></li>
|
||||||
|
<li><%= link_to t(:watched_channels), watched_channels_path %></li>
|
||||||
|
<li><%= link_to t(:channels_public), public_channels_path %></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li <%= "class=active" if @menu == 'plugins' %>><%= link_to t(:plugins), plugins_path %></li>
|
||||||
|
<li class="<%= "active " if @menu == 'account' %>dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%=t(:account)%> <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><%= link_to t(:myaccount), account_path %></li>
|
||||||
|
<li><%= link_to t(:account_edit), edit_account_path %></li>
|
||||||
|
<li><%= link_to t(:public_profile), user_profile_path(current_user.login) %></li>
|
||||||
|
<li><%= link_to t(:profile_edit), edit_profile_path %></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<% if current_admin_user.present? %>
|
||||||
|
<li><%= link_to t(:admin), "/admin" %></li>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% else %>
|
||||||
|
<li <%= "class=active" if @menu == 'channels' %>><%= link_to t(:channels), public_channels_path %></li>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
|
||||||
|
<li class="<%= "active " if @menu == 'support' %>dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%=t(:support)%> <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="/docs"><%= t(:documentation) %></a></li>
|
||||||
|
<li><a href="/docs/tutorials/"><%= t(:tutorials) %></a></li>
|
||||||
|
<li><a href="http://community.thingspeak.com/forum/"><%= t(:forum) %></a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li><a href="http://community.thingspeak.com/"><%= t(:blog)%></a></li>
|
||||||
|
|
||||||
|
<% if current_user %>
|
||||||
|
<li><%= link_to t(:signout), logout_path %></li>
|
||||||
|
<% else %>
|
||||||
|
<li><%= link_to t(:signin), login_path %></li>
|
||||||
|
<li><%= link_to t(:signup), new_user_registration_path %></li>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
</div><!--/.nav-collapse -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
@ -1,34 +1,13 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<%= render 'layouts/header' %>
|
||||||
<title><%= @title.nil? ? (@menu.nil? ? 'ThingSpeak' : @menu.capitalize + ' - ThingSpeak') : @title + ' - ThingSpeak' %></title>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<%= stylesheet_link_tag 'application' %>
|
|
||||||
|
|
||||||
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
|
|
||||||
<script type='text/javascript' src="//netdna.bootstrapcdn.com/bootstrap/3.1.0/js/bootstrap.min.js"></script>
|
|
||||||
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
|
|
||||||
<%= javascript_include_tag 'application' %>
|
|
||||||
|
|
||||||
<%= csrf_meta_tag %>
|
|
||||||
<% if Rails.env == 'production' %>
|
|
||||||
<%= render 'layouts/ga' %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<%= yield :head %>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div id="wrap">
|
<div id="wrap">
|
||||||
<%= render 'layouts/header' %>
|
<%= render 'layouts/nav' %>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<% if notice.present? %>
|
<%= render 'layouts/flash' %>
|
||||||
<p class="flash alert alert-success"><%= notice %><span class="dismiss">X</span></p>
|
|
||||||
<% end %>
|
|
||||||
<% if alert.present? %>
|
|
||||||
<p class="flash alert alert-danger"><%= alert %><span class="dismiss">X</span></p>
|
|
||||||
<% end %>
|
|
||||||
<%= yield %>
|
<%= yield %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
14
app/views/layouts/home.html.erb
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<%= render 'layouts/header' %>
|
||||||
|
|
||||||
|
<body style='padding-top: 50px;'>
|
||||||
|
|
||||||
|
<%= render 'layouts/nav' %>
|
||||||
|
<%= yield %>
|
||||||
|
|
||||||
|
<%= render 'layouts/footer' %>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
17
app/views/pages/_contact_form.html.erb
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<%= form_tag({:controller => 'pages', :action => 'contact_us', :method => :post}, :class => 'form-horizontal') do %>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 col-xs-3 control-label"><%= t(:email_address).titleize %></label>
|
||||||
|
<div class="col-sm-4 col-xs-9"><%= text_field_tag :email, (current_user.present? ? current_user.email : nil), :class => 'form-control' %></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 col-xs-3 control-label"><%= t(:message).capitalize %></label>
|
||||||
|
<div class="col-sm-4 col-xs-9"><%= text_area_tag :message, nil, :class => 'form-control', :rows => 8 %></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-4 col-xs-3 control-label"></label>
|
||||||
|
<div class="col-sm-4 col-xs-9"><p class="form-control-static"><%= submit_tag t(:submit), :class => 'btn btn-primary' %></p></div>
|
||||||
|
</div>
|
||||||
|
<% end %>
|
||||||
|
|
@ -1,230 +1,129 @@
|
|||||||
<script type="text/javascript">
|
<div id="home-top">
|
||||||
// users timezone offset
|
|
||||||
var myOffset = new Date().getTimezoneOffset();
|
|
||||||
|
|
||||||
// converts date format from JSON
|
<div id="home-motto">
|
||||||
function getChartDate(d) {
|
<h1><%= t(:home_motto) %></h1>
|
||||||
// get the data using javascript's date object (year, month, day, hour, minute, second)
|
<%= t(:home_tagline) %>
|
||||||
// months in javascript start at 0, so remember to subtract 1 when specifying the month
|
|
||||||
// offset in minutes is converted to milliseconds and subtracted so that chart's x-axis is correct
|
|
||||||
return Date.UTC(d.substring(0,4), d.substring(5,7)-1, d.substring(8,10), d.substring(11,13), d.substring(14,16), d.substring(17,19)) - (myOffset * 60000);
|
|
||||||
}
|
|
||||||
|
|
||||||
$(document).ready(function() {
|
|
||||||
// blank array for holding chart data
|
|
||||||
var chartData = [];
|
|
||||||
// variable for the date string
|
|
||||||
var d;
|
|
||||||
// variable for the data point
|
|
||||||
var p;
|
|
||||||
// variable for the local date in milliseconds
|
|
||||||
var localDate;
|
|
||||||
|
|
||||||
// get the data with a webservice call
|
|
||||||
$.getJSON('https://api.thingspeak.com/channels/9/field/1.json?callback=?&results=15&offset=0', function(data) {
|
|
||||||
// if no access
|
|
||||||
if (data == '-1') {
|
|
||||||
$('#chart-container').append('This channel is not public. To embed charts, the channel must be public or a read key must be specified.');
|
|
||||||
}
|
|
||||||
|
|
||||||
// iterate through each feed
|
|
||||||
$.each(data.feeds, function() {
|
|
||||||
p = this.field1;
|
|
||||||
// if a numerical value exists add it
|
|
||||||
if (!isNaN(parseInt(p))) {
|
|
||||||
chartData.push([getChartDate(this.created_at), parseFloat(p)]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// specify the chart options
|
|
||||||
var chartOptions = {
|
|
||||||
chart: {
|
|
||||||
renderTo: 'chart-container',
|
|
||||||
defaultSeriesType: 'line',
|
|
||||||
backgroundColor: '#fff',
|
|
||||||
events: {
|
|
||||||
load: function() {
|
|
||||||
// push data every 15 seconds
|
|
||||||
setInterval(function() {
|
|
||||||
|
|
||||||
// get the data with a webservice call
|
|
||||||
$.getJSON('https://api.thingspeak.com/channels/9/feed/last.json?callback=?&offset=0', function(data) {
|
|
||||||
p = data.field1;
|
|
||||||
d = getChartDate(data.created_at);
|
|
||||||
last_date = dynamicChart.series[0].data[dynamicChart.series[0].data.length-1].x;
|
|
||||||
|
|
||||||
// if a numerical value exists and it is a new date, add it
|
|
||||||
if (!isNaN(parseInt(p)) && (d != last_date)) {
|
|
||||||
|
|
||||||
dynamicChart.series[0].addPoint([d, parseFloat(p)], true, true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}, 15000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
text: ''
|
|
||||||
},
|
|
||||||
plotOptions: {
|
|
||||||
line: {
|
|
||||||
color: '#d62020'
|
|
||||||
},
|
|
||||||
bar: {
|
|
||||||
color: '#d62020'
|
|
||||||
},
|
|
||||||
column: {
|
|
||||||
color: '#d62020'
|
|
||||||
},
|
|
||||||
series: {
|
|
||||||
marker: {
|
|
||||||
radius: 3
|
|
||||||
},
|
|
||||||
animation: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
// reformat the tooltips so that local times are displayed
|
|
||||||
formatter: function() {
|
|
||||||
var d = new Date(this.x + (myOffset*60000));
|
|
||||||
return this.series.name + ':<b>' + this.y + '</b><br/>' + d.toDateString() + '<br/>' + d.toTimeString().replace(/\(.*\)/, "");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'datetime',
|
|
||||||
title: {
|
|
||||||
text: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
title: {
|
|
||||||
text: ''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
exporting: {
|
|
||||||
enabled: false
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
enabled: false
|
|
||||||
},
|
|
||||||
series: [{
|
|
||||||
name: data.channel.field1
|
|
||||||
}]
|
|
||||||
};
|
|
||||||
|
|
||||||
// add the data to the chart
|
|
||||||
chartOptions.series[0].data = chartData;
|
|
||||||
|
|
||||||
// set chart labels here so that decoding occurs properly
|
|
||||||
chartOptions.title.text = 'Dynamic Light Levels';
|
|
||||||
chartOptions.xAxis.title.text = 'Time';
|
|
||||||
chartOptions.yAxis.title.text = data.channel.field1;
|
|
||||||
|
|
||||||
// draw the chart
|
|
||||||
var dynamicChart = new Highcharts.Chart(chartOptions);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="text-center">
|
|
||||||
<%= image_tag 'front.png', :size => '854x144' %>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<%= link_to t(:get_started), new_user_registration_path, :class => 'btn btn-danger btn-lg' %>
|
||||||
|
<br><br>
|
||||||
|
<a href="/docs" target="_blank"><%= t(:documentation) %></a>
|
||||||
|
|
|
||||||
|
<a href="http://community.thingspeak.com/forum/" target="_blank"><%=t(:support)%></a>
|
||||||
|
|
|
||||||
|
<a href="https://github.com/iobridge/thingspeak" target="_blank">GitHub</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br><br><br>
|
<br><br>
|
||||||
|
|
||||||
<div class="row">
|
<div class="container">
|
||||||
<div class="col-sm-6">
|
|
||||||
<div id="chart-container" class="center-block" style="width: 500px; height: 260px; padding-left: 20px;"></div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<div style="margin-top: 55px;" class="text-center"><a href="http://community.thingspeak.com/tutorials/netduino/create-your-own-web-of-things-using-the-netduino-plus-and-thingspeak/"><%= image_tag 'my_house_status_update.png' %></a></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br><br><br>
|
<div class="row">
|
||||||
|
|
||||||
<div class="row">
|
<div class="col-sm-4">
|
||||||
|
<div class="panel panel-info">
|
||||||
<div class="col-sm-4">
|
<div class="panel-heading">
|
||||||
<h4 class="breadcrumb">Features</h4>
|
<h3 class="panel-title">
|
||||||
<p>
|
<i class="fa fa-list fa-fw fa-lg"></i>
|
||||||
<ul>
|
ThingSpeak Features
|
||||||
<li>Open Source API</li>
|
</h3>
|
||||||
<li>Real-time data collection</li>
|
</div>
|
||||||
<li>Data processing</li>
|
<div class="panel-body panel-home">
|
||||||
<li>Data visualizations</li>
|
<ul>
|
||||||
<li>Location-awareness</li>
|
<li>Open API</li>
|
||||||
<li>Status context</li>
|
<li>Real-time data collection</li>
|
||||||
<li>Application infrastructure</li>
|
<li>Geolocation data</li>
|
||||||
<li>Twitter proxy</li>
|
<li>Data processing</li>
|
||||||
<li>Apps</li>
|
<li>Data visualizations</li>
|
||||||
<li>Plugins</li>
|
<li>Device status messages</li>
|
||||||
<li><%= link_to '... more', features_pages_path %></li>
|
<li>Plugins</li>
|
||||||
</ul>
|
</ul>
|
||||||
</p>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<h4 class="breadcrumb">Applications</h4>
|
|
||||||
<p>
|
|
||||||
<ul>
|
|
||||||
<li>Sensor monitoring</li>
|
|
||||||
<li>Energy monitoring</li>
|
|
||||||
<li>Connecting devices and systems</li>
|
|
||||||
<li>Geo location tracking</li>
|
|
||||||
<li>Interfacing with social networks</li>
|
|
||||||
<li>RFID transactions</li>
|
|
||||||
</ul>
|
|
||||||
</p>
|
|
||||||
<h4 class="breadcrumb">Who Uses ThingSpeak</h4>
|
|
||||||
<p>
|
|
||||||
<ul>
|
|
||||||
<li>Application developers</li>
|
|
||||||
<li>Product integrators</li>
|
|
||||||
<li>Web designers</li>
|
|
||||||
</ul>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<h4 class="breadcrumb">Get Started</h4>
|
|
||||||
<div class="col-pad">
|
|
||||||
If you are ready to get started, <span id="feature_signup"> <%= link_to t(:signup), new_account_path %></span> for a free user account.
|
|
||||||
</div>
|
</div>
|
||||||
<h4 class="breadcrumb">Connect</h4>
|
</div>
|
||||||
<p>
|
|
||||||
<ul>
|
<div class="col-sm-4">
|
||||||
<li><a href="http://www.twitter.com/thingspeak" title="Follow ThingSpeak on Twitter">Twitter</a></li>
|
<div class="panel panel-info">
|
||||||
<li><a href="https://github.com/iobridge/ThingSpeak" title="Open Source Internet of Things Project on GitHub">GitHub</a></li>
|
<div class="panel-heading">
|
||||||
<li><a href="http://community.thingspeak.com" title="Join the ThingSpeak Community">ThingSpeak Community</a></li>
|
<h3 class="panel-title">
|
||||||
<li><a href="/docs" title="ThingSpeak API and Apps Documentation">Documentation</a> and <a href="http://community.thingspeak.com/tutorials" title="ThingSpeak Tutorials">Tutorials</a></li>
|
<i class="fa fa-gears fa-fw fa-lg"></i>
|
||||||
<li><a href="mailto:support@thingspeak.com" title="Contact ThingSpeak">Questions</a></li>
|
Integrate With Anything
|
||||||
</ul>
|
</h3>
|
||||||
</p>
|
</div>
|
||||||
|
<div class="panel-body panel-home">
|
||||||
|
<ul>
|
||||||
|
<li>Arduino</li>
|
||||||
|
<li>Raspberry Pi</li>
|
||||||
|
<li>ioBridge / RealTime.io</li>
|
||||||
|
<li>Electric Imp</li>
|
||||||
|
<li>Mobile / Web Applications</li>
|
||||||
|
<li>Social Networks</li>
|
||||||
|
<li>Data Analytics</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<div class="panel panel-info">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">
|
||||||
|
<i class="fa fa-comments fa-fw fa-lg"></i>
|
||||||
|
Connect With Us
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body panel-home">
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://github.com/iobridge/ThingSpeak" title="Open Source Internet of Things Project on GitHub">GitHub</a></li>
|
||||||
|
<li><a href="http://www.twitter.com/thingspeak" title="Follow ThingSpeak on Twitter">Twitter</a></li>
|
||||||
|
<li><a href="http://community.thingspeak.com/" title="ThingSpeak IoT Blog">Blog</a></li>
|
||||||
|
<li><a href="http://community.thingspeak.com/forum/" title="Join the ThingSpeak Forum">Forum</a></li>
|
||||||
|
<li><a href="/docs" title="ThingSpeak API and Apps Documentation">Documentation</a></li>
|
||||||
|
<li><a href="/docs/tutorials" title="ThingSpeak Tutorials">Tutorials</a></li>
|
||||||
|
<li><a href="mailto:support@thingspeak.com" title="Contact ThingSpeak">Questions</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
<br><br>
|
||||||
|
|
||||||
<br><br><br>
|
<div class="jumbotron">
|
||||||
|
<h1>Get Started</h1>
|
||||||
<div class="row">
|
<p>If you are ready to build your Internet of Things, <%= link_to t(:signup), new_user_registration_path, :class => 'btn btn-primary btn-sm' %> for a free developer account.</p>
|
||||||
<div class="col-sm-offset-2 col-sm-8 col-xs-12">
|
<p>
|
||||||
|
<a href="/docs" target="_blank" class="btn btn-info btn-lg">Learn More</a>
|
||||||
<div class="center-block" style="max-width: 600px;">
|
<a id="contact_link" class="btn btn-success btn-lg"><%= t(:contact_us) %></a>
|
||||||
<h4><a href="http://community.thingspeak.com/" title="ThingSpeak Community, Blog, and Forum">latest news<a> <a href="http://feeds.feedburner.com/internetofthings/" title="ThingSpeak RSS Feed"><%= image_tag 'icon_rss.gif' %></a></h4>
|
</p>
|
||||||
|
<div id="contact_form">
|
||||||
<br>
|
<br>
|
||||||
|
<%= render :partial => 'pages/contact_form' %>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<div class="panel panel-primary">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<h3 class="panel-title">
|
||||||
|
<a href="http://community.thingspeak.com/" title="ThingSpeak Community, Blog, and Forum">Latest News<a> <a href="http://feeds.feedburner.com/internetofthings/" title="ThingSpeak RSS Feed"><%= image_tag 'icon_rss.gif' %></a>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
<% cache("blog-posts-on-homepage", :expires_in => 10.minutes) do %>
|
<% cache("blog-posts-on-homepage", :expires_in => 10.minutes) do %>
|
||||||
<%= raw blog_entries %>
|
<%= raw blog_entries %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -111,6 +111,10 @@ en:
|
|||||||
confirm_thinghttp_delete: "Are you sure you want to delete this ThingHTTP?"
|
confirm_thinghttp_delete: "Are you sure you want to delete this ThingHTTP?"
|
||||||
confirm_tweetcontrol_delete: "Are you sure you want to delete this TweetControl?"
|
confirm_tweetcontrol_delete: "Are you sure you want to delete this TweetControl?"
|
||||||
confirm_twitter_delete: "Are you sure you want to unlink this Twitter account?"
|
confirm_twitter_delete: "Are you sure you want to unlink this Twitter account?"
|
||||||
|
contact_us: "Contact Us"
|
||||||
|
contact_us_no_email: "You must provide a valid email address."
|
||||||
|
contact_us_no_message: "Please add a message to the Contact Us form."
|
||||||
|
contact_us_success: "Your message has been sent successfully."
|
||||||
create_account: "Create Account"
|
create_account: "Create Account"
|
||||||
created: "Created"
|
created: "Created"
|
||||||
data: "Data"
|
data: "Data"
|
||||||
@ -147,6 +151,7 @@ en:
|
|||||||
elevation: "Elevation"
|
elevation: "Elevation"
|
||||||
entries: "Entries"
|
entries: "Entries"
|
||||||
email: "Email"
|
email: "Email"
|
||||||
|
email_address: 'email address'
|
||||||
email_form_add: "Add Email"
|
email_form_add: "Add Email"
|
||||||
export: "Export"
|
export: "Export"
|
||||||
featured_channels: "Featured Channels"
|
featured_channels: "Featured Channels"
|
||||||
@ -158,16 +163,20 @@ en:
|
|||||||
forum: "Forum"
|
forum: "Forum"
|
||||||
for_more_information: "More Information"
|
for_more_information: "More Information"
|
||||||
generate_thingtweet_arduino_code: "Generate ThingTweet Arduino Code"
|
generate_thingtweet_arduino_code: "Generate ThingTweet Arduino Code"
|
||||||
|
get_started: "Get Started Now"
|
||||||
height: "Height"
|
height: "Height"
|
||||||
home: "Home"
|
home: "Home"
|
||||||
homepage: "ThingSpeak is an Open Internet of Things project by ioBridge."
|
homepage: "ThingSpeak is an Open Internet of Things project by ioBridge."
|
||||||
homepage_logged_in: "Homepage for logged in user!"
|
homepage_logged_in: "Homepage for logged in user!"
|
||||||
|
home_motto: "Billions and Billions."
|
||||||
|
home_tagline: "The open data platform for the Internet of Things."
|
||||||
import: "Import"
|
import: "Import"
|
||||||
import_data: "Import Data"
|
import_data: "Import Data"
|
||||||
latitude: "Latitude"
|
latitude: "Latitude"
|
||||||
longitude: "Longitude"
|
longitude: "Longitude"
|
||||||
median: "Median"
|
median: "Median"
|
||||||
member_since: "Member since"
|
member_since: "Member since"
|
||||||
|
message: 'message'
|
||||||
message_field: "Message Field"
|
message_field: "Message Field"
|
||||||
myaccount: "My Account"
|
myaccount: "My Account"
|
||||||
mychannels: "My Channels"
|
mychannels: "My Channels"
|
||||||
|
@ -28,6 +28,7 @@ Thingspeak::Application.routes.draw do
|
|||||||
get :about
|
get :about
|
||||||
get :headers
|
get :headers
|
||||||
get :social_home
|
get :social_home
|
||||||
|
post :contact_us
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 26 KiB |
BIN
public/assets/ajax-loader-59b8fb62c74dad5cdbf036695be29b15.gif
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
public/assets/application-176ef6f23f47be510b81c7f53e30cd99.js.gz
Normal file
BIN
public/assets/application-c67d6ca72aa1286742975bc16b5a4c91.js.gz
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
public/assets/eye-fd6d80cf825a80f396aa2e24f7f1e80c.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
public/assets/flag_gray-05501e436306a1591309f9e4e4cbdfb3.gif
Normal file
After Width: | Height: | Size: 983 B |
BIN
public/assets/flag_red-164193dfdcde88c073bc3aa17cdaf0e7.gif
Normal file
After Width: | Height: | Size: 987 B |
BIN
public/assets/front-1830f0b2fff3843b8402117af3d8dd08.png
Normal file
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 618 B |
BIN
public/assets/icon_rss-38eeff8a8e140b2009c737ce62eff1c8.gif
Normal file
After Width: | Height: | Size: 1008 B |
BIN
public/assets/icons/InfoBox-40bb122a3745c0d8239583fb9f5d0ac4.png
Executable file
After Width: | Height: | Size: 837 B |
BIN
public/assets/icons/Locked-51dd6510e8dd42a3521ce2223136c480.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 1.6 KiB |
BIN
public/assets/icons/delete-6de7ff6e1cd4f343ac516ac223355ccc.png
Executable file
After Width: | Height: | Size: 715 B |
After Width: | Height: | Size: 13 KiB |
BIN
public/assets/rails-4a2be0731bb1a8e0e8f3658394836058.png
Normal file
After Width: | Height: | Size: 6.5 KiB |
BIN
public/assets/shading-338cc81d2083c9f06cb8f6482a90e294.png
Normal file
After Width: | Height: | Size: 565 B |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 130 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 122 KiB |
After Width: | Height: | Size: 122 KiB |