homepage redesign

This commit is contained in:
Lee Lawlor 2014-05-08 20:01:41 -04:00
parent e5570ec3af
commit ac83280b68
57 changed files with 569 additions and 328 deletions

View File

@ -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'

View File

@ -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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

View 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);
}
});
}

View File

@ -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();
});
}); });

View File

@ -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

View File

@ -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;}

View File

@ -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

View File

@ -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

View File

@ -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

View 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 %>

View File

@ -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>
<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 %> <% 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>

View 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>

View File

@ -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>

View 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>

View 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 %>

View File

@ -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=?&amp;results=15&amp;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=?&amp;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>
&nbsp; | &nbsp;
<a href="http://community.thingspeak.com/forum/" target="_blank"><%=t(:support)%></a>
&nbsp; | &nbsp;
<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="col-sm-4">
<h4 class="breadcrumb">Features</h4> <div class="panel panel-info">
<p> <div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-list fa-fw fa-lg"></i>
ThingSpeak Features
</h3>
</div>
<div class="panel-body panel-home">
<ul> <ul>
<li>Open Source API</li> <li>Open API</li>
<li>Real-time data collection</li> <li>Real-time data collection</li>
<li>Geolocation data</li>
<li>Data processing</li> <li>Data processing</li>
<li>Data visualizations</li> <li>Data visualizations</li>
<li>Location-awareness</li> <li>Device status messages</li>
<li>Status context</li>
<li>Application infrastructure</li>
<li>Twitter proxy</li>
<li>Apps</li>
<li>Plugins</li> <li>Plugins</li>
<li><%= link_to '... more', features_pages_path %></li>
</ul> </ul>
</p> </div>
</div>
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<h4 class="breadcrumb">Applications</h4> <div class="panel panel-info">
<p> <div class="panel-heading">
<h3 class="panel-title">
<i class="fa fa-gears fa-fw fa-lg"></i>
Integrate With Anything
</h3>
</div>
<div class="panel-body panel-home">
<ul> <ul>
<li>Sensor monitoring</li> <li>Arduino</li>
<li>Energy monitoring</li> <li>Raspberry Pi</li>
<li>Connecting devices and systems</li> <li>ioBridge / RealTime.io</li>
<li>Geo location tracking</li> <li>Electric Imp</li>
<li>Interfacing with social networks</li> <li>Mobile / Web Applications</li>
<li>RFID transactions</li> <li>Social Networks</li>
<li>Data Analytics</li>
</ul> </ul>
</p> </div>
<h4 class="breadcrumb">Who Uses ThingSpeak</h4> </div>
<p>
<ul>
<li>Application developers</li>
<li>Product integrators</li>
<li>Web designers</li>
</ul>
</p>
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<h4 class="breadcrumb">Get Started</h4> <div class="panel panel-info">
<div class="col-pad"> <div class="panel-heading">
If you are ready to get started, <span id="feature_signup"> <%= link_to t(:signup), new_account_path %></span> for a free user account. <h3 class="panel-title">
<i class="fa fa-comments fa-fw fa-lg"></i>
Connect With Us
</h3>
</div> </div>
<h4 class="breadcrumb">Connect</h4> <div class="panel-body panel-home">
<p>
<ul> <ul>
<li><a href="http://www.twitter.com/thingspeak" title="Follow ThingSpeak on Twitter">Twitter</a></li>
<li><a href="https://github.com/iobridge/ThingSpeak" title="Open Source Internet of Things Project on GitHub">GitHub</a></li> <li><a href="https://github.com/iobridge/ThingSpeak" title="Open Source Internet of Things Project on GitHub">GitHub</a></li>
<li><a href="http://community.thingspeak.com" title="Join the ThingSpeak Community">ThingSpeak Community</a></li> <li><a href="http://www.twitter.com/thingspeak" title="Follow ThingSpeak on Twitter">Twitter</a></li>
<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> <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> <li><a href="mailto:support@thingspeak.com" title="Contact ThingSpeak">Questions</a></li>
</ul> </ul>
</p> </div>
</div>
</div> </div>
</div> </div>
<br><br><br> <br><br>
<div class="row"> <div class="jumbotron">
<div class="col-sm-offset-2 col-sm-8 col-xs-12"> <h1>Get Started</h1>
<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="center-block" style="max-width: 600px;"> <p>
<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> <a href="/docs" target="_blank" class="btn btn-info btn-lg">Learn More</a>
<a id="contact_link" class="btn btn-success btn-lg"><%= t(:contact_us) %></a>
</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>

View File

@ -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"

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 987 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 715 B

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB