mirrored from git://git.moodle.org/moodle.git
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDL-54700 message: added toggle contact button to user profile
- Loading branch information
1 parent
dec0cd9
commit 12d8c7b
Showing
11 changed files
with
351 additions
and
2 deletions.
There are no files selected for viewing
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
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
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
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
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
// This file is part of Moodle - http://moodle.org/ | ||
// | ||
// Moodle is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
// | ||
// Moodle is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
// | ||
// You should have received a copy of the GNU General Public License | ||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>. | ||
|
||
/** | ||
* Module to add/remove contact using ajax. | ||
* | ||
* @module message/toggle_contact_button | ||
* @class toggle_contact_button | ||
* @package message | ||
* @copyright 2016 Ryan Wyllie <ryan@moodle.com> | ||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | ||
* @since 3.2 | ||
*/ | ||
define(['jquery', 'core/ajax', 'core/templates', 'core/notification', 'core/custom_interaction_events'], | ||
function($, ajax, templates, notification, customEvents) { | ||
|
||
/** | ||
* Check the state of the element, if the current user is a contact or not. | ||
* | ||
* @method isContact | ||
* @param element jQuery object for the button | ||
* @return bool | ||
*/ | ||
var isContact = function(element) { | ||
return element.attr('data-is-contact') == '1'; | ||
}; | ||
|
||
/** | ||
* Record that the user is a contact. | ||
* | ||
* @method setContact | ||
* @param element jQuery object for the button | ||
*/ | ||
var setContact = function(element) { | ||
element.attr('data-is-contact', '1'); | ||
}; | ||
|
||
/** | ||
* Record that the user is not a contact. | ||
* | ||
* @method setNotContact | ||
* @param element jQuery object for the button | ||
*/ | ||
var setNotContact = function(element) { | ||
element.attr('data-is-contact', '0'); | ||
}; | ||
|
||
/** | ||
* Get the id for the user being viewed. | ||
* | ||
* @method getUserId | ||
* @param element jQuery object for the button | ||
* @return int | ||
*/ | ||
var getUserId = function(element) { | ||
return element.attr('data-userid'); | ||
}; | ||
|
||
/** | ||
* Check if this element is currently loading. | ||
* | ||
* @method isLoading | ||
* @param element jQuery object for the button | ||
* @return bool | ||
*/ | ||
var isLoading = function(element) { | ||
return element.hasClass('loading') || element.attr('disabled'); | ||
}; | ||
|
||
/** | ||
* Sends an ajax request to the server and handles the element state | ||
* while the request is being performed. | ||
* | ||
* @method sendRequest | ||
* @param element jQuery object for the button | ||
* @param request request hash to send | ||
* @return jQuery promise | ||
*/ | ||
var sendRequest = function(element, request) { | ||
if (isLoading(element)) { | ||
return $.Deferred(); | ||
} | ||
|
||
element.addClass('loading'); | ||
element.attr('disabled', 'disabled'); | ||
|
||
return ajax.call([request])[0] | ||
.fail(notification.exception) | ||
.always(function() { | ||
element.removeClass('loading'); | ||
element.removeAttr('disabled'); | ||
}); | ||
}; | ||
|
||
/** | ||
* Send a request to the server to add the current user as | ||
* a contact. The contents of the button are changed to the | ||
* remove contact button upon success. | ||
* | ||
* @method addContact | ||
* @param element jQuery object for the button | ||
*/ | ||
var addContact = function(element) { | ||
if (isLoading(element)) { | ||
return; | ||
} | ||
|
||
var request = { | ||
methodname: 'core_message_create_contacts', | ||
args: { | ||
userids: [getUserId(element)], | ||
} | ||
}; | ||
sendRequest(element, request).done(function() { | ||
setContact(element); | ||
templates.render('message/remove_contact_button', {}).done(function(html, js) { | ||
templates.replaceNodeContents(element, html, js); | ||
}); | ||
}); | ||
}; | ||
|
||
/** | ||
* Send a request to the server to remove the current user as | ||
* a contact. The contents of the button are changed to the | ||
* add contact button upon success. | ||
* | ||
* @method removeContact | ||
* @param element jQuery object for the button | ||
*/ | ||
var removeContact = function(element) { | ||
if (isLoading(element)) { | ||
return; | ||
} | ||
|
||
var request = { | ||
methodname: 'core_message_delete_contacts', | ||
args: { | ||
userids: [getUserId(element)], | ||
} | ||
}; | ||
|
||
sendRequest(element, request).done(function() { | ||
setNotContact(element); | ||
templates.render('message/add_contact_button', {}).done(function(html, js) { | ||
templates.replaceNodeContents(element, html, js); | ||
}); | ||
}); | ||
}; | ||
|
||
/** | ||
* Enhances the given element with a loading gif and event handles to make | ||
* ajax requests to add or remove a contact where appropriate. | ||
* | ||
* @method enhance | ||
* @param element jQuery object for the button | ||
*/ | ||
var enhance = function(element) { | ||
element = $(element); | ||
|
||
if (!element.children('.loading-icon').length) { | ||
// Add the loading gif if it isn't already there. | ||
templates.render('core/loading', {}).done(function(html, js) { | ||
element.append(html, js); | ||
}); | ||
} | ||
|
||
customEvents.define(element, [customEvents.events.activate]); | ||
|
||
element.on(customEvents.events.activate, function(e, data) { | ||
if (isContact(element)) { | ||
removeContact(element); | ||
} else { | ||
addContact(element); | ||
} | ||
e.preventDefault(); | ||
data.originalEvent.preventDefault(); | ||
}); | ||
}; | ||
|
||
return /** @alias module:message/toggle_contact_button */ { | ||
enhance: enhance | ||
}; | ||
}); |
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
{{! | ||
This file is part of Moodle - http://moodle.org/ | ||
Moodle is free software: you can redistribute it and/or modify | ||
it under the terms of the GNU General Public License as published by | ||
the Free Software Foundation, either version 3 of the License, or | ||
(at your option) any later version. | ||
Moodle is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
GNU General Public License for more details. | ||
You should have received a copy of the GNU General Public License | ||
along with Moodle. If not, see <http://www.gnu.org/licenses/>. | ||
}} | ||
{{! | ||
@template core/add_contact_button | ||
Template for the contents of the add contact button on the user's profile page. | ||
Context variables required for this template: | ||
* | ||
}} | ||
<span> | ||
{{#pix}} t/addcontact, core {{/pix}} | ||
<span class="header-button-title">{{#str}} addtoyourcontacts, message {{/str}}</span> | ||
</span> | ||
{{> core/loading }} |
Oops, something went wrong.