Skip to content

Instantly share code, notes, and snippets.

@ernie58
Created March 5, 2020 08:43
Show Gist options
  • Save ernie58/98bd193962f311cd26a58f97e72e0f26 to your computer and use it in GitHub Desktop.
Save ernie58/98bd193962f311cd26a58f97e72e0f26 to your computer and use it in GitHub Desktop.
E&Y ruling codefiles
From 0cbdd1404299d8ee9b0b691664877abbb497ff1e Mon Sep 17 00:00:00 2001
From: ernie58 <bert@ernie.be>
Date: Mon, 24 Feb 2020 17:18:50 +0100
Subject: [PATCH] beginnings
---
Gruntfile.js | 2 +-
app/styles/skins/passepartout.scss | 255 ++++++++++++++++++
.../skins/passepartout/container-bg.png | Bin 0 -> 17382 bytes
app/styles/skins/passepartout/logo.png | Bin 0 -> 16102 bytes
app/styles/skins/passepartout/next.svg | 8 +
app/styles/skins/passepartout/repeat.svg | 10 +
6 files changed, 274 insertions(+), 1 deletion(-)
create mode 100644 app/styles/skins/passepartout.scss
create mode 100644 app/styles/skins/passepartout/container-bg.png
create mode 100644 app/styles/skins/passepartout/logo.png
create mode 100644 app/styles/skins/passepartout/next.svg
create mode 100644 app/styles/skins/passepartout/repeat.svg
diff --git a/Gruntfile.js b/Gruntfile.js
index e3cec83..365da9a 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -3,7 +3,7 @@
var mountFolder = function (connect, dir) {
return connect.static(require('path').resolve(dir));
};
-var host = "at.kweetet.dev/exercise/preview/EP/1/";
+var host = "at.kweetet.localhost:8000/exercise/preview/EP/28966/";
// # Globbing
// for performance reasons we're only matching one level down:
diff --git a/app/styles/skins/passepartout.scss b/app/styles/skins/passepartout.scss
new file mode 100644
index 0000000..dd9c26b
--- /dev/null
+++ b/app/styles/skins/passepartout.scss
@@ -0,0 +1,255 @@
+@import "../variables";
+
+body {
+ background:#FFF;
+ display:block;
+}
+
+
+//main wrapper
+.container {
+ background:transparent;
+
+ z-index:0;
+ &:after {
+ content: " ";
+ position:absolute;
+ width: 960px;
+ height:720px;
+ background-color:#443d4e;
+ transform: rotate(-5deg);
+ top:50%;
+ left:50%;
+ margin-left:-480px;
+ margin-top: -360px;
+ z-index:-11;
+ }
+
+ &:before {
+ content: " ";
+ position:absolute;
+ width: 960px;
+ height:720px;
+ background:#6dc3c1;
+ top:50%;
+ left:50%;
+ margin-left:-480px;
+ margin-top: -360px;
+ z-index:-10;
+ }
+}
+
+//scorebord
+ul.progress {
+ border:none;
+ height:41px;
+ border:3px solid #443d4e;
+ background:#FFF;
+
+ li {
+ margin-top:5px;
+ }
+}
+
+.dock-btn {
+ background-color: #443d4e;
+ color:#FFF;
+ border-radius:50%;
+ width:50px;
+ height:50px;
+ top:8px;
+ margin-right:5px;
+
+ &.relisten-btn {
+ background-image:url('passepartout/repeat.svg?v2');
+ left: -110px;
+
+ }
+
+ &.sound-btn {
+ background-image:url('beaufort/toggle-sound.png');
+ }
+
+ &.sound-btn.off {
+ background-image:url('beaufort/toggle-sound-off.png');
+ }
+
+ &.show-answer-btn {
+ left: -55px;
+ &:after {
+ position:absolute;
+ content:"?";
+ color:#FFF;
+ width:50px;
+ height:50px;
+ line-height: 50px;
+ text-align:center;
+ font-size:36px;
+ text-indent:0;
+
+ top:0;
+ left:0;
+ }
+ }
+
+ &.show-my-answer-btn{
+ background-image:url('beaufort/show-provided-answer.png');
+ &.active {
+ background-image:url('beaufort/show-provided-answer-active.png');
+ }
+ }
+
+ &.submit-btn{
+ background-image:url('passepartout/next.svg?v2');
+ &.enabled {
+ background-image:url('beaufort/submit-active.png');
+ }
+ width:70px;
+ height:70px;
+ top:-5px;
+ }
+
+ &.next-btn {
+ background-image:url('beaufort/next.png');
+ &.enabled {
+ background-image:url('beaufort/next-active.png');
+ }
+ }
+
+ &.disabled {
+ opacity: 1;
+ }
+
+}
+
+.exerciseInfo {
+ background:#FFF url('passepartout/logo.png') no-repeat;
+ background-size: contain;
+ width: 103px;
+ height: 170px;
+ border:20px solid #FFF;
+ transform: rotate(5deg);
+ top:29px;
+
+ .lesson {
+ display:none;
+ }
+
+ .week, .category {
+ font-size:55px;
+ display:block;
+ font-family: Arial, Helvetica, Sans-Serif;
+ color:#34323F;
+ top:92px;
+ left:0;
+
+ .prefix {
+ font-size:22px;
+ font-weight: 700;
+ display:block;
+ font-family: Arial, Helvetica, Sans-Serif;
+ }
+ }
+
+}
+
+.dock {
+ height:140px;
+}
+
+.methodLogo{
+ display: block;
+ width: 234px;
+ height: 164px;
+ margin: 65px auto 0;
+ background-image: url('beaufort/start-logo.png');
+ background-repeat: no-repeat;
+}
+.startQuestion, .openansweredflashwords.question .startQuestion {
+ background-image: url('../startbutton-orange.png');
+
+ &:after {
+ background-image: url('../startbutton-orange.png');
+ }
+ span {
+ background-image: url('../startbutton-orange.png');
+ }
+}
+
+.end-exercise {
+ span{
+ &.masked {
+ background-image: url('beaufort/endscreen-badge.png');
+ background-color: transparent;
+ }
+
+ &.closebtn {
+ background-color: #b7833d;
+ border: solid 2px #8e6d34;
+ text-shadow: 0 0 2px #a37c3c;
+
+ i.icon-close {
+ background-position: -55px 0;
+ }
+ }
+ }
+}
+
+div.matchingmemory {
+
+ div.answer, div.subQuestion {
+ background:transparent url('beaufort/memory-closed.png') no-repeat top left;
+
+ &.visible {
+ background:transparent url('beaufort/memory-open.png') no-repeat top left;
+ }
+ }
+}
+
+//klein scherm
+@media screen and (max-height: 730px), screen and (max-width: 907px){
+ body {
+ background: transparent url('beaufort/bg-small.jpg?v2') no-repeat center center;
+ }
+
+ .dock {
+ background: transparent url('beaufort/dock-small.png') repeat-x top center;
+ height:90px;
+ }
+
+ .container {
+ background:none;
+ }
+
+ .exerciseInfo {
+ top:-3px;
+ }
+}
+
+/*
+ * typewriterkeyboard
+ */
+#openAnsweredTypewriterKeyboard {
+ background: #5896b6;
+ background: -moz-linear-gradient(top, #5896b6 0%, #29465c 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#5896b6), color-stop(100%,#29465c));
+ background: -webkit-linear-gradient(top, #5896b6 0%,#29465c 100%);
+ background: -o-linear-gradient(top, #5896b6 0%,#29465c 100%);
+ background: -ms-linear-gradient(top, #5896b6 0%,#29465c 100%);
+ background: linear-gradient(to bottom, #5896b6 0%,#29465c 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#5896b6', endColorstr='#29465c',GradientType=0 );
+
+ -webkit-box-shadow: 0 1px 0 #203542, 0 4px 0 #223b48;
+ -moz-box-shadow: 0 1px 0 #203542, 0 4px 0 #223b48;
+ box-shadow: 0 1px 0 #203542, 0 4px 0 #223b48;
+ .typewriterkey {
+ border-bottom-color: #2e4d60;
+ border-left: transparent;
+ border-right: transparent;
+ }
+}
+
+
+.startQuestion, .question , .typewriterkey, #openAnsweredTypewriterAnswer input, .answer p, .subQuestion p, .questionAssignment h2, input, textarea {
+ font-family: 'schoolboekedu' !important;
+}
diff --git a/app/styles/skins/passepartout/container-bg.png b/app/styles/skins/passepartout/container-bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..7254b3e887d319fead3b97da99fe5733f3213402
GIT binary patch
literal 17382
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
literal 0
HcmV?d00001
diff --git a/app/styles/skins/passepartout/logo.png b/app/styles/skins/passepartout/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..7779665ef3de13af201d88933c5beb43d9ca8023
GIT binary patch
literal 16102
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
ZSharaZ7#TS{`2Lzw77y;t%y<Z{{c%{pgRBn
literal 0
HcmV?d00001
diff --git a/app/styles/skins/passepartout/next.svg b/app/styles/skins/passepartout/next.svg
new file mode 100644
index 0000000..dd020da
--- /dev/null
+++ b/app/styles/skins/passepartout/next.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 1200 1200" style="enable-background:new 0 0 1200 1200;" xml:space="preserve">
+<path style="fill:none;stroke:#FFFFFF;stroke-width:64;stroke-miterlimit:10;" d="M496.4,839.5c-6.2,0-12.5-1.5-18.2-4.5
+ c-12.7-6.8-20.7-19.9-20.7-34.3V399.4c0-14.4,7.9-27.6,20.7-34.3c12.7-6.8,28.1-5.9,40,2.1l296.2,200.6
+ c10.7,7.2,17.1,19.3,17.1,32.2s-6.4,24.9-17.1,32.2L518.2,832.8C511.6,837.2,504,839.5,496.4,839.5z"/>
+</svg>
diff --git a/app/styles/skins/passepartout/repeat.svg b/app/styles/skins/passepartout/repeat.svg
new file mode 100644
index 0000000..792ad5e
--- /dev/null
+++ b/app/styles/skins/passepartout/repeat.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 1200 1200" style="enable-background:new 0 0 1200 1200;" xml:space="preserve">
+<path style="fill:none;stroke:#FFFFFF;stroke-width:30;stroke-miterlimit:10;" d="M608.7,842.9c-143.7,0-260.3-116.6-260.3-260.3
+ h86.8L305,452.5L174.8,582.7h86.8c0,191.6,155.4,347,347,347c106.9,0,202.4-48.4,266-124.4L813,743.6
+ C765.3,804,691.6,842.9,608.7,842.9z"/>
+<path style="fill:#FFFFFF;" d="M955.7,582.7c0-191.6-155.3-347-347-347c-106.8,0-202.4,48.4-266,124.4l61.7,61.7
+ c47.7-60.5,121.4-99.4,204.3-99.4c143.8,0,260.3,116.5,260.3,260.3h-86.8l130.1,130.1l130.1-130.1L955.7,582.7L955.7,582.7z"/>
+</svg>
--
2.21.1 (Apple Git-122.3)
const AWS = require('aws-sdk');
const mysqlx = require('@mysql/xdevapi');
const zlib = require('zlib');
const { resolve } = require('path');
const { readdir } = require('fs').promises;
const { readFileSync } = require('fs');
const util = require('util');
const mv = util.promisify(require('mv'));
const AWS_ACCESS_KEY_ID = `********`;
const AWS_SECRET_ACCESS_KEY = `********`;
AWS.config.update({
accessKeyId: AWS_ACCESS_KEY_ID,
secretAccessKey: AWS_SECRET_ACCESS_KEY
});
const bucket = `keen-polpo-be`;
const prefix = `5a33ad4dc9e77c0001c7790e/`;
const s3 = new AWS.S3();
let session;
const params = {
Bucket: bucket
};
try {
zetHetSpelInGang()
} catch(err){
console.log(err);
}
async function zetHetSpelInGang(){
session = await mysqlx.getSession('mysqlx://root:*********@127.0.0.1:33060/aggregator')
const files = await getLocalFileList();
// dates = loopDates();
// for(let i = 0; i < dates.length; i++){
// let date = dates[i];
// let files = await getFileList(date);
// if(files.length) {
// await readFilesIntoDB(files)
// }
// };
if(files.length) {
await readFilesIntoDB(files)
}
console.log('done');
}
async function readFilesIntoDB(files){
console.log('saving to db...');
for(let i = 0; i < files.length;i++){
let file = files[i];
// let params = {
// Bucket: bucket,
// Key: file.key,
// ResponseContentEncoding: 'gzip'
// };
try {
// fileContent = await s3.getObject(params).promise();
const data = readFileSync(file.key).toString('utf-8');
const table = session.getSchema('aggregator').getTable('events');
const rows = data.split(/\r\n|\r|\n/).map(JSON.parse);
for (let j = 0; j < rows.length; j++){
let d = rows[j];
if(d.user && d.user.username !== 'epyc' && d.user.username !== 'smartschool'){
try {
const insert = table.insert('guid', 'event', 'json', 'processed');
insert.values(d.guid || file.key,file.event,d,0);
await insert.execute();
} catch(err){
if(err.toString().indexOf('Duplicate') === -1){
console.log("error processing row ", d);
console.log("error processing file ", file);
console.log(d);
console.log(err);
continue;
}
}
}
};
} catch(err){
console.log("error processing file ", file);
if(err.toString().indexOf('Duplicate') === -1){
console.log(err);
continue;
}
}
try {
await mv(resolve(file.key), resolve(file.key.replace('/aggregator/s3/', '/aggregator/s3-processed/')), {mkdirp: true});
} catch (err){
console.log(err);
}
// Move file
}
}
async function getFileList(date) {
console.log('getting files for date ', date);
results = await s3.listObjects({
...params,
Prefix: prefix + date
}).promise();
if(results.IsTruncated === true) {
console.error('more then 1000 results per batch');
process.exit();
};
return results.Contents.map(item => {
path = item.Key.split('/');
return {
date: path[1],
event:path[2],
key: item.Key
}
})
}
async function getLocalFileList() {
const ret = [];
console.log('reading files...');
for await (const f of getFiles('./s3')) {
let parts = f.split('/');
let filename = parts.pop();
let event = parts.pop();
let date = parts.pop();
if (filename !== '.DS_Store' && event !== 'batches'){
ret.push({
date,
event,
key: f
})
}
}
console.log('files read.');
return ret;
}
async function* getFiles(dir) {
const dirents = await readdir(dir, { withFileTypes: true });
for (const dirent of dirents) {
const res = resolve(dir, dirent.name);
if (dirent.isDirectory()) {
yield* getFiles(res);
} else {
yield res;
}
}
}
function loopDates(){
// const current = new Date(2017,11,23);
// const end = new Date(2018,11,23);
// const current = new Date(2018,01,10);
// const end = new Date(2019,11,23);
const current = new Date(2019,1,9);
const end = new Date(2020,1,1);
end.setHours(0,0,0,0);
const nowTime = end.getTime();
const ret = [];
while(current.getTime() < nowTime){
current.setTime(current.getTime() + 5*60000);
ret.push(current.toISOString());
}
return ret;
}
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
const request = event.Records[0].cf.request;
const util = require('util');
console.log(util.inspect(response, { compact: true, depth: 5, breakLength: 80 }));
console.log(util.inspect(request, { compact: true, depth: 5, breakLength: 80 }));
if (response.status >= 400 && response.status <= 599) {
if(request.uri.indexOf('.') === -1 && request.uri.substr(-1) !== '/'){
const redirect_path = `${request.uri}/index.html`;
response.status = 302;
response.statusDescription = 'Found';
/* Drop the body, as it is not required for redirects */
response.body = '';
response.headers['location'] = [{ key: 'Location', value: redirect_path }];
}
}
// folders don't generate 404
if(response.status.toString() === "200"
&& response.headers['content-length']
&& response.headers['content-length'][0]
&& response.headers['content-length'][0].value.toString() == "0"
&& request.uri.substr(-1) === '/'){
const redirect_path = `${request.uri}index.html`;
response.status = 302;
response.statusDescription = 'Found';
/* Drop the body, as it is not required for redirects */
response.body = '';
response.headers['location'] = [{ key: 'Location', value: redirect_path }];
}
callback(null, response);
};
version: "3.5"
volumes:
mysql_path:
services:
mysql:
environment:
MYSQL_DATABASE: aggregator
MYSQL_USER: root
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
image: mysql:8.0.19
command: --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
- 33060:33060
volumes:
- mysql_path:/var/lib/mysql
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment