Last active
December 12, 2015 06:08
-
-
Save timsu/4726684 to your computer and use it in GitHub Desktop.
Coffeescript reference implementation for displaying activity hashes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# model history object example: | |
{ id: 102112, user_id: 5, column: "due", prev: null, value: "2012-02-06T14:17:21Z", | |
created_at: 1357859045 } | |
# method to return a string such as "completed this task" given a | |
# model_history object | |
# model - history display context, either "task" or "list" | |
history_string = (model) -> | |
if @task() | |
item = "<a href='#task-" + @task()[0] + "'>" + @task()[1] + "</a>" | |
item_possessive = item + "'s " | |
else | |
item = "this " + model | |
item_possessive = "" | |
switch @column() | |
when "tag_added", "tag_removed" | |
prefix = if @column() == "tag_added" then "added " + item + " to " else "removed " + item + " from " | |
if @task() and @value() == current_tag.id() | |
prefix + "this list" | |
else | |
prefix + list_name(@value()) | |
when "shared_with", "unshared_with" | |
(if @column() == "shared_with" then "shared " else "unshared ") + | |
item + " with " + _.map(@value(), user_link).join(", ") | |
when "member_added" | |
"added " + user_link(@value()) + " to " + item | |
when "member_removed" | |
if @value().id == @user().id and @column() == "member_removed" | |
"left " + item | |
else "removed " + user_link(@value()) + " from " + item | |
when "attachment_added", "attachment_removed" | |
file = @value() | |
(if @column() == "attachment_added" then "attached " else "removed attachment ") + | |
"<a href='" + file[1] + "' target='_blank'>" + file[0] + "</a>" + | |
(if @column() == "attachment_added" then " to " else " from ") + item | |
when "completed_at" | |
if @value() | |
"completed " + item | |
else | |
"uncompleted " + item | |
when "deleted_at" | |
if @value() | |
"deleted " + item | |
else | |
"undeleted " + item | |
when "acknowledged" | |
"viewed " + item | |
when "importance" | |
"changed " + item_possessive + "priority from " + importance(@prev()) + " to " + importance(@value()) | |
when "notes_length" | |
if @prev() and @value() > @prev() | |
"added " + (@value() - @prev()) + " characters to " + item_possessive + "description" | |
else if @value() == 0 | |
"removed the description" | |
else if @prev() and @value() < @prev() | |
"removed " + (@prev() - @value()) + " characters from " + item_possessive + "description" | |
else if @prev() and @value() == @prev() | |
"updated " + item_possessive + "description" | |
else | |
"added a description to " + item | |
when "public" | |
if @value() | |
"made " + item + " public" | |
else | |
"made " + item + " private" | |
when "due" | |
if @value() and @prev() | |
"changed " + item_possessive + "due date from " + time(@prev(), @value()) + " to " + time(@value(), @prev()) | |
else if @value() | |
"set " + item_possessive + "due date to " + time(@value()) | |
else | |
"removed " + item_possessive + "due date" | |
when "repeat" | |
repeat_value = repeat(@value()) | |
if repeat_value | |
"changed " + item_possessive + "repeat to " + repeat_value | |
else | |
"removed " + item_possessive + "repeat" | |
when "task_repeated" | |
"completed this repeating task (now due on " + time(@value(), @prev()) + ")" | |
when "title" | |
if @prev() | |
"changed " + item_possessive + "title from '" + @prev() + "' to '" + @value() + "'" | |
else | |
"set " + item_possessive + "title to '" + @value() + "'" | |
when "name", "description" | |
if @prev() | |
"changed " + @column() + " from '" + @prev() + "' to '" + @value() + "'" | |
else | |
"set " + @column() + " to '" + @value() + "'" | |
when "picture_id", "default_list_image_id" | |
"changed this list's picture" | |
when "is_silent" | |
(if @value() then "un" else "") + "silenced " + item | |
when "is_favorite" | |
(if @value() then "un" else "") + "favorited " + item | |
when "user_id" | |
if model == "list" and !@task() | |
if @prev() | |
"changed list owner to " + user_link(@value()) | |
else | |
"created this list" | |
else if @prev() and @value().id == -1 | |
"unassigned " + item | |
else if @prev() == -1 and @value().id == @user().id | |
"claimed " + item | |
else if @prev() | |
"assigned " + item + " to " + user_link(@value()) | |
else if @value().id != current_user.id and @value().id != -1 | |
"created " + item + " for " + user_link(@value()) | |
else | |
"created " + item | |
else "changed " + @column() + " to " + @value() | |
# helper methods for displaying links to lists, importance, time, repeats, users | |
list_name = (v) -> | |
list = lists.get_by_id(v) | |
if list then "<a href='#list-" + list.id + "'>" + list.get("name") + "</a>" else "(a deleted list)" | |
importance = (v) -> | |
[ "!!!", "!!", "!", "o"][v] | |
time = (v, other = new Date().toISOString()) -> | |
dateFormat = "MMM d" | |
if other and other.slice(0, 4) != v.slice(0, 4) | |
dateFormat += ", yyyy" | |
if v.length > 10 | |
date = new Date(v) | |
dateFormat += ", hh:mm tt" | |
else | |
date = new Date(v.slice(0,4), parseInt(v.slice(5,7))-1, v.slice(8,10)) | |
dateToString date, dateFormat | |
repeat = (v) -> | |
value = repeatToString v | |
user_link = (u) -> | |
if u.id == current_user.id and self.user().id == current_user.id | |
"yourself" | |
else if u.id == current_user.id then "you" | |
else if u.id > 0 then "<a href='#users-" + u.id + "'>" + u.name + "</a>" | |
else "(a deleted user)" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment