Skip to content

Instantly share code, notes, and snippets.

@fredkingham
fredkingham / ko-binding-scroll.js
Created October 2, 2012 11:27
knockout infinite scrolling
ko.bindingHandlers.scroll = {
updating: true,
init: function(element, valueAccessor, allBindingsAccessor) {
var self = this
self.updating = true;
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(window).off("scroll.ko.scrollHandler")
self.updating = false
@fredkingham
fredkingham / simple-loading-with-jquery
Created October 2, 2012 12:25
simplest infinite loading
$(window).on('scroll.loader', function() {
if ($(document).height() - 30 <= $(window).height() + $(window).scrollTop()) {
// your go off and get html to append
}
}
@fredkingham
fredkingham / gist:4056531
Created November 11, 2012 22:31
ko-html5-image-preview
ko.bindingHandlers.filePreview = {
update: function(element, valueAccessor, allBindingsAccessor){
var allBindings = allBindingsAccessor()
if(!!FileReader && valueAccessor() && element.files.length){
var reader = new FileReader();
reader.onload = function(event){
var dataUri = event.target.result
allBindings.imagePreview(dataUri)
}
reader.onerror = function(e) {
@fredkingham
fredkingham / gist:4058933
Created November 12, 2012 11:50
ko-html5-image-upload
ko.bindingHandlers.fileUpload = {
update: function(element, valueAccessor, allBindingsAccessor){
var value = ko.utils.unwrapObservable(valueAccessor())
if(element.files.length && value){
var file = element.files[0];
var url = allBindingsAccessor().url
xhr = new XMLHttpRequest();
xhr.open("post", url, true);
@fredkingham
fredkingham / newClass.sublime-snippet
Created December 20, 2012 15:35
JAVASCRIPT - newClass
<snippet>
<content><![CDATA[
!function(modelPageView){
"use strict"
var ${1:obj_name} = function(){
this.init()
}
${obj_name}.prototype = {
constructor: ${1:obj_name}

Go to Sublime Text 2 > Preferences > Key Bindings - User and add this JSON to the file:

[
    { "keys": ["super+shift+l"],
      "command": "insert_snippet",
      "args": {
        "contents": "console.log(${1:}$SELECTION);${0}"
      }
 }
@fredkingham
fredkingham / gist:5494381
Created May 1, 2013 08:54
knockout virtual element
<snippet>
<content>
<![CDATA[
<!-- ko ${1:if: true} -->
${2}
<!-- /ko -->
]]> </content>
<tabTrigger>ko:v</tabTrigger>
<scope>text.html.basic</scope>
@fredkingham
fredkingham / gist:5611294
Created May 20, 2013 09:39
Sublime snippet to import jquery
<snippet>
<content><![CDATA[<script src="//ajax.googleapis.com/ajax/libs/jquery/${1:1.9.1}/jquery.min.js"></script>$0]]></content>
<tabTrigger>jquery</tabTrigger>
<description>Google CDN: jQuery</description>
<scope>text.html</scope>
</snippet>
@fredkingham
fredkingham / gist:6620685
Created September 19, 2013 08:40
dynamic modal binding
!function(ko){
"use strict";
// var modalElement = "#modal";
var addHiddenDivToBody = function() {
var div = document.createElement("div");
div.id = "modal";
document.body.appendChild(div);
$(div).text("goodbye");
@fredkingham
fredkingham / gist:6782285
Created October 1, 2013 17:42
deferred observable
ko.extenders.deferred = function(targetObservable, startingVal) {
    //create a writeable computed observable to intercept writes to our observableo
targetObservable.loading = ko.observable(startingVal);
targetObservable.promise = function(x){
targetObservable.loading(true);
targetObservable.deferred = x;
x.done(function(returnedTarget){
targetObservable(returnedTarget);
targetObservable.loading(false);