1
0
mirror of /repos/Prototyper.git synced 2025-12-30 06:31:32 +01:00
Prototyper/public/index.html
2013-04-20 03:19:58 +02:00

217 lines
7.4 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>app/main/index</title>
<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
<link href="/style.css" rel="stylesheet" type="text/css">
<!-- @@style_app_main_style -->
</head>
<body>
<div id="header">
<div id="htext">
Editing <b>index</b>
<strong data-bind="text: _keys().length"></strong>
<div data-bind="visible: _getMode()">
mode: <strong data-bind="text: _getMode()"></strong>
</div>
<div id="main">
<ul class="folders">
<!-- ko foreach: _keys() -->
<li data-bind="text: $data,
css: { selected: $data == $root._chosenFolderId() },
click: $root._goToFolder"></li>
<!-- /ko -->
<li><input data-bind="value: $root._newAttribute" /></li>
</ul>
</div>
</div>
</div>
<div id="editor"></div>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<!-- @@remove_ -->
<!--<script src="//knockoutjs.com/downloads/knockout-2.2.1.debug.js"></script>-->
<!--<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/2.2.0/knockout-min.js"></script>-->
<!-- @@_end_remove -->
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js"></script>
<script src="//underscorejs.org/underscore-min.js"></script>
<!--<script src="//raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.debug.js"></script>-->
<script src="//raw.github.com/SteveSanderson/knockout.mapping/master/build/output/knockout.mapping-latest.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout-validation/1.0.2/knockout.validation.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
<script src="/lib/ace/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="/lib/ace/mode-html.js" type="text/javascript" charset="utf-8"></script>
<script src="/lib/ace/mode-javascript.js" type="text/javascript" charset="utf-8"></script>
<script src="/lib/ace/mode-css.js" type="text/javascript" charset="utf-8"></script>
<script src="/lib/ace/mode-markdown.js" type="text/javascript" charset="utf-8"></script>
<script src="//cdn.sockjs.org/sockjs-0.3.min.js"></script>
<!-- @@remove_ -->
<!--<script src="/channel/bcsocket.js"></script>-->
<!--<script src="/socket.io/socket.io.js"></script>-->
<!-- @@_end_remove -->
<script src="/share/share.uncompressed.js"></script>
<script src="/share/json.js"></script>
<script src="/share/ace.js"></script>
<script>
var attribute = 'index';
var editor = ace.edit("editor");
var aceMode = null;
var session = editor.getSession();
var viewModel = null;
var doc = null;
var mainDoc = null;
editor.setReadOnly(true);
var setMode = function(attribute, mode) {
console.log('setmode', attribute, mode);
if (mainDoc.snapshot
&& mainDoc.snapshot[attribute]) {
console.log('got attribute field');
if (mainDoc.snapshot[attribute].mode != mode) {
console.log('mode differs');
var op = [];
if (mainDoc.snapshot[attribute].mode) {
console.log('// remove');
op.push({
p:[attribute,'mode'],
od:main.snapshot[attribute].mode
})
}
console.log('//insert');
op.push({
p:[attribute,'mode'],
oi:mode
});
console.log('op',op);
mainDoc.submitOp(op, function (err, result) {
console.log('err', err, 'result', result);
});
}
}
};
var setDoc = function(attribute) {
var mode = 'markdown';
editor.setReadOnly(true);
if (attribute == 'style') {
mode = 'css';
} else if (attribute == 'behaviour') {
mode = 'javascript';
} else if (attribute == 'index') {
mode = 'html';
}
mode = (mainDoc.snapshot
&& mainDoc.snapshot[attribute]
&& mainDoc.snapshot[attribute].mode
) || mode;
aceMode = require("ace/mode/"+mode).Mode;
session.setMode(new aceMode());
setMode(attribute, mode);
document.title = attribute;
var docName='text:app:'+viewModel._id()+':'+attribute;
sharejs.open(docName, 'text', function(error, newDoc) {
if (doc != null) {
doc.close();
doc.detach_ace();
}
doc = newDoc;
if (error) {
console.error(error);
return;
}
doc.attach_ace(editor);
editor.setReadOnly(false);
editor.focus(); //To focus the ace editor
});
};
var mapping = {
'ignore': ["name", "version"]
};
function addComputed(doc) {
var snapshot = doc.snapshot;
snapshot._keys = _.filter(
Object.keys(snapshot),
function(key){
return key[0] != '_'
&& key != 'name'
&& key != 'version';
});
}
function initViewModel(doc) {
addComputed(doc);
var snapshot = doc.snapshot;
var viewModel = ko.mapping.fromJS(snapshot, mapping);
viewModel._chosenFolderId = ko.observable();
viewModel._newAttribute = ko.observable();
// Behaviours
viewModel._goToFolder = function(folder) {
viewModel._chosenFolderId(folder);
setDoc(folder);
};
viewModel._newAttribute.subscribe(function(newValue) {
if (newValue) {
mainDoc.submitOp({
p:[newValue],
oi: {}
}, function (err, result) {
viewModel._newAttribute("");
})
}
});
viewModel._getMode = ko.computed(function() {
var id = viewModel._chosenFolderId();
return id && viewModel[id].mode;
});
ko.applyBindings(viewModel);
window.viewModel=viewModel;
console.log('viewModel', viewModel);
}
function updateViewModel(doc) {
addComputed(doc);
ko.mapping.fromJS(doc.snapshot,viewModel);
console.log('updated viewModel', viewModel);
}
sharejs.open('json:app:main','json', function (error, main) {
var indexField = null;
if (error) {
console.log('error opening app:main:json', error, main);
} else {
console.log('yes!!',main);
mainDoc = main;
var snapshot = main.snapshot;
if (snapshot == null) {
//TODO test/handle this situation
console.log('// TODO no data for main yet??');
} else {
initViewModel(main)
}
main.on('change', function () {
console.log('main changed!!',main.snapshot, viewModel);
if (main.snapshot && viewModel) {
updateViewModel(main);
} else {
initViewModel(main)
}
});
}
})
</script>
</body>
</html>