From b1067cd328c10c6697408d490f742fbfc9c36b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=B3na=20Lore?= <lonalore@freemail.hu> Date: Thu, 2 Feb 2017 20:59:51 +0100 Subject: [PATCH] Possible fix for issue #2351. --- e107_handlers/form_handler.php | 6 ++--- e107_web/js/core/admin.jquery.js | 40 +++++++++++++++++++++++++++----- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php index 2cb7917f9..a588d724b 100644 --- a/e107_handlers/form_handler.php +++ b/e107_handlers/form_handler.php @@ -3871,8 +3871,8 @@ class e_form $jsonArray[$k] = str_replace("'", "`", $v); } } - $source = str_replace('"',"'",json_encode($jsonArray, JSON_FORCE_OBJECT)); // SecretR - force object, fix number of bugs - + + $source = e107::getParser()->toJSON($jsonArray); $mode = preg_replace('/[^\w]/', '', vartrue($_GET['mode'], '')); @@ -3892,7 +3892,7 @@ class e_form unset( $options['title']); $text = "<a class='e-tip e-editable editable-click ".$class."' data-name='".$dbField."' "; - $text .= (is_array($array)) ? "data-source=\"".$source."\" " : ""; + $text .= (is_array($array)) ? "data-source='".$source."' " : ""; $text .= " title=\"".$title."\" data-type='".$type."' data-inputclass='x-editable-".$this->name2id($dbField)." ".$class."' data-value=\"{$curVal}\" href='#' "; if(!empty($options)) diff --git a/e107_web/js/core/admin.jquery.js b/e107_web/js/core/admin.jquery.js index d9f8b2b21..2b786f65d 100644 --- a/e107_web/js/core/admin.jquery.js +++ b/e107_web/js/core/admin.jquery.js @@ -173,12 +173,40 @@ $(document).ready(function() $("#uiModal").draggable({ handle: ".modal-header" - }); - - - $('div.e-container').editable({ - selector: '.e-editable' - }); + }); + + + $('div.e-container').editable({ + selector: '.e-editable', + display: function (value, sourceData) + { + // HTML entities decoding... fix for: + // @see https://github.com/e107inc/e107/issues/2351 + $.each(sourceData, function (index, element) + { + element.text = $("<div/>").html(element.text).text(); + sourceData[index] = element; + }); + + // Display checklist as comma-separated values. + var html = []; + var checked = $.fn.editableutils.itemsByValue(value, sourceData); + + if(checked.length) + { + $.each(checked, function (i, v) + { + html.push($.fn.editableutils.escape(v.text)); + }); + + $(this).html(html.join(', ')); + } + else + { + $(this).empty(); + } + } + }); // $('.e-editable').editable();