| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- (function($){
- /**
- * Helper class for the icon selector lightbox.
- *
- * @class FLIconSelector
- * @since 1.0
- */
- FLIconSelector = {
- /**
- * A reference to the lightbox HTML content that is
- * loaded via AJAX.
- *
- * @since 1.0
- * @access private
- * @property {String} _content
- */
- _content : null,
- /**
- * A reference to a FLLightbox object.
- *
- * @since 1.0
- * @access private
- * @property {FLLightbox} _lightbox
- */
- _lightbox : null,
- /**
- * A flag for whether the content has already
- * been rendered or not.
- *
- * @since 1.0
- * @access private
- * @property {Boolean} _rendered
- */
- _rendered : false,
- /**
- * The text that is used to filter the selection
- * of visible icons.
- *
- * @since 1.0
- * @access private
- * @property {String} _filterText
- */
- _filterText : '',
- /**
- * Opens the icon selector lightbox.
- *
- * @since 1.0
- * @method open
- * @param {Function} callback A callback that fires when an icon is selected.
- */
- open: function(callback)
- {
- if(!FLIconSelector._rendered) {
- FLIconSelector._render();
- }
- if(FLIconSelector._content === null) {
- FLIconSelector._lightbox.open('<div class="fl-builder-lightbox-loading"></div>');
- FLBuilder.ajax({
- action: 'render_icon_selector'
- }, FLIconSelector._getContentComplete);
- }
- else {
- FLIconSelector._lightbox.open();
- }
- FLIconSelector._lightbox.on('icon-selected', function(event, icon){
- FLIconSelector._lightbox.off('icon-selected');
- FLIconSelector._lightbox.close();
- callback(icon);
- });
- },
- /**
- * Renders a new instance of FLLightbox.
- *
- * @since 1.0
- * @access private
- * @method _render
- */
- _render: function()
- {
- FLIconSelector._lightbox = new FLLightbox({
- className: 'fl-icon-selector'
- });
- FLIconSelector._rendered = true;
- FLBuilder.addHook( 'endEditingSession', function() {
- FLIconSelector._lightbox.close()
- } );
- },
- /**
- * Callback for when the lightbox content
- * has been returned via AJAX.
- *
- * @since 1.0
- * @access private
- * @method _getContentComplete
- * @param {String} response The JSON with the HTML lightbox content.
- */
- _getContentComplete: function(response)
- {
- var data = JSON.parse(response);
- FLIconSelector._content = data.html;
- FLIconSelector._lightbox.setContent(data.html);
- $('.fl-icons-filter-select').on('change', FLIconSelector._filter);
- $('.fl-icons-filter-text').on('keyup', FLIconSelector._filter);
- $('.fl-icons-list i').on('click', FLIconSelector._select);
- $('.fl-icon-selector-cancel').on('click', $.proxy(FLIconSelector._lightbox.close, FLIconSelector._lightbox));
- },
- /**
- * Filters the selection of visible icons based on
- * the library select and search input text.
- *
- * @since 1.0
- * @access private
- * @method _filter
- */
- _filter: function()
- {
- var section = $( '.fl-icons-filter-select' ).val(),
- text = $( '.fl-icons-filter-text' ).val();
- // Filter sections.
- if ( 'all' == section ) {
- $( '.fl-icons-section' ).show();
- }
- else {
- $( '.fl-icons-section' ).hide();
- $( '.fl-' + section ).show();
- }
- // Filter icons.
- FLIconSelector._filterText = text;
- if ( '' !== text ) {
- $( '.fl-icons-list i' ).each( FLIconSelector._filterIcon );
- }
- else {
- $( '.fl-icons-list i' ).show();
- }
- },
- /**
- * Shows or hides an icon based on the filter text.
- *
- * @since 1.0
- * @access private
- * @method _filterIcon
- */
- _filterIcon: function()
- {
- var icon = $( this );
- if ( -1 == icon.attr( 'class' ).indexOf( FLIconSelector._filterText ) ) {
- icon.hide();
- }
- else {
- icon.show();
- }
- },
- /**
- * Called when an icon is selected and fires the
- * icon-selected event on the lightbox.
- *
- * @since 1.0
- * @access private
- * @method _select
- */
- _select: function()
- {
- var icon = $(this).attr('class');
- FLIconSelector._lightbox.trigger('icon-selected', icon);
- }
- };
- })(jQuery);
|