123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- /**
- * @file
- * Linkit dashboard functions
- */
- (function ($) {
- Drupal.behaviors.linkitDashboard = {
- attach: function (context, settings) {
- // Bind the insert link button.
- $('.linkit-insert', context).once('linkit-insert', function() {
- $('.linkit-insert', context).click(function(event) {
- event.preventDefault();
- // Call the insertLink() function.
- Drupal.linkit.getDialogHelper(Drupal.settings.linkit.currentInstance.helper).insertLink(Drupal.linkit.getLink());
- // Close the dialog.
- Drupal.linkit.modalClose();
- });
- });
- // Bind the close link.
- $('#linkit-cancel', context).once('linkit-cancel', function() {
- $('#linkit-cancel', context).bind('click', Drupal.linkit.modalClose);
- });
- // Run the validation if the path field is populated directly.
- $('#edit-linkit-path', context).bind('keyup paste input propertychange', function(){
- Drupal.linkit.requiredFieldsValidation();
- });
- $(".ui-dialog-titlebar").show();
- // Run required field validation.
- Drupal.linkit.requiredFieldsValidation();
- if (!Drupal.settings.linkit.currentInstance.suppressProfileChanger) {
- // Make the profile changer
- Drupal.linkit.profileChanger(context);
- }
- if (Drupal.settings.linkit.IMCEurl && !$('#linkit-imce', context).length) {
- var $imceButton = $('<input />')
- .attr({type: 'button', id: 'linkit-imce', name: 'linkit-imce'})
- .addClass('form-submit')
- .val(Drupal.t('Open file browser'))
- .insertAfter($('.form-item-linkit-search', context))
- .click(function(e) {
- e.preventDefault();
- Drupal.linkit.openFileBrowser();
- });
- }
- }
- };
- /**
- * Check for mandatory fields in the form and disable for submissions
- * if any of the fields are empty.
- */
- Drupal.linkit.requiredFieldsValidation = function() {
- var allowed = true;
- $('#linkit-modal .required').each(function() {
- if (!$(this).val()) {
- allowed = false;
- return false;
- }
- });
- if (allowed) {
- $('#linkit-modal .linkit-insert')
- .removeAttr('disabled')
- .removeClass('form-button-disabled');
- }
- else {
- $('#linkit-modal .linkit-insert')
- .attr('disabled', 'disabled')
- .addClass('form-button-disabled');
- }
- };
- /**
- * Open the IMCE file browser
- */
- Drupal.linkit.openFileBrowser = function () {
- window.open(decodeURIComponent(Drupal.settings.linkit.IMCEurl), '', 'width=760,height=560,resizable=1');
- };
- /**
- * When a file is inserted through IMCE, this function is called.
- * See IMCE api for details.
- *
- * @param file
- * The file object that was selected inside IMCE
- * @param win
- * The IMCE window object
- */
- Drupal.linkit.IMCECallback = function(file, win) {
- Drupal.linkit.populateFields({
- path: win.imce.decode(Drupal.settings.basePath +
- Drupal.settings.linkit.publicFilesDirectory + '/' + file.relpath)
- });
- win.close();
- };
- /**
- * Populate fields on the dashboard.
- *
- * @param link
- * An object with the following properties (all are optional):
- * - path: The anchor's href.
- * - attributes: An object with additional attributes for the anchor element.
- */
- Drupal.linkit.populateFields = function(link) {
- link = link || {};
- link.attributes = link.attributes || {};
- $('#linkit-modal .linkit-path-element').val(link.path);
- $.each(link.attributes, function(name, value) {
- $('#linkit-modal .linkit-attributes .linkit-attribute-' + name).val(value);
- });
- // Run required field validation.
- Drupal.linkit.requiredFieldsValidation();
- };
- /**
- * Retrieve a link object by extracting values from the form.
- *
- * @return
- * The link object.
- */
- Drupal.linkit.getLink = function() {
- var link = {
- path: $('#linkit-modal .linkit-path-element ').val(),
- attributes: {}
- };
- $.each(Drupal.linkit.additionalAttributes(), function(f, name) {
- link.attributes[name] = $('#linkit-modal .linkit-attributes .linkit-attribute-' + name).val();
- });
- return link;
- };
- /**
- * Retrieve a list of the currently available additional attributes in the
- * dashboard. The attribute "href" is excluded.
- *
- * @return
- * An array with the names of the attributes.
- */
- Drupal.linkit.additionalAttributes = function() {
- var attributes = [];
- $('#linkit-modal .linkit-attributes .linkit-attribute').each(function() {
- // Remove the 'linkit_' prefix.
- attributes.push($(this).attr('name').substr(7));
- });
- return attributes;
- };
- Drupal.linkit.profileChanger = function(context) {
- $('#linkit-profile-changer > div.form-item', context).once('linkit-change-profile', function() {
- var target = $(this);
- var toggler = $('<div id="linkit-profile-changer-toggler"></div>')
- .html(Drupal.t('Change profile'))
- .click(function() {
- target.slideToggle();
- });
- $(this).after(toggler);
- });
- $('#linkit-profile-changer .form-radio', context).each(function() {
- var id = $(this).attr('id');
- var profile = $(this).val();
- if (typeof Drupal.ajax[id] != 'undefined') {
- // @TODO: Jquery 1.5 accept success setting to be an array of functions.
- // But we have to wait for jquery to get updated in Drupal core.
- // In the meantime we have to override it.
- Drupal.ajax[id].options.success = function (response, status) {
- if (typeof response == 'string') {
- response = $.parseJSON(response);
- }
- // Update the autocomplete url.
- Drupal.settings.linkit.currentInstance.autocompletePathParsed = Drupal.settings.linkit.autocompletePath.replace('___profile___', profile);
- // Call the ajax success method.
- Drupal.ajax[id].success(response, status);
- $('#linkit-profile-changer > div.form-item').slideToggle();
- };
- }
- });
- };
- Drupal.behaviors.linkitSearch = {
- attach: function(context, settings) {
- $('.linkit-search-element').once('linkit-search', function() {
- // Create a synonym for this to reduce code confusion.
- var searchElement = $('.linkit-search-element');
- var callbacks = {
- constructURL: function(path, search) {
- return path + encodeURIComponent(search);
- },
- insertSuggestionList: function($results, $input) {
- var top = $input.position().top + $input.outerHeight() - 5;
- $results.width($input.outerWidth()).css({
- position: 'absolute',
- // High value because of other overlays like
- // wysiwyg fullscreen (TinyMCE) mode.
- zIndex: 211000,
- maxHeight: $(window).height() - (top + 20)
- })
- .hide()
- .insertAfter($input);
- },
- select: function(result) {
- if (typeof result == 'undefined') {
- return false;
- }
- // Only change the link text if it is empty.
- if (typeof result.disabled != 'undefined' && result.disabled) {
- return false;
- }
- Drupal.linkit.populateFields({
- path: result.path
- });
- // Store the result title (Used when no selection is made by the user).
- Drupal.settings.linkit.currentInstance.linkContent = result.title;
- $('.linkit-path-element', context).focus();
- }
- };
- searchElement.betterAutocomplete('init', Drupal.settings.linkit.currentInstance.autocompletePathParsed, Drupal.settings.linkit.currentInstance.autocomplete, callbacks);
- });
- }
- };
-
- })(jQuery);
|