From 3c083f6c4ff4d354a546e03477e7a4acbb16d4a9 Mon Sep 17 00:00:00 2001
From: cash
Date: Wed, 29 Dec 2010 18:16:54 +0000
Subject: rewrote the display of likes
git-svn-id: http://code.elgg.org/elgg/trunk@7748 36083f99-b078-4883-b0ff-0f9b5a30f544
---
actions/likes/add.php | 6 ++
actions/likes/delete.php | 2 +-
engine/lib/elgglib.php | 9 +-
js/lib/ui.js | 139 ++++++---------------------
languages/en.php | 4 +-
views/default/annotation/likes.php | 76 ++++++++-------
views/default/core/likes/display.php | 61 ++++++++++++
views/default/core/river/controls.php | 24 ++++-
views/default/css/screen.php | 21 +++++
views/default/forms/likes/edit.php | 57 -----------
views/default/js/elgg.php | 173 ----------------------------------
11 files changed, 186 insertions(+), 386 deletions(-)
create mode 100644 views/default/core/likes/display.php
delete mode 100644 views/default/forms/likes/edit.php
diff --git a/actions/likes/add.php b/actions/likes/add.php
index 3de1ebc51..9abe0b60e 100644
--- a/actions/likes/add.php
+++ b/actions/likes/add.php
@@ -20,6 +20,12 @@ if (!$entity) {
forward(REFERER);
}
+// cannot like your own stuff
+if (get_loggedin_userid() == $entity->getOwnerGUID()) {
+ register_error(elgg_echo("likes:no_self_like"));
+ forward(REFERER);
+}
+
$user = get_loggedin_user();
$annotation = create_annotation($entity->guid,
'likes',
diff --git a/actions/likes/delete.php b/actions/likes/delete.php
index 45984b581..7ccf2de37 100644
--- a/actions/likes/delete.php
+++ b/actions/likes/delete.php
@@ -20,7 +20,7 @@ if ($likes = get_annotation($annotation_id)) {
if ($likes->canEdit()) {
$likes->delete();
system_message(elgg_echo("likes:deleted"));
- forward($entity->getURL());
+ forward(REFERER);
}
} else {
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 8d2b8ed91..bc0b1b5af 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -333,7 +333,7 @@ function elgg_get_external_file($type, $location) {
* @return string|false The HTML for the likes, or false on failure
*
* @since 1.8
- * @see @elgg_view forms/likes/edit
+ * @see @elgg_view core/likes/display
*/
function elgg_view_likes($entity) {
if (!($entity instanceof ElggEntity)) {
@@ -342,12 +342,7 @@ function elgg_view_likes($entity) {
$params = array('entity' => $entity);
- if ($likes = elgg_trigger_plugin_hook('likes', $entity->getType(), $params, false)) {
- return $likes;
- } else {
- $likes = elgg_view('forms/likes/edit', $params);
- return $likes;
- }
+ return elgg_view('core/likes/display', $params);
}
/**
diff --git a/js/lib/ui.js b/js/lib/ui.js
index 02d49794d..a1d852e5a 100644
--- a/js/lib/ui.js
+++ b/js/lib/ui.js
@@ -8,22 +8,11 @@ elgg.ui.init = function () {
$('.elgg-toggle').live('click', elgg.ui.toggle);
- $('.elgg-menu-parent').live('click', elgg.ui.menuToggle);
+ $('.elgg-menu-parent').live('click', elgg.ui.toggleMenu);
+ $('.elgg-like-toggle').live('click', elgg.ui.toggleLikes);
$('a.collapsibleboxlink').click(elgg.ui.toggleCollapsibleBox);
-
- // set-up hover class for dragged widgets
- var cols = [
- "#rightcolumn_widgets",
- "#middlecolumn_widgets",
- "#leftcolumn_widgets"
- ].join(',');
-
- $(cols).droppable({
- accept: ".draggable_widget",
- hoverClass: 'droppable-hover'
- });
};
/**
@@ -48,7 +37,7 @@ elgg.ui.toggle = function(event) {
* @param {Object} event
* @return void
*/
-elgg.ui.menuToggle = function(event) {
+elgg.ui.toggleMenu = function(event) {
$(this).siblings().slideToggle('medium');
$(this).toggleClass('elgg-menu-closed elgg-menu-opened');
event.preventDefault();
@@ -60,103 +49,31 @@ elgg.ui.toggleCollapsibleBox = function () {
return false;
};
-//define some helper jquery plugins
-(function($) {
-
- // ELGG TOOLBAR MENU
- $.fn.elgg_topbardropdownmenu = function(options) {
- var defaults = {
- speed: 350
- };
-
- options = $.extend(defaults, options || {});
-
- this.each(function() {
-
- var root = this, zIndex = 5000;
-
- function getSubnav(ele) {
- if (ele.nodeName.toLowerCase() === 'li') {
- var subnav = $('> ul', ele);
- return subnav.length ? subnav[0] : null;
- } else {
- return ele;
- }
- }
-
- function getActuator(ele) {
- if (ele.nodeName.toLowerCase() === 'ul') {
- return $(ele).parents('li')[0];
- } else {
- return ele;
- }
- }
-
- function hide() {
- var subnav = getSubnav(this);
- if (!subnav) {
- return;
- }
-
- $.data(subnav, 'cancelHide', false);
- setTimeout(function() {
- if (!$.data(subnav, 'cancelHide')) {
- $(subnav).slideUp(100);
- }
- }, 250);
- }
-
- function show() {
- var subnav = getSubnav(this), li;
-
- if (!subnav) {
- return;
- }
-
- $.data(subnav, 'cancelHide', true);
-
- $(subnav).css({zIndex: zIndex}).slideDown(options.speed);
- zIndex++;
-
- if (this.nodeName.toLowerCase() === 'ul') {
- li = getActuator(this);
- $(li).addClass('hover');
- $('> a', li).addClass('hover');
- }
- }
-
- $('ul, li', this).hover(show, hide);
- $('li', this).hover(
- function () {
- $(this).addClass('hover');
- $('> a', this).addClass('hover');
- },
- function () {
- $(this).removeClass('hover');
- $('> a', this).removeClass('hover');
- }
- );
-
+/**
+ * Toggles the likes list
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.toggleLikes = function(event) {
+ var $list = $(this).next(".elgg-likes-list");
+ var position = $(this).position();
+ var startTop = position.top;
+ var stopTop = position.top - $list.height();
+ if ($list.css('display') == 'none') {
+ $('.elgg-likes-list').fadeOut();
+
+ $list.css('top', startTop);
+ $list.css('left', position.left - $list.width());
+ $list.animate({opacity: "toggle", top: stopTop}, 500);
+
+ $list.click(function(event) {
+ $list.fadeOut();
});
- };
-
- //Make delimited list
- $.fn.makeDelimitedList = function(elementAttribute) {
-
- var delimitedListArray = [],
- listDelimiter = "::";
-
- // Loop over each element in the stack and add the elementAttribute to the array
- this.each(function(e) {
- var listElement = $(this);
- // Add the attribute value to our values array
- delimitedListArray[delimitedListArray.length] = listElement.attr(elementAttribute);
- }
- );
-
- // Return value list by joining the array
- return delimitedListArray.join(listDelimiter);
- };
-})(jQuery);
+ } else {
+ $list.animate({opacity: "toggle", top: startTop}, 500);
+ }
+ event.preventDefault();
+}
elgg.register_event_handler('init', 'system', elgg.ui.init);
\ No newline at end of file
diff --git a/languages/en.php b/languages/en.php
index 639439ee1..2f946a945 100644
--- a/languages/en.php
+++ b/languages/en.php
@@ -966,7 +966,9 @@ If you requested this click on the link below, otherwise ignore this email.
**/
'likes:this' => 'liked this',
'likes:deleted' => 'Your like has been removed',
- 'likes:remove' => 'See who else liked this',
+ 'likes:see' => 'See who else liked this',
+ 'likes:remove' => 'Unlike this',
+ 'likes:no_self_like' => 'You cannot like your own content',
'likes:notdeleted' => 'There was a problem removing your like',
'likes:likes' => 'You now like this item',
'likes:failure' => 'There was a problem liking this item',
diff --git a/views/default/annotation/likes.php b/views/default/annotation/likes.php
index 3fdf2349b..20965f456 100644
--- a/views/default/annotation/likes.php
+++ b/views/default/annotation/likes.php
@@ -1,40 +1,48 @@
owner_guid);
+if (!isset($vars['annotation'])) {
+ return true;
+}
-?>
-
-
- $owner,
- 'size' => 'tiny'
- ));
- ?>
-
-
-
- canEdit()) {
- ?>
-
- "action/likes/delete?annotation_id=" . $vars['annotation']->id,
- 'text' => elgg_echo('remove'),
+$like = $vars['annotation'];
+
+$user = $like->getOwnerEntity();
+if (!$user) {
+ return true;
+}
+
+$user_icon = elgg_view("profile/icon", array('entity' => $user, 'size' => 'tiny'));
+$user_link = elgg_view('output/url', array(
+ 'href' => $user->getURL(),
+ 'text' => $user->name,
+));
+
+$likes_string = elgg_echo('likes:this');
+
+$friendlytime = elgg_view_friendly_time($like->time_created);
+
+if ($like->canEdit()) {
+ $delete_button = elgg_view("output/confirmlink",array(
+ 'href' => "action/likes/delete?annotation_id={$like->id}",
+ 'text' => elgg_echo('delete'),
'confirm' => elgg_echo('deleteconfirm')
- ));
- ?>
-
-
-
- name; ?> " . elgg_view_friendly_time($vars['annotation']->time_created) . ""; ?>
-
-
-
\ No newline at end of file
+ ));
+ $delete_button = "$delete_button";
+}
+
+$body = <<
+ $delete_button
+ $user_link $likes_string
+
+ $friendlytime
+
+
+HTML;
+
+echo elgg_view_image_block($user_icon, $body);
diff --git a/views/default/core/likes/display.php b/views/default/core/likes/display.php
new file mode 100644
index 000000000..bd0a8fa95
--- /dev/null
+++ b/views/default/core/likes/display.php
@@ -0,0 +1,61 @@
+getGUID();
+
+// check to see if the user has already liked this
+if (!elgg_annotation_exists($guid, 'likes')) {
+ $url = elgg_get_site_url() . "action/likes/add?guid={$guid}";
+ $params = array(
+ 'href' => $url,
+ 'text' => '',
+ 'title' => elgg_echo('likes:likethis'),
+ 'is_action' => true,
+ 'encode_text' => false,
+ );
+ $likes_button = elgg_view('output/url', $params);
+} else {
+ $likes = get_annotations($guid, '', '', 'likes', '', get_loggedin_userid());
+ $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}";
+ $params = array(
+ 'href' => $url,
+ 'text' => "",
+ 'title' => elgg_echo('likes:remove'),
+ 'is_action' => true,
+ 'encode_text' => false,
+ );
+ $likes_button = elgg_view('output/url', $params);
+}
+
+$list = '';
+$num_of_likes = elgg_count_likes($vars['entity']);
+if ($num_of_likes) {
+ // display the number of likes
+ if ($num_of_likes == 1) {
+ $likes_string = elgg_echo('likes:userlikedthis');
+ } else {
+ $likes_string = elgg_echo('likes:userslikedthis');
+ }
+ $params = array(
+ 'text' => "$num_of_likes $likes_string",
+ 'title' => elgg_echo('likes:see'),
+ 'class' => 'elgg-like-toggle',
+ );
+ $list = elgg_view('output/url', $params);
+ $list .= "";
+ $list .= list_annotations($guid, 'likes', 99);
+ $list .= "
";
+}
+
+echo $likes_button;
+echo $list;
diff --git a/views/default/core/river/controls.php b/views/default/core/river/controls.php
index e239a2adb..66fbc5059 100644
--- a/views/default/core/river/controls.php
+++ b/views/default/core/river/controls.php
@@ -9,7 +9,7 @@
$object = $vars['item']->getObjectEntity();
if (isloggedin()) {
- // comments and non-objects cannot be commented on
+ // comments and non-objects cannot be commented on or liked
if ($object->getType() == 'object' && $vars['item']->annotation_id == 0) {
$params = array(
'href' => '#',
@@ -18,6 +18,26 @@ if (isloggedin()) {
'internalid' => "elgg-toggler-{$object->getGUID()}",
);
echo elgg_view('output/url', $params);
- //echo elgg_view('forms/likes/link', array('entity' => $object));
+
+ // like this
+ if (!elgg_annotation_exists($object->getGUID(), 'likes')) {
+ $url = "action/likes/add?guid={$object->getGUID()}";
+ $params = array(
+ 'href' => $url,
+ 'text' => elgg_echo('likes:likethis'),
+ 'is_action' => true,
+ );
+ echo elgg_view('output/url', $params);
+ } else {
+ $likes = get_annotations($guid, '', '', 'likes', '', get_loggedin_userid());
+ $url = elgg_get_site_url() . "action/likes/delete?annotation_id={$likes[0]->id}";
+ $params = array(
+ 'href' => $url,
+ 'text' => elgg_echo('likes:remove'),
+ 'is_action' => true,
+ );
+ echo elgg_view('output/url', $params);
+ }
}
+
}
\ No newline at end of file
diff --git a/views/default/css/screen.php b/views/default/css/screen.php
index 3eb7e93a0..bae0404f7 100644
--- a/views/default/css/screen.php
+++ b/views/default/css/screen.php
@@ -760,6 +760,27 @@ a.elgg-widget-edit-button:hover, a.elgg-widget-delete-button:hover {
/* ***************************************
LIKES
*************************************** */
+.elgg-likes-list {
+ background-color: white;
+ border:1px solid #cccccc;
+ width: 345px;
+ height: auto;
+ position: absolute;
+ text-align: left;
+ z-index: 9999;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ -webkit-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
+ -moz-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
+}
+.elgg-river-item > .elgg-alt a {
+ font-size: 90%;
+ float: right;
+ clear: both;
+}
+
+
+
.likes-list-holder {
position: relative;
float:right;
diff --git a/views/default/forms/likes/edit.php b/views/default/forms/likes/edit.php
deleted file mode 100644
index 93c4ce983..000000000
--- a/views/default/forms/likes/edit.php
+++ /dev/null
@@ -1,57 +0,0 @@
-getGUID();
- $url = elgg_get_site_url() . "action/likes/add?guid={$guid}";
-
- //check to see if the user has already liked
- if (!elgg_annotation_exists($guid, 'likes') ) {
- $params = array(
- 'href' => $url,
- 'text' => '',
- 'title' => elgg_echo('likes:likethis'),
- 'is_action' => true,
- );
- echo elgg_view('output/url', $params);
- $likes_classname = 'elgg-icon-likes';
- $likes_titletag = "";
- } else {
- $likes_classname = 'elgg-icon-liked';
- $likes_titletag = elgg_echo('likes:remove');
- }
-
- //display the number of likes
- $numoflikes = elgg_count_likes($vars['entity']);
- if ($numoflikes != 0) {
- if ($numoflikes == 1) {
- $user_string = elgg_echo('likes:userlikedthis');
- } else {
- $user_string = elgg_echo('likes:userslikedthis');
- }
-
- $params = array(
- 'href' => $url,
- 'text' => "" . elgg_count_likes($vars['entity']) . " " . $user_string,
- 'title' => $likes_titletag,
- 'is_action' => true,
- );
- echo elgg_view('output/url', $params);
-
- //show the users who liked the object
- echo "";
- echo list_annotations($vars['entity']->getGUID(), 'likes', 99);
- echo "
";
- }
-}
-
-
-
-
-
diff --git a/views/default/js/elgg.php b/views/default/js/elgg.php
index 3e7b30a99..f7f1e942c 100644
--- a/views/default/js/elgg.php
+++ b/views/default/js/elgg.php
@@ -65,86 +65,6 @@ $(function() {
$(document).ready(function () {
- // COLLAPSABLE WIDGETS (on Dashboard? & Profile pages)
- // toggle widget box contents
- $('a.toggle_box_contents').bind('click', toggleContent);
-
- // WIDGET GALLERY EDIT PANEL
- // Sortable widgets
- var els = ['#leftcolumn_widgets', '#middlecolumn_widgets', '#rightcolumn_widgets', '#widget_picker_gallery' ];
- var $els = $(els.toString());
-
- $els.sortable({
- items: '.draggable_widget',
- handle: '.drag-handle',
- forcePlaceholderSize: true,
- placeholder: 'ui-state-highlight',
- cursor: 'move',
- revert: true,
- opacity: 0.9,
- appendTo: 'body',
- connectWith: els,
- start:function(e,ui) {
-
- },
- stop: function(e,ui) {
- // refresh list before updating hidden fields with new widget order
- $(this).sortable( "refresh" );
-
- var widgetNamesLeft = outputWidgetList('#leftcolumn_widgets');
- var widgetNamesMiddle = outputWidgetList('#middlecolumn_widgets');
- var widgetNamesRight = outputWidgetList('#rightcolumn_widgets');
-
- document.getElementById('debugField1').value = widgetNamesLeft;
- document.getElementById('debugField2').value = widgetNamesMiddle;
- document.getElementById('debugField3').value = widgetNamesRight;
- }
- });
-
- // bind more info buttons - called when new widgets are created
- widget_moreinfo();
-
- // set-up hover class for dragged widgets
- $("#rightcolumn_widgets").droppable({
- accept: ".draggable_widget",
- hoverClass: 'droppable-hover'
- });
- $("#middlecolumn_widgets").droppable({
- accept: ".draggable_widget",
- hoverClass: 'droppable-hover'
- });
- $("#leftcolumn_widgets").droppable({
- accept: ".draggable_widget",
- hoverClass: 'droppable-hover'
- });
-
- // user likes
- $(".likes-list-button").click(function(event) {
- if ($(this).next(".likes-list").css('display') == 'none') { // show list
- // hide any other currently viewable likes lists
- $('.likes-list').fadeOut();
-
- var topPosition = - $(this).next(".likes-list").height();
- topPosition10 = topPosition + 10 + "px";
- topPosition = topPosition - 5 + "px";
- $('.likes-list').css('top',topPosition10);
- $('.likes-list').css('left', -$('.likes-list').width()+110);
- $(this).next(".likes-list").animate({opacity: "toggle", top: topPosition}, 500);
-
- // set up cancel for a click outside the likes list
- $(document).click(function(event) {
- var target = $(event.target);
- if (target.parents(".likes-list-holder").length == 0) {
- $(".likes-list").fadeOut();
- }
- });
-
- } else { // hide list
- var topPosition = - $(this).next(".likes-list").height() + 5;
- $(this).next(".likes-list").animate({opacity: "toggle", top: topPosition}, 500);
- }
- });
-
elgg_system_message();
}); /* end document ready function */
@@ -170,99 +90,6 @@ function elgg_slide_toggle(activateLink, parentElement, toggleElement) {
return false;
}
-// List active widgets for each page column
-function outputWidgetList(forElement) {
- return( $("input[name='handler'], input[name='guid']", forElement ).makeDelimitedList("value") );
-}
-
-// Make delimited list
-jQuery.fn.makeDelimitedList = function(elementAttribute) {
-
- var delimitedListArray = new Array();
- var listDelimiter = "::";
-
- // Loop over each element in the stack and add the elementAttribute to the array
- this.each(function(e) {
- var listElement = $(this);
- // Add the attribute value to our values array
- delimitedListArray[delimitedListArray.length] = listElement.attr(elementAttribute);
- }
- );
-
- // Return value list by joining the array
- return(delimitedListArray.join(listDelimiter));
-}
-
-
-// Read each widgets collapsed/expanded state from cookie and apply
-function widget_state(forWidget) {
-
- var thisWidgetState = $.cookie(forWidget);
-
- if (thisWidgetState == 'collapsed') {
- forWidget = "#" + forWidget;
- $(forWidget).find("div.collapsable_box_content").hide();
- $(forWidget).find("a.toggle_box_contents").html('+');
- $(forWidget).find("a.toggle_box_edit_panel").fadeOut('medium');
- };
-}
-
-
-// Toggle widgets contents and save to a cookie
-var toggleContent = function(e) {
-var targetContent = $('div.collapsable_box_content', this.parentNode.parentNode);
- if (targetContent.css('display') == 'none') {
- targetContent.slideDown(400);
- $(this).html('-');
- $(this.parentNode).children(".toggle_box_edit_panel").fadeIn('medium');
-
- // set cookie for widget panel open-state
- var thisWidgetName = $(this.parentNode.parentNode.parentNode).attr('id');
- $.cookie(thisWidgetName, 'expanded', { expires: 365 });
-
- } else {
- targetContent.slideUp(400);
- $(this).html('+');
- $(this.parentNode).children(".toggle_box_edit_panel").fadeOut('medium');
- // make sure edit pane is closed
- $(this.parentNode.parentNode).children(".collapsable_box_editpanel").hide();
-
- // set cookie for widget panel closed-state
- var thisWidgetName = $(this.parentNode.parentNode.parentNode).attr('id');
- $.cookie(thisWidgetName, 'collapsed', { expires: 365 });
- }
- return false;
-};
-
-// More info tooltip in widget gallery edit panel
-function widget_moreinfo() {
-
- $("img.more_info").hover(function(e) {
- var widgetdescription = $("input[name='description']", this.parentNode.parentNode.parentNode ).attr('value');
- $("body").append(""+ widgetdescription +"
");
-
- if (e.pageX < 900) {
- $("#widget_moreinfo")
- .css("top",(e.pageY + 10) + "px")
- .css("left",(e.pageX + 10) + "px")
- .fadeIn("medium");
- }
- else {
- $("#widget_moreinfo")
- .css("top",(e.pageY + 10) + "px")
- .css("left",(e.pageX - 210) + "px")
- .fadeIn("medium");
- }
- },
- function() {
- $("#widget_moreinfo").remove();
- });
-
- $("img.more_info").mousemove(function(e) {
- // action on mousemove
- });
-};
-
// ELGG DROP DOWN MENU
$.fn.elgg_dropdownmenu = function(options) {
--
cgit v1.2.3