Recent Topics

1 Jul 17, 2017 17:23    

REFERENCE: https://github.com/b2evolution/b2evolution/commit/9a1fceb8dbc77f10ec25c382aa23bfb497a51b12

When including the item type 'type' => 'fileselect', the plugin breaks on file select.

@achillis wrote earlier:

inc/_core/ui/forms/_form.class.php in function file_select_delete( event_object ) and function file_select_add( fieldName, root, path )


is to wrap the square brackets with

fieldName = fieldName.replace(/([|])/g, "\\$1");


function file_select_add( fieldName, root, path )
{
// check if value is already present


fieldName = fieldName.replace(/([|])/g, "\\$1");
var inputField = jQuery( "input#" + fieldName );
var values = inputField.val().split( "'.$field_params['value_separator'].'" );


// Add new item
jQuery.ajax({
type: "GET",
url: "'.get_htsrv_url().'anon_async.php",
data: {
"action": "get_file_select_item",
"field_name": fieldName,
"root": root,
"path": path,
"params": '.json_encode( $script_params ).'
},
success: function( result )
{
result = jQuery.parseJSON( ajax_debug_clear( result) );
var fieldName = result.fieldName;
var fieldValue = result.fieldValue;
var inputField = jQuery( "input#" + fieldName );
var wrapper = jQuery( "div[name=" + fieldName + "].file_select_wrapper" );
var maxLength = wrapper.data( "maxLength" );
var overflowMode = wrapper.data( "overflowMode" );
var addButton = jQuery( "button", wrapper );
var items = jQuery( ".file_select_item:not(button)", wrapper );
var lastItem = items.last();


var newItem = jQuery( atob( result.item ) );


if( fsel_replace )
{
var item = jQuery( fsel_obj ).closest( ".file_select_item" );
newItem.insertAfter( item );
file_select_delete( item );
}
else
{
// Attach new item
// check if adding item will result to an overflow
if( items.length >= maxLength )
{ // remove extra item first depending on overflow mode
if( overflowMode == "queue" )
{
file_select_delete( items.first() );
}
else if( overflowMode == "stack" )
{
file_select_delete( items.last() );
}


items = jQuery( ".file_select_item:not(button)", wrapper );
lastItem = items.last();
}


if( lastItem.length )
{ // attachment already exists, add to the last
newItem.insertAfter( lastItem );
}
else
{ // no attachments yet
wrapper.prepend( newItem );
}
}


newItem.find( "span.remove_file_icon" ).replaceWith(\''.$remove_icon.'\'); // replace unlink icon with skin specific icon saved earlier
newItem.find( "span.edit_file_icon" ).replaceWith(\''.$edit_icon.'\'); // replace unlink icon with skin specific icon saved earlier


items = jQuery( ".file_select_item:not(button)", wrapper );
lastItem = items.last();


// Toggle add button
addButton.html( items.length === 0 ? "'./ TRANS: verb / T_('Select').'" : \''.geticon( 'new' ).' '.T('Add').'\' );
if( maxLength > items.length )
{
addButton.show();
}
else
{
addButton.hide();
}


// append field value
var values = inputField.val();
values = values ? ( inputField.val().split( "'.$field_params['value_separator'].'" ) ) : [];
values.push( fieldValue );
inputField.val( values.join( "'.$field_params['value_separator'].'" ) );


// Trigger change so bozo validator will pickup the change
inputField.trigger( "change" );


// close modal if single item select
if( maxLength == 1 )
{
closeModalWindow();
}
}
});


return false;
}


function file_select_delete( event_object )
{
var wrapper = jQuery( event_object ).closest( ".file_select_wrapper" );
var item = jQuery( event_object ).closest( ".file_select_item" );
var fieldName = wrapper.attr( "name" );
var fieldValue = item.data( "itemValue" ).toString(); // converted to string because it will later be compared to array of strings
var maxLength = wrapper.data( "maxLength" );
var addButton = jQuery( "button", wrapper );


// Remove file select item
item.remove();


var items = jQuery( ".file_select_item:not(button)", wrapper );
var lastItem = items.last();


// Toggle add button
addButton.html( items.length === 0 ? "'./ TRANS: verb / T_('Select').'" : \''.geticon( 'new' ).' '.T('Add').'\' );
if( maxLength > items.length )
{
addButton.show();
}
else
{
addButton.hide();
}


// Change input value
fieldName = fieldName.replace(/([|])/g, "\\$1");
var inputField = jQuery( "input#" + fieldName );
var values = inputField.val().split( "'.$field_params['value_separator'].'" );
var index = values.indexOf( fieldValue );
if( index != -1 )
{
values.splice( index, 1 );
}
inputField.val( values.join( "'.$field_params['value_separator'].'" ) );
inputField.trigger( "change" );


return false;
}

2 Jul 30, 2017 13:01

@achillis I confirm the issue and your solution. This information is already sent to the dev team in order to fix it.

Thank you!


Form is loading...