react-templates/playground/fiddle.js

77 lines
2.8 KiB
JavaScript

/**
* Created by avim on 12/2/2014.
*/
define(['react', 'firebase', 'lodash', './fiddle.rt', 'jquery'], function (React, Firebase, _, fiddleTemplate, $) {
'use strict'
function generateRandomId() {
var uuid = 'xxxxxxxx'.replace(/[xy]/g, function (c) {
var r = _.random(0, 15)
return (c === 'x' ? r : r & 0x3 | 0x8).toString(16)
})
return uuid
}
var Fiddle = React.createClass({
displayName: 'Fiddle',
componentDidMount: function () {
if (window.location.hash) {
var newHash = window.location.hash.replace('#', '')
var firebase = new Firebase('https://reacttemplates.firebaseio-demo.com/')
firebase.child('fiddles').child(newHash).on('value', function (snapshot) {
this.refs.playground.setState(snapshot.val())
Firebase.goOffline()
}.bind(this))
} else {
Firebase.goOffline()
}
},
save: function () {
var newHash = generateRandomId()
window.location.hash = newHash
Firebase.goOnline()
var playgroundState = this.refs.playground.state
var firebase = new Firebase('https://reacttemplates.firebaseio-demo.com/')
firebase.child('fiddles').child(newHash).set(playgroundState, function () {
Firebase.goOffline()
alert('Saved the fiddle, you can share your url') //eslint-disable-line no-alert
})
},
clear: function () {
this.refs.playground.clear()
},
loadSample: function (name) {
//require(['text!./samples/' + name + '.rt', 'text!./samples/' + name + '.code'], function (rt, code) {
// var currentState = {
// templateHTML: rt,
// templateProps: code
// };
// //this.updateSample(currentState);
// this.refs.playground.setState(currentState);
//});
var playground = this.refs.playground
$.get('playground/samples/' + name + '.rt', null, function (data/*, textStatus, jqXHR*/) {
var rt = data
$.get('playground/samples/' + name + '.code', null, function (data2/*, textStatus2, jqXHR2*/) {
var currentState = {
templateHTML: rt,
templateProps: _.template(data2)({name: 'template'})
}
//this.updateSample(currentState);
playground.setState(currentState)
})
})
//this.refs.playground.clear();
},
render: fiddleTemplate
})
return Fiddle
})