Skip to content

Instantly share code, notes, and snippets.

View Tallies's full-sized avatar

Tallies

View GitHub Profile
@Tallies
Tallies / advanced-filter-currying.js
Last active April 23, 2020 20:04
Practical currying in Javascript
function advancedFilter(collection, match) {
const keysOf = obj => Object.keys(obj)
const toKeyValue = obj => key => ({key, value: obj[key]});
const matchKeyValue = keyValue1 => keyValue2 =>
keyValue1.key === keyValue2.key &&
keyValue1.value === keyValue2.value;
const matchOnAll = keyValues => keyValue => keyValues.some(matchKeyValue(keyValue))
router.get(/^(\\/what\\/get|\\/why\\/get|\\/who\\/get|\\/how\\/get)(?:\\/(?=$))?$/i, function(req, res, next) {
//get the requested page
var page = getPage(req.url);
var contentPanel = getParsedPage(page);
var data = {'contentPanel' : contentPanel};
res.send(stringify(data, null, 2));
});
//Events and helper functions
var loadSuccessfull = function(name, data) {
contentPanel.setContent(data.contentPanel);
menu.setMenu(name);
};
var loadFail = function(xhr, status, error) {
contentPanel.setContent("Error loading content. " +status +" - " + error);
console.log("Failed to call server: " + error);
};
//Helper functions
var getPage = function() {
var urlparts = document.location.href.split("/");
var page = urlparts[urlparts.length-1];
return page;
};
var loadContent = function(name, success, fail){
$.ajax({
url:name+ "/get",
type:"GET",
dataType:"json",
success: function(data) { success(name, data); },
error: fail
});
};
var React = require('react');
var Header = require('../Components/Header.jsx').Header;
var Menu = require("../Components/Menu.jsx").Menu;
var ContentPanel = require("../Components/ContentPanel.jsx").ContentPanel;
var $ = require("jquery");
script(src="/JavaScripts/highlight.pack.js")
script(type='text/JavaScript').
var initialData=!{initialData}
script(src='/JavaScripts/main.js')
highlight: function() {
$('pre code').each(function(i, block) {
hljs.highlightBlock(block);
});
},
//React lifecycle methods
componentDidUpdate : function() {
this.highlight()
},
setContent : function(content) {
this.setState({content : content});
var node = React.findDOMNode(this).parentNode;
node.firstChild.style.visibility = "initial";
node.className = node.className.substr(0, node.className.length - " contentImageShow".length);
},
setLoading: function(){
var node = React.findDOMNode(this).parentNode;
node.firstChild.style.visibility = "hidden";