Skip to content

Commit 25a3150

Browse files
committed
Send the hacking code to somewhere safe... for posterity
1 parent a2a3110 commit 25a3150

File tree

3 files changed

+169
-157
lines changed

3 files changed

+169
-157
lines changed

app/index.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
<!-- @@close -->
99

1010
<!-- @@block = content -->
11+
12+
<!-- start hacking #1 legacy -->
13+
<!--
1114
<div class="container container--fullwidth" id="hacking-begin">
1215
<h2 class="title title--sandwich">Hacking politique #1 <span style="font-size:0.8em;">1 million d'emails à nos représentants.</span></h2>
1316
</div>
@@ -35,7 +38,6 @@ <h2>2. Choisissez votre messagerie</h2>
3538
<p class="paragraph">Si vous avez Gmail, un email pré-rempli est généré automatiquement. Sinon, copiez facilement les adresses et le texte dans votre messagerie.</p>
3639
<div class="button-group button-group--centered button-group--attached">
3740
<a id="hk-through-gmail" href="" target="_blank" class="button button--small button--black hk-through-inbox">Gmail</a>
38-
<!-- <a id="hk-through-other" href="" target="_blank" class="button button--small hk-through-inbox">Défaut</a> -->
3941
<a id="hk-through-manual" href="" data-target="#hk-manual-content" class="button button--small button--black hk-through-inbox">Autre</a>
4042
</div>
4143
<div class="inner-container learn-more" id="hk-manual-content">
@@ -60,6 +62,8 @@ <h2>3. Envoyez</h2>
6062
</div>
6163
</div>
6264
</section>
65+
-->
66+
<!-- end hacking #1 legacy -->
6367

6468
<div class="container container--ref">
6569
<div id="logo-full-screen" class="logo logo--big logo--image">

