lib/pagoda/public/js/editor.js
// Generated by CoffeeScript 1.4.0
(function() {
$(document).ready(function() {
var add_yaml_entry, clear_empty_yaml, draft_post, focus_to_type, fullscreen_mobile, handle_events, init, is_edit_page, is_iphone, keyboard_events, publish_post, save_post, set_save_button, show_shortcuts, toggle_yaml_table, yaml_hash, yaml_table_set_data;
key.filter = function(e) {
return true;
};
is_iphone = function() {
return /iPhone/i.test(navigator.userAgent);
};
is_edit_page = function() {
return window.location.pathname.indexOf('edit') !== -1;
};
set_save_button = function(status) {
if (status === 'saving') {
$('#save-button').val('SAVING');
return $('#save-button').addClass('post-saving');
} else if (status === 'saved') {
$('#save-button').val('SAVED');
return setTimeout((function() {
$('#save-button').val('SAVE');
return $('#save-button').removeClass('post-saving');
}), 1000);
} else if (status === 'error') {
$('#save-button').val('Error');
$('#save-button').removeClass('post-saving');
return setTimeout((function() {
return set_save_button('saved');
}), 2000);
}
};
draft_post = function() {
$('#draft-action').addClass('selected');
$('#publish-action').removeClass('selected');
$('.override-select').removeClass('override-select');
$('[name="yaml_value[published]"]').val("false");
save_post();
return false;
};
publish_post = function() {
$('#draft-action').removeClass('selected');
$('#publish-action').addClass('selected');
$('.override-select').removeClass('override-select');
$('[name="yaml_value[published]"]').val("true");
save_post();
return false;
};
save_post = function() {
var post_obj;
clear_empty_yaml();
set_save_button('saving');
post_obj = {
post: {
title: $('#post-title').val(),
content: $('#post-content').val(),
name: $('#post_name').val(),
yaml: yaml_hash()
},
ajax: true
};
return $.post(baseUrl + '/save-post', post_obj, function(data) {
var response;
response = $.parseJSON(data);
if (response['status'] === 'OK') {
return setTimeout((function() {
return set_save_button('saved');
}), 1000);
} else {
return set_save_button('error');
}
}).fail((function() {
return set_save_button('error');
}));
};
add_yaml_entry = function() {
var html;
html = $('#add-yaml-template').html();
$(html).insertBefore($('.add-yaml-entry'));
$('.yaml-table-inner .key input').focus();
$('.yaml-table-inner input').unbind('keyup', yaml_table_set_data);
return $('.yaml-table-inner input').bind('keyup', yaml_table_set_data);
};
clear_empty_yaml = function() {
var row, rows, _i, _len, _results;
rows = $('.yaml-table-inner input.yaml-value');
_results = [];
for (_i = 0, _len = rows.length; _i < _len; _i++) {
row = rows[_i];
if ($(row).val() === '') {
_results.push($(row).parent().parent().remove());
} else {
_results.push(void 0);
}
}
return _results;
};
yaml_hash = function() {
var hash, name, row, rows, value, _i, _len;
rows = $('.yaml-table-inner input.yaml-value');
hash = {};
for (_i = 0, _len = rows.length; _i < _len; _i++) {
row = rows[_i];
name = $(row).attr('name').replace("yaml_value[", "").replace("]", "");
value = $(row).val();
hash[name] = value;
}
return hash;
};
toggle_yaml_table = function() {
console.log(yaml_hash());
return $('.yaml-table').toggle();
};
yaml_table_set_data = function() {
var key, name, row, rows, value, _i, _len, _results;
rows = $('.yaml-table-inner input');
_results = [];
for (_i = 0, _len = rows.length; _i < _len; _i++) {
row = rows[_i];
if ($(row).hasClass('yaml-key')) {
value = $(row).val();
value = value.replace(" ", "-");
$(row).val(value);
name = "yaml_key[" + value + "]";
_results.push($(row).attr('name', name));
} else if ($(row).hasClass('yaml-value')) {
key = $(row).parent().parent().find('.yaml-key').val();
name = "yaml_value[" + key + "]";
_results.push($(row).attr('name', name));
} else {
_results.push(void 0);
}
}
return _results;
};
handle_events = function() {
$('#post-editor #post-title').autosize({
append: "\n"
});
$("#fullscreen").click(function(e) {
return screenfull.request();
});
$(".draft-options a").hover((function() {
if (!$(this).hasClass('selected')) {
return $(".draft-options a.selected").addClass('override-select');
}
}), (function() {
if (!$(this).hasClass('selected')) {
return $(".draft-options a.selected").removeClass('override-select');
}
}));
screenfull.onchange = function() {
if (screenfull.isFullscreen) {
$('#fullscreen').hide();
$('#post-content').focus();
return setTimeout(function() {
var rows;
rows = Math.ceil($(window).height() / 40);
return $('#post-content').attr('rows', rows);
}, 1000);
} else {
$('#fullscreen').show();
return $('#post-content').attr('rows', 18);
}
};
$('.delete-button').click(function() {
if (!confirm("Confirm delete?")) {
return false;
}
});
$('#post-content').bind('scroll', function(e) {
if ($(this).scrollTop() > 10) {
return $(this).addClass('scrolled');
} else {
return $(this).removeClass('scrolled');
}
});
if (is_edit_page()) {
$('#save-button').click(function() {
save_post();
return false;
});
$('#draft-action').click(draft_post);
$('#publish-action').click(publish_post);
$('.add-yaml-entry').click(add_yaml_entry);
$('.yaml-block .button').click(toggle_yaml_table);
return $('.yaml-table-inner input').bind('keyup', yaml_table_set_data);
}
};
keyboard_events = function() {
key('⌘+enter, ctrl+enter', function(e) {
return screenfull.toggle();
});
return key('⌘+s, ctrl+s', function(e) {
if (!is_edit_page()) {
$('.edit_post').submit();
} else {
save_post();
}
return false;
});
};
show_shortcuts = function() {
var fulls_shortcut, is_mac, save_shortcut, special_key;
is_mac = navigator.platform.toUpperCase().indexOf('MAC') >= 0;
special_key = is_mac ? '⌘' : 'ctrl';
save_shortcut = special_key + '+S';
fulls_shortcut = special_key + '+Enter';
$('#save-button').attr('title', save_shortcut);
$('#fullscreen').attr('title', fulls_shortcut);
$("#save-button").tipTip({
delay: 200
});
return $("#fullscreen").tipTip({
delay: 200,
defaultPosition: 'right'
});
};
focus_to_type = function() {
if (!is_edit_page() && ($('#post-title').val() === '')) {
return $('#post-title').focus();
} else {
return $('#post-content').focus();
}
};
fullscreen_mobile = function() {
if (is_iphone()) {
setTimeout((function() {
return window.scrollTo(0, 1);
}), 0);
return $('.links').remove();
}
};
init = function() {
handle_events();
keyboard_events();
if (!is_iphone()) {
show_shortcuts();
}
focus_to_type();
fullscreen_mobile();
return yaml_table_set_data();
};
return init();
});
}).call(this);