v2 site
@ -12,7 +12,11 @@
|
||||
|
||||
#= require ./vendor/jquery.mask
|
||||
#= require ./vendor/jquery.fitvids
|
||||
#= require ./vendor/jquery.bxslider
|
||||
#= require ./vendor/slick
|
||||
|
||||
#= require ./vendor/d3.min
|
||||
#= require ./vendor/d3.layout.cloud
|
||||
|
||||
#= require redactor
|
||||
#= require redactor_plugins/fontsize
|
||||
#= require redactor_plugins/fontfamily
|
||||
@ -83,6 +87,7 @@ $(document).ready ->
|
||||
|
||||
|
||||
|
||||
|
||||
$ ->
|
||||
$(window).on "resize", ->
|
||||
resize()
|
||||
|
500
app/assets/javascripts/vendor/d3.layout.cloud.js
vendored
Normal file
@ -0,0 +1,500 @@
|
||||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g=(g.d3||(g.d3 = {}));g=(g.layout||(g.layout = {}));g.cloud = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
||||
// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/
|
||||
// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf
|
||||
|
||||
var dispatch = require("d3-dispatch").dispatch;
|
||||
|
||||
var cloudRadians = Math.PI / 180,
|
||||
cw = 1 << 11 >> 5,
|
||||
ch = 1 << 11;
|
||||
|
||||
module.exports = function() {
|
||||
var size = [256, 256],
|
||||
text = cloudText,
|
||||
font = cloudFont,
|
||||
fontSize = cloudFontSize,
|
||||
fontStyle = cloudFontNormal,
|
||||
fontWeight = cloudFontNormal,
|
||||
rotate = cloudRotate,
|
||||
padding = cloudPadding,
|
||||
spiral = archimedeanSpiral,
|
||||
words = [],
|
||||
timeInterval = Infinity,
|
||||
event = dispatch("word", "end"),
|
||||
timer = null,
|
||||
random = Math.random,
|
||||
cloud = {},
|
||||
canvas = cloudCanvas;
|
||||
|
||||
cloud.canvas = function(_) {
|
||||
return arguments.length ? (canvas = functor(_), cloud) : canvas;
|
||||
};
|
||||
|
||||
cloud.start = function() {
|
||||
var contextAndRatio = getContext(canvas()),
|
||||
board = zeroArray((size[0] >> 5) * size[1]),
|
||||
bounds = null,
|
||||
n = words.length,
|
||||
i = -1,
|
||||
tags = [],
|
||||
data = words.map(function(d, i) {
|
||||
d.text = text.call(this, d, i);
|
||||
d.font = font.call(this, d, i);
|
||||
d.style = fontStyle.call(this, d, i);
|
||||
d.weight = fontWeight.call(this, d, i);
|
||||
d.rotate = rotate.call(this, d, i);
|
||||
d.size = ~~fontSize.call(this, d, i);
|
||||
d.padding = padding.call(this, d, i);
|
||||
return d;
|
||||
}).sort(function(a, b) { return b.size - a.size; });
|
||||
|
||||
if (timer) clearInterval(timer);
|
||||
timer = setInterval(step, 0);
|
||||
step();
|
||||
|
||||
return cloud;
|
||||
|
||||
function step() {
|
||||
var start = Date.now();
|
||||
while (Date.now() - start < timeInterval && ++i < n && timer) {
|
||||
var d = data[i];
|
||||
d.x = (size[0] * (random() + .5)) >> 1;
|
||||
d.y = (size[1] * (random() + .5)) >> 1;
|
||||
cloudSprite(contextAndRatio, d, data, i);
|
||||
if (d.hasText && place(board, d, bounds)) {
|
||||
tags.push(d);
|
||||
event.call("word", cloud, d);
|
||||
if (bounds) cloudBounds(bounds, d);
|
||||
else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];
|
||||
// Temporary hack
|
||||
d.x -= size[0] >> 1;
|
||||
d.y -= size[1] >> 1;
|
||||
}
|
||||
}
|
||||
if (i >= n) {
|
||||
cloud.stop();
|
||||
event.call("end", cloud, tags, bounds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cloud.stop = function() {
|
||||
if (timer) {
|
||||
clearInterval(timer);
|
||||
timer = null;
|
||||
}
|
||||
return cloud;
|
||||
};
|
||||
|
||||
function getContext(canvas) {
|
||||
canvas.width = canvas.height = 1;
|
||||
var ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2);
|
||||
canvas.width = (cw << 5) / ratio;
|
||||
canvas.height = ch / ratio;
|
||||
|
||||
var context = canvas.getContext("2d");
|
||||
context.fillStyle = context.strokeStyle = "red";
|
||||
context.textAlign = "center";
|
||||
|
||||
return {context: context, ratio: ratio};
|
||||
}
|
||||
|
||||
function place(board, tag, bounds) {
|
||||
var perimeter = [{x: 0, y: 0}, {x: size[0], y: size[1]}],
|
||||
startX = tag.x,
|
||||
startY = tag.y,
|
||||
maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),
|
||||
s = spiral(size),
|
||||
dt = random() < .5 ? 1 : -1,
|
||||
t = -dt,
|
||||
dxdy,
|
||||
dx,
|
||||
dy;
|
||||
|
||||
while (dxdy = s(t += dt)) {
|
||||
dx = ~~dxdy[0];
|
||||
dy = ~~dxdy[1];
|
||||
|
||||
if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;
|
||||
|
||||
tag.x = startX + dx;
|
||||
tag.y = startY + dy;
|
||||
|
||||
if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||
|
||||
tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;
|
||||
// TODO only check for collisions within current bounds.
|
||||
if (!bounds || !cloudCollide(tag, board, size[0])) {
|
||||
if (!bounds || collideRects(tag, bounds)) {
|
||||
var sprite = tag.sprite,
|
||||
w = tag.width >> 5,
|
||||
sw = size[0] >> 5,
|
||||
lx = tag.x - (w << 4),
|
||||
sx = lx & 0x7f,
|
||||
msx = 32 - sx,
|
||||
h = tag.y1 - tag.y0,
|
||||
x = (tag.y + tag.y0) * sw + (lx >> 5),
|
||||
last;
|
||||
for (var j = 0; j < h; j++) {
|
||||
last = 0;
|
||||
for (var i = 0; i <= w; i++) {
|
||||
board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);
|
||||
}
|
||||
x += sw;
|
||||
}
|
||||
delete tag.sprite;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
cloud.timeInterval = function(_) {
|
||||
return arguments.length ? (timeInterval = _ == null ? Infinity : _, cloud) : timeInterval;
|
||||
};
|
||||
|
||||
cloud.words = function(_) {
|
||||
return arguments.length ? (words = _, cloud) : words;
|
||||
};
|
||||
|
||||
cloud.size = function(_) {
|
||||
return arguments.length ? (size = [+_[0], +_[1]], cloud) : size;
|
||||
};
|
||||
|
||||
cloud.font = function(_) {
|
||||
return arguments.length ? (font = functor(_), cloud) : font;
|
||||
};
|
||||
|
||||
cloud.fontStyle = function(_) {
|
||||
return arguments.length ? (fontStyle = functor(_), cloud) : fontStyle;
|
||||
};
|
||||
|
||||
cloud.fontWeight = function(_) {
|
||||
return arguments.length ? (fontWeight = functor(_), cloud) : fontWeight;
|
||||
};
|
||||
|
||||
cloud.rotate = function(_) {
|
||||
return arguments.length ? (rotate = functor(_), cloud) : rotate;
|
||||
};
|
||||
|
||||
cloud.text = function(_) {
|
||||
return arguments.length ? (text = functor(_), cloud) : text;
|
||||
};
|
||||
|
||||
cloud.spiral = function(_) {
|
||||
return arguments.length ? (spiral = spirals[_] || _, cloud) : spiral;
|
||||
};
|
||||
|
||||
cloud.fontSize = function(_) {
|
||||
return arguments.length ? (fontSize = functor(_), cloud) : fontSize;
|
||||
};
|
||||
|
||||
cloud.padding = function(_) {
|
||||
return arguments.length ? (padding = functor(_), cloud) : padding;
|
||||
};
|
||||
|
||||
cloud.random = function(_) {
|
||||
return arguments.length ? (random = _, cloud) : random;
|
||||
};
|
||||
|
||||
cloud.on = function() {
|
||||
var value = event.on.apply(event, arguments);
|
||||
return value === event ? cloud : value;
|
||||
};
|
||||
|
||||
return cloud;
|
||||
};
|
||||
|
||||
function cloudText(d) {
|
||||
return d.text;
|
||||
}
|
||||
|
||||
function cloudFont() {
|
||||
return "serif";
|
||||
}
|
||||
|
||||
function cloudFontNormal() {
|
||||
return "normal";
|
||||
}
|
||||
|
||||
function cloudFontSize(d) {
|
||||
return Math.sqrt(d.value);
|
||||
}
|
||||
|
||||
function cloudRotate() {
|
||||
return (~~(Math.random() * 6) - 3) * 30;
|
||||
}
|
||||
|
||||
function cloudPadding() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Fetches a monochrome sprite bitmap for the specified text.
|
||||
// Load in batches for speed.
|
||||
function cloudSprite(contextAndRatio, d, data, di) {
|
||||
if (d.sprite) return;
|
||||
var c = contextAndRatio.context,
|
||||
ratio = contextAndRatio.ratio;
|
||||
|
||||
c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);
|
||||
var x = 0,
|
||||
y = 0,
|
||||
maxh = 0,
|
||||
n = data.length;
|
||||
--di;
|
||||
while (++di < n) {
|
||||
d = data[di];
|
||||
c.save();
|
||||
c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font;
|
||||
var w = c.measureText(d.text + "m").width * ratio,
|
||||
h = d.size << 1;
|
||||
if (d.rotate) {
|
||||
var sr = Math.sin(d.rotate * cloudRadians),
|
||||
cr = Math.cos(d.rotate * cloudRadians),
|
||||
wcr = w * cr,
|
||||
wsr = w * sr,
|
||||
hcr = h * cr,
|
||||
hsr = h * sr;
|
||||
w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;
|
||||
h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));
|
||||
} else {
|
||||
w = (w + 0x1f) >> 5 << 5;
|
||||
}
|
||||
if (h > maxh) maxh = h;
|
||||
if (x + w >= (cw << 5)) {
|
||||
x = 0;
|
||||
y += maxh;
|
||||
maxh = 0;
|
||||
}
|
||||
if (y + h >= ch) break;
|
||||
c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);
|
||||
if (d.rotate) c.rotate(d.rotate * cloudRadians);
|
||||
c.fillText(d.text, 0, 0);
|
||||
if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0);
|
||||
c.restore();
|
||||
d.width = w;
|
||||
d.height = h;
|
||||
d.xoff = x;
|
||||
d.yoff = y;
|
||||
d.x1 = w >> 1;
|
||||
d.y1 = h >> 1;
|
||||
d.x0 = -d.x1;
|
||||
d.y0 = -d.y1;
|
||||
d.hasText = true;
|
||||
x += w;
|
||||
}
|
||||
var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,
|
||||
sprite = [];
|
||||
while (--di >= 0) {
|
||||
d = data[di];
|
||||
if (!d.hasText) continue;
|
||||
var w = d.width,
|
||||
w32 = w >> 5,
|
||||
h = d.y1 - d.y0;
|
||||
// Zero the buffer
|
||||
for (var i = 0; i < h * w32; i++) sprite[i] = 0;
|
||||
x = d.xoff;
|
||||
if (x == null) return;
|
||||
y = d.yoff;
|
||||
var seen = 0,
|
||||
seenRow = -1;
|
||||
for (var j = 0; j < h; j++) {
|
||||
for (var i = 0; i < w; i++) {
|
||||
var k = w32 * j + (i >> 5),
|
||||
m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;
|
||||
sprite[k] |= m;
|
||||
seen |= m;
|
||||
}
|
||||
if (seen) seenRow = j;
|
||||
else {
|
||||
d.y0++;
|
||||
h--;
|
||||
j--;
|
||||
y++;
|
||||
}
|
||||
}
|
||||
d.y1 = d.y0 + seenRow;
|
||||
d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);
|
||||
}
|
||||
}
|
||||
|
||||
// Use mask-based collision detection.
|
||||
function cloudCollide(tag, board, sw) {
|
||||
sw >>= 5;
|
||||
var sprite = tag.sprite,
|
||||
w = tag.width >> 5,
|
||||
lx = tag.x - (w << 4),
|
||||
sx = lx & 0x7f,
|
||||
msx = 32 - sx,
|
||||
h = tag.y1 - tag.y0,
|
||||
x = (tag.y + tag.y0) * sw + (lx >> 5),
|
||||
last;
|
||||
for (var j = 0; j < h; j++) {
|
||||
last = 0;
|
||||
for (var i = 0; i <= w; i++) {
|
||||
if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))
|
||||
& board[x + i]) return true;
|
||||
}
|
||||
x += sw;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function cloudBounds(bounds, d) {
|
||||
var b0 = bounds[0],
|
||||
b1 = bounds[1];
|
||||
if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;
|
||||
if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;
|
||||
if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;
|
||||
if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;
|
||||
}
|
||||
|
||||
function collideRects(a, b) {
|
||||
return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;
|
||||
}
|
||||
|
||||
function archimedeanSpiral(size) {
|
||||
var e = size[0] / size[1];
|
||||
return function(t) {
|
||||
return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];
|
||||
};
|
||||
}
|
||||
|
||||
function rectangularSpiral(size) {
|
||||
var dy = 4,
|
||||
dx = dy * size[0] / size[1],
|
||||
x = 0,
|
||||
y = 0;
|
||||
return function(t) {
|
||||
var sign = t < 0 ? -1 : 1;
|
||||
// See triangular numbers: T_n = n * (n + 1) / 2.
|
||||
switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {
|
||||
case 0: x += dx; break;
|
||||
case 1: y += dy; break;
|
||||
case 2: x -= dx; break;
|
||||
default: y -= dy; break;
|
||||
}
|
||||
return [x, y];
|
||||
};
|
||||
}
|
||||
|
||||
// TODO reuse arrays?
|
||||
function zeroArray(n) {
|
||||
var a = [],
|
||||
i = -1;
|
||||
while (++i < n) a[i] = 0;
|
||||
return a;
|
||||
}
|
||||
|
||||
function cloudCanvas() {
|
||||
return document.createElement("canvas");
|
||||
}
|
||||
|
||||
function functor(d) {
|
||||
return typeof d === "function" ? d : function() { return d; };
|
||||
}
|
||||
|
||||
var spirals = {
|
||||
archimedean: archimedeanSpiral,
|
||||
rectangular: rectangularSpiral
|
||||
};
|
||||
|
||||
},{"d3-dispatch":2}],2:[function(require,module,exports){
|
||||
// https://d3js.org/d3-dispatch/ Version 1.0.3. Copyright 2017 Mike Bostock.
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(factory((global.d3 = global.d3 || {})));
|
||||
}(this, (function (exports) { 'use strict';
|
||||
|
||||
var noop = {value: function() {}};
|
||||
|
||||
function dispatch() {
|
||||
for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
|
||||
if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
|
||||
_[t] = [];
|
||||
}
|
||||
return new Dispatch(_);
|
||||
}
|
||||
|
||||
function Dispatch(_) {
|
||||
this._ = _;
|
||||
}
|
||||
|
||||
function parseTypenames(typenames, types) {
|
||||
return typenames.trim().split(/^|\s+/).map(function(t) {
|
||||
var name = "", i = t.indexOf(".");
|
||||
if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
|
||||
if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
|
||||
return {type: t, name: name};
|
||||
});
|
||||
}
|
||||
|
||||
Dispatch.prototype = dispatch.prototype = {
|
||||
constructor: Dispatch,
|
||||
on: function(typename, callback) {
|
||||
var _ = this._,
|
||||
T = parseTypenames(typename + "", _),
|
||||
t,
|
||||
i = -1,
|
||||
n = T.length;
|
||||
|
||||
// If no callback was specified, return the callback of the given type and name.
|
||||
if (arguments.length < 2) {
|
||||
while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
|
||||
return;
|
||||
}
|
||||
|
||||
// If a type was specified, set the callback for the given type and name.
|
||||
// Otherwise, if a null callback was specified, remove callbacks of the given name.
|
||||
if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
|
||||
while (++i < n) {
|
||||
if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
|
||||
else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
copy: function() {
|
||||
var copy = {}, _ = this._;
|
||||
for (var t in _) copy[t] = _[t].slice();
|
||||
return new Dispatch(copy);
|
||||
},
|
||||
call: function(type, that) {
|
||||
if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
|
||||
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
|
||||
for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
|
||||
},
|
||||
apply: function(type, that, args) {
|
||||
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
|
||||
for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
|
||||
}
|
||||
};
|
||||
|
||||
function get(type, name) {
|
||||
for (var i = 0, n = type.length, c; i < n; ++i) {
|
||||
if ((c = type[i]).name === name) {
|
||||
return c.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function set(type, name, callback) {
|
||||
for (var i = 0, n = type.length; i < n; ++i) {
|
||||
if (type[i].name === name) {
|
||||
type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (callback != null) type.push({name: name, value: callback});
|
||||
return type;
|
||||
}
|
||||
|
||||
exports.dispatch = dispatch;
|
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true });
|
||||
|
||||
})));
|
||||
|
||||
},{}]},{},[1])(1)
|
||||
});
|
5
app/assets/javascripts/vendor/d3.min.js
vendored
Normal file
3011
app/assets/javascripts/vendor/slick.js
vendored
Normal file
@ -9,9 +9,17 @@
|
||||
|
||||
@import "qi_grids";
|
||||
|
||||
$first_color:#EAB634;
|
||||
@import "vendor/slick";
|
||||
@import "vendor/slick-theme";
|
||||
|
||||
|
||||
$first_color:#DBC089;
|
||||
|
||||
h2{
|
||||
color:#DBC089;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
body{
|
||||
font-family: Lato, Helvetica, Arial, sans-serif;
|
||||
font-size:15px;
|
||||
@ -58,10 +66,16 @@ body{
|
||||
img{
|
||||
max-width:100%;
|
||||
}
|
||||
.header_image{
|
||||
position:relative;
|
||||
|
||||
background: center center no-repeat ;
|
||||
background-size:100%;
|
||||
background-size:cover;
|
||||
}
|
||||
|
||||
#header{
|
||||
background: center center no-repeat black;
|
||||
background: center center no-repeat ;
|
||||
background-size:100%;
|
||||
background-size:cover;
|
||||
padding:10px 20px;
|
||||
@ -82,14 +96,22 @@ img{
|
||||
height:70px;
|
||||
}
|
||||
|
||||
.top_right{
|
||||
position:absolute;
|
||||
top:5px;
|
||||
right:10px;
|
||||
font-size:0.95em;
|
||||
|
||||
}
|
||||
|
||||
#menu_top{
|
||||
position:relative;
|
||||
z-index:2;
|
||||
float:right;
|
||||
text-align:right;
|
||||
margin-top:20px;
|
||||
margin-top:35px;
|
||||
|
||||
color:white;
|
||||
color:black;
|
||||
|
||||
|
||||
ul{
|
||||
@ -103,7 +125,14 @@ ul{
|
||||
a{
|
||||
display:inline-block;
|
||||
padding:4px 5px;
|
||||
color:white
|
||||
color:black;
|
||||
|
||||
&:hover, &.active{
|
||||
color:#DBC089;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -111,6 +140,13 @@ ul{
|
||||
}
|
||||
}
|
||||
|
||||
#main{
|
||||
strong{
|
||||
color:#DBC089;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media screen and (min-width: 0px) and (max-width: 1170px) {
|
||||
.info_contact {
|
||||
>div {
|
||||
@ -141,7 +177,7 @@ ul{
|
||||
}
|
||||
text-align:center;
|
||||
padding:60px 0;
|
||||
background: url('/mont2.jpg?1=2') no-repeat center center;
|
||||
background: url('/mont.jpg?1=4') no-repeat center center;
|
||||
background-size: cover;
|
||||
font-weight: 300;
|
||||
|
||||
@ -347,3 +383,5 @@ ul{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
195
app/assets/stylesheets/vendor/slick-theme.scss
vendored
Normal file
@ -0,0 +1,195 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
// Default Variables
|
||||
|
||||
// Slick icon entity codes outputs the following
|
||||
// "\2190" outputs ascii character "←"
|
||||
// "\2192" outputs ascii character "→"
|
||||
// "\2022" outputs ascii character "•"
|
||||
|
||||
$slick-font-path: "/fonts/slick/" !default;
|
||||
$slick-font-family: "slick" !default;
|
||||
$slick-loader-path: "./" !default;
|
||||
$slick-arrow-color: white !default;
|
||||
$slick-dot-color: black !default;
|
||||
$slick-dot-color-active: $slick-dot-color !default;
|
||||
$slick-prev-character: "\2190" !default;
|
||||
$slick-next-character: "\2192" !default;
|
||||
$slick-dot-character: "\2022" !default;
|
||||
$slick-dot-size: 6px !default;
|
||||
$slick-opacity-default: 0.75 !default;
|
||||
$slick-opacity-on-hover: 1 !default;
|
||||
$slick-opacity-not-active: 0.25 !default;
|
||||
|
||||
@function slick-image-url($url) {
|
||||
@if function-exists(image-url) {
|
||||
@return image-url($url);
|
||||
}
|
||||
@else {
|
||||
@return url($slick-loader-path + $url);
|
||||
}
|
||||
}
|
||||
|
||||
@function slick-font-url($url) {
|
||||
@if function-exists(font-url) {
|
||||
@return font-url($url);
|
||||
}
|
||||
@else {
|
||||
@return url($slick-font-path + $url);
|
||||
}
|
||||
}
|
||||
|
||||
/* Slider */
|
||||
|
||||
.slick-list {
|
||||
.slick-loading & {
|
||||
background: #fff slick-image-url("ajax-loader.gif") center center no-repeat;
|
||||
}
|
||||
}
|
||||
|
||||
/* Icons */
|
||||
@if $slick-font-family == "slick" {
|
||||
@font-face {
|
||||
font-family: "slick";
|
||||
src: slick-font-url("slick.eot");
|
||||
src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), slick-font-url("slick.woff") format("woff"), slick-font-url("slick.ttf") format("truetype"), slick-font-url("slick.svg#slick") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
}
|
||||
|
||||
/* Arrows */
|
||||
|
||||
.slick-prev,
|
||||
.slick-next {
|
||||
position: absolute;
|
||||
z-index:100;
|
||||
display: block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
line-height: 0px;
|
||||
font-size: 0px;
|
||||
cursor: pointer;
|
||||
background: transparent;
|
||||
color: transparent;
|
||||
top: 50%;
|
||||
-webkit-transform: translate(0, -50%);
|
||||
-ms-transform: translate(0, -50%);
|
||||
transform: translate(0, -50%);
|
||||
padding: 0;
|
||||
border: none;
|
||||
outline: none;
|
||||
&:hover, &:focus {
|
||||
outline: none;
|
||||
background: transparent;
|
||||
color: transparent;
|
||||
&:before {
|
||||
opacity: $slick-opacity-on-hover;
|
||||
}
|
||||
}
|
||||
&.slick-disabled:before {
|
||||
opacity: $slick-opacity-not-active;
|
||||
}
|
||||
&:before {
|
||||
font-family: $slick-font-family;
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
color: $slick-arrow-color;
|
||||
opacity: $slick-opacity-default;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
}
|
||||
|
||||
.slick-prev {
|
||||
left: 10px;
|
||||
[dir="rtl"] & {
|
||||
left: auto;
|
||||
right: 10px;
|
||||
}
|
||||
&:before {
|
||||
content: $slick-prev-character;
|
||||
[dir="rtl"] & {
|
||||
content: $slick-next-character;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.slick-next {
|
||||
right: 10px;
|
||||
[dir="rtl"] & {
|
||||
left: 10px;
|
||||
right: auto;
|
||||
}
|
||||
&:before {
|
||||
content: $slick-next-character;
|
||||
[dir="rtl"] & {
|
||||
content: $slick-prev-character;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Dots */
|
||||
|
||||
.slick-dotted.slick-slider {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.slick-dots {
|
||||
position: absolute;
|
||||
bottom: -25px;
|
||||
list-style: none;
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
li {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
margin: 0 5px;
|
||||
padding: 0;
|
||||
cursor: pointer;
|
||||
button {
|
||||
border: 0;
|
||||
background: transparent;
|
||||
display: block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
outline: none;
|
||||
line-height: 0px;
|
||||
font-size: 0px;
|
||||
color: transparent;
|
||||
padding: 5px;
|
||||
cursor: pointer;
|
||||
&:hover, &:focus {
|
||||
outline: none;
|
||||
&:before {
|
||||
opacity: $slick-opacity-on-hover;
|
||||
}
|
||||
}
|
||||
&:before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
content: $slick-dot-character;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
font-family: $slick-font-family;
|
||||
font-size: $slick-dot-size;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
color: $slick-dot-color;
|
||||
opacity: $slick-opacity-not-active;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
}
|
||||
&.slick-active button:before {
|
||||
color: $slick-dot-color-active;
|
||||
opacity: $slick-opacity-default;
|
||||
}
|
||||
}
|
||||
}
|
119
app/assets/stylesheets/vendor/slick.css
vendored
Normal file
@ -0,0 +1,119 @@
|
||||
/* Slider */
|
||||
.slick-slider
|
||||
{
|
||||
position: relative;
|
||||
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-khtml-user-select: none;
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
.slick-list
|
||||
{
|
||||
position: relative;
|
||||
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.slick-list:focus
|
||||
{
|
||||
outline: none;
|
||||
}
|
||||
.slick-list.dragging
|
||||
{
|
||||
cursor: pointer;
|
||||
cursor: hand;
|
||||
}
|
||||
|
||||
.slick-slider .slick-track,
|
||||
.slick-slider .slick-list
|
||||
{
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-moz-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0);
|
||||
-o-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.slick-track
|
||||
{
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.slick-track:before,
|
||||
.slick-track:after
|
||||
{
|
||||
display: table;
|
||||
|
||||
content: '';
|
||||
}
|
||||
.slick-track:after
|
||||
{
|
||||
clear: both;
|
||||
}
|
||||
.slick-loading .slick-track
|
||||
{
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.slick-slide
|
||||
{
|
||||
display: none;
|
||||
float: left;
|
||||
|
||||
height: 100%;
|
||||
min-height: 1px;
|
||||
}
|
||||
[dir='rtl'] .slick-slide
|
||||
{
|
||||
float: right;
|
||||
}
|
||||
.slick-slide img
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
.slick-slide.slick-loading img
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
.slick-slide.dragging img
|
||||
{
|
||||
pointer-events: none;
|
||||
}
|
||||
.slick-initialized .slick-slide
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
.slick-loading .slick-slide
|
||||
{
|
||||
visibility: hidden;
|
||||
}
|
||||
.slick-vertical .slick-slide
|
||||
{
|
||||
display: block;
|
||||
|
||||
height: auto;
|
||||
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
.slick-arrow.slick-hidden {
|
||||
display: none;
|
||||
}
|
@ -4,7 +4,7 @@ class GeneralMails < ActionMailer::Base
|
||||
|
||||
layout 'mail'
|
||||
|
||||
default from: "Pollen Concepts <contact@pollen-concepts.fr>"
|
||||
default from: "Walden Solutions <contact@walden-solutions.fr>"
|
||||
|
||||
|
||||
def general(lang_slug, mail_type, email, options = {})
|
||||
|
@ -1,5 +1,5 @@
|
||||
class QuestionMailer < ActionMailer::Base
|
||||
default from: "Pollen Concepts <contact@pollen-concepts.fr>"
|
||||
default from: "Walden Solutions <contact@walden-solutions.fr>"
|
||||
|
||||
# Subject can be set in your I18n file at config/locales/en.yml
|
||||
# with the following lookup:
|
||||
|
@ -5,16 +5,8 @@ class DynamicContent < ApplicationRecord
|
||||
belongs_to :item
|
||||
|
||||
NAMES = {
|
||||
"militer" => "Index militer",
|
||||
"detenus" => "Index détenus",
|
||||
"index_label" => "Index Label",
|
||||
"index_petitions" => "Index Pétitions",
|
||||
"index_sponsorship" => "Index Parrainages",
|
||||
"contact" => "Formulaire contact",
|
||||
"contact_leg" => "Formulaire contact leg",
|
||||
"contact_militer" => "Formulaire contact militer",
|
||||
"plan" => "Plan du site",
|
||||
"newsletter" => "Formulaire newsletter",
|
||||
"index_usages" => "Index usages",
|
||||
"nuage" => "Nuage de mots clés"
|
||||
|
||||
}
|
||||
|
||||
|
4
app/models/home_slide_lang.rb
Normal file
@ -0,0 +1,4 @@
|
||||
class HomeSlideLang < ActiveRecord::Base
|
||||
belongs_to :home_slider_slide
|
||||
belongs_to :lang_site
|
||||
end
|
3
app/models/home_slider.rb
Normal file
@ -0,0 +1,3 @@
|
||||
class HomeSlider < ActiveRecord::Base
|
||||
has_many :home_slider_slides
|
||||
end
|
9
app/models/home_slider_slide.rb
Normal file
@ -0,0 +1,9 @@
|
||||
class HomeSliderSlide < ActiveRecord::Base
|
||||
belongs_to :home_slider
|
||||
belongs_to :image_file
|
||||
belongs_to :blur_image, :class_name => "ImageFile"
|
||||
belongs_to :article
|
||||
|
||||
has_many :home_slide_langs, :dependent => :destroy
|
||||
has_many :lang_sites, :through => :home_slide_langs
|
||||
end
|
@ -10,18 +10,18 @@
|
||||
=f.input :image_file_id, :label => "Image :", :as => :qi_image_select
|
||||
=#f.input :blur_image_id, :label => "Image floue :", :as => :qi_image_select
|
||||
=#f.input :blur_color, :label => "Couleur de fond :"
|
||||
=f.input :titre1, :label => "Titre :"
|
||||
=f.input :titre2, :label => "Sous-titre :"
|
||||
=f.input :article_id, :as => :select, :collection => (Hash[Article.order("id DESC").all.map{|a| [a.lang(@lang.slug).title,a.id]}]), :label => "Article associé :"
|
||||
=f.input :description1, :label => "Description :"
|
||||
=f.input :cta_text, :label => "Texte CTA :"
|
||||
=#f.input :titre1, :label => "Titre :"
|
||||
=#f.input :titre2, :label => "Sous-titre :"
|
||||
=#f.input :article_id, :as => :select, :collection => (Hash[Article.order("id DESC").all.map{|a| [a.lang(@lang.slug).title,a.id]}]), :label => "Article associé :"
|
||||
=#f.input :description1, :label => "Description :"
|
||||
=#f.input :cta_text, :label => "Texte CTA :"
|
||||
|
||||
=f.input :url, :label => "Url :"
|
||||
|
||||
|
||||
|
||||
= f.input :start_at, :label => "Début :", :as => :qi_datetime_picker
|
||||
= f.input :end_at, :label => "Fin :", :as => :qi_datetime_picker
|
||||
=# f.input :start_at, :label => "Début :", :as => :qi_datetime_picker
|
||||
=# f.input :end_at, :label => "Fin :", :as => :qi_datetime_picker
|
||||
|
||||
|
||||
|
||||
|
@ -37,10 +37,9 @@
|
||||
<meta name="msapplication-TileColor" content="#ffffff">
|
||||
<meta name="msapplication-TileImage" content="/mstile-144x144.png">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans:800&display=swap" rel="stylesheet">
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=Pacifico&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Lato:400,400i,700,700i" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css?family=Lato:300,400,400i,700,700i,900" rel="stylesheet">
|
||||
|
||||
%meta{:name=>"viewport", :content=>"width=device-width,initial-scale=1"}
|
||||
%meta{ :"http-equiv" => "Content-Type", :content => "text/html; charset=utf-8" }
|
||||
@ -59,15 +58,15 @@
|
||||
|
||||
|
||||
-if @facebook_img
|
||||
=raw '<meta property="og:image" content="https://pollen.olwen.xyz'+@facebook_img.to_s+'"/>'
|
||||
=raw '<link rel="image_src" href="https://pollen.olwen.xyz'+@facebook_img.to_s+'"/>'
|
||||
=raw '<meta property="og:image" content="https://walden-solutions.fr'+@facebook_img.to_s+'"/>'
|
||||
=raw '<link rel="image_src" href="https://walden-solutions.fr'+@facebook_img.to_s+'"/>'
|
||||
|
||||
=raw '<meta name="twitter:card" content="summary_large_image">'
|
||||
|
||||
|
||||
|
||||
|
||||
=raw '<meta property="twitter:image" content="https://pollen.olwen.xyz'+@facebook_img.to_s+'"/>'
|
||||
=raw '<meta property="twitter:image" content="https://walden-solutions.fr'+@facebook_img.to_s+'"/>'
|
||||
|
||||
|
||||
-begin
|
||||
@ -113,43 +112,98 @@
|
||||
%span.remove=ic :times
|
||||
=flash[:alert]
|
||||
|
||||
#header.with_ratio{:style => "position:relative;background-image:url('#{@img_url}');", :data => {:ratio => 0.30}}
|
||||
#header
|
||||
|
||||
|
||||
|
||||
#menu_top
|
||||
%ul
|
||||
%li
|
||||
.top_right
|
||||
=ic :tel
|
||||
+33 (0)4 65 84 48 38
|
||||
="-"
|
||||
=link_to "mailto:contact@pollen-concepts.fr" do
|
||||
=link_to "mailto:contact@walden-solutions.fr", :style => "color:#DBC089;" do
|
||||
=ic :mail
|
||||
contact@pollen-concepts.fr
|
||||
contact@walden-solutions.fr
|
||||
|
||||
#menu_top
|
||||
|
||||
|
||||
|
||||
%ul
|
||||
-MenuItem.where(:parent_id => nil, :menu_id => 1).order(:position).each do |menu_item|
|
||||
-if menu_item_link(menu_item) and menu_item_link(menu_item) != ""
|
||||
%li
|
||||
=menu_item_link(menu_item)
|
||||
|
||||
%li
|
||||
=link_to "Contact", "#contact"
|
||||
|
||||
=link_to "/" do
|
||||
=image_tag "/logo-pollen-w.png", :id => "logo"
|
||||
=image_tag "/logo-walden.png", :id => "logo"
|
||||
|
||||
.clear
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-if @menu_item and @menu_item.id != 3
|
||||
#header_image.header_image.with_ratio{:style => "position:relative;background-color:black;background-image:url('#{@img_url}');", :id => (@menu_item.id if @menu_item), :data => {:ratio => 0.35}}
|
||||
%div{:style => "position:absolute;top:0;right:0;left:0;bottom:0;"}
|
||||
%h1.vertical_center=@title
|
||||
%h1=@title
|
||||
|
||||
:scss
|
||||
.header_image{
|
||||
h1{
|
||||
color:white;
|
||||
position:absolute;
|
||||
bottom:25px;
|
||||
left:30px;
|
||||
font-size:35px;
|
||||
max-width:500px;
|
||||
font-weight:300;
|
||||
padding:15px 20px;
|
||||
background:rgba(#DBC089,0.9);
|
||||
padding-top:8px;
|
||||
}
|
||||
}
|
||||
|
||||
-else
|
||||
.qi_slider
|
||||
|
||||
-@home_slider = HomeSlider.find_by_slug("home")
|
||||
-@date = Time.now
|
||||
-if @home_slider
|
||||
-@home_slides_simu = @home_slider.home_slider_slides.where(:enabled => true)
|
||||
-@home_slides_simu = @home_slides_simu.where("start_at IS NULL or start_at <= ?",@date)
|
||||
-@home_slides_simu = @home_slides_simu.where("end_at IS NULL or end_at >= ?",@date)
|
||||
-@home_slides_simu = @home_slides_simu.order(:position)
|
||||
-@home_slides_simu = @home_slides_simu.joins(:lang_sites).where("lang_sites.id = ?", @lang.id)
|
||||
-@home_slides_simu.each do |home_slider_slide|
|
||||
-if home_slider_slide.image_file
|
||||
|
||||
%div.with_ratio.qi_slide{:style => "background-image:url('#{home_slider_slide.image_file.file.url}');background-size:100%;background-size:cover;", :data => {:ratio => 0.45}}
|
||||
|
||||
:javascript
|
||||
$('.qi_slider').slick({
|
||||
|
||||
autoplay: true,
|
||||
autoplaySpeed: 2000,
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#main=yield
|
||||
#contact
|
||||
|
||||
#footer
|
||||
|
||||
.center
|
||||
%h2
|
||||
%h2{:style => "color:black;"}
|
||||
Contact
|
||||
%p
|
||||
Envie d’échanger autour de beaux projets ? N’hésitez pas à nous contacter.
|
||||
|
@ -32,7 +32,7 @@
|
||||
|
||||
});
|
||||
|
||||
init_form_change();
|
||||
//init_form_change();
|
||||
|
||||
|
||||
|
||||
|
@ -34,4 +34,4 @@
|
||||
|
||||
});
|
||||
|
||||
init_form_change();
|
||||
//init_form_change();
|
@ -1,4 +0,0 @@
|
||||
-@contact = @contact || Contact.new(:raison_id => 1, :survey_set_id => params[:id])
|
||||
|
||||
.contact_form.contact_militer#form
|
||||
=render :partial => "public/contacts/form"
|
@ -1,4 +0,0 @@
|
||||
-@contact = @contact || Contact.new(:raison_id => 2, :survey_set_id => params[:id])
|
||||
|
||||
.contact_form.contact_militer#form
|
||||
=render :partial => "public/contacts/form"
|
@ -1,4 +0,0 @@
|
||||
-@contact = @contact || Contact.new(:raison_id => 4, :survey_set_id => params[:id])
|
||||
|
||||
.contact_form.contact_militer#form
|
||||
=render :partial => "public/contacts/form"
|
@ -1,39 +0,0 @@
|
||||
.detenus_container
|
||||
.detenus
|
||||
-DetenuGroup.order("name").each do |detenu_group|
|
||||
.detenu_group
|
||||
%h4=detenu_group.name
|
||||
|
||||
-if detenu_group.detenus.count > 0
|
||||
-detenu_group.detenus.order("name").each do |detenu|
|
||||
.detenu
|
||||
=detenu.name
|
||||
-if detenu.sexe == 1
|
||||
=ic :mars
|
||||
|
||||
-if detenu.sexe == 2
|
||||
=ic :venus
|
||||
|
||||
-if detenu.link?
|
||||
=link_to "(+ d'infos)", detenu.link, :target => "_blank", :style => "font-size:0.85em"
|
||||
|
||||
.desc
|
||||
-if detenu.age_text?
|
||||
=detenu.age_text
|
||||
-if detenu.age_text? and detenu.free_text?
|
||||
= "-"
|
||||
-if detenu.free_text?
|
||||
%span.free_text
|
||||
=ic :"chain-broken"
|
||||
=detenu.free_text
|
||||
|
||||
-if detenu.provisoire
|
||||
%span.ident
|
||||
|
||||
en cours d'identification
|
||||
|
||||
|
||||
-else
|
||||
.none
|
||||
Enquête en cours
|
||||
|
@ -1,105 +0,0 @@
|
||||
-if @admin
|
||||
.dynamic
|
||||
Label
|
||||
|
||||
|
||||
.index_label
|
||||
%h3 Découvrez les marques 100% labélisées
|
||||
|
||||
-NewLabelEntreprise.order("name").all.each do |new_label_entreprise|
|
||||
=link_to new_label_entreprise.website, :target => "_blank" do
|
||||
.label_marque_img
|
||||
.inner_logo{:style => "background-image:url('#{new_label_entreprise.image_file.file.large.medium.url if new_label_entreprise.image_file}');"}
|
||||
-if !new_label_entreprise.image_file
|
||||
.inner_title
|
||||
=new_label_entreprise.name
|
||||
|
||||
%h3 Découvrez les produits labellisés des marques suivantes
|
||||
|
||||
-LabelMarque.order("name").all.each do |label_marque|
|
||||
=link_to "/public/label_produits?search=true&q=&label_marque_id=#{label_marque.id}", :target => "_blank" do
|
||||
.label_marque_img
|
||||
.inner_logo{:style => "background-image:url('#{label_marque.image_file.file.large.medium.url if label_marque.image_file}');"}
|
||||
-if !label_marque.image_file
|
||||
.inner_title
|
||||
=label_marque.name
|
||||
|
||||
:scss
|
||||
.index_label{
|
||||
text-align:center;
|
||||
h3{
|
||||
text-align:center;
|
||||
margin-top:30px;
|
||||
margin-bottom:20px;
|
||||
}
|
||||
.label_marque_img{
|
||||
|
||||
height:140px;
|
||||
width:140px;
|
||||
margin:2px;
|
||||
padding:5px;
|
||||
|
||||
display:inline-block;
|
||||
|
||||
position:relative;
|
||||
border:1px solid rgba(0,0,0,0.1);
|
||||
.inner_logo{
|
||||
position:absolute;
|
||||
left:12px;
|
||||
right:12px;
|
||||
top:12px;
|
||||
bottom:12px;
|
||||
background:center center no-repeat;
|
||||
background-size:100%;
|
||||
background-size:contain;
|
||||
|
||||
|
||||
|
||||
}
|
||||
.inner_title{
|
||||
position:absolute;
|
||||
left:0;
|
||||
right:0;
|
||||
top:60px;
|
||||
text-align:center;
|
||||
color:black;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
.bottom_subpages
|
||||
-@menu_item.children.order(:position).each do |menu_item|
|
||||
|
||||
-menu_item_lang = menu_item.menu_item_langs.find_by_lang_site_id(@lang.id)
|
||||
|
||||
|
||||
-name = menu_item_lang.name
|
||||
-if menu_item_lang.enabled == true and menu_item_lang.visible == true
|
||||
-if menu_item.image_file
|
||||
|
||||
|
||||
|
||||
-img_url = menu_item.image_file.file.large.medium.url
|
||||
|
||||
-if menu_item.image_file and menu_item.image_file.photograph
|
||||
-@page_images_credits << menu_item.image_file.photograph
|
||||
|
||||
|
||||
|
||||
|
||||
-css_style = "background-image:url('#{img_url}');background-size:100%;background-size:cover;background-position:center center;display:block;min-height:50px;"
|
||||
|
||||
|
||||
.subpage_link
|
||||
=link_to @one_voice_host.to_s+menu_item_path(:url => menu_item_lang.url, :lang => @lang.slug) , :class => "with_ratio" do
|
||||
.with_ratio{:style => css_style, :data => {:ratio => 0.62}}
|
||||
|
||||
|
||||
.overlay
|
||||
|
||||
|
||||
%h4.title
|
||||
=menu_item.menu_item_langs.find_by_lang_site_id(@lang.id).name
|
@ -1,10 +0,0 @@
|
||||
|
||||
-@petitions = Petition.joins(:petition_langs).where(:petition_langs => {:lang_site_id => @lang.id, :enabled => true}).order("position ASC")
|
||||
|
||||
.petitions_index
|
||||
.petition_first_page
|
||||
=render :collection => @petitions[0..8], :partial => "public/petitions/petition"
|
||||
.cta{:style => "text-align:center;margin:20px 0;"}
|
||||
=link_to qit("Voir plus de pétitions >"), "#", :onclick => "$(this).closest('.petitions_index').find('.petition_more').show();$(this).closest('.cta').hide();return false;", :class => "btn"
|
||||
.petition_more{:style => "display:none;"}
|
||||
=render :collection => @petitions[9..@petitions.size], :partial => "public/petitions/petition"
|
@ -1,6 +0,0 @@
|
||||
|
||||
-@sponsorship_animals = SponsorshipAnimal.where(:enabled => true).order(:position).all
|
||||
|
||||
|
||||
.sponsorship_index
|
||||
=render :collection => @sponsorship_animals, :partial => "public/sponsorship_animals/sponsorship_animal"
|
68
app/views/portlets/dynamic_contents/_index_usages.html.haml
Normal file
@ -0,0 +1,68 @@
|
||||
|
||||
|
||||
|
||||
.index_usages
|
||||
=link_to "/fr/les-usages.html" do
|
||||
.usage_item
|
||||
=image_tag("/public_medias/image_file/file/39/large_b816293e.png")
|
||||
%h3 Brezol
|
||||
%p Grand âge et PMR
|
||||
|
||||
.usage_item
|
||||
=image_tag("/public_medias/image_file/file/41/large_64176061.png")
|
||||
%h3 Gardel
|
||||
%p Bureaux et extensions
|
||||
|
||||
.usage_item
|
||||
=image_tag("/public_medias/image_file/file/42/large_430666c9.png")
|
||||
%h3 Rafaz
|
||||
%p Logements de saisonniers et logements d'urgence
|
||||
|
||||
.usage_item
|
||||
=image_tag("/public_medias/image_file/file/40/large_c45f369d.png")
|
||||
%h3 Kidel
|
||||
%p Crèches et bâtiments scolaires
|
||||
|
||||
.usage_item
|
||||
=image_tag("/public_medias/image_file/file/43/large_ada9e516.png")
|
||||
%h3 Blodge
|
||||
%p Lodge, maison secondaire
|
||||
|
||||
|
||||
:scss
|
||||
.index_usages{
|
||||
vertical-align:top;
|
||||
padding:20px 0;
|
||||
max-width:1100px;
|
||||
margin:auto;
|
||||
.usage_item{
|
||||
display:inline-block;
|
||||
vertical-align:top;
|
||||
padding:10px 5px;
|
||||
text-align:center;
|
||||
p{
|
||||
color:black;
|
||||
height:3em;
|
||||
}
|
||||
|
||||
img{
|
||||
height:170px;
|
||||
}
|
||||
h3{
|
||||
color:black;
|
||||
font-size:22px;
|
||||
font-weight:700;
|
||||
|
||||
}
|
||||
|
||||
width:19%;
|
||||
|
||||
box-sizing:border-box;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -1,71 +0,0 @@
|
||||
|
||||
-begin
|
||||
-params[:cat] = params[:cat] || 3
|
||||
-@militer_cat = MiliterCat.find(params[:cat])
|
||||
|
||||
%a{:id => "documents"}
|
||||
.militer_index
|
||||
.main_container
|
||||
%h3 Documents
|
||||
|
||||
-MiliterCat.where(:parent_id => nil).order("position").all.each do |militer_cat|
|
||||
-if I18n.locale == :fr
|
||||
-name =militer_cat.name
|
||||
-else
|
||||
-name = militer_cat.english_name
|
||||
|
||||
=link_to raw(name), "?cat=#{militer_cat.id}#documents", :class => ("active" if @militer_cat and militer_cat.id == @militer_cat.id), :data => {:id => militer_cat.id}
|
||||
|
||||
.militer
|
||||
|
||||
|
||||
-ig = 0
|
||||
-@militer_cat.children.order("position").each do |militer_cat|
|
||||
-ig += 1
|
||||
|
||||
%h3
|
||||
.right
|
||||
%span.plus{:style => ("display:none;" if ig == 1)} +
|
||||
%span.moins{:style => ("display:block;" if ig == 1)}= "-"
|
||||
=militer_cat.name
|
||||
.militer_content{:style => ("display:block;" if ig == 1)}
|
||||
-i = 0
|
||||
.row
|
||||
-militer_cat.data_files.where(:lang_site_id => @lang.id).order("militer_position DESC, created_at DESC").each do |data_file|
|
||||
-i += 1
|
||||
|
||||
=render data_file
|
||||
|
||||
-if i== 2
|
||||
-i = 0
|
||||
=raw "</div><div class='clear'></div><div class='row'>"
|
||||
.clear
|
||||
|
||||
.clear
|
||||
|
||||
-i = 0
|
||||
.row
|
||||
-@militer_cat.data_files.where(:lang_site_id => @lang.id).order("militer_position DESC, created_at DESC").each do |data_file|
|
||||
-i += 1
|
||||
|
||||
=render data_file
|
||||
|
||||
-if i== 2
|
||||
-i = 0
|
||||
=raw "</div><div class='clear'></div><div class='row'>"
|
||||
.clear
|
||||
|
||||
|
||||
%br
|
||||
%br
|
||||
%br
|
||||
|
||||
:coffeescript
|
||||
$(".militer h3").click ->
|
||||
$(this).next(".militer_content").toggle()
|
||||
$(this).find(".plus").toggle()
|
||||
$(this).find(".moins").toggle()
|
||||
|
||||
-rescue
|
||||
=""
|
||||
|
@ -1,12 +0,0 @@
|
||||
-if @admin
|
||||
plan du site
|
||||
-else
|
||||
#newsletter_form
|
||||
-@registrant = @registrant || Registrant.new
|
||||
=semantic_form_for [:public, @registrant], :remote => true do |f|
|
||||
=hidden_field_tag :popup, true
|
||||
%table{:style => "width:100%;max-width:450px;margin:20px auto;"}
|
||||
%tr
|
||||
%td.email=f.input :email, :placeholder => qit("newsletter-home_place_holder-3","Mon email"), :label => false
|
||||
%td{:style => "width:120px;vertical-align:top"}
|
||||
=link_to qit("newsletter-submit-3","S'abonner >"), "#", :class => "btn orange", :onclick => "$(this).closest('form').submit();return false;"
|
146
app/views/portlets/dynamic_contents/_nuage.html.haml
Normal file
@ -0,0 +1,146 @@
|
||||
=#-if @admin
|
||||
|
||||
|
||||
=link_to "/fr/les-usages.html" do
|
||||
<div id="cloud"></div>
|
||||
|
||||
|
||||
-words = []
|
||||
-words << ["Des m2 supplémentaires, tout simplement.", 80, "/fr/les-usages.html"]
|
||||
-words << ["Crèche", 15, "/fr/les-usages.html"]
|
||||
-words << ["Rentabiliser du foncier", 25, "/fr/les-usages.html"]
|
||||
-words << ["Inovation", 25, "/fr/les-usages.html"]
|
||||
-words << ["Créer un atelier", 30, "/fr/les-usages.html"]
|
||||
-words << ["Location", 30, "/fr/les-usages.html"]
|
||||
-words << ["Bois", 40, "/fr/les-usages.html"]
|
||||
-words << ["Logement adapté", 10, "/fr/les-usages.html"]
|
||||
-words << ["Biosourcé", 20, "/fr/les-usages.html"]
|
||||
-words << ["Hors-sol", 20, "/fr/les-usages.html"]
|
||||
-words << ["Logement d'urgence", 25, "/fr/les-usages.html"]
|
||||
-words << ["accueillir un parent", 30, "/fr/les-usages.html"]
|
||||
-words << ["Construction hors-site", 25, "/fr/les-usages.html"]
|
||||
-words << ["Lodge", 60, "/fr/les-usages.html"]
|
||||
-words << ["Vestiaire", 25, "/fr/les-usages.html"]
|
||||
-words << ["Tourisme", 60, "/fr/les-usages.html"]
|
||||
-words << ["Confort", 30, "/fr/les-usages.html"]
|
||||
-words << ["Bureau", 30, "/fr/les-usages.html"]
|
||||
-words << ["Surrélever un immeuble", 15, "/fr/les-usages.html"]
|
||||
-words << ["Bureau", 20, "/fr/les-usages.html"]
|
||||
-words << ["Confort thermique", 20, "/fr/les-usages.html"]
|
||||
-words << ["Réversible", 25, "/fr/les-usages.html"]
|
||||
-words << ["Village Urbain", 38, "/fr/les-usages.html"]
|
||||
-words << ["Logement pour saisonniers", 15, "/fr/les-usages.html"]
|
||||
-words << ["Espace de télétravail", 15, "/fr/les-usages.html"]
|
||||
-words << ["Flexibilité", 25, "/fr/les-usages.html"]
|
||||
-words << ["Qualité", 50, "/fr/les-usages.html"]
|
||||
-words << ["école", 45, "/fr/les-usages.html"]
|
||||
-words << ["Recyclé", 30, "/fr/les-usages.html"]
|
||||
-words << ["Rapidité", 80, "/fr/les-usages.html"]
|
||||
-words << ["Design", 50, "/fr/les-usages.html"]
|
||||
-words << ["Eco", 70, "/fr/les-usages.html"]
|
||||
|
||||
-words << ["Réversible", 40, "/fr/les-usages.html"]
|
||||
-words << ["Economie circulaire", 25, "/fr/les-usages.html"]
|
||||
|
||||
|
||||
|
||||
|
||||
-words_to_show = ""
|
||||
-words.each do |w|
|
||||
-words_to_show += raw("{ text: \"#{escape_javascript(w[0]).upcase}\", url: \"#{escape_javascript(w[2])}\", size: #{w[1]}},")
|
||||
:scss
|
||||
#cloud svg{
|
||||
display:block;
|
||||
margin: 15px auto;
|
||||
max-width:900px;
|
||||
width:100%;
|
||||
}
|
||||
:javascript
|
||||
// First define your cloud data, using `text` and `size` properties:
|
||||
var skillsToDraw = [
|
||||
#{raw(words_to_show)}
|
||||
|
||||
];
|
||||
|
||||
function getRandomInt(max) {
|
||||
return Math.floor(Math.random() * Math.floor(max));
|
||||
}
|
||||
|
||||
// Next you need to use the layout script to calculate the placement, rotation and size of each word:
|
||||
var colors = ["#306667", "#1b415d", "#2f6566", "#DBC089", "#6aa1a0"]
|
||||
var width = 1200;
|
||||
var height = 500;
|
||||
var fill = d3.scale.category20();
|
||||
|
||||
d3.layout.cloud()
|
||||
.size([width, height])
|
||||
.words(skillsToDraw)
|
||||
.rotate(function() {
|
||||
return ~~(Math.random() * 2) * 90;
|
||||
}) //function() { return (~~(Math.random() * 6) - 3) * 30; }
|
||||
.font("Lato")
|
||||
.fontWeight("900")
|
||||
.fontSize(function(d) {
|
||||
return d.size;
|
||||
})
|
||||
.on("end", drawSkillCloud)
|
||||
.start();
|
||||
|
||||
// Finally implement `drawSkillCloud`, which performs the D3 drawing:
|
||||
|
||||
// apply D3.js drawing API
|
||||
function drawSkillCloud(words) {
|
||||
d3.select("#cloud").append("svg")
|
||||
.attr("width", width)
|
||||
.attr("height", height)
|
||||
.append("g")
|
||||
.attr("transform", "translate(" + ~~(width / 2) + "," + ~~(height / 2) + ")")
|
||||
.selectAll("text")
|
||||
.data(words)
|
||||
.enter().append("text")
|
||||
.style("font-size", function(d) {
|
||||
return d.size + "px";
|
||||
})
|
||||
.style("-webkit-touch-callout", "none")
|
||||
.style("-webkit-user-select", "none")
|
||||
.style("-khtml-user-select", "none")
|
||||
.style("-moz-user-select", "none")
|
||||
.style("-ms-user-select", "none")
|
||||
.style("user-select", "none")
|
||||
.style("cursor", "default")
|
||||
.style("font-family", "Lato")
|
||||
.style("font-weight", "900")
|
||||
.style("fill", function(d, i) {
|
||||
|
||||
color_index = getRandomInt(colors.length);
|
||||
|
||||
|
||||
return colors[parseInt(color_index)];
|
||||
//return d.color;
|
||||
})
|
||||
.attr("text-anchor", "middle")
|
||||
.attr("transform", function(d) {
|
||||
return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
|
||||
})
|
||||
.text(function(d) {
|
||||
return d.text;
|
||||
})
|
||||
.on("click", function (d, i){
|
||||
window.open(d.url, "_blank");
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
// set the viewbox to content bounding box (zooming in on the content, effectively trimming whitespace)
|
||||
|
||||
var svg = document.getElementsByTagName("svg")[0];
|
||||
var bbox = svg.getBBox();
|
||||
var viewBox = [bbox.x, bbox.y, bbox.width, bbox.height].join(" ");
|
||||
svg.setAttribute("viewBox", viewBox);
|
||||
|
||||
|
||||
|
@ -1,66 +0,0 @@
|
||||
-if @admin
|
||||
plan du site
|
||||
-else
|
||||
=raw "</div>"
|
||||
.plan_sub
|
||||
.inner
|
||||
=link_to qit("Médiathèque"), search_path(:media => true)
|
||||
=link_to qit("Presse"), search_path(:press => true)
|
||||
=link_to qit("Documentation"), search_path(:doc => true)
|
||||
=link_to qit("Boutique"), "/fr/boutique.html"
|
||||
|
||||
|
||||
|
||||
=raw "<div class='main row-fluid'>"
|
||||
|
||||
.plan_body
|
||||
|
||||
|
||||
-MenuItem.where(:parent_id => nil, :menu_id => 2).order(:position).each do |menu_item|
|
||||
-description = ""
|
||||
-description = menu_item.menu_content.description if menu_item.menu_content and menu_item.menu_content_type == "Page"
|
||||
-if menu_item_link(menu_item) and menu_item_link(menu_item) != ""
|
||||
|
||||
%h3
|
||||
=menu_item_link(menu_item)
|
||||
|
||||
-MenuItem.where(:id => menu_item.id).each do |menu_item|
|
||||
.plan_sub_menu{:class => "plan_sub_"+menu_item.id.to_s }
|
||||
|
||||
|
||||
.inner
|
||||
|
||||
|
||||
%ul
|
||||
-MenuItem.where(:parent_id => menu_item.id).order(:position).each do |menu_item|
|
||||
|
||||
-menu_item_lang = menu_item.menu_item_langs.find_by_lang_site_id(@lang.id)
|
||||
|
||||
|
||||
-name = menu_item_lang.name
|
||||
-if menu_item_lang.enabled == true and menu_item_lang.visible == true #and menu_item.menu_content.page_type_id == 4
|
||||
|
||||
%li
|
||||
=link_to @one_voice_host.to_s+menu_item_path(:url => menu_item_lang.url, :lang => @lang.slug) , :class => "chapitre_link "+("active" if @menu_item and menu_item.id == @menu_item.id).to_s do
|
||||
=menu_item.menu_item_langs.find_by_lang_site_id(@lang.id).name
|
||||
=">"
|
||||
|
||||
|
||||
%ul
|
||||
-MenuItem.where(:parent_id => menu_item.id).order(:position).each do |menu_item|
|
||||
|
||||
-menu_item_lang = menu_item.menu_item_langs.find_by_lang_site_id(@lang.id)
|
||||
|
||||
|
||||
-name = menu_item_lang.name
|
||||
-if menu_item_lang.enabled == true and menu_item_lang.visible == true and menu_item.menu_content.page_type_id == 2
|
||||
|
||||
%li
|
||||
=link_to @one_voice_host.to_s+menu_item_path(:url => menu_item_lang.url, :lang => @lang.slug) , :class => "chapitre_link "+("active" if @menu_item and menu_item.id == @menu_item.id).to_s do
|
||||
=menu_item.menu_item_langs.find_by_lang_site_id(@lang.id).name
|
||||
=">"
|
||||
|
||||
|
||||
|
||||
|
||||
%h3=link_to "blog", articles_path(:lang => @lang.slug)
|
@ -1,13 +0,0 @@
|
||||
-if @admin
|
||||
.dynamic
|
||||
Sous menu avec images
|
||||
|
||||
|
||||
|
||||
-if input.portlet.blockable_parent and input.portlet.blockable_parent.class.to_s == "Page" and input.portlet.blockable_parent.menu_item
|
||||
.sub_menu
|
||||
-input.portlet.blockable_parent.menu_item.children.where(:enabled => true, :visible => true).each do |menu_item|
|
||||
=link_to menu_item_path(:url => menu_item.url) do
|
||||
.sub_menu_item{:style => "background-image:url('#{menu_item.image_file.file.large.medium.small.url}')"}
|
||||
%h3=menu_item.name
|
||||
.clear
|
@ -2,5 +2,5 @@
|
||||
|
||||
|
||||
%p Merci pour votre message, nous mettons tout en œuvre pour vous répondre dans les meilleurs délais.
|
||||
%p L’équipe de Pollen Concepts
|
||||
%p L’équipe de Walden Solutions
|
||||
|
||||
|
@ -10,7 +10,7 @@ upstream pollen_app_unicorn {
|
||||
|
||||
server {
|
||||
listen [::]:443 ssl;
|
||||
server_name pollen-concepts.fr pollen.olwen.xyz;
|
||||
server_name walden-solutions.fr pollen.olwen.xyz;
|
||||
root /srv/www/web/pollen_app/current/public;
|
||||
try_files $uri/index.html $uri @unicorn;
|
||||
|
||||
@ -45,10 +45,21 @@ server {
|
||||
|
||||
|
||||
server {
|
||||
listen [::]:80;
|
||||
server_name pollen.olwen.xyz pollen-concepts.fr www.pollen-concepts.fr;
|
||||
listen [::]:443 ssl;
|
||||
server_name www.walden-solutions.fr pollen-concepts.fr *.pollen-concepts.fr;
|
||||
|
||||
return 301 https://pollen-concepts.fr$request_uri;
|
||||
return 301 https://walden-solutions.fr$request_uri;
|
||||
|
||||
include snippets/letsencrypt.conf;
|
||||
}
|
||||
|
||||
|
||||
|
||||
server {
|
||||
listen [::]:80;
|
||||
server_name pollen.olwen.xyz walden-solutions.fr www.walden-solutions.fr pollen-concepts.fr *.pollen-concepts.fr;
|
||||
|
||||
return 301 https://walden-solutions.fr$request_uri;
|
||||
|
||||
include snippets/letsencrypt.conf;
|
||||
}
|
||||
|
13
db/migrate/20160119224035_create_home_sliders.rb
Normal file
@ -0,0 +1,13 @@
|
||||
class CreateHomeSliders < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
create_table :home_sliders do |t|
|
||||
t.string :name
|
||||
t.string :slug
|
||||
|
||||
t.timestamps null: false
|
||||
|
||||
end
|
||||
|
||||
HomeSlider.create(:name => "home", :slug => "home")
|
||||
end
|
||||
end
|
15
db/migrate/20160119224315_create_home_slider_slides.rb
Normal file
@ -0,0 +1,15 @@
|
||||
class CreateHomeSliderSlides < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
create_table :home_slider_slides do |t|
|
||||
t.references :home_slider, index: true
|
||||
t.integer :position
|
||||
t.datetime :start_at
|
||||
t.datetime :end_at
|
||||
t.references :image_file
|
||||
t.boolean :enabled
|
||||
|
||||
t.timestamps null: false
|
||||
end
|
||||
add_foreign_key :home_slider_slides, :home_sliders
|
||||
end
|
||||
end
|
@ -0,0 +1,5 @@
|
||||
class AddUrlToHomeSliderSlides < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :home_slider_slides, :url, :string
|
||||
end
|
||||
end
|
11
db/migrate/20160407175359_create_home_slide_langs.rb
Normal file
@ -0,0 +1,11 @@
|
||||
class CreateHomeSlideLangs < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
create_table :home_slide_langs do |t|
|
||||
t.references :home_slider_slide, index: true
|
||||
t.references :lang_site, index: true
|
||||
|
||||
t.timestamps null: false
|
||||
end
|
||||
|
||||
end
|
||||
end
|
10
db/migrate/20180127214325_add_infos_to_home_slider_slide.rb
Normal file
@ -0,0 +1,10 @@
|
||||
class AddInfosToHomeSliderSlide < ActiveRecord::Migration[6.0]
|
||||
def change
|
||||
add_column :home_slider_slides, :titre1, :string
|
||||
add_column :home_slider_slides, :titre2, :string
|
||||
add_column :home_slider_slides, :description1, :text
|
||||
add_column :home_slider_slides, :description2, :text
|
||||
add_column :home_slider_slides, :popup, :boolean
|
||||
add_column :home_slider_slides, :cta_text, :string
|
||||
end
|
||||
end
|
37
db/schema.rb
@ -470,6 +470,42 @@ ActiveRecord::Schema.define(version: 2020_04_16_212613) do
|
||||
t.datetime "updated_at", precision: 6, null: false
|
||||
end
|
||||
|
||||
create_table "home_slide_langs", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
|
||||
t.bigint "home_slider_slide_id"
|
||||
t.bigint "lang_site_id"
|
||||
t.datetime "created_at", precision: 6, null: false
|
||||
t.datetime "updated_at", precision: 6, null: false
|
||||
t.index ["home_slider_slide_id"], name: "index_home_slide_langs_on_home_slider_slide_id"
|
||||
t.index ["lang_site_id"], name: "index_home_slide_langs_on_lang_site_id"
|
||||
end
|
||||
|
||||
create_table "home_slider_slides", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
|
||||
t.bigint "home_slider_id"
|
||||
t.integer "position"
|
||||
t.datetime "start_at"
|
||||
t.datetime "end_at"
|
||||
t.bigint "image_file_id"
|
||||
t.boolean "enabled"
|
||||
t.datetime "created_at", precision: 6, null: false
|
||||
t.datetime "updated_at", precision: 6, null: false
|
||||
t.string "url"
|
||||
t.string "titre1"
|
||||
t.string "titre2"
|
||||
t.text "description1"
|
||||
t.text "description2"
|
||||
t.boolean "popup"
|
||||
t.string "cta_text"
|
||||
t.index ["home_slider_id"], name: "index_home_slider_slides_on_home_slider_id"
|
||||
t.index ["image_file_id"], name: "index_home_slider_slides_on_image_file_id"
|
||||
end
|
||||
|
||||
create_table "home_sliders", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "slug"
|
||||
t.datetime "created_at", precision: 6, null: false
|
||||
t.datetime "updated_at", precision: 6, null: false
|
||||
end
|
||||
|
||||
create_table "html_contents", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
|
||||
t.text "content"
|
||||
t.string "style"
|
||||
@ -2729,6 +2765,7 @@ ActiveRecord::Schema.define(version: 2020_04_16_212613) do
|
||||
add_foreign_key "file_tunel_sends", "file_tunels"
|
||||
add_foreign_key "file_tunels", "admins"
|
||||
add_foreign_key "file_tunels", "p_customers"
|
||||
add_foreign_key "home_slider_slides", "home_sliders"
|
||||
add_foreign_key "i_task_projects", "admins"
|
||||
add_foreign_key "i_tasks", "admins"
|
||||
add_foreign_key "i_tasks", "i_task_projects"
|
||||
|
BIN
public/fonts/slick/slick.eot
Normal file
14
public/fonts/slick/slick.svg
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by Fontastic.me</metadata>
|
||||
<defs>
|
||||
<font id="slick" horiz-adv-x="512">
|
||||
<font-face font-family="slick" units-per-em="512" ascent="480" descent="-32"/>
|
||||
<missing-glyph horiz-adv-x="512" />
|
||||
|
||||
<glyph unicode="→" d="M241 113l130 130c4 4 6 8 6 13 0 5-2 9-6 13l-130 130c-3 3-7 5-12 5-5 0-10-2-13-5l-29-30c-4-3-6-7-6-12 0-5 2-10 6-13l87-88-87-88c-4-3-6-8-6-13 0-5 2-9 6-12l29-30c3-3 8-5 13-5 5 0 9 2 12 5z m234 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
|
||||
<glyph unicode="←" d="M296 113l29 30c4 3 6 7 6 12 0 5-2 10-6 13l-87 88 87 88c4 3 6 8 6 13 0 5-2 9-6 12l-29 30c-3 3-8 5-13 5-5 0-9-2-12-5l-130-130c-4-4-6-8-6-13 0-5 2-9 6-13l130-130c3-3 7-5 12-5 5 0 10 2 13 5z m179 143c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
|
||||
<glyph unicode="•" d="M475 256c0-40-9-77-29-110-20-34-46-60-80-80-33-20-70-29-110-29-40 0-77 9-110 29-34 20-60 46-80 80-20 33-29 70-29 110 0 40 9 77 29 110 20 34 46 60 80 80 33 20 70 29 110 29 40 0 77-9 110-29 34-20 60-46 80-80 20-33 29-70 29-110z"/>
|
||||
<glyph unicode="a" d="M475 439l0-128c0-5-1-9-5-13-4-4-8-5-13-5l-128 0c-8 0-13 3-17 11-3 7-2 14 4 20l40 39c-28 26-62 39-100 39-20 0-39-4-57-11-18-8-33-18-46-32-14-13-24-28-32-46-7-18-11-37-11-57 0-20 4-39 11-57 8-18 18-33 32-46 13-14 28-24 46-32 18-7 37-11 57-11 23 0 44 5 64 15 20 9 38 23 51 42 2 1 4 3 7 3 3 0 5-1 7-3l39-39c2-2 3-3 3-6 0-2-1-4-2-6-21-25-46-45-76-59-29-14-60-20-93-20-30 0-58 5-85 17-27 12-51 27-70 47-20 19-35 43-47 70-12 27-17 55-17 85 0 30 5 58 17 85 12 27 27 51 47 70 19 20 43 35 70 47 27 12 55 17 85 17 28 0 55-5 81-15 26-11 50-26 70-45l37 37c6 6 12 7 20 4 8-4 11-9 11-17z"/>
|
||||
</font></defs></svg>
|
After Width: | Height: | Size: 2.1 KiB |
BIN
public/fonts/slick/slick.ttf
Normal file
BIN
public/fonts/slick/slick.woff
Normal file
Before Width: | Height: | Size: 244 KiB After Width: | Height: | Size: 289 KiB |
BIN
public/logo-walden.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
public/mont.jpg
Before Width: | Height: | Size: 3.1 MiB After Width: | Height: | Size: 277 KiB |
BIN
public/montold.jpg
Normal file
After Width: | Height: | Size: 3.1 MiB |