/* @file Defines the simple modal behavior */ (function ($) { /* Add the class 'simple-dialog' to open links in a dialog You also need to specify 'rev=""' where the is the unique id of the container to load from the linked page. Any additional jquery ui dialog options can be passed through the rel tag using the format: rel=":;:;" e.g. Link NOTE: This method doesn't not bring javascript files over from the target page. You will need to make sure your javascript is either inline in the html that's being loaded, or in the head tag of the page you are on. ALSO: Make sure the jquery ui.dialog library has been added to the page */ Drupal.behaviors.simpleDialog = { attach: function (context, settings) { // Create a container div for the modal if one isn't there already if ($("#simple-dialog-container").length == 0) { // Add a container to the end of the body tag to hold the dialog $('body').append(''); try { // Attempt to invoke the simple dialog $( "#simple-dialog-container", context).dialog({ autoOpen: false, //modal: true, close: function(event, ui) { // Clear the dialog on close. Not necessary for your average use // case, butis useful if you had a video that was playing in the // dialog so that it clears when it closes $('#simple-dialog-container').html(''); } }); var defaultOptions = Drupal.simpleDialog.explodeOptions(settings.simpleDialog.defaults); $('#simple-dialog-container').dialog('option', defaultOptions); } catch (err) { // Catch any errors and report Drupal.simpleDialog.log('[error] Simple Dialog: ' + err); } } // Add support for custom classes if necessary var classes = ''; if (settings.simpleDialog.classes) { classes = ', .' + settings.simpleDialog.classes; } //$('a.simple-dialog' + classes, context).each(function(event) { $('*[id^=_x5B_]', context).each(function(event) { // sven if (!event.metaKey && !$(this).hasClass('simpleDialogProcessed')) { // Add a class to show that this link has been processed already $(this).addClass('simpleDialogProcessed'); $(this).click(function(event) { // prevent the navigation event.preventDefault(); // Set up some variables //var url = $(this).attr('href'); var url = popup; // sven // Use default title if not provided var title = $(this).attr('title') ? $(this).attr('title') : settings.simpleDialog.title; if (!title) { title = $(this).text(); } // Use defaults if not provided //var selector = $(this).attr('name') ? $(this).attr('name') : settings.simpleDialog.selector; var selector = 'pop' + this.getAttribute('id').replace(RegExp('__.*'),'_'); // sven var options = $(this).attr('rel') ? Drupal.simpleDialog.explodeOptions($(this).attr('rel')) : Drupal.simpleDialog.explodeOptions(settings.simpleDialog.defaults); if (url && title && selector) { // Set the custom options of the dialog $('#simple-dialog-container').dialog('option', options); // Set the title of the dialog //$('#simple-dialog-container').dialog('option', 'title', title); // Add a little loader into the dialog while data is loaded $('#simple-dialog-container').html('
'); // Change the height if it's set to auto if (options.height && options.height == 'auto') { $('#simple-dialog-container').dialog('option', 'height', 200); } // Use jQuery .get() to request the target page $.get(url, function(data) { // Re-apply the height if it's auto to accomodate the new content if (options.height && options.height == 'auto') { $('#simple-dialog-container').dialog('option', 'height', options.height); } // Some trickery to make sure any inline javascript gets run. // Inline javascript gets removed/moved around when passed into // $() so you have to create a fake div and add the raw data into // it then find what you need and clone it. Fun. //$('#simple-dialog-container').html( $( '
' ).html( data ).find( '#' + selector ).clone() ); clone=$('
').html(data).find('#'+selector).clone(); h1=clone.find('h1'); $('#simple-dialog-container').dialog('option','title',h1.text()); h1.remove(); $('#simple-dialog-container').html(clone); // Attach any behaviors to the loaded content Drupal.attachBehaviors($('#simple-dialog-container')); }); // Open the dialog $('#simple-dialog-container').dialog('open'); // Return false for good measure return false; } }); } }); } } // Create a namespace for our simple dialog module Drupal.simpleDialog = {}; // Convert the options to an object Drupal.simpleDialog.explodeOptions = function (opts) { var options = opts.split(';'); var explodedOptions = {}; for (var i in options) { if (options[i]) { // Parse and Clean the option var option = Drupal.simpleDialog.cleanOption(options[i].split(':')); explodedOptions[option[0]] = option[1]; } } return explodedOptions; } // Function to clean up the option. Drupal.simpleDialog.cleanOption = function(option) { // If it's a position option, we may need to parse an array if (option[0] == 'position' && option[1].match(/\[.*,.*\]/)) { option[1] = option[1].match(/\[(.*)\]/)[1].split(','); // Check if positions need be converted to int if (!isNaN(parseInt(option[1][0]))) { option[1][0] = parseInt(option[1][0]); } if (!isNaN(parseInt(option[1][1]))) { option[1][1] = parseInt(option[1][1]); } } // Convert text boolean representation to boolean if (option[1] === 'true') { option[1]= true; } else if (option[1] === 'false') { option[1] = false; } return option; } Drupal.simpleDialog.log = function(msg) { if (window.console) { window.console.log(msg); } } })(jQuery);