aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-12-29 18:16:54 +0000
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>2010-12-29 18:16:54 +0000
commit3c083f6c4ff4d354a546e03477e7a4acbb16d4a9 (patch)
tree961ad1135905070b95a51bc0c6bdbd948754b562
parent298114995174acf451cc1477fdeec34a42ef608b (diff)
downloadelgg-3c083f6c4ff4d354a546e03477e7a4acbb16d4a9.tar.gz
elgg-3c083f6c4ff4d354a546e03477e7a4acbb16d4a9.tar.bz2
rewrote the display of likes
git-svn-id: http://code.elgg.org/elgg/trunk@7748 36083f99-b078-4883-b0ff-0f9b5a30f544
-rw-r--r--actions/likes/add.php6
-rw-r--r--actions/likes/delete.php2
-rw-r--r--engine/lib/elgglib.php9
-rw-r--r--js/lib/ui.js139
-rw-r--r--languages/en.php4
-rw-r--r--views/default/annotation/likes.php76
-rw-r--r--views/default/core/likes/display.php61
-rw-r--r--views/default/core/river/controls.php24
-rw-r--r--views/default/css/screen.php21
-rw-r--r--views/default/forms/likes/edit.php57
-rw-r--r--views/default/js/elgg.php173
11 files changed, 186 insertions, 386 deletions
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 @@
<?php
/**
- * Elgg show the user who liked the object
+ * Elgg show the users who liked the object
+ *
+ * @uses $vars['annotation']
*/
-$owner = get_user($vars['annotation']->owner_guid);
+if (!isset($vars['annotation'])) {
+ return true;
+}
-?>
-<div class="elgg-likes-user clearfix">
- <div class="entity-listing-icon">
- <?php
- echo elgg_view("profile/icon", array(
- 'entity' => $owner,
- 'size' => 'tiny'
- ));
- ?>
- </div>
-
- <div class="entity-listing-info">
- <?php
- // if the user looking at the like listing can edit, show the delete link
- if ($vars['annotation']->canEdit()) {
- ?>
- <div class="entity-metadata"><span class="delete-button">
- <?php echo elgg_view("output/confirmlink",array(
- 'href' => "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')
- ));
- ?>
- </span></div>
- <?php
- } //end of can edit if statement
- ?>
- <p class="elgg-likes-owner">
- <a href="<?php echo $owner->getURL(); ?>"><?php echo $owner->name; ?></a> <?php echo elgg_echo('likes:this') .
- " <span class=\"entity-subtext\">" . elgg_view_friendly_time($vars['annotation']->time_created) . "</span>"; ?>
- </p>
- </div>
-</div> \ No newline at end of file
+ ));
+ $delete_button = "<span class=\"delete-button\">$delete_button</span>";
+}
+
+$body = <<<HTML
+<p class="mbn">
+ $delete_button
+ $user_link $likes_string
+ <span class="elgg-list-subtitle">
+ $friendlytime
+ </span>
+</p>
+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 @@
+<?php
+/**
+ * Elgg likes display
+ *
+ * @package Elgg
+ *
+ * @uses $vars['entity']
+ */
+
+if (!isset($vars['entity'])) {
+ return true;
+}
+
+$guid = $vars['entity']->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' => '<span class="elgg-icon elgg-icon-likes"></span>',
+ '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' => "<span class=\"elgg-icon elgg-icon-liked\"></span>",
+ '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 .= "<div class='elgg-likes-list hidden clearfix'>";
+ $list .= list_annotations($guid, 'likes', 99);
+ $list .= "</div>";
+}
+
+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 @@
-<?php
-/**
- * Elgg likes add form
- *
- * @package Elgg
- *
- * @uses $vars['entity']
- */
-
-if (isset($vars['entity']) && isloggedin()) {
- $guid = $vars['entity']->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' => '<span class="elgg-icon elgg-icon-likes"></span>',
- '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' => "<span class=\"elgg-icon $likes_classname\"></span>" . 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 "<div class='likes-list hidden clearfix'>";
- echo list_annotations($vars['entity']->getGUID(), 'likes', 99);
- echo "</div>";
- }
-}
-
-
-
-
-
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("<p id='widget_moreinfo'><b>"+ widgetdescription +" </b></p>");
-
- 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) {