/www/jssrc/blerg/Post.js
enyo.kind({
name: "blerg.Post",
kind: "FittableRows",
classes: "blerg-post",
handlers: {
onPostVisibility: "postVisibilityUpdate",
onLogin: "loggedIn",
onLogout: "loggedOut",
onkeydown: "keyHandler"
},
components: [
{tag: "h2", content: "What's on your mind?"},
{kind: "onyx.InputDecorator", alwaysLooksFocused: true, classes: "content-decorator", fit: true, components: [
{name: "postContent", kind: "onyx.TextArea", classes: "content", onkeyup: "updatePreview", attributes: {tabindex: 4}}
]},
{name: "toolbar", classes: "toolbar", components: [
{classes: "buttons", fit: true, components: [
{name: "loginReminder", tag: "span", classes: "blerg-error", style: "margin-right: 8px", content: "You must log in before posting."},
{kind: "onyx.Button", content: "Close", onclick: "closePost", classes: "onyx-negative", attributes: {tabindex: 6}},
{name: "postButton", kind: "onyx.Button", content: "Post", onclick: "doPost", classes: "onyx-affirmative", disabled: true, attributes: {tabindex: 5}}
]},
{classes: "switcher", components: [
{kind: "onyx.RadioGroup", onActivate: "switchBottomPanel", components: [
{name: "replyButton", content: "Replying to", showing: false},
{name: "previewButton", content: "Preview"},
{content: "Help"}
]}
]}
]},
{name: "bottomPanel", kind: "Panels", classes: "bottom-panel", draggable: false, fit: true, components: [
{kind: "Scroller", components: [
{name: "replyView", classes: "record", allowHtml: true},
]},
{kind: "Scroller", components: [
{name: "preview", classes: "record", allowHtml: true},
]},
{kind: "Scroller", components: [
{name: "helpContent", allowHtml: true},
]}
]},
{name: "api", kind: "blerg.API",
onPostSuccessful: "postSuccessful",
onPostFailed: "postFailed"}
],
create: function() {
this.inherited(arguments);
},
getData: function() {
return this.$.postContent.getValue();
},
setData: function(inVal) {
this.$.postContent.setValue(inVal);
},
closePost: function() {
this.bubble('onPostVisibility', {showing: false});
},
doPost: function() {
this.$.api.post(this.getData());
},
postSuccessful: function() {
this.setData('');
this.closePost();
if (location.hash != '#' + blerg.API.username) {
location.hash = '#' + blerg.API.username
this.bubble('onNavigate');
} else {
this.bubble('onReload');
}
},
postFailed: function() {
alert('Could not post!');
},
postVisibilityUpdate: function(inSender, inEvent) {
if (inEvent.showing) {
this.show();
this.$.postContent.focus();
if (inEvent.data && this.getData() == "") {
this.setData(inEvent.data);
this.$.postContent.node.setSelectionRange(inEvent.data.length, inEvent.data.length);
this.updatePreview();
}
if (inEvent.replyto) {
this.$.replyButton.show();
this.$.replyButton.setActive(true);
this.$.replyView.setContent(inEvent.replyto);
} else {
this.$.replyButton.hide();
this.$.previewButton.setActive(true);
}
// Need to reflow manually because this is hidden by default
this.$.toolbar.reflow();
this.reflow();
} else {
this.$.postContent.node.blur();
setTimeout(function() {
this.hide();
this.removeClass('exit');
}.bind(this), 500);
}
this.addRemoveClass('enter', inEvent.showing);
this.addRemoveClass('exit', !inEvent.showing);
},
updatePreview: function(inSender, inEvent) {
this.$.preview.setContent(blerg.Util.blergFormat(this.getData()));
},
loggedIn: function() {
this.$.postButton.setDisabled(false);
this.$.loginReminder.hide();
},
loggedOut: function() {
this.$.postButton.setDisabled(true);
this.$.loginReminder.show();
},
loadHelp: function() {
if (this.$.helpContent.getContent() == '') {
var req = new enyo.Ajax({
url: baseURL + '/doc/post_help.html',
handleAs: 'text'
});
req.response(function(inSender, inResponse) {
this.$.helpContent.setContent(inResponse);
}.bind(this));
req.go();
}
},
switchBottomPanel: function(inSender, inEvent) {
var active = inSender.getActive();
var index = inSender.children.indexOf(active);
this.$.bottomPanel.setIndex(index);
if (index == 2) {
this.loadHelp();
}
},
keyHandler: function(inSender, inEvent) {
if (inEvent.which == 27) {
this.closePost();
}
}
});