Skip to content

Instantly share code, notes, and snippets.

View kevgathuku's full-sized avatar

Kevin Gathuku kevgathuku

View GitHub Profile
type tree = Leaf | Node(int, tree, tree);
let rec sum = (item) => {
switch (item) {
| Leaf => 0
| Node(value, left, right) => value + sum(left) + sum(right);
}
};
let rec height = (root) => {
@kevgathuku
kevgathuku / iframechange.js
Created October 3, 2019 06:08 — forked from yandodov/iframechange.js
HTML iframe URL change listener for tracking when a new iframe page starts to load
function iframeURLChange(iframe, callback) {
var lastDispatched = null;
var dispatchChange = function () {
var newHref = iframe.contentWindow.location.href;
if (newHref !== lastDispatched) {
callback(newHref);
lastDispatched = newHref;
}
@kevgathuku
kevgathuku / App.js
Created June 25, 2019 06:03
Embedding Elm 0.19 into a React app using react-elm-components
import React from 'react';
import logo from './logo.svg';
import './App.css';
// Add these two imports
import Elm from 'react-elm-components';
import Main from "./Main";
function App() {
return (
@kevgathuku
kevgathuku / Main.elm
Last active June 25, 2019 06:49
Elm 0.19 Buttons example
-- Extracted from: https://guide.elm-lang.org
-- Read more about this program in the official Elm guide:
-- https://guide.elm-lang.org/architecture/buttons.html
module Main exposing (main)
import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
@kevgathuku
kevgathuku / devToolsDetect.js
Last active May 6, 2019 05:57
Detect if Chrome Devtools is open (Doesn't work on Firefox)
// https://stackoverflow.com/a/30638226
// When printing an “Element” Chrome developer tools will request the 'id' property
// If the 'id' property is fetched, then the devtools is open
let checkStatus;
let customElement = document.createElement('p');
document.body.appendChild(customToString);
let element = new Image();
Object.defineProperty(element, 'id', {
componentDidUpdate(prevProps, prevState) {
Object.entries(this.props).forEach(([key, val]) =>
prevProps[key] !== val && console.log(`Prop '${key}' changed`)
);
Object.entries(this.state).forEach(([key, val]) =>
prevState[key] !== val && console.log(`State '${key}' changed`)
);
}
(defn compute-collatz [num steps]
(cond
(= num 1) steps
(even? num) (compute-collatz (/ num 2) (inc steps))
(odd? num) (compute-collatz (+ 1 (* num 3)) (inc steps))))
(defn collatz [num]
{:pre [(pos? num)]}
(compute-collatz num 0))
(defn compute-collatz [num steps]
(cond
(= num 1) steps
(even? num) (compute-collatz (/ num 2) (inc steps))
(odd? num) (compute-collatz (+ 1 (* num 3)) (inc steps))))
(defn collatz [num]
; Check if the provided number is positive. If not throw an error
(if
@kevgathuku
kevgathuku / EventComponent.spec.js
Created November 5, 2018 19:22 — forked from hartzis/EventComponent.spec.js
Touch Event Testing React Jest Enzyme
import React from 'react';
import EventComponent from './EventComponent';
import { mount } from 'enzyme';
import {
createStartTouchEventObject,
createMoveTouchEventObject
} from './EventHelpers.js';
describe('EventComponent', () => {
@kevgathuku
kevgathuku / Main.elm
Created October 1, 2018 16:37 — forked from sch/Main.elm
Minimum Elm boilerplate
module Main exposing (main)
import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
type alias Model =
{ count : Int }