update
This commit is contained in:
commit
1e9f4b514c
20 changed files with 193 additions and 3786 deletions
7
Gemfile
7
Gemfile
|
|
@ -52,7 +52,11 @@ gem 'uglifier', '>= 1.3.0'
|
|||
gem 'bootstrap-sass', '~> 3.3.4.1'
|
||||
gem 'autoprefixer-rails'
|
||||
gem 'formtastic-bootstrap'
|
||||
<<<<<<< HEAD
|
||||
gem 'formtastic', '~> 2.3.0.rc3'
|
||||
=======
|
||||
gem 'formtastic', '~> 3.1.1'
|
||||
>>>>>>> upstream/master
|
||||
gem 'cocoon'
|
||||
|
||||
# frontend javascripts
|
||||
|
|
@ -85,7 +89,10 @@ end
|
|||
gem 'bootstrap3-datetimepicker-rails', '~> 3.0.2'
|
||||
gem 'jquery-datatables-rails', '~> 2.2.1'
|
||||
# for charts
|
||||
<<<<<<< HEAD
|
||||
gem 'd3_rails'
|
||||
=======
|
||||
>>>>>>> upstream/master
|
||||
gem 'chart-js-rails'
|
||||
|
||||
# for user avatars
|
||||
|
|
|
|||
65
Gemfile.lock
65
Gemfile.lock
|
|
@ -9,6 +9,7 @@ GEM
|
|||
remote: https://rubygems.org/
|
||||
remote: https://rails-assets.org/
|
||||
specs:
|
||||
<<<<<<< HEAD
|
||||
actionmailer (4.2.5.1)
|
||||
actionpack (= 4.2.5.1)
|
||||
actionview (= 4.2.5.1)
|
||||
|
|
@ -18,18 +19,35 @@ GEM
|
|||
actionpack (4.2.5.1)
|
||||
actionview (= 4.2.5.1)
|
||||
activesupport (= 4.2.5.1)
|
||||
=======
|
||||
actionmailer (4.2.5.2)
|
||||
actionpack (= 4.2.5.2)
|
||||
actionview (= 4.2.5.2)
|
||||
activejob (= 4.2.5.2)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
actionpack (4.2.5.2)
|
||||
actionview (= 4.2.5.2)
|
||||
activesupport (= 4.2.5.2)
|
||||
>>>>>>> upstream/master
|
||||
rack (~> 1.6)
|
||||
rack-test (~> 0.6.2)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
<<<<<<< HEAD
|
||||
actionview (4.2.5.1)
|
||||
activesupport (= 4.2.5.1)
|
||||
=======
|
||||
actionview (4.2.5.2)
|
||||
activesupport (= 4.2.5.2)
|
||||
>>>>>>> upstream/master
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
active_model_serializers (0.8.1)
|
||||
activemodel (>= 3.0)
|
||||
<<<<<<< HEAD
|
||||
activejob (4.2.5.1)
|
||||
activesupport (= 4.2.5.1)
|
||||
globalid (>= 0.3.0)
|
||||
|
|
@ -41,6 +59,19 @@ GEM
|
|||
activesupport (= 4.2.5.1)
|
||||
arel (~> 6.0)
|
||||
activesupport (4.2.5.1)
|
||||
=======
|
||||
activejob (4.2.5.2)
|
||||
activesupport (= 4.2.5.2)
|
||||
globalid (>= 0.3.0)
|
||||
activemodel (4.2.5.2)
|
||||
activesupport (= 4.2.5.2)
|
||||
builder (~> 3.1)
|
||||
activerecord (4.2.5.2)
|
||||
activemodel (= 4.2.5.2)
|
||||
activesupport (= 4.2.5.2)
|
||||
arel (~> 6.0)
|
||||
activesupport (4.2.5.2)
|
||||
>>>>>>> upstream/master
|
||||
i18n (~> 0.7)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
minitest (~> 5.1)
|
||||
|
|
@ -131,8 +162,6 @@ GEM
|
|||
term-ansicolor
|
||||
thor
|
||||
currencies (0.4.2)
|
||||
d3_rails (3.4.6)
|
||||
railties (>= 3.1.0)
|
||||
daemons (1.1.9)
|
||||
database_cleaner (1.3.0)
|
||||
debug_inspector (0.0.2)
|
||||
|
|
@ -166,10 +195,10 @@ GEM
|
|||
font-awesome-rails (4.1.0.0)
|
||||
railties (>= 3.2, < 5.0)
|
||||
formatador (0.2.4)
|
||||
formtastic (2.3.0.rc3)
|
||||
actionpack (>= 3.0)
|
||||
formtastic-bootstrap (3.0.0)
|
||||
formtastic (>= 2.2)
|
||||
formtastic (3.1.3)
|
||||
actionpack (>= 3.2.13)
|
||||
formtastic-bootstrap (3.1.1)
|
||||
formtastic (>= 3.0)
|
||||
geocoder (1.2.2)
|
||||
globalid (0.3.6)
|
||||
activesupport (>= 4.1.0)
|
||||
|
|
@ -223,7 +252,7 @@ GEM
|
|||
mail (2.6.3)
|
||||
mime-types (>= 1.16, < 3)
|
||||
method_source (0.8.2)
|
||||
mime-types (2.99)
|
||||
mime-types (2.99.1)
|
||||
mimemagic (0.3.0)
|
||||
mina (0.3.8)
|
||||
open4 (~> 1.3.4)
|
||||
|
|
@ -318,6 +347,7 @@ GEM
|
|||
ruby-openid (>= 2.1.8)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
<<<<<<< HEAD
|
||||
rails (4.2.5.1)
|
||||
actionmailer (= 4.2.5.1)
|
||||
actionpack (= 4.2.5.1)
|
||||
|
|
@ -328,6 +358,18 @@ GEM
|
|||
activesupport (= 4.2.5.1)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 4.2.5.1)
|
||||
=======
|
||||
rails (4.2.5.2)
|
||||
actionmailer (= 4.2.5.2)
|
||||
actionpack (= 4.2.5.2)
|
||||
actionview (= 4.2.5.2)
|
||||
activejob (= 4.2.5.2)
|
||||
activemodel (= 4.2.5.2)
|
||||
activerecord (= 4.2.5.2)
|
||||
activesupport (= 4.2.5.2)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 4.2.5.2)
|
||||
>>>>>>> upstream/master
|
||||
sprockets-rails
|
||||
rails-assets-date.format (1.2.3)
|
||||
rails-assets-holderjs (2.9.1)
|
||||
|
|
@ -351,9 +393,15 @@ GEM
|
|||
loofah (~> 2.0)
|
||||
rails-observers (0.1.2)
|
||||
activemodel (~> 4.0)
|
||||
<<<<<<< HEAD
|
||||
railties (4.2.5.1)
|
||||
actionpack (= 4.2.5.1)
|
||||
activesupport (= 4.2.5.1)
|
||||
=======
|
||||
railties (4.2.5.2)
|
||||
actionpack (= 4.2.5.2)
|
||||
activesupport (= 4.2.5.2)
|
||||
>>>>>>> upstream/master
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rainbow (2.1.0)
|
||||
|
|
@ -496,7 +544,6 @@ DEPENDENCIES
|
|||
cocoon
|
||||
country_select!
|
||||
coveralls
|
||||
d3_rails
|
||||
daemons
|
||||
database_cleaner
|
||||
delayed_job_active_record
|
||||
|
|
@ -504,7 +551,7 @@ DEPENDENCIES
|
|||
devise_ichain_authenticatable
|
||||
factory_girl_rails
|
||||
font-awesome-rails
|
||||
formtastic (~> 2.3.0.rc3)
|
||||
formtastic (~> 3.1.1)
|
||||
formtastic-bootstrap
|
||||
gravtastic
|
||||
guard-rspec (~> 4.2.8)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@
|
|||
//= require cocoon
|
||||
//= require bootstrap
|
||||
//= require Chart
|
||||
//= require d3
|
||||
//= require osem
|
||||
//= require osem-dashboard
|
||||
//= require ahoy
|
||||
|
|
|
|||
|
|
@ -1,130 +0,0 @@
|
|||
$(function() {
|
||||
var t;
|
||||
function size(animate){
|
||||
if (animate == undefined){
|
||||
animate = false;
|
||||
}
|
||||
clearTimeout(t);
|
||||
t = setTimeout(function(){
|
||||
$("canvas").each(function(i,el){
|
||||
$(el).attr({
|
||||
"width":$(el).parent().width()
|
||||
});
|
||||
});
|
||||
|
||||
$(".line_chart").each(function(){
|
||||
draw_line_chart(animate, $(this));
|
||||
});
|
||||
|
||||
$(".doughnut_chart").each(function(){
|
||||
if($(this).is(":visible")){
|
||||
draw_doughnut_chart(animate, $(this));
|
||||
}
|
||||
});
|
||||
|
||||
}, 30);
|
||||
}
|
||||
|
||||
function draw_doughnut_chart(animation, $this){
|
||||
var options = get_animation({}, animation);
|
||||
var tmp = $this.data('chart');
|
||||
|
||||
if(jQuery.isEmptyObject(tmp)){
|
||||
// Append error message if there is no data
|
||||
$this.parent().append("<h4 class=\"text-warning\">No data!</h4>");
|
||||
// Remove canvas
|
||||
$this.remove();
|
||||
}else{
|
||||
var data = [];
|
||||
for (var key in tmp) {
|
||||
data.push(tmp[key]);
|
||||
}
|
||||
|
||||
var ctx = $this.get(0).getContext("2d");
|
||||
new Chart(ctx).Doughnut(data, options);
|
||||
}
|
||||
}
|
||||
|
||||
function get_animation(options, animation){
|
||||
if (!animation){
|
||||
options.animation = false;
|
||||
} else {
|
||||
options.animation = true;
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
function draw_line_chart(animation, $canvas){
|
||||
var options = get_animation({}, animation);
|
||||
var chart_data = create_dataset($canvas);
|
||||
var weeks = $canvas.parent().data('weeks');
|
||||
var data = {
|
||||
labels : weeks,
|
||||
datasets : chart_data
|
||||
}
|
||||
|
||||
var ctx = $canvas.get(0).getContext("2d");
|
||||
new Chart(ctx).Line(data, options);
|
||||
}
|
||||
|
||||
function create_dataset($canvas){
|
||||
var selected = getSelectedConferences($canvas);
|
||||
var chart_data = $canvas.parent().data('chart');
|
||||
var conferences = $canvas.parent().data('conferences');
|
||||
var result = [];
|
||||
|
||||
for(var i in conferences){
|
||||
if(selected.indexOf(conferences[i].short_title) >= 0){
|
||||
var options = {};
|
||||
options.fillColor = "rgba(255,255,255,0.0)";
|
||||
options.strokeColor = conferences[i].color;
|
||||
options.data = chart_data[conferences[i].short_title];
|
||||
if(options.data == null || options.data.length == 0){
|
||||
options.data = [0];
|
||||
}
|
||||
result.push(options)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
function getSelectedConferences($canvas){
|
||||
var name = $canvas.data('name');
|
||||
var id = '#' + name + 'Checkboxes'
|
||||
var selected = [];
|
||||
var $checkboxes = $(id + ' input');
|
||||
// If there are checkboxes -> get selected
|
||||
// Else -> use the active conference
|
||||
if($checkboxes.length){
|
||||
$(id + ' input').each(function(){
|
||||
if($(this).is(":checked")) {
|
||||
selected.push($(this).attr('name'));
|
||||
}
|
||||
});
|
||||
}else{
|
||||
var active = $canvas.parent().data('active');
|
||||
for(i in active){
|
||||
selected.push(active[i].short_title)
|
||||
}
|
||||
}
|
||||
return selected;
|
||||
}
|
||||
|
||||
$('.conferenceCheckboxes input').change(function(){
|
||||
var chart_name = $(this).parent().data('chart');
|
||||
var $canvas = $('#line_chart_' + chart_name);
|
||||
draw_line_chart(false, $canvas);
|
||||
});
|
||||
|
||||
$(window).on('resize', function(){
|
||||
size(false);
|
||||
});
|
||||
|
||||
$('#doughnut_tabs a').click(function (e) {
|
||||
e.preventDefault();
|
||||
$(this).tab('show');
|
||||
size(false);
|
||||
});
|
||||
|
||||
size(true);
|
||||
});
|
||||
|
|
@ -1,126 +0,0 @@
|
|||
/*
|
||||
* Date Format 1.2.3
|
||||
* (c) 2007-2009 Steven Levithan <stevenlevithan.com>
|
||||
* MIT license
|
||||
*
|
||||
* Includes enhancements by Scott Trenda <scott.trenda.net>
|
||||
* and Kris Kowal <cixar.com/~kris.kowal/>
|
||||
*
|
||||
* Accepts a date, a mask, or a date and a mask.
|
||||
* Returns a formatted version of the given date.
|
||||
* The date defaults to the current date/time.
|
||||
* The mask defaults to dateFormat.masks.default.
|
||||
*/
|
||||
|
||||
var dateFormat = function () {
|
||||
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
|
||||
timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
|
||||
timezoneClip = /[^-+\dA-Z]/g,
|
||||
pad = function (val, len) {
|
||||
val = String(val);
|
||||
len = len || 2;
|
||||
while (val.length < len) val = "0" + val;
|
||||
return val;
|
||||
};
|
||||
|
||||
// Regexes and supporting functions are cached through closure
|
||||
return function (date, mask, utc) {
|
||||
var dF = dateFormat;
|
||||
|
||||
// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
|
||||
if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
|
||||
mask = date;
|
||||
date = undefined;
|
||||
}
|
||||
|
||||
// Passing date through Date applies Date.parse, if necessary
|
||||
date = date ? new Date(date) : new Date;
|
||||
if (isNaN(date)) throw SyntaxError("invalid date");
|
||||
|
||||
mask = String(dF.masks[mask] || mask || dF.masks["default"]);
|
||||
|
||||
// Allow setting the utc argument via the mask
|
||||
if (mask.slice(0, 4) == "UTC:") {
|
||||
mask = mask.slice(4);
|
||||
utc = true;
|
||||
}
|
||||
|
||||
var _ = utc ? "getUTC" : "get",
|
||||
d = date[_ + "Date"](),
|
||||
D = date[_ + "Day"](),
|
||||
m = date[_ + "Month"](),
|
||||
y = date[_ + "FullYear"](),
|
||||
H = date[_ + "Hours"](),
|
||||
M = date[_ + "Minutes"](),
|
||||
s = date[_ + "Seconds"](),
|
||||
L = date[_ + "Milliseconds"](),
|
||||
o = utc ? 0 : date.getTimezoneOffset(),
|
||||
flags = {
|
||||
d: d,
|
||||
dd: pad(d),
|
||||
ddd: dF.i18n.dayNames[D],
|
||||
dddd: dF.i18n.dayNames[D + 7],
|
||||
m: m + 1,
|
||||
mm: pad(m + 1),
|
||||
mmm: dF.i18n.monthNames[m],
|
||||
mmmm: dF.i18n.monthNames[m + 12],
|
||||
yy: String(y).slice(2),
|
||||
yyyy: y,
|
||||
h: H % 12 || 12,
|
||||
hh: pad(H % 12 || 12),
|
||||
H: H,
|
||||
HH: pad(H),
|
||||
M: M,
|
||||
MM: pad(M),
|
||||
s: s,
|
||||
ss: pad(s),
|
||||
l: pad(L, 3),
|
||||
L: pad(L > 99 ? Math.round(L / 10) : L),
|
||||
t: H < 12 ? "a" : "p",
|
||||
tt: H < 12 ? "am" : "pm",
|
||||
T: H < 12 ? "A" : "P",
|
||||
TT: H < 12 ? "AM" : "PM",
|
||||
Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
|
||||
o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
|
||||
S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
|
||||
};
|
||||
|
||||
return mask.replace(token, function ($0) {
|
||||
return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
|
||||
});
|
||||
};
|
||||
}();
|
||||
|
||||
// Some common format strings
|
||||
dateFormat.masks = {
|
||||
"default": "ddd mmm dd yyyy HH:MM:ss",
|
||||
shortDate: "m/d/yy",
|
||||
mediumDate: "mmm d, yyyy",
|
||||
longDate: "mmmm d, yyyy",
|
||||
fullDate: "dddd, mmmm d, yyyy",
|
||||
shortTime: "h:MM TT",
|
||||
mediumTime: "h:MM:ss TT",
|
||||
longTime: "h:MM:ss TT Z",
|
||||
isoDate: "yyyy-mm-dd",
|
||||
isoTime: "HH:MM:ss",
|
||||
isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
|
||||
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
|
||||
};
|
||||
|
||||
// Internationalization strings
|
||||
dateFormat.i18n = {
|
||||
dayNames: [
|
||||
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
|
||||
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
|
||||
],
|
||||
monthNames: [
|
||||
"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
|
||||
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
|
||||
]
|
||||
};
|
||||
|
||||
// For convenience...
|
||||
Date.prototype.format = function (mask, utc) {
|
||||
return dateFormat(this, mask, utc);
|
||||
};
|
||||
|
||||
|
|
@ -1,18 +1,12 @@
|
|||
$(function () {
|
||||
$("#registration-arrival-datepicker").datetimepicker({
|
||||
pickTime: true,
|
||||
useCurrent: false,
|
||||
minuteStepping: 15,
|
||||
sideBySide: true,
|
||||
format: "YYYY-MM-DD HH:mm"
|
||||
});
|
||||
$("#registration-departure-datepicker").datetimepicker({
|
||||
$("#registration-arrival-datepicker, #registration-departure-datepicker").datetimepicker({
|
||||
pickTime: true,
|
||||
useCurrent: false,
|
||||
minuteStepping: 15,
|
||||
sideBySide: true,
|
||||
format: "YYYY-MM-DD HH:mm"
|
||||
});
|
||||
|
||||
$("#registration-arrival-datepicker").on("dp.change",function (e) {
|
||||
console.log (e.date)
|
||||
$('#registration-departure-datepicker').data("DateTimePicker").setDate(e.date);
|
||||
|
|
@ -23,16 +17,14 @@ $(function () {
|
|||
});
|
||||
|
||||
|
||||
$("#conference-start-datepicker").datetimepicker({
|
||||
pickTime: false,
|
||||
useCurrent: false,
|
||||
format: "YYYY-MM-DD"
|
||||
});
|
||||
$("#conference-end-datepicker").datetimepicker({
|
||||
const $datetimepickers = $("#conference-start-datepicker, #conference-end-datepicker, #registration-period-start-datepicker, #registration-period-end-datepicker");
|
||||
|
||||
$datetimepickers.datetimepicker({
|
||||
pickTime: false,
|
||||
useCurrent: false,
|
||||
format: "YYYY-MM-DD"
|
||||
});
|
||||
|
||||
$("#conference-start-datepicker").on("dp.change",function (e) {
|
||||
console.log (e.date)
|
||||
$('#conference-end-datepicker').data("DateTimePicker").setDate(e.date);
|
||||
|
|
@ -42,16 +34,6 @@ $(function () {
|
|||
$('#conference-start-datepicker').data("DateTimePicker").setMaxDate(e.date);
|
||||
});
|
||||
|
||||
$("#registration-period-start-datepicker").datetimepicker({
|
||||
format: "YYYY-MM-DD",
|
||||
pickTime: false,
|
||||
pickSeconds: false
|
||||
});
|
||||
$("#registration-period-end-datepicker").datetimepicker({
|
||||
format: "YYYY-MM-DD",
|
||||
pickTime: false,
|
||||
pickSeconds: false
|
||||
});
|
||||
$("#registration-period-start-datepicker").on("dp.change",function (e) {
|
||||
console.log (e.date)
|
||||
$('#registration-period-end-datepicker').data("DateTimePicker").setDate(e.date);
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
/**
|
||||
* SmoothScroll
|
||||
* This helper script created by DWUser.com. Copyright 2013 DWUser.com.
|
||||
* Dual-licensed under the GPL and MIT licenses.
|
||||
* All individual scripts remain property of their copyrighters.
|
||||
* Date: 10-Sep-2013
|
||||
* Version: 1.0.1
|
||||
*/
|
||||
if (!window['jQuery']) alert('The jQuery library must be included before the smoothscroll.js file. The plugin will not work propery.');
|
||||
|
||||
/**
|
||||
* jQuery.ScrollTo - Easy element scrolling using jQuery.
|
||||
* Copyright (c) 2007-2013 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
||||
* Dual licensed under MIT and GPL.
|
||||
* @author Ariel Flesler
|
||||
* @version 1.4.3.1
|
||||
*/
|
||||
;(function($){var h=$.scrollTo=function(a,b,c){$(window).scrollTo(a,b,c)};h.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1,limit:true};h.window=function(a){return $(window)._scrollable()};$.fn._scrollable=function(){return this.map(function(){var a=this,isWin=!a.nodeName||$.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!isWin)return a;var b=(a.contentWindow||a).document||a.ownerDocument||a;return/webkit/i.test(navigator.userAgent)||b.compatMode=='BackCompat'?b.body:b.documentElement})};$.fn.scrollTo=function(e,f,g){if(typeof f=='object'){g=f;f=0}if(typeof g=='function')g={onAfter:g};if(e=='max')e=9e9;g=$.extend({},h.defaults,g);f=f||g.duration;g.queue=g.queue&&g.axis.length>1;if(g.queue)f/=2;g.offset=both(g.offset);g.over=both(g.over);return this._scrollable().each(function(){if(e==null)return;var d=this,$elem=$(d),targ=e,toff,attr={},win=$elem.is('html,body');switch(typeof targ){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ)){targ=both(targ);break}targ=$(targ,this);if(!targ.length)return;case'object':if(targ.is||targ.style)toff=(targ=$(targ)).offset()}$.each(g.axis.split(''),function(i,a){var b=a=='x'?'Left':'Top',pos=b.toLowerCase(),key='scroll'+b,old=d[key],max=h.max(d,a);if(toff){attr[key]=toff[pos]+(win?0:old-$elem.offset()[pos]);if(g.margin){attr[key]-=parseInt(targ.css('margin'+b))||0;attr[key]-=parseInt(targ.css('border'+b+'Width'))||0}attr[key]+=g.offset[pos]||0;if(g.over[pos])attr[key]+=targ[a=='x'?'width':'height']()*g.over[pos]}else{var c=targ[pos];attr[key]=c.slice&&c.slice(-1)=='%'?parseFloat(c)/100*max:c}if(g.limit&&/^\d+$/.test(attr[key]))attr[key]=attr[key]<=0?0:Math.min(attr[key],max);if(!i&&g.queue){if(old!=attr[key])animate(g.onAfterFirst);delete attr[key]}});animate(g.onAfter);function animate(a){$elem.animate(attr,f,g.easing,a&&function(){a.call(this,e,g)})}}).end()};h.max=function(a,b){var c=b=='x'?'Width':'Height',scroll='scroll'+c;if(!$(a).is('html,body'))return a[scroll]-$(a)[c.toLowerCase()]();var d='client'+c,html=a.ownerDocument.documentElement,body=a.ownerDocument.body;return Math.max(html[scroll],body[scroll])-Math.min(html[d],body[d])};function both(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
|
||||
|
||||
/**
|
||||
* jQuery.LocalScroll
|
||||
* Copyright (c) 2007-2010 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
||||
* Dual licensed under MIT and GPL.
|
||||
* Date: 05/31/2010
|
||||
* @author Ariel Flesler
|
||||
* @version 1.2.8b
|
||||
**/
|
||||
;(function(b){function g(a,e,d){var h=e.hash.slice(1),f=document.getElementById(h)||document.getElementsByName(h)[0];if(f){a&&a.preventDefault();var c=b(d.target);if(!(d.lock&&c.is(":animated")||d.onBefore&&!1===d.onBefore(a,f,c))){d.stop&&c._scrollable().stop(!0);if(d.hash){var a=f.id==h?"id":"name",g=b("<a> </a>").attr(a,h).css({position:"absolute",top:b(window).scrollTop(),left:b(window).scrollLeft()});f[a]="";b("body").prepend(g);location=e.hash;g.remove();f[a]=h}c.scrollTo(f,d).trigger("notify.serialScroll",
|
||||
[f])}}}var i=location.href.replace(/#.*/,""),c=b.localScroll=function(a){b("body").localScroll(a)};c.defaults={duration:1E3,axis:"y",event:"click",stop:!0,target:window,reset:!0};c.hash=function(a){if(location.hash){a=b.extend({},c.defaults,a);a.hash=!1;if(a.reset){var e=a.duration;delete a.duration;b(a.target).scrollTo(0,a);a.duration=e}g(0,location,a)}};b.fn.localScroll=function(a){function e(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,"")==i&&(!a.filter||b(this).is(a.filter))}
|
||||
a=b.extend({},c.defaults,a);return a.lazy?this.bind(a.event,function(d){var c=b([d.target,d.target.parentNode]).filter(e)[0];c&&g(d,c,a)}):this.find("a,area").filter(e).bind(a.event,function(b){g(b,this,a)}).end().end()}})(jQuery);
|
||||
|
||||
// Initialize all .smoothScroll links
|
||||
jQuery(function($){ $.localScroll({filter:'.smoothScroll'}); });
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
1
app/assets/javascripts/trianglify.min.js
vendored
1
app/assets/javascripts/trianglify.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -1,517 +0,0 @@
|
|||
// Generated by CoffeeScript 1.6.2
|
||||
/*!
|
||||
jQuery Waypoints - v2.0.5
|
||||
Copyright (c) 2011-2014 Caleb Troughton
|
||||
Licensed under the MIT license.
|
||||
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
|
||||
*/
|
||||
|
||||
|
||||
(function() {
|
||||
var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
|
||||
__slice = [].slice;
|
||||
|
||||
(function(root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
return define('waypoints', ['jquery'], function($) {
|
||||
return factory($, root);
|
||||
});
|
||||
} else {
|
||||
return factory(root.jQuery, root);
|
||||
}
|
||||
})(window, function($, window) {
|
||||
var $w, Context, Waypoint, allWaypoints, contextCounter, contextKey, contexts, isTouch, jQMethods, methods, resizeEvent, scrollEvent, waypointCounter, waypointKey, wp, wps;
|
||||
|
||||
$w = $(window);
|
||||
isTouch = __indexOf.call(window, 'ontouchstart') >= 0;
|
||||
allWaypoints = {
|
||||
horizontal: {},
|
||||
vertical: {}
|
||||
};
|
||||
contextCounter = 1;
|
||||
contexts = {};
|
||||
contextKey = 'waypoints-context-id';
|
||||
resizeEvent = 'resize.waypoints';
|
||||
scrollEvent = 'scroll.waypoints';
|
||||
waypointCounter = 1;
|
||||
waypointKey = 'waypoints-waypoint-ids';
|
||||
wp = 'waypoint';
|
||||
wps = 'waypoints';
|
||||
Context = (function() {
|
||||
function Context($element) {
|
||||
var _this = this;
|
||||
|
||||
this.$element = $element;
|
||||
this.element = $element[0];
|
||||
this.didResize = false;
|
||||
this.didScroll = false;
|
||||
this.id = 'context' + contextCounter++;
|
||||
this.oldScroll = {
|
||||
x: $element.scrollLeft(),
|
||||
y: $element.scrollTop()
|
||||
};
|
||||
this.waypoints = {
|
||||
horizontal: {},
|
||||
vertical: {}
|
||||
};
|
||||
this.element[contextKey] = this.id;
|
||||
contexts[this.id] = this;
|
||||
$element.bind(scrollEvent, function() {
|
||||
var scrollHandler;
|
||||
|
||||
if (!(_this.didScroll || isTouch)) {
|
||||
_this.didScroll = true;
|
||||
scrollHandler = function() {
|
||||
_this.doScroll();
|
||||
return _this.didScroll = false;
|
||||
};
|
||||
return window.setTimeout(scrollHandler, $[wps].settings.scrollThrottle);
|
||||
}
|
||||
});
|
||||
$element.bind(resizeEvent, function() {
|
||||
var resizeHandler;
|
||||
|
||||
if (!_this.didResize) {
|
||||
_this.didResize = true;
|
||||
resizeHandler = function() {
|
||||
$[wps]('refresh');
|
||||
return _this.didResize = false;
|
||||
};
|
||||
return window.setTimeout(resizeHandler, $[wps].settings.resizeThrottle);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Context.prototype.doScroll = function() {
|
||||
var axes,
|
||||
_this = this;
|
||||
|
||||
axes = {
|
||||
horizontal: {
|
||||
newScroll: this.$element.scrollLeft(),
|
||||
oldScroll: this.oldScroll.x,
|
||||
forward: 'right',
|
||||
backward: 'left'
|
||||
},
|
||||
vertical: {
|
||||
newScroll: this.$element.scrollTop(),
|
||||
oldScroll: this.oldScroll.y,
|
||||
forward: 'down',
|
||||
backward: 'up'
|
||||
}
|
||||
};
|
||||
if (isTouch && (!axes.vertical.oldScroll || !axes.vertical.newScroll)) {
|
||||
$[wps]('refresh');
|
||||
}
|
||||
$.each(axes, function(aKey, axis) {
|
||||
var direction, isForward, triggered;
|
||||
|
||||
triggered = [];
|
||||
isForward = axis.newScroll > axis.oldScroll;
|
||||
direction = isForward ? axis.forward : axis.backward;
|
||||
$.each(_this.waypoints[aKey], function(wKey, waypoint) {
|
||||
var _ref, _ref1;
|
||||
|
||||
if ((axis.oldScroll < (_ref = waypoint.offset) && _ref <= axis.newScroll)) {
|
||||
return triggered.push(waypoint);
|
||||
} else if ((axis.newScroll < (_ref1 = waypoint.offset) && _ref1 <= axis.oldScroll)) {
|
||||
return triggered.push(waypoint);
|
||||
}
|
||||
});
|
||||
triggered.sort(function(a, b) {
|
||||
return a.offset - b.offset;
|
||||
});
|
||||
if (!isForward) {
|
||||
triggered.reverse();
|
||||
}
|
||||
return $.each(triggered, function(i, waypoint) {
|
||||
if (waypoint.options.continuous || i === triggered.length - 1) {
|
||||
return waypoint.trigger([direction]);
|
||||
}
|
||||
});
|
||||
});
|
||||
return this.oldScroll = {
|
||||
x: axes.horizontal.newScroll,
|
||||
y: axes.vertical.newScroll
|
||||
};
|
||||
};
|
||||
|
||||
Context.prototype.refresh = function() {
|
||||
var axes, cOffset, isWin,
|
||||
_this = this;
|
||||
|
||||
isWin = $.isWindow(this.element);
|
||||
cOffset = this.$element.offset();
|
||||
this.doScroll();
|
||||
axes = {
|
||||
horizontal: {
|
||||
contextOffset: isWin ? 0 : cOffset.left,
|
||||
contextScroll: isWin ? 0 : this.oldScroll.x,
|
||||
contextDimension: this.$element.width(),
|
||||
oldScroll: this.oldScroll.x,
|
||||
forward: 'right',
|
||||
backward: 'left',
|
||||
offsetProp: 'left'
|
||||
},
|
||||
vertical: {
|
||||
contextOffset: isWin ? 0 : cOffset.top,
|
||||
contextScroll: isWin ? 0 : this.oldScroll.y,
|
||||
contextDimension: isWin ? $[wps]('viewportHeight') : this.$element.height(),
|
||||
oldScroll: this.oldScroll.y,
|
||||
forward: 'down',
|
||||
backward: 'up',
|
||||
offsetProp: 'top'
|
||||
}
|
||||
};
|
||||
return $.each(axes, function(aKey, axis) {
|
||||
return $.each(_this.waypoints[aKey], function(i, waypoint) {
|
||||
var adjustment, elementOffset, oldOffset, _ref, _ref1;
|
||||
|
||||
adjustment = waypoint.options.offset;
|
||||
oldOffset = waypoint.offset;
|
||||
elementOffset = $.isWindow(waypoint.element) ? 0 : waypoint.$element.offset()[axis.offsetProp];
|
||||
if ($.isFunction(adjustment)) {
|
||||
adjustment = adjustment.apply(waypoint.element);
|
||||
} else if (typeof adjustment === 'string') {
|
||||
adjustment = parseFloat(adjustment);
|
||||
if (waypoint.options.offset.indexOf('%') > -1) {
|
||||
adjustment = Math.ceil(axis.contextDimension * adjustment / 100);
|
||||
}
|
||||
}
|
||||
waypoint.offset = elementOffset - axis.contextOffset + axis.contextScroll - adjustment;
|
||||
if ((waypoint.options.onlyOnScroll && (oldOffset != null)) || !waypoint.enabled) {
|
||||
return;
|
||||
}
|
||||
if (oldOffset !== null && (oldOffset < (_ref = axis.oldScroll) && _ref <= waypoint.offset)) {
|
||||
return waypoint.trigger([axis.backward]);
|
||||
} else if (oldOffset !== null && (oldOffset > (_ref1 = axis.oldScroll) && _ref1 >= waypoint.offset)) {
|
||||
return waypoint.trigger([axis.forward]);
|
||||
} else if (oldOffset === null && axis.oldScroll >= waypoint.offset) {
|
||||
return waypoint.trigger([axis.forward]);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
Context.prototype.checkEmpty = function() {
|
||||
if ($.isEmptyObject(this.waypoints.horizontal) && $.isEmptyObject(this.waypoints.vertical)) {
|
||||
this.$element.unbind([resizeEvent, scrollEvent].join(' '));
|
||||
return delete contexts[this.id];
|
||||
}
|
||||
};
|
||||
|
||||
return Context;
|
||||
|
||||
})();
|
||||
Waypoint = (function() {
|
||||
function Waypoint($element, context, options) {
|
||||
var idList, _ref;
|
||||
|
||||
if (options.offset === 'bottom-in-view') {
|
||||
options.offset = function() {
|
||||
var contextHeight;
|
||||
|
||||
contextHeight = $[wps]('viewportHeight');
|
||||
if (!$.isWindow(context.element)) {
|
||||
contextHeight = context.$element.height();
|
||||
}
|
||||
return contextHeight - $(this).outerHeight();
|
||||
};
|
||||
}
|
||||
this.$element = $element;
|
||||
this.element = $element[0];
|
||||
this.axis = options.horizontal ? 'horizontal' : 'vertical';
|
||||
this.callback = options.handler;
|
||||
this.context = context;
|
||||
this.enabled = options.enabled;
|
||||
this.id = 'waypoints' + waypointCounter++;
|
||||
this.offset = null;
|
||||
this.options = options;
|
||||
context.waypoints[this.axis][this.id] = this;
|
||||
allWaypoints[this.axis][this.id] = this;
|
||||
idList = (_ref = this.element[waypointKey]) != null ? _ref : [];
|
||||
idList.push(this.id);
|
||||
this.element[waypointKey] = idList;
|
||||
}
|
||||
|
||||
Waypoint.prototype.trigger = function(args) {
|
||||
if (!this.enabled) {
|
||||
return;
|
||||
}
|
||||
if (this.callback != null) {
|
||||
this.callback.apply(this.element, args);
|
||||
}
|
||||
if (this.options.triggerOnce) {
|
||||
return this.destroy();
|
||||
}
|
||||
};
|
||||
|
||||
Waypoint.prototype.disable = function() {
|
||||
return this.enabled = false;
|
||||
};
|
||||
|
||||
Waypoint.prototype.enable = function() {
|
||||
this.context.refresh();
|
||||
return this.enabled = true;
|
||||
};
|
||||
|
||||
Waypoint.prototype.destroy = function() {
|
||||
delete allWaypoints[this.axis][this.id];
|
||||
delete this.context.waypoints[this.axis][this.id];
|
||||
return this.context.checkEmpty();
|
||||
};
|
||||
|
||||
Waypoint.getWaypointsByElement = function(element) {
|
||||
var all, ids;
|
||||
|
||||
ids = element[waypointKey];
|
||||
if (!ids) {
|
||||
return [];
|
||||
}
|
||||
all = $.extend({}, allWaypoints.horizontal, allWaypoints.vertical);
|
||||
return $.map(ids, function(id) {
|
||||
return all[id];
|
||||
});
|
||||
};
|
||||
|
||||
return Waypoint;
|
||||
|
||||
})();
|
||||
methods = {
|
||||
init: function(f, options) {
|
||||
var _ref;
|
||||
|
||||
options = $.extend({}, $.fn[wp].defaults, options);
|
||||
if ((_ref = options.handler) == null) {
|
||||
options.handler = f;
|
||||
}
|
||||
this.each(function() {
|
||||
var $this, context, contextElement, _ref1;
|
||||
|
||||
$this = $(this);
|
||||
contextElement = (_ref1 = options.context) != null ? _ref1 : $.fn[wp].defaults.context;
|
||||
if (!$.isWindow(contextElement)) {
|
||||
contextElement = $this.closest(contextElement);
|
||||
}
|
||||
contextElement = $(contextElement);
|
||||
context = contexts[contextElement[0][contextKey]];
|
||||
if (!context) {
|
||||
context = new Context(contextElement);
|
||||
}
|
||||
return new Waypoint($this, context, options);
|
||||
});
|
||||
$[wps]('refresh');
|
||||
return this;
|
||||
},
|
||||
disable: function() {
|
||||
return methods._invoke.call(this, 'disable');
|
||||
},
|
||||
enable: function() {
|
||||
return methods._invoke.call(this, 'enable');
|
||||
},
|
||||
destroy: function() {
|
||||
return methods._invoke.call(this, 'destroy');
|
||||
},
|
||||
prev: function(axis, selector) {
|
||||
return methods._traverse.call(this, axis, selector, function(stack, index, waypoints) {
|
||||
if (index > 0) {
|
||||
return stack.push(waypoints[index - 1]);
|
||||
}
|
||||
});
|
||||
},
|
||||
next: function(axis, selector) {
|
||||
return methods._traverse.call(this, axis, selector, function(stack, index, waypoints) {
|
||||
if (index < waypoints.length - 1) {
|
||||
return stack.push(waypoints[index + 1]);
|
||||
}
|
||||
});
|
||||
},
|
||||
_traverse: function(axis, selector, push) {
|
||||
var stack, waypoints;
|
||||
|
||||
if (axis == null) {
|
||||
axis = 'vertical';
|
||||
}
|
||||
if (selector == null) {
|
||||
selector = window;
|
||||
}
|
||||
waypoints = jQMethods.aggregate(selector);
|
||||
stack = [];
|
||||
this.each(function() {
|
||||
var index;
|
||||
|
||||
index = $.inArray(this, waypoints[axis]);
|
||||
return push(stack, index, waypoints[axis]);
|
||||
});
|
||||
return this.pushStack(stack);
|
||||
},
|
||||
_invoke: function(method) {
|
||||
this.each(function() {
|
||||
var waypoints;
|
||||
|
||||
waypoints = Waypoint.getWaypointsByElement(this);
|
||||
return $.each(waypoints, function(i, waypoint) {
|
||||
waypoint[method]();
|
||||
return true;
|
||||
});
|
||||
});
|
||||
return this;
|
||||
}
|
||||
};
|
||||
$.fn[wp] = function() {
|
||||
var args, method;
|
||||
|
||||
method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
if (methods[method]) {
|
||||
return methods[method].apply(this, args);
|
||||
} else if ($.isFunction(method)) {
|
||||
return methods.init.apply(this, arguments);
|
||||
} else if ($.isPlainObject(method)) {
|
||||
return methods.init.apply(this, [null, method]);
|
||||
} else if (!method) {
|
||||
return $.error("jQuery Waypoints needs a callback function or handler option.");
|
||||
} else {
|
||||
return $.error("The " + method + " method does not exist in jQuery Waypoints.");
|
||||
}
|
||||
};
|
||||
$.fn[wp].defaults = {
|
||||
context: window,
|
||||
continuous: true,
|
||||
enabled: true,
|
||||
horizontal: false,
|
||||
offset: 0,
|
||||
triggerOnce: false
|
||||
};
|
||||
jQMethods = {
|
||||
refresh: function() {
|
||||
return $.each(contexts, function(i, context) {
|
||||
return context.refresh();
|
||||
});
|
||||
},
|
||||
viewportHeight: function() {
|
||||
var _ref;
|
||||
|
||||
return (_ref = window.innerHeight) != null ? _ref : $w.height();
|
||||
},
|
||||
aggregate: function(contextSelector) {
|
||||
var collection, waypoints, _ref;
|
||||
|
||||
collection = allWaypoints;
|
||||
if (contextSelector) {
|
||||
collection = (_ref = contexts[$(contextSelector)[0][contextKey]]) != null ? _ref.waypoints : void 0;
|
||||
}
|
||||
if (!collection) {
|
||||
return [];
|
||||
}
|
||||
waypoints = {
|
||||
horizontal: [],
|
||||
vertical: []
|
||||
};
|
||||
$.each(waypoints, function(axis, arr) {
|
||||
$.each(collection[axis], function(key, waypoint) {
|
||||
return arr.push(waypoint);
|
||||
});
|
||||
arr.sort(function(a, b) {
|
||||
return a.offset - b.offset;
|
||||
});
|
||||
waypoints[axis] = $.map(arr, function(waypoint) {
|
||||
return waypoint.element;
|
||||
});
|
||||
return waypoints[axis] = $.unique(waypoints[axis]);
|
||||
});
|
||||
return waypoints;
|
||||
},
|
||||
above: function(contextSelector) {
|
||||
if (contextSelector == null) {
|
||||
contextSelector = window;
|
||||
}
|
||||
return jQMethods._filter(contextSelector, 'vertical', function(context, waypoint) {
|
||||
return waypoint.offset <= context.oldScroll.y;
|
||||
});
|
||||
},
|
||||
below: function(contextSelector) {
|
||||
if (contextSelector == null) {
|
||||
contextSelector = window;
|
||||
}
|
||||
return jQMethods._filter(contextSelector, 'vertical', function(context, waypoint) {
|
||||
return waypoint.offset > context.oldScroll.y;
|
||||
});
|
||||
},
|
||||
left: function(contextSelector) {
|
||||
if (contextSelector == null) {
|
||||
contextSelector = window;
|
||||
}
|
||||
return jQMethods._filter(contextSelector, 'horizontal', function(context, waypoint) {
|
||||
return waypoint.offset <= context.oldScroll.x;
|
||||
});
|
||||
},
|
||||
right: function(contextSelector) {
|
||||
if (contextSelector == null) {
|
||||
contextSelector = window;
|
||||
}
|
||||
return jQMethods._filter(contextSelector, 'horizontal', function(context, waypoint) {
|
||||
return waypoint.offset > context.oldScroll.x;
|
||||
});
|
||||
},
|
||||
enable: function() {
|
||||
return jQMethods._invoke('enable');
|
||||
},
|
||||
disable: function() {
|
||||
return jQMethods._invoke('disable');
|
||||
},
|
||||
destroy: function() {
|
||||
return jQMethods._invoke('destroy');
|
||||
},
|
||||
extendFn: function(methodName, f) {
|
||||
return methods[methodName] = f;
|
||||
},
|
||||
_invoke: function(method) {
|
||||
var waypoints;
|
||||
|
||||
waypoints = $.extend({}, allWaypoints.vertical, allWaypoints.horizontal);
|
||||
return $.each(waypoints, function(key, waypoint) {
|
||||
waypoint[method]();
|
||||
return true;
|
||||
});
|
||||
},
|
||||
_filter: function(selector, axis, test) {
|
||||
var context, waypoints;
|
||||
|
||||
context = contexts[$(selector)[0][contextKey]];
|
||||
if (!context) {
|
||||
return [];
|
||||
}
|
||||
waypoints = [];
|
||||
$.each(context.waypoints[axis], function(i, waypoint) {
|
||||
if (test(context, waypoint)) {
|
||||
return waypoints.push(waypoint);
|
||||
}
|
||||
});
|
||||
waypoints.sort(function(a, b) {
|
||||
return a.offset - b.offset;
|
||||
});
|
||||
return $.map(waypoints, function(waypoint) {
|
||||
return waypoint.element;
|
||||
});
|
||||
}
|
||||
};
|
||||
$[wps] = function() {
|
||||
var args, method;
|
||||
|
||||
method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
if (jQMethods[method]) {
|
||||
return jQMethods[method].apply(null, args);
|
||||
} else {
|
||||
return jQMethods.aggregate.call(null, method);
|
||||
}
|
||||
};
|
||||
$[wps].settings = {
|
||||
resizeThrottle: 100,
|
||||
scrollThrottle: 30
|
||||
};
|
||||
return $w.on('load.waypoints', function() {
|
||||
return $[wps]('refresh');
|
||||
});
|
||||
});
|
||||
|
||||
}).call(this);
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1 Call for Papers
|
||||
.row
|
||||
.col-md-8
|
||||
= semantic_form_for(@call_for_paper, :url => admin_conference_call_for_paper_path(@conference.short_title),:html => {:multipart => true}) do |f|
|
||||
= f.input :start_date, :as => :string, :input_html => { :id => "conference-start-datepicker", :readonly => "readonly" }
|
||||
= f.input :end_date, :as => :string, :input_html => { :id => "conference-end-datepicker", :readonly => "readonly" }
|
||||
= f.input :schedule_public, label: "Show Schedule on the home and splash page"
|
||||
= f.input :schedule_changes, label: "Allow submitters to change their event after it is scheduled"
|
||||
= f.input :rating, :hint => "Enter the number of different rating levels you want to have for voting on proposals. Enter 0 if you do not want to vote on proposals."
|
||||
%p.text-right
|
||||
= f.action :submit, :as => :button, :button_html => {:class => "btn btn-primary"}
|
||||
|
|
@ -1,58 +0,0 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1 Call for Papers
|
||||
%p.text-muted
|
||||
Call for people to submit events to your conference
|
||||
- if @call_for_paper
|
||||
.row
|
||||
.col-md-8
|
||||
%dl.dl-horizontal
|
||||
%dt
|
||||
Start Date:
|
||||
%dd#start_date
|
||||
= @call_for_paper.start_date.strftime('%A, %B %-d. %Y')
|
||||
%dt
|
||||
End Date:
|
||||
%dd#end_date
|
||||
= @call_for_paper.end_date.strftime('%A, %B %-d. %Y')
|
||||
%dt
|
||||
Days Left:
|
||||
%dd
|
||||
= pluralize(@call_for_paper.remaining_days, 'day')
|
||||
%dt
|
||||
Event types:
|
||||
%dd
|
||||
= event_types(@conference)
|
||||
%dt
|
||||
Tracks:
|
||||
%dd
|
||||
= tracks(@conference)
|
||||
%dt
|
||||
Public Schedule
|
||||
%dd#schedule_public
|
||||
- if @call_for_paper.schedule_public
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Schedule changeable?
|
||||
%dd#schedule_changes
|
||||
- if @call_for_paper.schedule_changes
|
||||
Yes
|
||||
- else
|
||||
No
|
||||
%dt
|
||||
Rating Levels
|
||||
%dd#rating
|
||||
= @call_for_paper.rating
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to(edit_admin_conference_call_for_paper_path(@conference.short_title), class: 'btn btn-primary') do
|
||||
Edit
|
||||
= link_to(admin_conference_call_for_paper_path(@conference.short_title), method: 'delete', class: 'btn btn-danger') do
|
||||
Delete
|
||||
-else
|
||||
.row
|
||||
.col-md-12.text-right
|
||||
= link_to 'Create Call for Papers', new_admin_conference_call_for_paper_path(@conference.short_title), class: 'btn btn-primary'
|
||||
|
|
@ -60,5 +60,9 @@ module Osem
|
|||
|
||||
# Version of your assets, change this if you want to expire all your assets
|
||||
config.assets.version = '1.0'
|
||||
|
||||
# Errors raised within `after_rollback`/`after_commit` propagate normally
|
||||
# like in other Active Record callbacks.
|
||||
config.active_record.raise_in_transactional_callbacks = true
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ Osem::Application.configure do
|
|||
config.eager_load = true
|
||||
|
||||
# Disable Rails's static asset server (Apache or nginx will already do this)
|
||||
config.serve_static_assets = false
|
||||
config.serve_static_files = false
|
||||
# Compress JavaScripts and CSS
|
||||
config.assets.compress = true
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Osem::Application.configure do
|
|||
config.cache_classes = true
|
||||
|
||||
# Configure static asset server for tests with Cache-Control for performance
|
||||
config.serve_static_assets = true
|
||||
config.serve_static_files = true
|
||||
config.static_cache_control = 'public, max-age=3600'
|
||||
|
||||
# Do not eager load code on boot.
|
||||
|
|
|
|||
|
|
@ -66,14 +66,48 @@ Formtastic::FormBuilder.required_string = proc { Formtastic::Util.html_safe(%{&n
|
|||
# specifying that class here. Defaults to Formtastic::FormBuilder.
|
||||
# Formtastic::Helpers::FormHelper.builder = MyCustomBuilder
|
||||
|
||||
# All formtastic forms have a class that indicates that they are just that. You
|
||||
# can change it to any class you want.
|
||||
# Formtastic::Helpers::FormHelper.default_form_class = 'formtastic'
|
||||
|
||||
# Formtastic will infer a class name from the model, array, string ot symbol you pass to the
|
||||
# form builder. You can customize the way that class is presented by overriding
|
||||
# this proc.
|
||||
# Formtastic::Helpers::FormHelper.default_form_model_class_proc = proc { |model_class_name| model_class_name }
|
||||
|
||||
# Allows to set a custom field_error_proc wrapper. By default this wrapper
|
||||
# is disabled since `formtastic` already adds an error class to the LI tag
|
||||
# containing the input.
|
||||
# Formtastic::Helpers::FormHelper.formtastic_field_error_proc = proc { |html_tag, instance_tag| html_tag }
|
||||
|
||||
# You can opt-in to Formtastic's use of the HTML5 `required` attribute on `<input>`, `<select>`
|
||||
# and `<textarea>` tags by setting this to false (defaults to true).
|
||||
# Formtastic::FormBuilder.use_required_attribute = true
|
||||
# and `<textarea>` tags by setting this to true (defaults to false).
|
||||
# Formtastic::FormBuilder.use_required_attribute = false
|
||||
|
||||
# You can opt-in to new HTML5 browser validations (for things like email and url inputs) by setting
|
||||
# this to false. Doing so will add a `novalidate` attribute to the `<form>` tag.
|
||||
# this to true. Doing so will add a `novalidate` attribute to the `<form>` tag.
|
||||
# See http://diveintohtml5.org/forms.html#validation for more info.
|
||||
Formtastic::FormBuilder.perform_browser_validations = true
|
||||
#
|
||||
Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
|
||||
FormtasticBootstrap::FormBuilder.default_inline_hint_class = FormtasticBootstrap::FormBuilder.default_block_hint_class
|
||||
|
||||
# By creating custom input class finder, you can change how input classes are looked up.
|
||||
# For example you can make it to search for TextInputFilter instead of TextInput.
|
||||
# See # TODO: add link # for more information
|
||||
# NOTE: this behavior will be default from Formtastic 4.0
|
||||
Formtastic::FormBuilder.input_class_finder = Formtastic::InputClassFinder
|
||||
|
||||
# Define custom namespaces in which to look up your Input classes. Default is
|
||||
# to look up in the global scope and in Formtastic::Inputs.
|
||||
# Formtastic::FormBuilder.input_namespaces = [ ::Object, ::MyInputsModule, ::Formtastic::Inputs ]
|
||||
|
||||
# By creating custom action class finder, you can change how action classes are looked up.
|
||||
# For example you can make it to search for MyButtonAction instead of ButtonAction.
|
||||
# See # TODO: add link # for more information
|
||||
# NOTE: this behavior will be default from Formtastic 4.0
|
||||
Formtastic::FormBuilder.action_class_finder = Formtastic::ActionClassFinder
|
||||
|
||||
# Define custom namespaces in which to look up your Action classes. Default is
|
||||
# to look up in the global scope and in Formtastic::Actions.
|
||||
# Formtastic::FormBuilder.action_namespaces = [ ::Object, ::MyActionsModule, ::Formtastic::Actions ]
|
||||
|
|
|
|||
121
db/schema.rb
121
db/schema.rb
|
|
@ -13,8 +13,13 @@
|
|||
|
||||
ActiveRecord::Schema.define(version: 20160201221411) do
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "ahoy_events", force: true do |t|
|
||||
t.uuid "visit_id"
|
||||
=======
|
||||
create_table "ahoy_events", force: :cascade do |t|
|
||||
t.uuid "visit_id", limit: 16
|
||||
>>>>>>> upstream/master
|
||||
t.integer "user_id"
|
||||
t.string "name"
|
||||
t.text "properties"
|
||||
|
|
@ -25,13 +30,17 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
add_index "ahoy_events", ["user_id"], name: "index_ahoy_events_on_user_id"
|
||||
add_index "ahoy_events", ["visit_id"], name: "index_ahoy_events_on_visit_id"
|
||||
|
||||
create_table "answers", force: true do |t|
|
||||
create_table "answers", force: :cascade do |t|
|
||||
t.string "title"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "campaigns", force: true do |t|
|
||||
=======
|
||||
create_table "campaigns", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.integer "conference_id"
|
||||
t.string "name"
|
||||
t.string "utm_source"
|
||||
|
|
@ -43,7 +52,11 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "cfps", force: true do |t|
|
||||
=======
|
||||
create_table "cfps", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.date "start_date", null: false
|
||||
t.date "end_date", null: false
|
||||
t.datetime "created_at"
|
||||
|
|
@ -51,7 +64,11 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "program_id"
|
||||
end
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "comments", force: true do |t|
|
||||
=======
|
||||
create_table "comments", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.string "title", limit: 50, default: ""
|
||||
t.text "body"
|
||||
t.integer "commentable_id"
|
||||
|
|
@ -69,7 +86,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
add_index "comments", ["commentable_type"], name: "index_comments_on_commentable_type"
|
||||
add_index "comments", ["user_id"], name: "index_comments_on_user_id"
|
||||
|
||||
create_table "commercials", force: true do |t|
|
||||
create_table "commercials", force: :cascade do |t|
|
||||
t.string "commercial_id"
|
||||
t.string "commercial_type"
|
||||
t.integer "commercialable_id"
|
||||
|
|
@ -79,7 +96,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.string "url"
|
||||
end
|
||||
|
||||
create_table "conferences", force: true do |t|
|
||||
create_table "conferences", force: :cascade do |t|
|
||||
t.string "guid", null: false
|
||||
t.string "title", null: false
|
||||
t.string "short_title", null: false
|
||||
|
|
@ -105,12 +122,12 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "registration_limit", default: 0
|
||||
end
|
||||
|
||||
create_table "conferences_questions", id: false, force: true do |t|
|
||||
create_table "conferences_questions", id: false, force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.integer "question_id"
|
||||
end
|
||||
|
||||
create_table "contacts", force: true do |t|
|
||||
create_table "contacts", force: :cascade do |t|
|
||||
t.string "social_tag"
|
||||
t.string "email"
|
||||
t.string "facebook"
|
||||
|
|
@ -123,7 +140,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.string "sponsor_email"
|
||||
end
|
||||
|
||||
create_table "delayed_jobs", force: true do |t|
|
||||
create_table "delayed_jobs", force: :cascade do |t|
|
||||
t.integer "priority", default: 0, null: false
|
||||
t.integer "attempts", default: 0, null: false
|
||||
t.text "handler", null: false
|
||||
|
|
@ -139,14 +156,18 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
|
||||
add_index "delayed_jobs", ["priority", "run_at"], name: "delayed_jobs_priority"
|
||||
|
||||
create_table "dietary_choices", force: true do |t|
|
||||
create_table "dietary_choices", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.string "title", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "difficulty_levels", force: true do |t|
|
||||
=======
|
||||
create_table "difficulty_levels", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.string "title"
|
||||
t.text "description"
|
||||
t.string "color"
|
||||
|
|
@ -155,7 +176,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "program_id"
|
||||
end
|
||||
|
||||
create_table "email_settings", force: true do |t|
|
||||
create_table "email_settings", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.boolean "send_on_registration", default: false
|
||||
t.boolean "send_on_accepted", default: false
|
||||
|
|
@ -188,7 +209,11 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.text "cfp_dates_updated_body"
|
||||
end
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "event_types", force: true do |t|
|
||||
=======
|
||||
create_table "event_types", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.string "title", null: false
|
||||
t.integer "length", default: 30
|
||||
t.integer "minimum_abstract_length", default: 0
|
||||
|
|
@ -198,7 +223,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "program_id"
|
||||
end
|
||||
|
||||
create_table "event_users", force: true do |t|
|
||||
create_table "event_users", force: :cascade do |t|
|
||||
t.integer "user_id"
|
||||
t.integer "event_id"
|
||||
t.string "event_role", default: "participant", null: false
|
||||
|
|
@ -207,7 +232,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "events", force: true do |t|
|
||||
create_table "events", force: :cascade do |t|
|
||||
t.string "guid", null: false
|
||||
t.integer "event_type_id"
|
||||
t.string "title", null: false
|
||||
|
|
@ -236,12 +261,12 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "program_id"
|
||||
end
|
||||
|
||||
create_table "events_registrations", id: false, force: true do |t|
|
||||
create_table "events_registrations", id: false, force: :cascade do |t|
|
||||
t.integer "registration_id"
|
||||
t.integer "event_id"
|
||||
end
|
||||
|
||||
create_table "lodgings", force: true do |t|
|
||||
create_table "lodgings", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.text "description"
|
||||
t.string "photo_file_name"
|
||||
|
|
@ -254,7 +279,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "conference_id"
|
||||
end
|
||||
|
||||
create_table "openids", force: true do |t|
|
||||
create_table "openids", force: :cascade do |t|
|
||||
t.string "provider"
|
||||
t.string "email"
|
||||
t.string "uid"
|
||||
|
|
@ -263,7 +288,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "photos", force: true do |t|
|
||||
create_table "photos", force: :cascade do |t|
|
||||
t.text "description"
|
||||
t.string "picture_file_name"
|
||||
t.string "picture_content_type"
|
||||
|
|
@ -274,7 +299,11 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "programs", force: true do |t|
|
||||
=======
|
||||
create_table "programs", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.integer "conference_id"
|
||||
t.integer "rating", default: 0
|
||||
t.boolean "schedule_public", default: false
|
||||
|
|
@ -283,25 +312,29 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "qanswers", force: true do |t|
|
||||
=======
|
||||
create_table "qanswers", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.integer "question_id"
|
||||
t.integer "answer_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "qanswers_registrations", id: false, force: true do |t|
|
||||
create_table "qanswers_registrations", id: false, force: :cascade do |t|
|
||||
t.integer "registration_id", null: false
|
||||
t.integer "qanswer_id", null: false
|
||||
end
|
||||
|
||||
create_table "question_types", force: true do |t|
|
||||
create_table "question_types", force: :cascade do |t|
|
||||
t.string "title"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "questions", force: true do |t|
|
||||
create_table "questions", force: :cascade do |t|
|
||||
t.string "title"
|
||||
t.integer "question_type_id"
|
||||
t.integer "conference_id"
|
||||
|
|
@ -310,7 +343,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "registration_periods", force: true do |t|
|
||||
create_table "registration_periods", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.date "start_date"
|
||||
t.date "end_date"
|
||||
|
|
@ -318,7 +351,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "registrations", force: true do |t|
|
||||
create_table "registrations", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.datetime "arrival"
|
||||
t.datetime "departure"
|
||||
|
|
@ -333,17 +366,17 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "week"
|
||||
end
|
||||
|
||||
create_table "registrations_social_events", id: false, force: true do |t|
|
||||
create_table "registrations_social_events", id: false, force: :cascade do |t|
|
||||
t.integer "registration_id"
|
||||
t.integer "social_event_id"
|
||||
end
|
||||
|
||||
create_table "registrations_vchoices", id: false, force: true do |t|
|
||||
create_table "registrations_vchoices", id: false, force: :cascade do |t|
|
||||
t.integer "registration_id"
|
||||
t.integer "vchoice_id"
|
||||
end
|
||||
|
||||
create_table "roles", force: true do |t|
|
||||
create_table "roles", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
|
|
@ -355,28 +388,32 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
add_index "roles", ["name", "resource_type", "resource_id"], name: "index_roles_on_name_and_resource_type_and_resource_id"
|
||||
add_index "roles", ["name"], name: "index_roles_on_name"
|
||||
|
||||
create_table "roles_users", id: false, force: true do |t|
|
||||
create_table "roles_users", id: false, force: :cascade do |t|
|
||||
t.integer "role_id"
|
||||
t.integer "user_id"
|
||||
end
|
||||
|
||||
add_index "roles_users", ["user_id", "role_id"], name: "index_roles_users_on_user_id_and_role_id"
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "rooms", force: true do |t|
|
||||
=======
|
||||
create_table "rooms", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.string "guid", null: false
|
||||
t.string "name", null: false
|
||||
t.integer "size"
|
||||
t.integer "venue_id", null: false
|
||||
end
|
||||
|
||||
create_table "social_events", force: true do |t|
|
||||
create_table "social_events", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.string "title"
|
||||
t.text "description"
|
||||
t.date "date"
|
||||
end
|
||||
|
||||
create_table "splashpages", force: true do |t|
|
||||
create_table "splashpages", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.boolean "public"
|
||||
t.boolean "include_tracks"
|
||||
|
|
@ -392,7 +429,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.boolean "include_cfp", default: false
|
||||
end
|
||||
|
||||
create_table "sponsors", force: true do |t|
|
||||
create_table "sponsors", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.text "description"
|
||||
t.string "website_url"
|
||||
|
|
@ -406,7 +443,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "sponsorship_levels", force: true do |t|
|
||||
create_table "sponsorship_levels", force: :cascade do |t|
|
||||
t.string "title"
|
||||
t.integer "conference_id"
|
||||
t.datetime "created_at"
|
||||
|
|
@ -414,14 +451,14 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "position"
|
||||
end
|
||||
|
||||
create_table "subscriptions", force: true do |t|
|
||||
create_table "subscriptions", force: :cascade do |t|
|
||||
t.integer "user_id"
|
||||
t.integer "conference_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "targets", force: true do |t|
|
||||
create_table "targets", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.integer "campaign_id"
|
||||
t.date "due_date"
|
||||
|
|
@ -431,7 +468,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "ticket_purchases", force: true do |t|
|
||||
create_table "ticket_purchases", force: :cascade do |t|
|
||||
t.integer "ticket_id"
|
||||
t.integer "conference_id"
|
||||
t.boolean "paid", default: false
|
||||
|
|
@ -440,7 +477,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "user_id"
|
||||
end
|
||||
|
||||
create_table "tickets", force: true do |t|
|
||||
create_table "tickets", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.string "title", null: false
|
||||
t.text "description"
|
||||
|
|
@ -448,7 +485,11 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.string "price_currency", default: "USD", null: false
|
||||
end
|
||||
|
||||
<<<<<<< HEAD
|
||||
create_table "tracks", force: true do |t|
|
||||
=======
|
||||
create_table "tracks", force: :cascade do |t|
|
||||
>>>>>>> upstream/master
|
||||
t.string "guid", null: false
|
||||
t.string "name", null: false
|
||||
t.text "description"
|
||||
|
|
@ -458,7 +499,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "program_id"
|
||||
end
|
||||
|
||||
create_table "users", force: true do |t|
|
||||
create_table "users", force: :cascade do |t|
|
||||
t.string "email", default: "", null: false
|
||||
t.string "encrypted_password", default: "", null: false
|
||||
t.string "reset_password_token"
|
||||
|
|
@ -498,12 +539,12 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
|
||||
add_index "users", ["username"], name: "index_users_on_username", unique: true
|
||||
|
||||
create_table "vchoices", force: true do |t|
|
||||
create_table "vchoices", force: :cascade do |t|
|
||||
t.integer "vday_id"
|
||||
t.integer "vposition_id"
|
||||
end
|
||||
|
||||
create_table "vdays", force: true do |t|
|
||||
create_table "vdays", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.date "day"
|
||||
t.text "description"
|
||||
|
|
@ -511,7 +552,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "venues", force: true do |t|
|
||||
create_table "venues", force: :cascade do |t|
|
||||
t.string "guid"
|
||||
t.string "name"
|
||||
t.string "website"
|
||||
|
|
@ -531,7 +572,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "conference_id"
|
||||
end
|
||||
|
||||
create_table "versions", force: true do |t|
|
||||
create_table "versions", force: :cascade do |t|
|
||||
t.string "item_type", null: false
|
||||
t.integer "item_id", null: false
|
||||
t.string "event", null: false
|
||||
|
|
@ -543,8 +584,8 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
|
||||
add_index "versions", ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id"
|
||||
|
||||
create_table "visits", force: true do |t|
|
||||
t.uuid "visitor_id"
|
||||
create_table "visits", force: :cascade do |t|
|
||||
t.uuid "visitor_id", limit: 16
|
||||
t.string "ip"
|
||||
t.text "user_agent"
|
||||
t.text "referrer"
|
||||
|
|
@ -568,7 +609,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
|
||||
add_index "visits", ["user_id"], name: "index_visits_on_user_id"
|
||||
|
||||
create_table "votes", force: true do |t|
|
||||
create_table "votes", force: :cascade do |t|
|
||||
t.integer "event_id"
|
||||
t.integer "rating"
|
||||
t.datetime "created_at"
|
||||
|
|
@ -576,7 +617,7 @@ ActiveRecord::Schema.define(version: 20160201221411) do
|
|||
t.integer "user_id"
|
||||
end
|
||||
|
||||
create_table "vpositions", force: true do |t|
|
||||
create_table "vpositions", force: :cascade do |t|
|
||||
t.integer "conference_id"
|
||||
t.string "title", null: false
|
||||
t.text "description"
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
# Read about factories at https://github.com/thoughtbot/factory_girl
|
||||
|
||||
FactoryGirl.define do
|
||||
factory :call_for_paper do
|
||||
start_date { 1.day.ago }
|
||||
end_date { 6.days.from_now }
|
||||
end
|
||||
end
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe 'admin/call_for_papers/show' do
|
||||
|
||||
it 'renders call for papers details' do
|
||||
assign :conference, create(:conference)
|
||||
assign :call_for_paper, create(:call_for_paper)
|
||||
render
|
||||
expect(rendered).to include('Start Date')
|
||||
expect(rendered).to include('End Date')
|
||||
expect(rendered).to include(1.day.ago.strftime('%A, %B %-d. %Y'))
|
||||
expect(rendered).to include(6.days.from_now.strftime('%A, %B %-d. %Y'))
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue