Skip to content

Instantly share code, notes, and snippets.

@harmenjanssen
Created August 30, 2017 14:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save harmenjanssen/6895778f4b85910ba56452abc98fdc3e to your computer and use it in GitHub Desktop.
Save harmenjanssen/6895778f4b85910ba56452abc98fdc3e to your computer and use it in GitHub Desktop.
Javascript fallback for broken default values in OctoberCMS' Repeater fields
fields:
extra_information:
type: repeater
form:
fields:
foobar:
label: Foobar
type: text
# This won't work:
default: lorem ipsum
attributes:
# Which is why we use this attribute:
data-default-value: lorem ipsum
<?php
class Plugin extends PluginBase
{
public function boot()
{
Event::listen('backend.page.beforeDisplay', function($controller, $action, $params) {
$controller->addJs('/plugins/grrr/flexiblepages/assets/javascript/repeater.js');
});
}
}
$(function() {
if (!$.fn.fieldRepeater) {
return;
}
const fixDefaultValues = $item => {
const $inputs = $item.find("[data-default-value]");
$inputs.each(function() {
const $input = $(this);
if (!$input.val()) {
$input.val($input.data("default-value"));
}
});
};
// Listen for newly added list-items
const observer = new MutationObserver(mutations => {
mutations
.filter(m => m.type === "childList")
.map(m =>
Array.from(m.addedNodes).filter(n => n.nodeType === 1).forEach(x =>
fixDefaultValues($(x));
));
});
const config = { attributes: false, childList: true, characterData: false };
observer.observe($(".field-repeater-items").get(0), config);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment