Skip to content

Instantly share code, notes, and snippets.

View cedeber's full-sized avatar
🦀
Rustacean

Cédric Eberhardt cedeber

🦀
Rustacean
View GitHub Profile
@cedeber
cedeber / vue-event-hub.js
Last active April 25, 2018 07:24
Vue global bus as event hub
import Vue from "vue";
// Create the event bus by creating a new Vue instance and
// binding it somehwere accessible. If you bind it to the
// Vue prototype, you can access it within your components
// like this:
//
// Emit an event
// this.$bus.$emit('myEvent', {data: true})
//
@cedeber
cedeber / lol-browser.js
Last active April 24, 2018 09:30
Detects IE/Edge < 17
const IEdgeMatches = /(Edge|Trident)\/(\d.)/i.exec(navigator.userAgent);
export default IEdgeMatches && parseInt(IEdgeMatches[2], 10) < 17;
@cedeber
cedeber / serialize-form.js
Created April 3, 2018 17:07
Serialize Form
function serialize(form) {
const inputs = form.querySelectorAll("input");
const fields = {};
for (const input of inputs) {
if (input.name && !input.disabled && input.type !== "file" && input.type !== "reset" && input.type !== "submit" && input.type !== "button") {
if ((input.type !== "checkbox" && input.type !== "radio") || input.checked) {
fields[input.name] = input.value;
}
}
@cedeber
cedeber / apply-before-exit.js
Created April 3, 2018 16:57
Apply before page exits
function applyBeforeExit(doBefore) {
document.addEventListener("click", async (event) => {
// Test for left click.
if (event.button !== 0) {
return;
}
let element = event.target;
// Go up through the DOM tree to search for a link
@cedeber
cedeber / loaded.js
Created April 3, 2018 16:41
Page loaded
function pageLoaded() {
return new Promise(resolve => {
if (document.readyState === "complete") {
resolve();
} else {
window.addEventListener("load", () => {
resolve();
});
}
});
@cedeber
cedeber / ext.js
Created April 3, 2018 13:20
URL extension
const ext = url.slice(((url.lastIndexOf(".") - 1) >>> 0) + 2);
@cedeber
cedeber / tagged-selector.js
Created March 31, 2018 19:12
Tagged Selector
export default function $(strings, ...expressions) {
let selector = [strings[0]];
expressions.forEach((expr, i) => selector.push(expr, strings[i + 1]));
return document.querySelector(selector.join(""));
}
@cedeber
cedeber / .editorconfig
Created March 16, 2018 08:27
Projects Configurations files
# Cross-editor coding style settings.
# See http://editorconfig.org/ for details.
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 4
end_of_line = lf
@cedeber
cedeber / locale.js
Created February 21, 2018 15:34
Set locale from browser
const def = ["en", "fr", "de"];
let locale = navigator.language.indexOf("-") === -1
? navigator.language
: navigator.language.split("-")[0];
locale = def.indexOf(locale) === -1 ? def[0] : locale;
document.documentElement.lang = locale;
@cedeber
cedeber / image-hero.js
Created June 27, 2017 13:17
Image as Hero
(function() {
var image = document.getElementById("image-${content.@id}");
var imageTop = (function() {
var element = image, top = element.offsetTop;
while ((element = element.offsetParent) !== null && element !== document.body) { top += element.offsetTop; }
return top;
}());
image.style.height = (window.innerHeight - imageTop) + "px";
}());