Skip to content

Instantly share code, notes, and snippets.

@sarink
sarink / private.js
Last active December 25, 2022 21:56
// Sample demo of how to gain access to "private" variables in JavaScript,
// even if they'd normally be inaccessible due to the closure.
var Table = function () {
var _array = ["super", "secret", "message"];
return {
get: function (i) { return _array[i]; },
store: function (i,v) { _array[i] = v; },
append: function (v) { _array.push(v); }
};
};
(function(root, factory) {
if (typeof define === "function" && define.amd) {
define(["underscore", "backbone", "backboneBabySitter"], function(_, Backbone, ChildViewContainer) {
return factory(_, Backbone, ChildViewContainer);
});
}
else if (typeof exports !== "undefined") {
var _ = require("underscore");
var Backbone = require("backbone");
var ChildViewContainer = require("backboneBabySitter");
@sarink
sarink / backbone.subiews.js
Last active August 29, 2015 14:01
backbone.subviews
// I wrote this when Backbone was like v0.2 - now there are many many tools like Marionette,
// and even things native to Backbone (like `stopListening`) that invalidate a lot of this
var SubView = Backbone.View.extend({
// tagName: must be implemented
// className: must be implemented
// template: must be implemented
initialize: function() {
this.model.on("change", this.render, this);
this.model.on("close", this.close, this);
// Adds an `append` option to the Backbone Router
Backbone.Router.prototype.navigate = (function(origNavigate) {
return function(fragment, options) {
if (options && options.append) {
fragment = Backbone.history.fragment + fragment;
delete options.append;
}
return origNavigate.call(this, fragment, options);
};
})(Backbone.Router.prototype.navigate);
// Forked/modified from: https://gist.github.com/maxbrunsfeld/1542120
// This method gives you an easier way of calling super when you're using Backbone in plain javascript.
// It lets you avoid writing the constructor's name multiple times.
// You still have to specify the name of the method.
//
// So, instead of having to write:
//
// var Animal = Backbone.Model.extend({
// word: "",
// say: function() {
(function(root, factory) {
if (typeof define === "function" && define.amd) {
define(["underscore"], function(_) {
return factory(_);
});
}
else if (typeof exports !== "undefined") {
var _ = require("underscore");
module.exports = factory(_);
}
(function(root, factory) {
if (typeof define === "function" && define.amd) {
define(["jquery"], function($) {
return factory($);
});
}
else if (typeof exports !== "undefined") {
var $ = require("jquery");
module.exports = factory($);
}
// Adds `ng-context-menu` for right click support
app.directive("ngContextMenu", function($parse) {
return function(scope, element, attrs) {
var fn = $parse(attrs.ngContextMenu);
element.bind("contextmenu", function(event) {
scope.$apply(function() {
event.preventDefault();
fn(scope, {$event:event});
});
});
@sarink
sarink / SampleComponent.jsx
Last active August 29, 2015 14:19
backbone-react
// use like:
// var sample1 = new SampleModel();
// React.render(<SampleComponent model={sample1} />);
define(["underscore", "backbone", "react"],
function(_, Backbone, React) {
"use strict";
var SampleComponent = React.createClass({
// Give us those sweet react console warnings if we don't pass the right props
javascript:(function(e,a,g,h,f,c,b,d){if(!(f=e.jQuery)||g>f.fn.jquery||h(f)){c=a.createElement("script");c.type="text/javascript";c.src="http://ajax.googleapis.com/ajax/libs/jquery/"+g+"/jquery.min.js";c.onload=c.onreadystatechange=function(){if(!b&&(!(d=this.readyState)||d=="loaded"||d=="complete")){h((f=e.jQuery).noConflict(1),b=1);f(c).remove()}};a.documentElement.childNodes[0].appendChild(c)}})(window,document,"1.10.2",function($,L){$(".toc_section").each(function() { var $section = $(this); var listitems = $section.children('li').get(); listitems.sort(function(a, b) { return $(a).text().toUpperCase().localeCompare($(b).text().toUpperCase()); }); $.each(listitems, function(idx, itm) { $section.append(itm); });});});