app/scripts/hacking_1_legacy.js

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
// namespace
2+
var mouvy = mouvy || {};
3+
4+
5+
document.addEventListener('DOMContentLoaded', function() {
6+
'use strict';
7+
8+
// START HACKING
9+
var depEmails = mouvy.hacking.repEmails;
10+
var gouvEmails = mouvy.hacking.gouvEmails;
11+
12+
// handle the departement list creation
13+
var departementList = [];
14+
for (var key in depEmails) {
15+
if (depEmails.hasOwnProperty(key)) {
16+
departementList.push({key: key, name: depEmails[key].name});
17+
}
18+
}
19+
departementList.sort(function(a, b) {
20+
return a.name.localeCompare(b.name);
21+
});
22+
23+
var departementSelect = document.getElementById('your-departement');
24+
departementList.forEach(function(el) {
25+
var opt = document.createElement('option');
26+
opt.value = el.key;
27+
opt.innerHTML = el.name;
28+
departementSelect.appendChild(opt);
29+
});
30+
31+
var representativeEmailsInput = document.getElementById('your-representatives');
32+
var $representativeEmailsInputInstance = $(representativeEmailsInput).selectize({
33+
delimiter: ';',
34+
// valueField: 'email',
35+
// labelField: 'email',
36+
// searchField: ['email'],
37+
create: function(input) {
38+
return {
39+
value: input,
40+
text: input
41+
};
42+
}
43+
});
44+
45+
// when a departement is selected, fill the representative emails
46+
var lastRepresentativeEmails = [];
47+
$(departementSelect).selectize({
48+
onChange: function() {
49+
var selectedDepNumber = departementSelect.value;
50+
var emails = depEmails[selectedDepNumber].emails;
51+
var additionalEmails = gouvEmails;
52+
53+
Array.prototype.push.apply(emails, additionalEmails);
54+
lastRepresentativeEmails = emails;
55+
56+
// representativeEmailsInput.value = emails.join('; ');
57+
var selector = $representativeEmailsInputInstance[0].selectize;
58+
selector.clearOptions();
59+
selector.disable();
60+
emails.forEach(function(e) {
61+
selector.addOption({value: e, text: e});
62+
selector.addItem(e);
63+
});
64+
}
65+
});
66+
67+
// on inbox choice, we load the redirect with the right content
68+
/*jslint quotmark: double */
69+
var message = "Chers membres du gouvernement, députés, sénateurs,\n\
70+
\n\
71+
J’ai signé le manifeste du Mouvement Y.\n\
72+
\n\
73+
Depuis que j'ai l'âge d'écouter les infos, je vois le monde changer à une vitesse folle et mon pays, lui, semble prostré. Non pas qu'il refuse le changement par principe, mais il ne fait confiance à personne pour ça. Et pour cause, la classe politique, décrédibilisée par les affaires et le non-renouvellement, est devenue impuissante. Elle colmate sans prendre de risques, pour ne pas nous fâcher davantage. \n\
74+
\n\
75+
Alors, pourquoi aller voter ? Qu'espérer de plus à l'élection suivante ? Comme la plupart de mes contemporains, je n'ai plus envie de me déplacer aux urnes. Les campagnes électorales et leurs acteurs semblent appartenir à une autre époque. La politique française vit un décalage effrayant avec son temps et les attentes qu'elle suscite.\n\
76+
\n\
77+
Parce qu'on ne peut pas se résoudre à attendre éternellement et parce que l'action politique semble paralysée sans élan populaire, voici trois propositions de réforme indispensables. Des propositions concrètes, sans étiquette, applicables rapidement et approuvées par des experts (juristes, politologues de bords différents) pour réveiller enfin notre système politique, le renouveler en profondeur, bref, le rendre à nouveau acceptable.\n\
78+
\n\
79+
1/ Ethique : Instaurer une peine incompressible de 6 ans pour les élus fraudeurs\n\
80+
2/ Renouvellement : limiter à trois le nombre de mandats identiques qu'un élu peut cumuler dans le temps \n\
81+
3/ Rationalisation : remettre à plat le mode de financement des parlementaires\n\
82+
\n\
83+
Nous ne sommes pas des adeptes du « tous pourris ». Nous n'oublions pas que l'immense majorité des élus locaux fait son travail avec dignité, mais je vous demande de faire le nécessaire pour que ces propositions essentielles soient soumises au vote.\n\
84+
\n\
85+
Merci.";
86+
/*jslint quotmark: single */
87+
88+
var subject = 'Prenez vos responsabilités';
89+
var inboxShortcutButtons = document.querySelectorAll('.hk-through-inbox');
90+
Array.prototype.forEach.call(inboxShortcutButtons, function(el) {
91+
el.addEventListener('click', function(e) {
92+
e.preventDefault();
93+
94+
var targetUrl;
95+
var params, query;
96+
if (el.id === 'hk-through-gmail') {
97+
98+
// GMAIL
99+
params = {
100+
'view': 'cm',
101+
'fs': '1',
102+
'to': lastRepresentativeEmails.join(';'),
103+
'su': subject,
104+
'body': message
105+
};
106+
query = mouvy.urlEncodeParams(params);
107+
targetUrl = 'https://mail.google.com/mail/?' + query;
108+
109+
} else if (el.id === 'hk-through-other') {
110+
111+
// default inbox
112+
var to = lastRepresentativeEmails.join(';');
113+
params = {
114+
'subject': subject,
115+
'body': message
116+
};
117+
query = mouvy.urlEncodeParams(params);
118+
targetUrl = 'mailto:' + encodeURIComponent(to) + '?' + query;
119+
120+
}
121+
122+
if (targetUrl) {
123+
el.setAttribute('href', targetUrl);
124+
125+
// try to get an estimate of the number of emails sent
126+
// nothing more than that is tracked
127+
if (window.ga) {
128+
window.ga('send', 'event', 'hacking', 'mails', 'sent', lastRepresentativeEmails.length);
129+
}
130+
131+
// simulate click
132+
// var event = document.createEvent('HTMLEvents');
133+
// event.initEvent('click', true, false);
134+
// el.dispatchEvent(event);
135+
window.open(targetUrl);
136+
} else {
137+
// no target url, so we open the modal view for copy/paste
138+
mouvy.showModal(e.target, function(modal) {
139+
var emailField = modal.modalElem().querySelector('#hk-manual-emails');
140+
var subjectField = modal.modalElem().querySelector('#hk-manual-subject');
141+
var contentField = modal.modalElem().querySelector('#hk-manual-content');
142+
143+
// fill the emails
144+
emailField.value = lastRepresentativeEmails.join(';');
145+
subjectField.value = subject;
146+
contentField.innerHTML = message;
147+
148+
// bind the focus event to select all the text
149+
emailField.addEventListener('focus', function() {
150+
emailField.select();
151+
}, false);
152+
subjectField.addEventListener('focus', function() {
153+
subjectField.select();
154+
}, false);
155+
contentField.addEventListener('focus', function() {
156+
contentField.select();
157+
}, false);
158+
});
159+
}
160+
});
161+
});
162+
// END HACKING
163+
164+
});

