Resources/js/d/prefs.js
changeset 0 80c32ef237c6
child 1 b3419d05eabb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Resources/js/d/prefs.js	Mon Sep 02 02:22:21 2013 -0700
@@ -0,0 +1,141 @@
+
+$( window ).ready( function() {
+	new PrefsRouter( $('#content') );
+});
+
+
+/* ---------------------------------------------- */
+/* Router for the various Pref sections */
+/* ---------------------------------------------- */
+PrefsRouter = can.Control({
+	defaults: {
+		menu: $( '#sections' ),
+		default_route: 'app'
+	}
+}, {
+	init: function() {
+		var self = this;
+		self.controls = [];
+
+		if ( window.location.hash == "" ) window.location.hash = "#" + self.options.default_route;
+	},
+
+	// Remove controllers (and their children DOM elements) and reflect
+	// the currently selected route.
+	//
+	reset: function() {
+		var self = this;
+		var current_route = can.route.attr( 'route' );
+		var menu = self.options.menu;
+
+		// FIXME
+		menu.find( 'a' ).removeClass( 'selected' );
+		console.log( menu.find( 'a' ) );
+		console.log( menu.find( 'a[href="#' + current_route + '"]' ) );
+
+		while ( control = self.controls.pop() ) control.destroy();
+	},
+
+	"app route": function() {
+		this.reset();
+		this.controls.push( new PrefsAppWidget(this.element) );
+	},
+
+	"server route": function() {
+		this.reset();
+		this.controls.push( new PrefsServerWidget(this.element) );
+	},
+});
+
+
+/* ---------------------------------------------- */
+/* App behavior section */
+/* ---------------------------------------------- */
+PrefsAppWidget = can.Control({
+	defaults: {
+		view: 'app://window/prefs/app.ejs'
+	}
+}, {
+	init: function() {
+		var self = this;
+
+		// Get the current preference values.
+		//
+		var bool_prefs = {
+			hidesplash: [ D.getBoolPref( 'hidesplash' ), 'Skip splash screen at startup' ],
+			fullscreen: [ D.getBoolPref( 'fullscreen' ), 'Go full screen by default' ],
+			devmode:    [ D.getBoolPref( 'devmode' ), 'Developer mode' ]
+		}
+
+		self.element.html(
+			can.view( self.options.view, {
+				bool_prefs: bool_prefs
+			})
+		);
+	},
+
+	'input click': function( ele, event ) {
+		var pref = ele.data( 'field' );
+
+		if ( ele.attr('type') == 'checkbox' ) {
+			var bool = ele.is( ':checked' );
+			D.setBoolPref( pref, ele.is(':checked') );
+
+			if ( pref == 'devmode' && bool ) D.window.main.showInspector( true );
+		}
+	},
+});
+
+
+/* ---------------------------------------------- */
+/* Server section */
+/* ---------------------------------------------- */
+PrefsServerWidget = can.Control({
+	defaults: {
+		view: 'app://window/prefs/servers.ejs'
+	}
+}, {
+	init: function() {
+		var self = this;
+		var server = D.getPref( 'server_uri' );
+
+		self.element.html(
+			can.view( self.options.view, {
+				server: server
+			})
+		);
+	},
+
+	// Update the server URI preference.
+	//
+	updateServer: function( uri ) {
+		console.log( 'Updated server_uri to ' + uri + '.' );
+		D.setPref( 'server_uri', uri );
+		D.tf.uri = uri;
+	},
+
+	// Hitting the return key on input fields defer to the 'blur' event,
+	// which in turn fires the 'change' event.
+	//
+	"#server keypress": function( ele, event ) {
+		if ( event.which == 13 ) ele.trigger( 'blur' );
+	},
+	'#server change': function( ele, event ) {
+		this.updateServer( ele.val() );
+	},
+	'#server keyup': function( ele, event ) {
+		D.delay( function() {
+			this.updateServer( ele.val() );
+		}, 500, true );
+	},
+
+
+	// Talk to the remote server, check to see if it's really
+	// a ThingFish handler or not.
+	//
+	'#test click': function( ele, event ) {
+		var server = $( '#server' ).val();
+		D.checkServer( server );
+	},
+});
+