work on post views
This commit is contained in:
8
public/javascripts/src/application.js
Normal file
8
public/javascripts/src/application.js
Normal file
@@ -0,0 +1,8 @@
|
||||
Cookie.setup();
|
||||
|
||||
$(document).ready(function() {
|
||||
$("#hide-upgrade-account-link").click(function() {
|
||||
$("#upgrade-account").hide();
|
||||
Cookie.put('hide-upgrade-account', '1', 7);
|
||||
});
|
||||
});
|
||||
58
public/javascripts/src/cookie.js
Normal file
58
public/javascripts/src/cookie.js
Normal file
@@ -0,0 +1,58 @@
|
||||
Cookie = {
|
||||
put: function(name, value, days) {
|
||||
if (days == null) {
|
||||
days = 365;
|
||||
}
|
||||
|
||||
var date = new Date();
|
||||
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
|
||||
var expires = "; expires=" + date.toGMTString();
|
||||
document.cookie = name + "=" + encodeURIComponent(value) + expires + "; path=/";
|
||||
},
|
||||
|
||||
raw_get: function(name) {
|
||||
var nameEq = name + "=";
|
||||
var ca = document.cookie.split(";");
|
||||
|
||||
for (var i = 0; i < ca.length; ++i) {
|
||||
var c = ca[i];
|
||||
|
||||
while (c.charAt(0) == " ") {
|
||||
c = c.substring(1, c.length);
|
||||
}
|
||||
|
||||
if (c.indexOf(nameEq) == 0) {
|
||||
return c.substring(nameEq.length, c.length);
|
||||
}
|
||||
}
|
||||
|
||||
return "";
|
||||
},
|
||||
|
||||
get: function(name) {
|
||||
return this.unescape(this.raw_get(name));
|
||||
},
|
||||
|
||||
remove: function(name) {
|
||||
Cookie.put(name, "", -1);
|
||||
},
|
||||
|
||||
unescape: function(val) {
|
||||
return decodeURIComponent(val.replace(/\+/g, " "));
|
||||
},
|
||||
|
||||
setup: function() {
|
||||
if (location.href.match(/^\/(comment|pool|note|post)/) && this.get("tos") != "1") {
|
||||
// Setting location.pathname in Safari doesn't work, so manually extract the domain.
|
||||
var domain = location.href.match(/^(http:\/\/[^\/]+)/)[0];
|
||||
location.href = domain + "/static/terms_of_service?url=" + location.href;
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.get("hide-upgrade-account") != "1") {
|
||||
if ($("upgrade-account")) {
|
||||
$("upgrade-account").show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
168
public/javascripts/src/posts/index.js
Normal file
168
public/javascripts/src/posts/index.js
Normal file
@@ -0,0 +1,168 @@
|
||||
PostModeMenu = {
|
||||
init: function() {
|
||||
this.original_background_color = $(document.body).css("background-color")
|
||||
|
||||
if (Cookie.get("mode") == "") {
|
||||
Cookie.put("mode", "view");
|
||||
$("#mode-box select").val("view");
|
||||
} else {
|
||||
$("#mode-box select").val(Cookie.get("mode"));
|
||||
}
|
||||
|
||||
this.change();
|
||||
},
|
||||
|
||||
change: function() {
|
||||
var s = $("#mode-box select").val();
|
||||
Cookie.put("mode", s, 7);
|
||||
|
||||
if (s == "view") {
|
||||
$(document.body).css({"background-color": this.original_background_color});
|
||||
} else if (s == "edit") {
|
||||
$(document.body).css({"background-color": "#3A3"});
|
||||
} else if (s == "add-fav") {
|
||||
$(document.body).css({"background-color": "#FFA"});
|
||||
} else if (s == "remove-fav") {
|
||||
$(document.body).css({"background-color": "#FFA"});
|
||||
} else if (s == "rating-q") {
|
||||
$(document.body).css({"background-color": "#AAA"});
|
||||
} else if (s == "rating-s") {
|
||||
$(document.body).css({"background-color": "#6F6"});
|
||||
} else if (s == "rating-e") {
|
||||
$(document.body).css({"background-color": "#F66"});
|
||||
} else if (s == "vote-down") {
|
||||
$(document.body).css({"background-color": "#FAA"});
|
||||
} else if (s == "vote-up") {
|
||||
$(document.body).css({"background-color": "#AFA"});
|
||||
} else if (s == "lock-rating") {
|
||||
$(document.body).css({"background-color": "#AA3"});
|
||||
} else if (s == "lock-note") {
|
||||
$(document.body).css({"background-color": "#3AA"});
|
||||
} else if (s == "approve") {
|
||||
$(document.body).css({"background-color": "#26A"});
|
||||
} else if (s == "unapprove") {
|
||||
$(document.body).css({"background-color": "#F66"});
|
||||
} else if (s == "add-to-pool") {
|
||||
$(document.body).css({"background-color": "#26A"});
|
||||
} else if (s == "apply-tag-script") {
|
||||
$(document.body).css({"background-color": "#A3A"});
|
||||
} else if (s == "edit-tag-script") {
|
||||
$(document.body).css({"background-color": "#FFF"});
|
||||
|
||||
var script = Cookie.get("tag-script");
|
||||
script = prompt("Enter a tag script", script);
|
||||
|
||||
if (script) {
|
||||
Cookie.put("tag-script", script);
|
||||
$("#mode-box select").val("apply-tag-script");
|
||||
} else {
|
||||
$("#mode-box select").val("view");
|
||||
}
|
||||
|
||||
this.change();
|
||||
} else {
|
||||
$(document.body).css({"background-color": "#AFA"});
|
||||
}
|
||||
},
|
||||
|
||||
click: function(post_id) {
|
||||
var s = $("#mode-box select").val();
|
||||
|
||||
if (s.value == "view") {
|
||||
return true;
|
||||
} else if (s.value == "add-fav") {
|
||||
Favorite.create(post_id);
|
||||
} else if (s.value == "remove-fav") {
|
||||
Favorite.destroy(post_id);
|
||||
} else if (s.value == "edit") {
|
||||
// TODO
|
||||
} else if (s.value == 'vote-down') {
|
||||
PostVote.create("down", post_id);
|
||||
} else if (s.value == 'vote-up') {
|
||||
PostVote.create("up", post_id);
|
||||
} else if (s.value == 'rating-q') {
|
||||
Post.update(post_id, {"post[rating]": "questionable"});
|
||||
} else if (s.value == 'rating-s') {
|
||||
Post.update(post_id, {"post[rating]": "safe"});
|
||||
} else if (s.value == 'rating-e') {
|
||||
Post.update(post_id, {"post[rating]": "explicit"});
|
||||
} else if (s.value == 'lock-rating') {
|
||||
Post.update(post_id, {"post[is_rating_locked]": "1"});
|
||||
} else if (s.value == 'lock-note') {
|
||||
Post.update(post_id, {"post[is_note_locked]": "1"});
|
||||
} else if (s.value == 'unapprove') {
|
||||
Unapproval.create(post_id);
|
||||
} else if (s.value == "approve") {
|
||||
Post.update(post_id, {"post[is_pending]": "0"});
|
||||
} else if (s.value == 'add-to-pool') {
|
||||
Pool.add_post(post_id, 0);
|
||||
} else if (s.value == "apply-tag-script") {
|
||||
var tag_script = Cookie.get("tag-script");
|
||||
TagScript.run(post_id, tag_script);
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
TagScript = {
|
||||
parse: function(script) {
|
||||
return script.match(/\[.+?\]|\S+/g);
|
||||
},
|
||||
|
||||
test: function(tags, predicate) {
|
||||
var split_pred = predicate.match(/\S+/g);
|
||||
var is_true = true;
|
||||
|
||||
split_pred.each(function(x) {
|
||||
if (x[0] == "-") {
|
||||
if (tags.include(x.substr(1, 100))) {
|
||||
is_true = false
|
||||
throw $break
|
||||
}
|
||||
} else {
|
||||
if (!tags.include(x)) {
|
||||
is_true = false
|
||||
throw $break
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return is_true
|
||||
},
|
||||
|
||||
process: function(tags, command) {
|
||||
if (command.match(/^\[if/)) {
|
||||
var match = command.match(/\[if\s+(.+?)\s*,\s*(.+?)\]/)
|
||||
if (TagScript.test(tags, match[1])) {
|
||||
return TagScript.process(tags, match[2])
|
||||
} else {
|
||||
return tags
|
||||
}
|
||||
} else if (command == "[reset]") {
|
||||
return []
|
||||
} else if (command[0] == "-") {
|
||||
return tags.reject(function(x) {return x == command.substr(1, 100)})
|
||||
} else {
|
||||
tags.push(command)
|
||||
return tags
|
||||
}
|
||||
},
|
||||
|
||||
run: function(post_id, tag_script) {
|
||||
var commands = TagScript.parse(tag_script)
|
||||
var post = Post.posts.get(post_id)
|
||||
var old_tags = post.tags.join(" ")
|
||||
|
||||
commands.each(function(x) {
|
||||
post.tags = TagScript.process(post.tags, x)
|
||||
})
|
||||
|
||||
Post.update(post_id, {"post[old_tags]": old_tags, "post[tags]": post.tags.join(" ")})
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
$("#mode-box select").click(PostModeMenu.change)
|
||||
PostModeMenu.init();
|
||||
});
|
||||
129
public/javascripts/src/rails.js
Normal file
129
public/javascripts/src/rails.js
Normal file
@@ -0,0 +1,129 @@
|
||||
// from http://github.com/rails/jquery-ujs/raw/master/src/rails.js
|
||||
|
||||
jQuery(function ($) {
|
||||
var csrf_token = $('meta[name=csrf-token]').attr('content'),
|
||||
csrf_param = $('meta[name=csrf-param]').attr('content');
|
||||
|
||||
$.fn.extend({
|
||||
/**
|
||||
* Triggers a custom event on an element and returns the event result
|
||||
* this is used to get around not being able to ensure callbacks are placed
|
||||
* at the end of the chain.
|
||||
*
|
||||
* TODO: deprecate with jQuery 1.4.2 release, in favor of subscribing to our
|
||||
* own events and placing ourselves at the end of the chain.
|
||||
*/
|
||||
triggerAndReturn: function (name, data) {
|
||||
var event = new $.Event(name);
|
||||
this.trigger(event, data);
|
||||
|
||||
return event.result !== false;
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles execution of remote calls firing overridable events along the way
|
||||
*/
|
||||
callRemote: function () {
|
||||
var el = this,
|
||||
data = el.is('form') ? el.serializeArray() : [],
|
||||
method = el.attr('method') || el.attr('data-method') || 'GET',
|
||||
url = el.attr('action') || el.attr('href');
|
||||
|
||||
if (url === undefined) {
|
||||
throw "No URL specified for remote call (action or href must be present).";
|
||||
} else {
|
||||
if (el.triggerAndReturn('ajax:before')) {
|
||||
$.ajax({
|
||||
url: url,
|
||||
data: data,
|
||||
dataType: 'script',
|
||||
type: method.toUpperCase(),
|
||||
beforeSend: function (xhr) {
|
||||
el.trigger('ajax:loading', xhr);
|
||||
},
|
||||
success: function (data, status, xhr) {
|
||||
el.trigger('ajax:success', [data, status, xhr]);
|
||||
},
|
||||
complete: function (xhr) {
|
||||
el.trigger('ajax:complete', xhr);
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
el.trigger('ajax:failure', [xhr, status, error]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
el.trigger('ajax:after');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* confirmation handler
|
||||
*/
|
||||
$('a[data-confirm],input[data-confirm]').live('click', function () {
|
||||
var el = $(this);
|
||||
if (el.triggerAndReturn('confirm')) {
|
||||
if (!confirm(el.attr('data-confirm'))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* remote handlers
|
||||
*/
|
||||
$('form[data-remote]').live('submit', function (e) {
|
||||
$(this).callRemote();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$('a[data-remote],input[data-remote]').live('click', function (e) {
|
||||
$(this).callRemote();
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
$('a[data-method]:not([data-remote])').live('click', function (e){
|
||||
var link = $(this),
|
||||
href = link.attr('href'),
|
||||
method = link.attr('data-method'),
|
||||
form = $('<form method="post" action="'+href+'">'),
|
||||
metadata_input = '<input name="_method" value="'+method+'" type="hidden" />';
|
||||
|
||||
if (csrf_param != null && csrf_token != null) {
|
||||
metadata_input += '<input name="'+csrf_param+'" value="'+csrf_token+'" type="hidden" />';
|
||||
}
|
||||
|
||||
form.hide()
|
||||
.append(metadata_input)
|
||||
.appendTo('body');
|
||||
|
||||
e.preventDefault();
|
||||
form.submit();
|
||||
});
|
||||
|
||||
/**
|
||||
* disable-with handlers
|
||||
*/
|
||||
var disable_with_input_selector = 'input[data-disable-with]';
|
||||
var disable_with_form_selector = 'form[data-remote]:has(' + disable_with_input_selector + ')';
|
||||
|
||||
$(disable_with_form_selector).live('ajax:before', function () {
|
||||
$(this).find(disable_with_input_selector).each(function () {
|
||||
var input = $(this);
|
||||
input.data('enable-with', input.val())
|
||||
.attr('value', input.attr('data-disable-with'))
|
||||
.attr('disabled', 'disabled');
|
||||
});
|
||||
});
|
||||
|
||||
$(disable_with_form_selector).live('ajax:after', function () {
|
||||
$(this).find(disable_with_input_selector).each(function () {
|
||||
var input = $(this);
|
||||
input.removeAttr('disabled')
|
||||
.val(input.data('enable-with'));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user