app/scripts/scroll.js

Lines changed: 0 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -10,162 +10,6 @@ var mouvy = mouvy || {};
1010
document.addEventListener('DOMContentLoaded', function() {
1111
'use strict';
1212

13-
// START HACKING
14-
var depEmails = mouvy.hacking.repEmails;
15-
var gouvEmails = mouvy.hacking.gouvEmails;
16-
17-
// handle the departement list creation
18-
var departementList = [];
19-
for (var key in depEmails) {
20-
if (depEmails.hasOwnProperty(key)) {
21-
departementList.push({key: key, name: depEmails[key].name});
22-
}
23-
}
24-
departementList.sort(function(a, b) {
25-
return a.name.localeCompare(b.name);
26-
});
27-
28-
var departementSelect = document.getElementById('your-departement');
29-
departementList.forEach(function(el) {
30-
var opt = document.createElement('option');
31-
opt.value = el.key;
32-
opt.innerHTML = el.name;
33-
departementSelect.appendChild(opt);
34-
});
35-
36-
var representativeEmailsInput = document.getElementById('your-representatives');
37-
var $representativeEmailsInputInstance = $(representativeEmailsInput).selectize({
38-
delimiter: ';',
39-
// valueField: 'email',
40-
// labelField: 'email',
41-
// searchField: ['email'],
42-
create: function(input) {
43-
return {
44-
value: input,
45-
text: input
46-
};
47-
}
48-
});
49-
50-
// when a departement is selected, fill the representative emails
51-
var lastRepresentativeEmails = [];
52-
$(departementSelect).selectize({
53-
onChange: function() {
54-
var selectedDepNumber = departementSelect.value;
55-
var emails = depEmails[selectedDepNumber].emails;
56-
var additionalEmails = gouvEmails;
57-
58-
Array.prototype.push.apply(emails, additionalEmails);
59-
lastRepresentativeEmails = emails;
60-
61-
// representativeEmailsInput.value = emails.join('; ');
62-
var selector = $representativeEmailsInputInstance[0].selectize;
63-
selector.clearOptions();
64-
selector.disable();
65-
emails.forEach(function(e) {
66-
selector.addOption({value: e, text: e});
67-
selector.addItem(e);
68-
});
69-
}
70-
});
71-
72-
// on inbox choice, we load the redirect with the right content
73-
/*jslint quotmark: double */
74-
var message = "Chers membres du gouvernement, députés, sénateurs,\n\
75-
\n\
76-
J’ai signé le manifeste du Mouvement Y.\n\
77-
\n\
78-
Depuis que j'ai l'âge d'écouter les infos, je vois le monde changer à une vitesse folle et mon pays, lui, semble prostré. Non pas qu'il refuse le changement par principe, mais il ne fait confiance à personne pour ça. Et pour cause, la classe politique, décrédibilisée par les affaires et le non-renouvellement, est devenue impuissante. Elle colmate sans prendre de risques, pour ne pas nous fâcher davantage. \n\
79-
\n\
80-
Alors, pourquoi aller voter ? Qu'espérer de plus à l'élection suivante ? Comme la plupart de mes contemporains, je n'ai plus envie de me déplacer aux urnes. Les campagnes électorales et leurs acteurs semblent appartenir à une autre époque. La politique française vit un décalage effrayant avec son temps et les attentes qu'elle suscite.\n\
81-
\n\
82-
Parce qu'on ne peut pas se résoudre à attendre éternellement et parce que l'action politique semble paralysée sans élan populaire, voici trois propositions de réforme indispensables. Des propositions concrètes, sans étiquette, applicables rapidement et approuvées par des experts (juristes, politologues de bords différents) pour réveiller enfin notre système politique, le renouveler en profondeur, bref, le rendre à nouveau acceptable.\n\
83-
\n\
84-
1/ Ethique : Instaurer une peine incompressible de 6 ans pour les élus fraudeurs\n\
85-
2/ Renouvellement : limiter à trois le nombre de mandats identiques qu'un élu peut cumuler dans le temps \n\
86-
3/ Rationalisation : remettre à plat le mode de financement des parlementaires\n\
87-
\n\
88-
Nous ne sommes pas des adeptes du « tous pourris ». Nous n'oublions pas que l'immense majorité des élus locaux fait son travail avec dignité, mais je vous demande de faire le nécessaire pour que ces propositions essentielles soient soumises au vote.\n\
89-
\n\
90-
Merci.";
91-
/*jslint quotmark: single */
92-
93-
var subject = 'Prenez vos responsabilités';
94-
var inboxShortcutButtons = document.querySelectorAll('.hk-through-inbox');
95-
Array.prototype.forEach.call(inboxShortcutButtons, function(el) {
96-
el.addEventListener('click', function(e) {
97-
e.preventDefault();
98-
99-
var targetUrl;
100-
var params, query;
101-
if (el.id === 'hk-through-gmail') {
102-
103-
// GMAIL
104-
params = {
105-
'view': 'cm',
106-
'fs': '1',
107-
'to': lastRepresentativeEmails.join(';'),
108-
'su': subject,
109-
'body': message
110-
};
111-
query = mouvy.urlEncodeParams(params);
112-
targetUrl = 'https://mail.google.com/mail/?' + query;
113-
114-
} else if (el.id === 'hk-through-other') {
115-
116-
// default inbox
117-
var to = lastRepresentativeEmails.join(';');
118-
params = {
119-
'subject': subject,
120-
'body': message
121-
};
122-
query = mouvy.urlEncodeParams(params);
123-
targetUrl = 'mailto:' + encodeURIComponent(to) + '?' + query;
124-
125-
}
126-
127-
if (targetUrl) {
128-
el.setAttribute('href', targetUrl);
129-
130-
// try to get an estimate of the number of emails sent
131-
// nothing more than that is tracked
132-
if (window.ga) {
133-
window.ga('send', 'event', 'hacking', 'mails', 'sent', lastRepresentativeEmails.length);
134-
}
135-
136-
// simulate click
137-
// var event = document.createEvent('HTMLEvents');
138-
// event.initEvent('click', true, false);
139-
// el.dispatchEvent(event);
140-
window.open(targetUrl);
141-
} else {
142-
// no target url, so we open the modal view for copy/paste
143-
mouvy.showModal(e.target, function(modal) {
144-
var emailField = modal.modalElem().querySelector('#hk-manual-emails');
145-
var subjectField = modal.modalElem().querySelector('#hk-manual-subject');
146-
var contentField = modal.modalElem().querySelector('#hk-manual-content');
147-
148-
// fill the emails
149-
emailField.value = lastRepresentativeEmails.join(';');
150-
subjectField.value = subject;
151-
contentField.innerHTML = message;
152-
153-
// bind the focus event to select all the text
154-
emailField.addEventListener('focus', function() {
155-
emailField.select();
156-
}, false);
157-
subjectField.addEventListener('focus', function() {
158-
subjectField.select();
159-
}, false);
160-
contentField.addEventListener('focus', function() {
161-
contentField.select();
162-
}, false);
163-
});
164-
}
165-
});
166-
});
167-
// END HACKING
168-
16913
// reveal the Y :)
17014
setTimeout(function() {
17115
var logoWrapper = document.getElementById('logo-full-screen');

0 commit comments

Comments
 (0)