Index: masonry/masonry.js =================================================================== --- masonry/masonry.js (revision 53) +++ masonry/masonry.js (working copy) @@ -2,7 +2,6 @@ * @file * Masonry script. */ - (function($) { Drupal.behaviors.masonry = { @@ -24,37 +23,50 @@ } else if (settings.column_width_units == '%') { $options.columnWidth = function (containerWidth) { - return containerWidth * (settings.column_width / 100); - }; - } - } - $options.gutterWidth = settings.gutter_width; - $options.isResizable = settings.resizable; - if (settings.resizable) { - $options.isAnimated = settings.animated; - if (settings.animated) { - $options.animationOptions = { - queue: false, - duration: settings.animation_duration - }; - } - } - $options.isFitWidth = settings.fit_width; - $options.isRTL = settings.rtl; - - // Apply Masonry to container - if (settings.images_first) { - $container.imagesLoaded(function () { - $container.masonry($options); - }); - } - else { - $container.masonry($options); - } - }); - - } -}; - -})(jQuery); - + return containerWidth * (settings.column_width / 100); + }; + } + else { + $options.columnWidth = settings.column_width; + } + } + if (settings.stamp) { + $options.stamp = settings.stamp; + } + $options.gutter = settings.gutter_width; + $options.isResizeBound = settings.resizable; + $options.isFitWidth = settings.fit_width; + if (settings.rtl) { + $options.isOriginLeft = false; + } + if (settings.animated) { + $options.transitionDuration = settings.animation_duration + 'ms'; + } + else { + $options.transitionDuration = 0; + } + + + // Apply Masonry to container + if (settings.images_first) { + $container.imagesLoaded(function () { + if ($container.hasClass('masonry-processed')) { + $container.masonry('reloadItems').masonry('layout'); + } + else { + $container.once('masonry').masonry($options); + } + }); + } + else { + if ($container.hasClass('masonry-processed')) { + $container.masonry('reloadItems').masonry('layout'); + } + else { + $container.once('masonry').masonry($options); + } + } + }); + } + }; + })(jQuery); Index: masonry/masonry.module =================================================================== --- masonry/masonry.module (revision 53) +++ masonry/masonry.module (working copy) @@ -9,34 +9,53 @@ */ function masonry_libraries_info() { $libraries['masonry'] = array( - 'name' => 'jQuery Masonry', + 'name' => 'Masonry', 'vendor url' => 'http://masonry.desandro.com/', 'download url' => 'http://masonry.desandro.com/', 'version arguments' => array( - 'file' => 'jquery.masonry.min.js', - // 2.x: jQuery Masonry v2.1.05 - 'pattern' => '/jQuery\s+Masonry\s+v?([0-9\.]+)/', + 'file' => 'masonry.pkgd.min.js', + // 3.x: Masonry v3.1.1 + 'pattern' => '/Masonry\s+PACKAGED\s+v?([0-9\.]+)/', 'lines' => 2, 'cols' => 30, ), 'files' => array( 'js' => array( - 'jquery.masonry.min.js', + 'masonry.pkgd.min.js', ), ), ); + $libraries['imagesloaded'] = array( + 'name' => 'Images Loaded', + 'vendor url' => 'http://desandro.github.io/imagesloaded', + 'download url' => 'http://desandro.github.io/imagesloaded/imagesloaded.pkgd.min.js', + 'version arguments' => array( + 'file' => 'imagesloaded.pkgd.min.js', + // 3.x: imagesLoaded v3.0.4 + 'pattern' => '/imagesLoaded\s+PACKAGED\s+v?([0-9\.]+)/', + 'lines' => 2, + 'cols' => 30, + ), + 'files' => array( + 'js' => array( + 'imagesloaded.pkgd.min.js', + ), + ), + ); return $libraries; } /** - * Check if the Masonry library is installed. + * Check if the Masonry and imagesLoaded libraries are installed. * * @return * A boolean indicating the installed status. */ function masonry_installed() { - if (($library = libraries_detect('masonry')) && !empty($library['installed'])) { + $masonry = libraries_detect('masonry'); + $imagesloaded = libraries_detect('imagesloaded'); + if ((!empty($masonry['installed'])) && (!empty($imagesloaded['installed']))) { return TRUE; } else { @@ -45,13 +64,15 @@ } /** - * Check if the Masonry library has been loaded. + * Check if the Masonry and imagesLoaded libraries have been loaded. * * @return * A boolean indicating the loaded status. */ function masonry_loaded() { - if (($library = libraries_load('masonry')) && !empty($library['loaded'])) { + $masonry = libraries_load('masonry'); + $imagesloaded = libraries_load('imagesloaded'); + if ((!empty($masonry['loaded'])) && (!empty($imagesloaded['loaded']))) { return TRUE; } else { @@ -90,6 +111,7 @@ 'masonry_fit_width' => 0, 'masonry_rtl' => 0, 'masonry_images_first' => 1, + 'masonry_stamp_selector' => '' ); // Allow other modules to alter the default options @@ -110,10 +132,8 @@ $form['masonry_column_width'] = array( '#type' => 'textfield', '#title' => t('Column width'), - '#description' => t("The width of each column."), + '#description' => t("The width of each column, enter pixels, percentage, or string of css selector"), '#default_value' => $default_values['masonry_column_width'], - '#size' => 5, - '#maxlength' => 4, ); $form['masonry_column_width_units'] = array( '#type' => 'radios', @@ -122,6 +142,7 @@ '#options' => array( 'px' => t("Pixels"), '%' => t("Percentage (of container's width)"), + 'css' => t("CSS selector (you must configure your css to set widths for .masonry-item)"), ), '#default_value' => $default_values['masonry_column_width_units'], ); @@ -134,6 +155,12 @@ '#maxlength' => 3, '#field_suffix' => t('px'), ); + $form['masonry_stamp_selector'] = array( + '#type' => 'textfield', + '#title' => t('Stamp Selector'), + '#description' => t("Specifies which elements are stamped within the layout using css selector"), + '#default_value' => $default_values['masonry_stamp_selector'] + ); $form['masonry_resizable'] = array( '#type' => 'checkbox', '#title' => t('Resizable'), @@ -226,7 +253,7 @@ 'masonry' => array( $container => array( 'item_selector' => $options['masonry_item_selector'], - 'column_width' => (int) $options['masonry_column_width'], + 'column_width' => $options['masonry_column_width'], 'column_width_units' => $options['masonry_column_width_units'], 'gutter_width' => (int) $options['masonry_gutter_width'], 'resizable' => (bool) $options['masonry_resizable'], @@ -235,6 +262,7 @@ 'fit_width' => (bool) $options['masonry_fit_width'], 'rtl' => (bool) $options['masonry_rtl'], 'images_first' => (bool) $options['masonry_images_first'], + 'stamp' => $options['masonry_stamp_selector'] ), ), ); @@ -252,4 +280,3 @@ drupal_add_js($script_file); } } - Index: masonry/masonry.install =================================================================== --- masonry/masonry.install (revision 53) +++ masonry/masonry.install (working copy) @@ -12,20 +12,34 @@ $t = get_t(); if ($phase == 'runtime') { - $library = libraries_detect('masonry'); - + $masonry = libraries_detect('masonry'); $requirements['masonry'] = array( 'title' => $t('jQuery Masonry'), ); - if ($library['installed']) { - $requirements['masonry']['value'] = $library['version']; + if ($masonry['installed']) { + $requirements['masonry']['value'] = $masonry['version']; $requirements['masonry']['severity'] = REQUIREMENT_OK; } else { - $requirements['masonry']['value'] = $library['error']; - $requirements['masonry']['description'] = $library['error message']; + $requirements['masonry']['value'] = $masonry['error']; + $requirements['masonry']['description'] = $masonry['error message']; $requirements['masonry']['severity'] = REQUIREMENT_ERROR; } + + $imagesloaded = libraries_detect('imagesloaded'); + $requirements['imagesloaded'] = array( + 'title' => $t('jQuery Images Loaded'); + ); + if ($imagesloaded['installed']) { + $requirements['imagesloaded']['value'] = $imagesloaded['version']; + $requirements['imagesloaded']['severity'] = REQUIREMENT_OK; + } + else { + $requirements['imagesloaded']['value'] = $imagesloaded['error']; + $requirements['imagesloaded']['description'] = $imagesloaded['error message']; + $requirements['imagesloaded']['severity'] = REQUIREMENT_ERROR; + } + } return $requirements;