Compare commits
11 commits
develop
...
instance/u
Author | SHA1 | Date | |
---|---|---|---|
|
7224d02c20 | ||
|
4f6c93e86e | ||
|
1b7acd72e1 | ||
|
e824dbb8f2 | ||
|
3c0c937c55 | ||
|
ede0adf1fd | ||
|
08e03c11f6 | ||
|
292d31aa1e | ||
|
a638f39008 | ||
|
f8d2817acb | ||
|
3e563fb2ae |
31 changed files with 274 additions and 189 deletions
|
@ -1 +1 @@
|
||||||
metamaps
|
metamaps_uts
|
||||||
|
|
62
app/assets/javascripts/particles-bg.js
Normal file
62
app/assets/javascripts/particles-bg.js
Normal file
File diff suppressed because one or more lines are too long
BIN
app/assets/stylesheets/Fonts/notosansui-bold-webfont.woff
Normal file
BIN
app/assets/stylesheets/Fonts/notosansui-bold-webfont.woff
Normal file
Binary file not shown.
BIN
app/assets/stylesheets/Fonts/notosansui-bold-webfont.woff2
Normal file
BIN
app/assets/stylesheets/Fonts/notosansui-bold-webfont.woff2
Normal file
Binary file not shown.
BIN
app/assets/stylesheets/Fonts/notosansui-bolditalic-webfont.woff
Normal file
BIN
app/assets/stylesheets/Fonts/notosansui-bolditalic-webfont.woff
Normal file
Binary file not shown.
BIN
app/assets/stylesheets/Fonts/notosansui-bolditalic-webfont.woff2
Normal file
BIN
app/assets/stylesheets/Fonts/notosansui-bolditalic-webfont.woff2
Normal file
Binary file not shown.
BIN
app/assets/stylesheets/Fonts/notosansui-regular-webfont.woff
Normal file
BIN
app/assets/stylesheets/Fonts/notosansui-regular-webfont.woff
Normal file
Binary file not shown.
BIN
app/assets/stylesheets/Fonts/notosansui-regular-webfont.woff2
Normal file
BIN
app/assets/stylesheets/Fonts/notosansui-regular-webfont.woff2
Normal file
Binary file not shown.
|
@ -222,7 +222,6 @@ button.button.btn-no:hover {
|
||||||
}
|
}
|
||||||
|
|
||||||
.new_user{
|
.new_user{
|
||||||
height: 412px;
|
|
||||||
margin-left:-166px;
|
margin-left:-166px;
|
||||||
box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.23), 0px 3px 3px rgba(0, 0, 0, 0.16);
|
box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.23), 0px 3px 3px rgba(0, 0, 0, 0.16);
|
||||||
font-family: din-medium;
|
font-family: din-medium;
|
||||||
|
|
|
@ -18,10 +18,26 @@
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
@font-face {
|
||||||
.backface-visible {
|
font-family: 'noto-sans-regular';
|
||||||
-webkit-backface-visibility: visible !important;
|
src: url(<%= asset_path 'Fonts/notosansui-regular-webfont.woff2' %>) format('woff2'),
|
||||||
backface-visibility: visible !important;
|
url(<%= asset_path 'Fonts/notosansui-regular-webfont.woff' %>) format('woff');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'noto-sans-bold';
|
||||||
|
src: url(<%= asset_path 'Fonts/notosansui-bold-webfont.woff2' %>) format('woff2'),
|
||||||
|
url(<%= asset_path 'Fonts/notosansui-bold-webfont.woff' %>) format('woff');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: 'noto-sans-bold-italic';
|
||||||
|
src: url(<%= asset_path 'Fonts/notosansui-bolditalic-webfont.woff2' %>) format('woff2'),
|
||||||
|
url(<%= asset_path 'Fonts/notosansui-bolditalic-webfont.woff' %>) format('woff');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
#yield {
|
#yield {
|
||||||
|
@ -227,119 +243,109 @@
|
||||||
|
|
||||||
/* end map wrapper */
|
/* end map wrapper */
|
||||||
|
|
||||||
/* yield */
|
/* homepage */
|
||||||
|
|
||||||
.famousYield {
|
body.unauthenticated.action-home {
|
||||||
overflow-y:auto;
|
background: white;
|
||||||
|
font-family: 'noto-sans', sans-serif;
|
||||||
|
font-weight: 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* homepage */
|
.home {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homeLogo {
|
||||||
|
position: fixed;
|
||||||
|
top: 10px;
|
||||||
|
left: 20px;
|
||||||
|
font-family: 'noto-sans-bold-italic', sans-serif;
|
||||||
|
font-size: 22px;
|
||||||
|
color: #6D6D6D;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#particles-bg {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.homeWrapper.homeText {
|
.homeWrapper.homeText {
|
||||||
margin-top: 5%;
|
margin-top: 5%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.fullWidthWrapper {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.fullWidthWrapper.withVideo {
|
|
||||||
height: 315px;
|
|
||||||
background: #757575;
|
|
||||||
}
|
|
||||||
|
|
||||||
.homeWrapper {
|
.homeWrapper {
|
||||||
|
box-sizing: border-box;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
border-radius: 3px;
|
||||||
|
color: #6D6D6D;
|
||||||
|
text-align: center;
|
||||||
|
padding: 30px;
|
||||||
|
background: white;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width : 800px) {
|
||||||
|
.homeWrapper {
|
||||||
|
width: 90%;
|
||||||
|
margin: 0 5%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media only screen and (min-width : 801px) {
|
||||||
|
.homeWrapper {
|
||||||
width: 800px;
|
width: 800px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
color: #424242;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.homeTitle {
|
.homeTitle {
|
||||||
font-size: 64px;
|
font-size: 64px;
|
||||||
line-height: 48px;
|
line-height: 70px;
|
||||||
text-align: center;
|
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
|
font-family: 'noto-sans-bold', sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.homeIntro {
|
.homeIntro {
|
||||||
font-size: 22px;
|
font-size: 22px;
|
||||||
line-height: 26px;
|
line-height: 26px;
|
||||||
text-align: justify;
|
|
||||||
margin: 32px 0 20px;
|
margin: 32px 0 20px;
|
||||||
font-family: 'din-regular', helvetica, sans-serif;
|
}
|
||||||
|
|
||||||
|
.homeIntro div {
|
||||||
|
margin: 20px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.homeWrapper .green {
|
.homeWrapper .green {
|
||||||
color: #4fc059;
|
color: #4fc059;
|
||||||
}
|
}
|
||||||
|
.homeWrapper .purple {
|
||||||
.homeWrapper .din-medium {
|
color: #a354cd;
|
||||||
font-family: 'din-medium', helvetica, sans-serif;
|
}
|
||||||
|
.homeWrapper .yellow {
|
||||||
|
color: #dab539;
|
||||||
}
|
}
|
||||||
|
|
||||||
.homeVideo {
|
.ctaContainer {
|
||||||
margin-bottom: 20px;
|
margin: 0 auto;
|
||||||
float: left;
|
|
||||||
}
|
}
|
||||||
|
.requestInviteCTA {
|
||||||
.homeWrapper .callToAction {
|
display: inline-block;
|
||||||
float: left;
|
|
||||||
width: 216px;
|
|
||||||
padding: 8px 0 8px 24px;
|
|
||||||
color: #F5F5F5;
|
|
||||||
}
|
|
||||||
.callToAction h3 {
|
|
||||||
font-size: 24px;
|
|
||||||
}
|
|
||||||
.callToAction p {
|
|
||||||
margin: 8px 0 16px;
|
|
||||||
font-size: 13px;
|
|
||||||
line-height: 16px;
|
|
||||||
font-family: 'din-regular', helvetica, sans-serif;
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
.callToAction a, .callToAction button {
|
|
||||||
display: block;
|
|
||||||
width: 220px;
|
width: 220px;
|
||||||
height: 12px;
|
font-size: 20px;
|
||||||
padding: 16px 0;
|
padding: 16px 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-radius: 2px;
|
border-radius: 3px;
|
||||||
font-size: 12px;
|
border: 2px solid #a354cd;
|
||||||
box-shadow: 0px 1px 1.5px rgba(0,0,0,0.12), 0 1px 1px rgba(0,0,0,0.24);
|
margin: 12px 12px;
|
||||||
margin: 0 auto;
|
color: #a354cd;
|
||||||
color: #FFFFFF;
|
font-family: 'noto-sans-bold', sans-serif;
|
||||||
box-sizing: content-box;
|
|
||||||
-moz-box-sizing: content-box;
|
|
||||||
-webkit-box-sizing: content-box;
|
|
||||||
}
|
|
||||||
.callToAction .requestInviteCTA {
|
|
||||||
background-color: #4fc059;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
.callToAction .requestInviteCTA:hover {
|
|
||||||
background-color: #49ad4e;
|
|
||||||
}
|
|
||||||
.callToAction .exploreFeaturedCTA {
|
|
||||||
background-color: #a354cd;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
.callToAction .exploreFeaturedCTA:hover {
|
|
||||||
background-color: #9150bc;
|
|
||||||
}
|
|
||||||
.callToAction .learnMoreCTA {
|
|
||||||
background-color: #4fb5c0;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
}
|
|
||||||
.callToAction .learnMoreCTA:hover {
|
|
||||||
background-color: #419599;
|
|
||||||
}
|
}
|
||||||
|
.requestInviteCTA:hover {
|
||||||
|
|
||||||
.fullWidthWrapper.withPartners {
|
|
||||||
background: url(<%= asset_path('homepage_bg_fade.png') %>) no-repeat center -300px;
|
|
||||||
}
|
|
||||||
.homeWrapper.homePartners {
|
|
||||||
padding: 64px 0 280px;
|
|
||||||
height: 96px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* end home page */
|
/* end home page */
|
||||||
|
|
|
@ -60,19 +60,6 @@
|
||||||
.homeIntro {
|
.homeIntro {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
.fullWidthWrapper.withVideo {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
.homeVideo {
|
|
||||||
width: 100% !important;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
.fullWidthWrapper.withPartners {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.learnMoreCTA {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#yield {
|
#yield {
|
||||||
padding-top: 50px;
|
padding-top: 50px;
|
||||||
|
|
9
app/controllers/users/confirmations_controller.rb
Normal file
9
app/controllers/users/confirmations_controller.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
module Users
|
||||||
|
class ConfirmationsController < Devise::ConfirmationsController
|
||||||
|
private
|
||||||
|
def after_confirmation_path_for(resource_name, resource)
|
||||||
|
sign_in_path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -7,6 +7,10 @@ module Users
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
|
def after_inactive_sign_up_path_for(resource)
|
||||||
|
sign_in_path
|
||||||
|
end
|
||||||
|
|
||||||
def after_update_path_for(resource)
|
def after_update_path_for(resource)
|
||||||
signed_in_root_path(resource)
|
signed_in_root_path(resource)
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,9 +17,7 @@ class User < ApplicationRecord
|
||||||
|
|
||||||
has_many :following, class_name: 'Follow'
|
has_many :following, class_name: 'Follow'
|
||||||
|
|
||||||
after_create :generate_code
|
devise :database_authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :registerable
|
||||||
|
|
||||||
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable
|
|
||||||
|
|
||||||
serialize :settings, UserPreference
|
serialize :settings, UserPreference
|
||||||
|
|
||||||
|
@ -35,8 +33,7 @@ class User < ApplicationRecord
|
||||||
validates :email, presence: true # done by devise
|
validates :email, presence: true # done by devise
|
||||||
validates :name, uniqueness: true # done by devise
|
validates :name, uniqueness: true # done by devise
|
||||||
validates :email, uniqueness: true # done by devise
|
validates :email, uniqueness: true # done by devise
|
||||||
|
validates_format_of :email, with: /\@uts\.edu\.au/, message: ' must end with @uts.edu.au'
|
||||||
validates :joinedwithcode, presence: true, inclusion: { in: $codes, message: '%{value} is not valid' }, on: :create
|
|
||||||
|
|
||||||
# This method associates the attribute ":image" with a file attachment
|
# This method associates the attribute ":image" with a file attachment
|
||||||
has_attached_file :image, styles: {
|
has_attached_file :image, styles: {
|
||||||
|
|
|
@ -87,20 +87,6 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<% if current_user %>
|
<% if current_user %>
|
||||||
<div class="lightboxContent" id="invite">
|
|
||||||
<h3>SHARE INVITE</h3>
|
|
||||||
|
|
||||||
<div class="leaveSpace"></div>
|
|
||||||
<p>The Metamaps platform is currently in an invite-only beta with the express purpose of creating a high value knowledge ecosystem, a diverse community of contributors and a culture of collaboration and curiosity.</p>
|
|
||||||
<p>As a valued beta tester, you have the ability to invite your peers, colleagues and collaborators onto the platform.</p>
|
|
||||||
<p>Below is a personal invite link containing your unique access code, which can be used multiple times.</p>
|
|
||||||
<div id="joinCodesBox">
|
|
||||||
<p class="joinCodes"><%= invite_link() %>
|
|
||||||
<button class="button" onclick="Metamaps.GlobalUI.shareInvite('<%= @invite_link %>');">COPY INVITE LINK!</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="lightboxContent" id="forkmap">
|
<div class="lightboxContent" id="forkmap">
|
||||||
<%= render :partial => 'shared/forkmap' %>
|
<%= render :partial => 'shared/forkmap' %>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,37 +3,33 @@
|
||||||
# Located at /
|
# Located at /
|
||||||
# Shows 3 most recently created topics, synapses, and maps.
|
# Shows 3 most recently created topics, synapses, and maps.
|
||||||
#
|
#
|
||||||
%>
|
%>
|
||||||
|
|
||||||
<% content_for :title, "Home | Metamaps" %>
|
<% content_for :title, "Home | Metamaps" %>
|
||||||
<% content_for :mobile_title, "Home" %>
|
<% content_for :mobile_title, "Home" %>
|
||||||
<div id="yield">
|
<div class="home">
|
||||||
|
<div id="particles-bg"></div>
|
||||||
<div class="homeWrapper homeText">
|
<div class="homeWrapper homeText">
|
||||||
<div class="homeTitle">Make Sense with Metamaps</div>
|
<div class="homeTitle">Make sense, together.</div>
|
||||||
<div class="homeIntro">
|
<div class="homeIntro">
|
||||||
<span class="green din-medium">METAMAPS.CC</span> is a free and open source platform that supports real-time sense-making, distributed collaboration, and the creative intelligence of individuals, organizations and communities. We are currently in an <span class="din-medium">invite-only beta.</span>
|
<div>Untangle complex conversations, expand perspectives, and gain insights
|
||||||
</div>
|
about the things that matter to you.
|
||||||
</div>
|
</div>
|
||||||
<div class="fullWidthWrapper withVideo">
|
<div>Metamaps enables individual and collaborative sensemaking through
|
||||||
<div class="homeWrapper">
|
<span class="purple">concept mapping</span>, <span class="green">live video + text chat</span>, and a <span class="yellow">shared knowledge graph</span>.
|
||||||
<iframe class="homeVideo" src="https://player.vimeo.com/video/113154814" width="560" height="315" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
|
</div>
|
||||||
<div class="callToAction">
|
<div>The University of Technology Sydney is using Metamaps
|
||||||
<h3>Who finds it useful?</h3>
|
to share knowledge, and think better together.
|
||||||
<p>Designers, inventors, artists, educators, strategists, consultants, facilitators, entrepreneurs, systems thinkers, changemakers, analysts, students, researchers... maybe you!</p>
|
</div>
|
||||||
<button type="button" class="button learnMoreCTA" onclick="Metamaps.GlobalUI.openLightbox('about');">LEARN MORE</button>
|
<div>
|
||||||
<a href="/explore/featured" data-router="true" class="exploreFeaturedCTA">EXPLORE FEATURED MAPS</a>
|
<a href="/join" class="requestInviteCTA">SIGN UP</a>
|
||||||
<a href="/request" class="requestInviteCTA">REQUEST INVITE</a>
|
<a href="/login" class="requestInviteCTA">LOG IN</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfloat"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="fullWidthWrapper withPartners">
|
|
||||||
<div class="homeWrapper homePartners">
|
|
||||||
<% # our partners %>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- end yield -->
|
</div><!-- end yield -->
|
||||||
|
|
||||||
|
<%= javascript_include_tag "particles-bg" %>
|
||||||
<script>
|
<script>
|
||||||
Metamaps.currentSection = ''
|
Metamaps.currentSection = ''
|
||||||
Metamaps.currentPage = ''
|
Metamaps.currentPage = ''
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
<%#
|
|
||||||
# @file
|
|
||||||
# Located at /request
|
|
||||||
# Shows a form where people can request an invite
|
|
||||||
#%>
|
|
||||||
|
|
||||||
<% content_for :title, "Request Invite | Metamaps" %>
|
|
||||||
<% content_for :mobile_title, "Request Invite" %>
|
|
||||||
<div class="requestInviteHeader"></div>
|
|
||||||
<iframe class="requestInvite" src="https://docs.google.com/forms/d/1lWoKPFHErsDfV5l7-SvcHxwX3vDi9nNNVW0rFMgJwgg/viewform?embedded=true" width="700" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>
|
|
|
@ -8,5 +8,3 @@
|
||||||
|
|
||||||
<div><%= f.submit "Resend confirmation instructions" %></div>
|
<div><%= f.submit "Resend confirmation instructions" %></div>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= render "devise/shared/links" %>
|
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
# /users/:id/edit
|
# /users/:id/edit
|
||||||
# User edit form
|
# User edit form
|
||||||
#%>
|
#%>
|
||||||
|
|
||||||
<% content_for :title, @user.name + "'s Settings | Metamaps" %>
|
<% content_for :title, @user.name + "'s Settings | Metamaps" %>
|
||||||
<% content_for :mobile_title, "Account Settings" %>
|
<% content_for :mobile_title, "Account Settings" %>
|
||||||
<div id="yield">
|
<div id="yield">
|
||||||
<%= form_for @user, url: user_url, :html =>{ :multipart => true, :class => "edit_user centerGreyForm"} do |form| %>
|
<%= form_for @user, url: user_url, :html =>{ :multipart => true, :class => "edit_user centerGreyForm"} do |form| %>
|
||||||
|
@ -36,9 +36,8 @@
|
||||||
<%= form.label :name, "Name:", class: 'firstFieldText' %>
|
<%= form.label :name, "Name:", class: 'firstFieldText' %>
|
||||||
<%= form.text_field :name %>
|
<%= form.text_field :name %>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="firstFieldText">
|
||||||
<%= form.label :email, "Email:", class: 'firstFieldText' %>
|
Email: <%= @user.email %>
|
||||||
<%= form.email_field :email %>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<%= form.label :emails_allowed, class: 'firstFieldText' do %>
|
<%= form.label :emails_allowed, class: 'firstFieldText' do %>
|
||||||
|
|
|
@ -3,12 +3,17 @@
|
||||||
|
|
||||||
<div id="yield">
|
<div id="yield">
|
||||||
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :post, :class => "new_user centerGreyForm" }) do |f| %>
|
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :post, :class => "new_user centerGreyForm" }) do |f| %>
|
||||||
|
|
||||||
<h3>Sign Up</h3>
|
<h3>Sign Up</h3>
|
||||||
|
|
||||||
|
<div class="fieldText">
|
||||||
|
Only email addresses at the uts.edu.au domain name will be able to register.
|
||||||
|
All users must verify their email address.
|
||||||
|
</div>
|
||||||
|
|
||||||
<div><%= f.label :name, "Name:", :class => "firstFieldText" %>
|
<div><%= f.label :name, "Name:", :class => "firstFieldText" %>
|
||||||
<%= f.text_field :name, :autofocus => true %></div>
|
<%= f.text_field :name, :autofocus => true %></div>
|
||||||
|
|
||||||
<div><%= f.label :email, "Email:", :class => "fieldText" %>
|
<div><%= f.label :email, "Email:", :class => "fieldText" %>
|
||||||
<%= f.email_field :email %></div>
|
<%= f.email_field :email %></div>
|
||||||
|
|
||||||
|
@ -17,13 +22,7 @@
|
||||||
|
|
||||||
<div><%= f.label :password_confirmation, "Password Confirmation:", :class => "fieldText" %>
|
<div><%= f.label :password_confirmation, "Password Confirmation:", :class => "fieldText" %>
|
||||||
<%= f.password_field :password_confirmation %></div>
|
<%= f.password_field :password_confirmation %></div>
|
||||||
|
|
||||||
<div><%= f.label "Access Code:", :class => "fieldText" %>
|
|
||||||
<%= f.text_field :joinedwithcode, :value => params[:code] %></div>
|
|
||||||
|
|
||||||
<div><%= f.submit "Sign up!" %></div>
|
<div><%= f.submit "Sign up" %></div>
|
||||||
|
|
||||||
<div class = "smallText"><br />Don't have an access code?<br /><a href="/request">Request an Invite</a></div>
|
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
22
bin/uts.metamaps.cc-map-follow-notifications.sh
Executable file
22
bin/uts.metamaps.cc-map-follow-notifications.sh
Executable file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
cd /home/metamaps/uts.metamaps.cc/
|
||||||
|
|
||||||
|
date
|
||||||
|
|
||||||
|
# Load RVM into a shell session *as a function*
|
||||||
|
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
|
||||||
|
source "$HOME/.rvm/scripts/rvm"
|
||||||
|
elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
|
||||||
|
source "/usr/local/rvm/scripts/rvm"
|
||||||
|
else
|
||||||
|
printf "ERROR: An RVM installation was not found.\n"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
VERSION="$(cat .ruby-version)"
|
||||||
|
GEMSET="$(cat .ruby-gemset)"
|
||||||
|
rvm use ${VERSION}@${GEMSET}
|
||||||
|
|
||||||
|
source .env
|
||||||
|
bundle exec rake metamaps:deliver_map_activity_emails
|
||||||
|
echo ""
|
|
@ -9,5 +9,5 @@ Rails.application.configure do
|
||||||
|
|
||||||
# Precompile additional assets.
|
# Precompile additional assets.
|
||||||
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
||||||
config.assets.precompile += %w( application-secret.css application-secret.js webpacked/metamaps.bundle.js )
|
config.assets.precompile += %w( application-secret.css application-secret.js particles-bg.js webpacked/metamaps.bundle.js )
|
||||||
end
|
end
|
||||||
|
|
|
@ -116,7 +116,7 @@ Devise.setup do |config|
|
||||||
# initial account confirmation) to be applied. Requires additional unconfirmed_email
|
# initial account confirmation) to be applied. Requires additional unconfirmed_email
|
||||||
# db field (see migrations). Until confirmed new email is stored in
|
# db field (see migrations). Until confirmed new email is stored in
|
||||||
# unconfirmed email column, and copied to email column on successful confirmation.
|
# unconfirmed email column, and copied to email column on successful confirmation.
|
||||||
config.reconfirmable = true
|
config.reconfirmable = false
|
||||||
|
|
||||||
# Defines which key will be used when confirming an account
|
# Defines which key will be used when confirming an account
|
||||||
# config.confirmation_keys = [ :email ]
|
# config.confirmation_keys = [ :email ]
|
||||||
|
|
|
@ -4,7 +4,6 @@ Metamaps::Application.routes.draw do
|
||||||
mount ActionCable.server => '/cable'
|
mount ActionCable.server => '/cable'
|
||||||
|
|
||||||
root to: 'main#home', via: :get
|
root to: 'main#home', via: :get
|
||||||
get 'request', to: 'main#requestinvite', as: :request
|
|
||||||
|
|
||||||
namespace :explore do
|
namespace :explore do
|
||||||
get 'active'
|
get 'active'
|
||||||
|
@ -98,6 +97,7 @@ Metamaps::Application.routes.draw do
|
||||||
resources :tokens, only: [:new]
|
resources :tokens, only: [:new]
|
||||||
|
|
||||||
devise_for :users, skip: :sessions, controllers: {
|
devise_for :users, skip: :sessions, controllers: {
|
||||||
|
confirmations: 'users/confirmations',
|
||||||
registrations: 'users/registrations',
|
registrations: 'users/registrations',
|
||||||
passwords: 'users/passwords',
|
passwords: 'users/passwords',
|
||||||
sessions: 'users/sessions'
|
sessions: 'users/sessions'
|
||||||
|
|
20
db/migrate/20171016214309_add_confirmable_to_devise.rb
Normal file
20
db/migrate/20171016214309_add_confirmable_to_devise.rb
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
class AddConfirmableToDevise < ActiveRecord::Migration[5.0]
|
||||||
|
# Note: You can't use change, as User.update_all will fail in the down migration
|
||||||
|
def up
|
||||||
|
add_column :users, :confirmation_token, :string
|
||||||
|
add_column :users, :confirmed_at, :datetime
|
||||||
|
add_column :users, :confirmation_sent_at, :datetime
|
||||||
|
# add_column :users, :unconfirmed_email, :string # Only if using reconfirmable
|
||||||
|
add_index :users, :confirmation_token, unique: true
|
||||||
|
# User.reset_column_information # Need for some types of updates, but not for update_all.
|
||||||
|
# To avoid a short time window between running the migration and updating all existing
|
||||||
|
# users as confirmed, do the following
|
||||||
|
User.all.update_all confirmed_at: DateTime.now
|
||||||
|
# All existing user accounts should be able to log in after this.
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
remove_columns :users, :confirmation_token, :confirmed_at, :confirmation_sent_at
|
||||||
|
# remove_columns :users, :unconfirmed_email # Only if using reconfirmable
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 20170903180840) do
|
ActiveRecord::Schema.define(version: 20171016214309) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
@ -359,6 +359,10 @@ ActiveRecord::Schema.define(version: 20170903180840) do
|
||||||
t.datetime "image_updated_at"
|
t.datetime "image_updated_at"
|
||||||
t.integer "generation"
|
t.integer "generation"
|
||||||
t.boolean "emails_allowed", default: true
|
t.boolean "emails_allowed", default: true
|
||||||
|
t.string "confirmation_token"
|
||||||
|
t.datetime "confirmed_at"
|
||||||
|
t.datetime "confirmation_sent_at"
|
||||||
|
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true, using: :btree
|
||||||
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
|
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -28,14 +28,6 @@ class AccountMenu extends Component {
|
||||||
<div className="accountIcon"></div>
|
<div className="accountIcon"></div>
|
||||||
<a href="/metacodes">Admin</a>
|
<a href="/metacodes">Admin</a>
|
||||||
</li>
|
</li>
|
||||||
<li className="accountListItem accountApps">
|
|
||||||
<div className="accountIcon"></div>
|
|
||||||
<a href="/oauth/authorized_applications">Apps</a>
|
|
||||||
</li>
|
|
||||||
<li className="accountListItem accountInvite" onClick={onInviteClick}>
|
|
||||||
<div className="accountIcon"></div>
|
|
||||||
<span>Share Invite</span>
|
|
||||||
</li>
|
|
||||||
<li className="accountListItem accountLogout">
|
<li className="accountListItem accountLogout">
|
||||||
<div className="accountIcon"></div>
|
<div className="accountIcon"></div>
|
||||||
<a id="Logout" href="/logout">Sign Out</a>
|
<a id="Logout" href="/logout">Sign Out</a>
|
||||||
|
|
|
@ -12,19 +12,25 @@ class UpperLeftUI extends Component {
|
||||||
onRequestClick: PropTypes.func
|
onRequestClick: PropTypes.func
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static contextTypes = {
|
||||||
|
location: PropTypes.object
|
||||||
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { map, currentUser, userRequested, requestAnswered, requestApproved, onRequestClick } = this.props
|
const { map, currentUser, userRequested, requestAnswered, requestApproved, onRequestClick } = this.props
|
||||||
|
const { pathname } = this.context.location
|
||||||
|
const unauthedHome = pathname === '/' && !currentUser
|
||||||
return <div className="upperLeftUI">
|
return <div className="upperLeftUI">
|
||||||
<div className="homeButton">
|
<div className="homeButton">
|
||||||
{currentUser && <Link to="/">METAMAPS</Link>}
|
{currentUser && <Link to="/">METAMAPS</Link>}
|
||||||
{!currentUser && <a href="/">METAMAPS</a>}
|
{!currentUser && <a href="/">METAMAPS</a>}
|
||||||
</div>
|
</div>
|
||||||
<div className="sidebarSearch">
|
{!unauthedHome && <div className="sidebarSearch">
|
||||||
<input type="text" className="sidebarSearchField" placeholder="Search for topics, maps, and mappers..." />
|
<input type="text" className="sidebarSearchField" placeholder="Search for topics, maps, and mappers..." />
|
||||||
<div id="searchLoading"></div>
|
<div id="searchLoading"></div>
|
||||||
<div className="sidebarSearchIcon"></div>
|
<div className="sidebarSearchIcon"></div>
|
||||||
<div className="clearfloat"></div>
|
<div className="clearfloat"></div>
|
||||||
</div>
|
</div>}
|
||||||
{map && !map.authorizeToEdit(currentUser) && <div className="viewOnly">
|
{map && !map.authorizeToEdit(currentUser) && <div className="viewOnly">
|
||||||
<div className="eyeball">View Only</div>
|
<div className="eyeball">View Only</div>
|
||||||
{currentUser && !userRequested && <div className="requestAccess requestNotice" onClick={onRequestClick}>Request Access</div>}
|
{currentUser && !userRequested && <div className="requestAccess requestNotice" onClick={onRequestClick}>Request Access</div>}
|
||||||
|
|
|
@ -18,6 +18,10 @@ class UpperRightUI extends Component {
|
||||||
openInviteLightbox: PropTypes.func
|
openInviteLightbox: PropTypes.func
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static contextTypes = {
|
||||||
|
location: PropTypes.object
|
||||||
|
}
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props)
|
super(props)
|
||||||
this.state = {
|
this.state = {
|
||||||
|
@ -52,6 +56,8 @@ class UpperRightUI extends Component {
|
||||||
notifications, fetchNotifications, openInviteLightbox,
|
notifications, fetchNotifications, openInviteLightbox,
|
||||||
markAsRead, markAsUnread } = this.props
|
markAsRead, markAsUnread } = this.props
|
||||||
const { accountBoxOpen, notificationsBoxOpen } = this.state
|
const { accountBoxOpen, notificationsBoxOpen } = this.state
|
||||||
|
const { pathname } = this.context.location
|
||||||
|
const unauthedHome = pathname === '/' && !currentUser
|
||||||
return <div className="upperRightUI">
|
return <div className="upperRightUI">
|
||||||
{currentUser && <a href="/maps/new" target="_blank" className="addMap upperRightEl upperRightIcon">
|
{currentUser && <a href="/maps/new" target="_blank" className="addMap upperRightEl upperRightIcon">
|
||||||
<div className="tooltipsUnder">
|
<div className="tooltipsUnder">
|
||||||
|
@ -69,7 +75,7 @@ class UpperRightUI extends Component {
|
||||||
markAsUnread={markAsUnread}
|
markAsUnread={markAsUnread}
|
||||||
toggleNotificationsBox={this.toggleNotificationsBox}/>}
|
toggleNotificationsBox={this.toggleNotificationsBox}/>}
|
||||||
</span>}
|
</span>}
|
||||||
{!signInPage && <div className="sidebarAccount upperRightEl">
|
{!signInPage && !unauthedHome && <div className="sidebarAccount upperRightEl">
|
||||||
<div className="sidebarAccountIcon ignore-react-onclickoutside" onClick={this.toggleAccountBox}>
|
<div className="sidebarAccountIcon ignore-react-onclickoutside" onClick={this.toggleAccountBox}>
|
||||||
<div className="tooltipsUnder">Account</div>
|
<div className="tooltipsUnder">Account</div>
|
||||||
{currentUser && <img src={currentUser.get('image')} />}
|
{currentUser && <img src={currentUser.get('image')} />}
|
||||||
|
|
|
@ -76,12 +76,12 @@ class App extends Component {
|
||||||
mobileTitleWidth={mobileTitleWidth}
|
mobileTitleWidth={mobileTitleWidth}
|
||||||
onTitleClick={mobileTitleClick}
|
onTitleClick={mobileTitleClick}
|
||||||
serverData={serverData} />}
|
serverData={serverData} />}
|
||||||
{!unauthedHome && <UpperLeftUI currentUser={currentUser}
|
<UpperLeftUI currentUser={currentUser}
|
||||||
map={map}
|
map={map}
|
||||||
userRequested={userRequested}
|
userRequested={userRequested}
|
||||||
requestAnswered={requestAnswered}
|
requestAnswered={requestAnswered}
|
||||||
requestApproved={requestApproved}
|
requestApproved={requestApproved}
|
||||||
onRequestClick={onRequestAccess} />}
|
onRequestClick={onRequestAccess} />
|
||||||
{!mobile && <UpperRightUI currentUser={currentUser}
|
{!mobile && <UpperRightUI currentUser={currentUser}
|
||||||
unreadNotificationsCount={unreadNotificationsCount}
|
unreadNotificationsCount={unreadNotificationsCount}
|
||||||
notifications={notifications}
|
notifications={notifications}
|
||||||
|
@ -91,7 +91,6 @@ class App extends Component {
|
||||||
openInviteLightbox={openInviteLightbox}
|
openInviteLightbox={openInviteLightbox}
|
||||||
signInPage={pathname === '/login'} />}
|
signInPage={pathname === '/login'} />}
|
||||||
<Toast message={toast} />
|
<Toast message={toast} />
|
||||||
{!mobile && currentUser && <a className='feedback-icon' target='_blank' href='https://hylo.com/c/metamaps/tag/feedback'></a>}
|
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,5 +11,9 @@ namespace :assets do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# run before
|
||||||
Rake::Task[:'assets:precompile'].enhance([:'assets:js_compile'])
|
Rake::Task[:'assets:precompile'].enhance([:'assets:js_compile'])
|
||||||
Rake::Task[:'assets:precompile'].enhance([:'assets:production_ready'])
|
# run after
|
||||||
|
Rake::Task[:'assets:precompile'].enhance do
|
||||||
|
Rake::Task[:'assets:production_ready'].invoke
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in a new issue