This gist shows how to create a GIF screencast using only free OS X tools: QuickTime, ffmpeg, and gifsicle.
To capture the video (filesize: 19MB), using the free "QuickTime Player" application:
/* | |
After jquery ui datepicker selection, blur and change | |
events fire before focus is returned to the input field, | |
handling a quirk from IE browsers | |
*/ | |
$("input.dateInput").datepicker({ | |
changeMonth: true, | |
changeYear: true, | |
showAnim: "fadeIn", |
{ | |
"vars": { | |
"@gray-darker": "lighten(#000, 13.5%)", | |
"@gray-dark": "#83919e", | |
"@gray": "#c1cad3", | |
"@gray-light": "lighten(#000, 60%)", | |
"@gray-lighter": "lighten(#000, 93.5%)", | |
"@brand-primary": "#309df0", | |
"@brand-success": "#00b800", | |
"@brand-info": "#00c6d8", |
# Here's the script I'll use to demonstrate - it just loops forever: | |
$ cat test.rb | |
#!/usr/bin/env ruby | |
loop do | |
sleep 1 | |
end | |
# Now, I'll start the script in the background, and redirect stdout and stderr |
{ | |
root: resolve('src'), | |
minimize: true, | |
collapseWhitespace: true, | |
conservativeCollapse: false, | |
collapseInlineTagWhitespace: true, | |
removeAttributeQuotes: false, | |
caseSensitive: true, | |
customAttrSurround: [ | |
[/#/, /(?:)/], |
#!/bin/bash | |
# Put proper URLs here | |
SOURCE_GITLAB_URL=http://source.example.net/api/v3/ | |
DESTINATION_GITLAB_URL=http://dest.example.net/api/v3/ | |
DESTINATION_GIT_URL=git@dest.example.net | |
SOURCE_PRIVATE_KEY= | |
DESTINATION_PRIVATE_KEY= | |
TMP_DIR=`mktemp -d` |
const { AbilityBuilder, Ability } = require('casl') | |
function defineAbilitiesFor(user) { | |
const { rules, can } = AbilityBuilder.extract() | |
can('read', ['Post', 'Comment']) | |
can('create', 'User') | |
if (user) { | |
can('manage', ['Post', 'Comment'], { author: user._id }) |
function defineAbilitiesFor(user) { | |
const { rules, can } = AbilityBuilder.extract() | |
if (user) { | |
can('manage', ['Post', 'Comment'], { author: user._id }) | |
can(['read', 'update'], 'User', { _id: user.id }) | |
} else { | |
can('read', ['Post', 'Comment']) | |
can('create', 'User') | |
} |
import { AbilityBuilder } from 'casl' | |
const user = whateverLogicToGetUser() | |
const ability = AbilityBuidler.define(can => { | |
can('read', ['Post', 'Comment']) | |
if (user.isLoggedIn) { | |
can('create', 'Post') | |
can('manage', ['Post', 'Comment'], { authorId: user.id }) | |
} |
const { mongoosePlugin, AbilityBuilder } = require('casl') | |
const mongoose = require('mongoose') | |
mongoose.plugin(mongoosePlugin) | |
const Post = mongoose.model('Post', mongoose.Schema({ | |
title: String, | |
author: String, | |
content: String, | |
createdAt: Date |