Clear out obsolete templates / js from pre-telepath streamfield

pull/6931/head
Matt Westcott 2021-02-03 12:23:32 +00:00
rodzic 599365752f
commit 0e96693fde
15 zmienionych plików z 0 dodań i 866 usunięć

Wyświetl plik

@ -1,60 +0,0 @@
import $ from 'jquery';
// eslint-disable-next-line func-names
window.ListBlock = function (opts) {
/* contents of 'opts':
definitionPrefix (required)
childInitializer (optional) - JS initializer function for each child
*/
const listMemberTemplate = $('#' + opts.definitionPrefix + '-newmember').text();
// eslint-disable-next-line func-names
return function (elementPrefix) {
// eslint-disable-next-line no-undef, new-cap
const sequence = Sequence({
prefix: elementPrefix,
maxNumChildBlocks: Infinity,
onInitializeMember(sequenceMember) {
/* initialize child block's JS behaviour */
if (opts.childInitializer) {
opts.childInitializer(sequenceMember.prefix + '-value');
}
/* initialise delete button */
$('#' + sequenceMember.prefix + '-delete').on('click', () => {
sequenceMember.delete();
});
/* initialise move up/down buttons */
$('#' + sequenceMember.prefix + '-moveup').on('click', () => {
sequenceMember.moveUp();
});
$('#' + sequenceMember.prefix + '-movedown').on('click', () => {
sequenceMember.moveDown();
});
},
onEnableMoveUp(sequenceMember) {
$('#' + sequenceMember.prefix + '-moveup').removeClass('disabled');
},
onDisableMoveUp(sequenceMember) {
$('#' + sequenceMember.prefix + '-moveup').addClass('disabled');
},
onEnableMoveDown(sequenceMember) {
$('#' + sequenceMember.prefix + '-movedown').removeClass('disabled');
},
onDisableMoveDown(sequenceMember) {
$('#' + sequenceMember.prefix + '-movedown').addClass('disabled');
}
});
/* initialize 'add' button */
$('#' + elementPrefix + '-add').on('click', () => {
sequence.insertMemberAtEnd(listMemberTemplate);
});
};
};

Wyświetl plik

@ -1,387 +0,0 @@
/*
Operations on a sequence of items, common to both ListBlock and StreamBlock.
These assume the presence of a container element named "{prefix}-container" for each list item, and
certain hidden fields such as "{prefix}-deleted" as defined in sequence_member.html, but make no assumptions
about layout or visible controls within the block.
For example, they don't assume the presence of a 'delete' button - it's up to the specific subclass
(list.js / stream.js) to attach this to the SequenceMember.delete method.
CODE FOR SETTING UP SPECIFIC UI WIDGETS, SUCH AS DELETE BUTTONS OR MENUS, DOES NOT BELONG HERE.
*/
import $ from 'jquery';
// eslint-disable-next-line func-names
window.SequenceMember = function (sequence, prefix) {
const self = {};
self.prefix = prefix;
self.container = $('#' + self.prefix + '-container');
const indexField = $('#' + self.prefix + '-order');
// eslint-disable-next-line func-names
self.delete = function () {
sequence.deleteMember(self);
};
// eslint-disable-next-line func-names
self.prependMember = function (template) {
sequence.insertMemberBefore(self, template);
};
// eslint-disable-next-line func-names
self.appendMember = function (template) {
sequence.insertMemberAfter(self, template);
};
// eslint-disable-next-line func-names
self.moveUp = function () {
sequence.moveMemberUp(self);
};
// eslint-disable-next-line func-names
self.moveDown = function () {
sequence.moveMemberDown(self);
};
// eslint-disable-next-line func-names
self.markDeleted = function () {
/* set this list member's hidden 'deleted' flag to true */
$('#' + self.prefix + '-deleted').val('1');
/* hide the list item */
self.container.slideUp().dequeue().fadeOut();
};
// eslint-disable-next-line func-names
self.markAdded = function () {
self.container.hide();
self.container.slideDown();
// focus first suitable input found
setTimeout(() => {
const $input = $('.input', self.container);
const $firstField = $('input, textarea, [data-hallo-editor], [data-draftail-input]', $input).first();
if ($firstField.is('[data-draftail-input]')) {
$firstField.get(0).draftailEditor.focus();
} else {
$firstField.trigger('focus');
}
}, 250);
};
// eslint-disable-next-line func-names
self.getIndex = function () {
return parseInt(indexField.val(), 10);
};
// eslint-disable-next-line func-names
self.setIndex = function (i) {
indexField.val(i);
};
return self;
};
// eslint-disable-next-line func-names
window.Sequence = function (opts) {
const self = {};
const list = $('#' + opts.prefix + '-list');
const countField = $('#' + opts.prefix + '-count');
/* NB countField includes deleted items; for the count of non-deleted items, use members.length */
const members = [];
// eslint-disable-next-line func-names
self.getCount = function () {
return parseInt(countField.val(), 10);
};
function getNewMemberPrefix() {
/* Update the counter and use it to create a prefix for the new list member */
const newIndex = self.getCount();
countField.val(newIndex + 1);
return opts.prefix + '-' + newIndex;
}
function postInsertMember(newMember) {
/* run any supplied initializer functions */
if (opts.onInitializeMember) {
opts.onInitializeMember(newMember);
}
const index = newMember.getIndex();
if (index === 0) {
/* first item should have 'move up' disabled */
if (opts.onDisableMoveUp) opts.onDisableMoveUp(newMember);
} else {
if (opts.onEnableMoveUp) opts.onEnableMoveUp(newMember);
}
if (index === (members.length - 1)) {
/* last item should have 'move down' disabled */
if (opts.onDisableMoveDown) opts.onDisableMoveDown(newMember);
} else {
if (opts.onEnableMoveDown) opts.onEnableMoveDown(newMember);
}
newMember.markAdded();
if (members.length >= opts.maxNumChildBlocks && opts.onDisableAdd) {
/* maximum block capacity has been reached */
opts.onDisableAdd(members);
}
}
function elementFromTemplate(template, newPrefix) {
/* generate a jquery object ready to be inserted into the list, based on the passed HTML template string.
'__PREFIX__' will be substituted with newPrefix, and script tags escaped as <-/script> will be un-escaped */
return $(template.replace(/__PREFIX__/g, newPrefix).replace(/<-(-*)\/script>/g, '<$1/script>'));
}
// eslint-disable-next-line func-names
self.insertMemberBefore = function (otherMember, template) {
const newMemberPrefix = getNewMemberPrefix();
/* Create the new list member element with the real prefix substituted in */
const elem = elementFromTemplate(template, newMemberPrefix);
otherMember.container.before(elem);
// eslint-disable-next-line no-undef, new-cap
const newMember = SequenceMember(self, newMemberPrefix);
const index = otherMember.getIndex();
/* bump up index of otherMember and subsequent members */
for (let i = index; i < members.length; i++) {
members[i].setIndex(i + 1);
}
members.splice(index, 0, newMember);
newMember.setIndex(index);
postInsertMember(newMember);
if (index === 0 && opts.onEnableMoveUp) {
/* other member can now move up */
opts.onEnableMoveUp(otherMember);
}
return newMember;
};
// eslint-disable-next-line func-names
self.insertMemberAfter = function (otherMember, template) {
const newMemberPrefix = getNewMemberPrefix();
/* Create the new list member element with the real prefix substituted in */
const elem = elementFromTemplate(template, newMemberPrefix);
otherMember.container.after(elem);
// eslint-disable-next-line no-undef, new-cap
const newMember = SequenceMember(self, newMemberPrefix);
const index = otherMember.getIndex() + 1;
/* bump up index of subsequent members */
for (let i = index; i < members.length; i++) {
members[i].setIndex(i + 1);
}
members.splice(index, 0, newMember);
newMember.setIndex(index);
postInsertMember(newMember);
if (index === (members.length - 1) && opts.onEnableMoveDown) {
/* other member can now move down */
opts.onEnableMoveDown(otherMember);
}
return newMember;
};
// eslint-disable-next-line func-names
self.insertMemberAtStart = function (template) {
/* NB we can't just do
self.insertMemberBefore(members[0], template)
because that won't work for initially empty lists
*/
const newMemberPrefix = getNewMemberPrefix();
/* Create the new list member element with the real prefix substituted in */
const elem = elementFromTemplate(template, newMemberPrefix);
list.prepend(elem);
// eslint-disable-next-line no-undef, new-cap
const newMember = SequenceMember(self, newMemberPrefix);
/* bump up index of all other members */
for (let i = 0; i < members.length; i++) {
members[i].setIndex(i + 1);
}
members.unshift(newMember);
newMember.setIndex(0);
postInsertMember(newMember);
if (members.length > 1 && opts.onEnableMoveUp) {
/* previous first member can now move up */
opts.onEnableMoveUp(members[1]);
}
return newMember;
};
// eslint-disable-next-line func-names
self.insertMemberAtEnd = function (template) {
const newMemberPrefix = getNewMemberPrefix();
/* Create the new list member element with the real prefix substituted in */
const elem = elementFromTemplate(template, newMemberPrefix);
list.append(elem);
// eslint-disable-next-line no-undef, new-cap
const newMember = SequenceMember(self, newMemberPrefix);
newMember.setIndex(members.length);
members.push(newMember);
postInsertMember(newMember);
if (members.length > 1 && opts.onEnableMoveDown) {
/* previous last member can now move down */
opts.onEnableMoveDown(members[members.length - 2]);
}
return newMember;
};
// eslint-disable-next-line func-names
self.deleteMember = function (member) {
const index = member.getIndex();
/* reduce index numbers of subsequent members */
for (let i = index + 1; i < members.length; i++) {
members[i].setIndex(i - 1);
}
/* remove from the 'members' list */
members.splice(index, 1);
member.markDeleted();
if (index === 0 && members.length > 0 && opts.onDisableMoveUp) {
/* deleting the first member; the new first member cannot move up now */
opts.onDisableMoveUp(members[0]);
}
if (index === members.length && members.length > 0 && opts.onDisableMoveDown) {
/* deleting the last member; the new last member cannot move down now */
opts.onDisableMoveDown(members[members.length - 1]);
}
if (members.length + 1 >= opts.maxNumChildBlocks && members.length < opts.maxNumChildBlocks && opts.onEnableAdd) {
/* there is now capacity left for another block */
opts.onEnableAdd(members);
}
};
// eslint-disable-next-line func-names
self.moveMemberUp = function (member) {
const oldIndex = member.getIndex();
if (oldIndex > 0) {
const newIndex = oldIndex - 1;
const swappedMember = members[newIndex];
members[newIndex] = member;
member.setIndex(newIndex);
members[oldIndex] = swappedMember;
swappedMember.setIndex(oldIndex);
member.container.insertBefore(swappedMember.container);
if (newIndex === 0) {
/*
member is now the first member and cannot move up further;
swappedMember is no longer the first member, and CAN move up
*/
if (opts.onDisableMoveUp) opts.onDisableMoveUp(member);
if (opts.onEnableMoveUp) opts.onEnableMoveUp(swappedMember);
}
if (oldIndex === (members.length - 1)) {
/*
member was previously the last member, and can now move down;
swappedMember is now the last member, and cannot move down
*/
if (opts.onEnableMoveDown) opts.onEnableMoveDown(member);
if (opts.onDisableMoveDown) opts.onDisableMoveDown(swappedMember);
}
}
};
// eslint-disable-next-line func-names
self.moveMemberDown = function (member) {
const oldIndex = member.getIndex();
if (oldIndex < (members.length - 1)) {
const newIndex = oldIndex + 1;
const swappedMember = members[newIndex];
members[newIndex] = member;
member.setIndex(newIndex);
members[oldIndex] = swappedMember;
swappedMember.setIndex(oldIndex);
member.container.insertAfter(swappedMember.container);
if (newIndex === (members.length - 1)) {
/*
member is now the last member and cannot move down further;
swappedMember is no longer the last member, and CAN move down
*/
if (opts.onDisableMoveDown) opts.onDisableMoveDown(member);
if (opts.onEnableMoveDown) opts.onEnableMoveDown(swappedMember);
}
if (oldIndex === 0) {
/*
member was previously the first member, and can now move up;
swappedMember is now the first member, and cannot move up
*/
if (opts.onEnableMoveUp) opts.onEnableMoveUp(member);
if (opts.onDisableMoveUp) opts.onDisableMoveUp(swappedMember);
}
}
};
/* initialize initial list members */
const count = self.getCount();
for (let i = 0; i < count; i++) {
const memberPrefix = opts.prefix + '-' + i;
// eslint-disable-next-line no-undef, new-cap
const sequenceMember = SequenceMember(self, memberPrefix);
members[i] = sequenceMember;
if (opts.onInitializeMember) {
opts.onInitializeMember(sequenceMember);
}
if (i === 0) {
/* first item should have 'move up' disabled */
if (opts.onDisableMoveUp) opts.onDisableMoveUp(sequenceMember);
} else {
if (opts.onEnableMoveUp) opts.onEnableMoveUp(sequenceMember);
}
if (i === (count - 1)) {
/* last item should have 'move down' disabled */
if (opts.onDisableMoveDown) opts.onDisableMoveDown(sequenceMember);
} else {
if (opts.onEnableMoveDown) opts.onEnableMoveDown(sequenceMember);
}
}
if (members.length >= opts.maxNumChildBlocks && opts.onDisableAdd) {
/* block capacity is already reached on initialization */
opts.onDisableAdd(members);
}
return self;
};

Wyświetl plik

@ -1,179 +0,0 @@
import $ from 'jquery';
// eslint-disable-next-line func-names
const StreamBlockMenu = function (opts) {
/*
Helper object to handle the menu of available block types.
Options:
childBlocks: list of block definitions (same as passed to StreamBlock)
id: ID of the container element (the one around 'c-sf-add-panel')
onChooseBlock: callback fired when a block type is chosen -
the corresponding childBlock is passed as a parameter
*/
const self = {};
self.container = $('#' + opts.id);
self.openCloseButton = $('#' + opts.id + '-openclose');
if (self.container.hasClass('stream-menu-closed')) {
self.container.hide();
}
// eslint-disable-next-line func-names
self.show = function () {
self.container.slideDown();
self.container.removeClass('stream-menu-closed');
self.container.attr('aria-hidden', 'false');
self.openCloseButton.addClass('c-sf-add-button--close');
};
// eslint-disable-next-line func-names
self.hide = function () {
self.container.slideUp();
self.container.addClass('stream-menu-closed');
self.container.attr('aria-hidden', 'true');
self.openCloseButton.removeClass('c-sf-add-button--close');
};
// eslint-disable-next-line func-names
self.addFirstBlock = function () {
if (opts.onChooseBlock) opts.onChooseBlock(opts.childBlocks[0]);
};
// eslint-disable-next-line func-names
self.toggle = function () {
if (self.container.hasClass('stream-menu-closed')) {
if (opts.childBlocks.length === 1) {
/* If there's only one block type, add it automatically */
self.addFirstBlock();
} else {
self.show();
}
} else {
self.hide();
}
};
/* set up show/hide on click behaviour */
self.openCloseButton.on('click', (e) => {
e.preventDefault();
self.toggle();
});
/* set up button behaviour */
$.each(opts.childBlocks, (i, childBlock) => {
const button = self.container.find('.action-add-block-' + childBlock.name);
button.on('click', () => {
if (opts.onChooseBlock) opts.onChooseBlock(childBlock);
self.hide();
});
});
return self;
};
// eslint-disable-next-line func-names
window.StreamBlock = function (opts) {
/* Fetch the HTML template strings to be used when adding a new block of each type.
Also reorganise the opts.childBlocks list into a lookup by name
*/
const listMemberTemplates = {};
const childBlocksByName = {};
for (let i = 0; i < opts.childBlocks.length; i++) {
const childBlock = opts.childBlocks[i];
childBlocksByName[childBlock.name] = childBlock;
const template = $('#' + opts.definitionPrefix + '-newmember-' + childBlock.name).text();
listMemberTemplates[childBlock.name] = template;
}
// eslint-disable-next-line func-names
return function (elementPrefix) {
// eslint-disable-next-line no-undef, new-cap
const sequence = Sequence({
prefix: elementPrefix,
maxNumChildBlocks: opts.maxNumChildBlocks,
onInitializeMember(sequenceMember) {
/* initialize child block's JS behaviour */
const blockTypeName = $('#' + sequenceMember.prefix + '-type').val();
const blockOpts = childBlocksByName[blockTypeName];
if (blockOpts.initializer) {
/* the child block's own elements have the prefix '{list member prefix}-value' */
blockOpts.initializer(sequenceMember.prefix + '-value');
}
/* initialize delete button */
$('#' + sequenceMember.prefix + '-delete').on('click', () => {
sequenceMember.delete();
});
/* initialise move up/down buttons */
$('#' + sequenceMember.prefix + '-moveup').on('click', () => {
sequenceMember.moveUp();
});
$('#' + sequenceMember.prefix + '-movedown').on('click', () => {
sequenceMember.moveDown();
});
/* Set up the 'append a block' menu that appears after the block */
// eslint-disable-next-line new-cap
StreamBlockMenu({
childBlocks: opts.childBlocks,
id: sequenceMember.prefix + '-appendmenu',
onChooseBlock(childBlock) {
const template = listMemberTemplates[childBlock.name];
sequenceMember.appendMember(template);
}
});
},
onEnableMoveUp(sequenceMember) {
$('#' + sequenceMember.prefix + '-moveup').removeClass('disabled');
},
onDisableMoveUp(sequenceMember) {
$('#' + sequenceMember.prefix + '-moveup').addClass('disabled');
},
onEnableMoveDown(sequenceMember) {
$('#' + sequenceMember.prefix + '-movedown').removeClass('disabled');
},
onDisableMoveDown(sequenceMember) {
$('#' + sequenceMember.prefix + '-movedown').addClass('disabled');
},
onDisableAdd(members) {
for (let i = 0; i < members.length; i++) {
$('#' + members[i].prefix + '-appendmenu-openclose')
.removeClass('c-sf-add-button--visible').delay(300)
.slideUp();
}
$('#' + elementPrefix + '-prependmenu-openclose')
.removeClass('c-sf-add-button--visible').delay(300)
.slideUp();
},
onEnableAdd(members) {
for (let i = 0; i < members.length; i++) {
$('#' + members[i].prefix + '-appendmenu-openclose')
.addClass('c-sf-add-button--visible').delay(300)
.slideDown();
}
$('#' + elementPrefix + '-prependmenu-openclose')
.addClass('c-sf-add-button--visible').delay(300)
.slideDown();
}
});
/* Set up the 'prepend a block' menu that appears above the first block in the sequence */
// eslint-disable-next-line new-cap
StreamBlockMenu({
childBlocks: opts.childBlocks,
id: elementPrefix + '-prependmenu',
onChooseBlock(childBlock) {
const template = listMemberTemplates[childBlock.name];
sequence.insertMemberAtStart(template);
}
});
};
};

Wyświetl plik

@ -1,12 +0,0 @@
// eslint-disable-next-line func-names
window.StructBlock = function (childInitializersByName) {
// eslint-disable-next-line func-names
return function (prefix) {
// eslint-disable-next-line no-restricted-syntax, guard-for-in
for (const childName in childInitializersByName) {
const childInitializer = childInitializersByName[childName];
const childPrefix = prefix + '-' + childName;
childInitializer(childPrefix);
}
};
};

Wyświetl plik

@ -26,10 +26,6 @@ const exposedDependencies = {
module.exports = function exports() {
const entrypoints = {
'admin': [
'blocks/list',
'blocks/sequence',
'blocks/stream',
'blocks/struct',
'core',
'date-time-chooser',
'draftail',

Wyświetl plik

@ -1,22 +0,0 @@
{% load wagtailadmin_tags %}
<div class="field {{ field|fieldtype }} widget-{{ field|widgettype }}{% if name %} fieldname-{{ name }}{% endif %}{% if classes %} {{ classes }}{% endif %}{% if errors %} error{% endif %}">
<div class="field-content">
<div class="input">
{{ widget }}
{# This span only used on rare occasions by certain types of input #}
<span></span>
</div>
{% if field.help_text %}
<p class="help">{{ field.help_text }}</p>
{% endif %}
{% if errors %}
<p class="error-message">
{% for error in errors %}
<span>{{ error|escape }}</span>
{% endfor %}
</p>
{% endif %}
</div>
</div>

Wyświetl plik

@ -1,6 +0,0 @@
{% extends "wagtailadmin/block_forms/sequence.html" %}
{% load i18n %}
{% block footer %}
<button type="button" title="Add" id="{{ prefix }}-add" class="c-sf-add-button c-sf-add-button--visible"><i aria-hidden="true">+</i></button>
{% endblock %}

Wyświetl plik

@ -1,14 +0,0 @@
{% extends "wagtailadmin/block_forms/sequence_member.html" %}
{% load i18n %}
{% block header_controls %}
<button type="button" id="{{ prefix }}-moveup" class="c-sf-block__actions__single" title="{% trans 'Move up' %}">
<i class="icon icon-arrow-up" aria-hidden="true"></i>
</button>
<button type="button" id="{{ prefix }}-movedown" class="c-sf-block__actions__single" title="{% trans 'Move down' %}">
<i class="icon icon-arrow-down" aria-hidden="true"></i>
</button>
<button type="button" id="{{ prefix }}-delete" class="c-sf-block__actions__single" title="{% trans 'Delete' %}">
<i class="icon icon-bin" aria-hidden="true"></i>
</button>
{% endblock %}

Wyświetl plik

@ -1,44 +0,0 @@
{% comment %}
A 'sequence' is a generalised structure that implements a collection of blocks that can be
ordered, added and deleted.
It provides the overall HTML structure, and the logic for updating hidden fields to reflect
changes to the sequence, but NOT the UI controls for performing those changes: that is the
responsibility of specific subtypes of 'sequence', such as list and stream.
DO NOT PUT UI CONTROLS HERE, OR ANYTHING ELSE THAT ASSUMES A SPECIFIC VISUAL RENDERING OF THE LIST.
(That belongs in templates that extend this one, such as list.html and stream.html.)
{% endcomment %}
{% load wagtailadmin_tags %}
{% if help_text %}
<span>
<div class="help">
{% icon name="help" class_name="default" %}
{{ help_text }}
</div>
</span>
{% endif %}
<div class="c-sf-container{% if classname %} {{ classname }}{% endif %}">
<input type="hidden" name="{{ prefix }}-count" id="{{ prefix }}-count" value="{{ list_members_html|length }}">
{% block header %}{% endblock %}
{% if block_errors %}
{% for error in block_errors %}
<div class="help-block help-critical">{{ error }}</div>
{% endfor %}
{% endif %}
<div id="{{ prefix }}-list">
{% for list_member_html in list_members_html %}
{{ list_member_html }}
{% endfor %}
</div>
{% block footer %}{% endblock %}
</div>

Wyświetl plik

@ -1,42 +0,0 @@
{% comment %}
A 'sequence' is a generalised structure that implements a collection of blocks that can be
ordered, added and deleted.
It provides the overall HTML structure, and the logic for updating hidden fields to reflect
changes to the sequence, but NOT the UI controls for performing those changes: that is the
responsibility of specific subtypes of 'sequence', such as list and stream.
DO NOT PUT UI CONTROLS HERE, OR ANYTHING ELSE THAT ASSUMES A SPECIFIC VISUAL RENDERING OF THE LIST.
(That belongs in templates that extend this one, such as list_member.html and stream_member.html.)
{% endcomment %}
<div id="{{ prefix }}-container" aria-hidden="false">
<input type="hidden" id="{{ prefix }}-deleted" name="{{ prefix }}-deleted" value="">
<input type="hidden" id="{{ prefix }}-order" name="{{ prefix }}-order" value="{{ index }}">
{% block hidden_fields %}{% endblock %}
<div>
<div class="c-sf-container__block-container">
<div class="c-sf-block">
<div class="c-sf-block__header">
<span class="c-sf-block__header__icon">
<i class="icon icon-{{ child_block.meta.icon }}"></i>
</span>
<h3 class="c-sf-block__header__title"></h3>
<div class="c-sf-block__actions">
<span class="c-sf-block__type">{% block block_type_label %}{% endblock %}</span>
{% block header_controls %}{% endblock %}
</div>
</div>
<div class="c-sf-block__content" aria-hidden="false">
<div class="c-sf-block__content-inner">
{{ child.render_form }}
</div>
</div>
</div>
{% block footer_controls %}{% endblock %}
</div>
</div>
</div>

Wyświetl plik

@ -1,9 +0,0 @@
{% extends "wagtailadmin/block_forms/sequence.html" %}
{% block header %}
{% if list_members_html %}
{% include "wagtailadmin/block_forms/stream_menu.html" with menu_id=prefix|add:"-prependmenu" state="closed" %}
{% else %}
{% include "wagtailadmin/block_forms/stream_menu.html" with menu_id=prefix|add:"-prependmenu" state="open" %}
{% endif %}
{% endblock %}

Wyświetl plik

@ -1,25 +0,0 @@
{% extends "wagtailadmin/block_forms/sequence_member.html" %}
{% load i18n %}
{% block hidden_fields %}
<input type="hidden" id="{{ prefix }}-type" name="{{ prefix }}-type" value="{{ child_block.name }}">
<input type="hidden" id="{{ prefix }}-id" name="{{ prefix }}-id" value="{{ block_id|default:"" }}">
{% endblock %}
{% block block_type_label %}{{ child_block.label }}{% endblock %}
{% block header_controls %}
<button type="button" id="{{ prefix }}-moveup" class="c-sf-block__actions__single" title="{% trans 'Move up' %}">
<i class="icon icon-arrow-up" aria-hidden="true"></i>
</button>
<button type="button" id="{{ prefix }}-movedown" class="c-sf-block__actions__single" title="{% trans 'Move down' %}">
<i class="icon icon-arrow-down" aria-hidden="true"></i>
</button>
<button type="button" id="{{ prefix }}-delete" class="c-sf-block__actions__single" title="{% trans 'Delete' %}">
<i class="icon icon-bin" aria-hidden="true"></i>
</button>
{% endblock %}
{% block footer_controls %}
{% include "wagtailadmin/block_forms/stream_menu.html" with menu_id=prefix|add:"-appendmenu" state="closed" %}
{% endblock %}

Wyświetl plik

@ -1,23 +0,0 @@
<button type="button" title="Add" class="c-sf-add-button c-sf-add-button--visible {% if state == 'open' %}c-sf-add-button--close{% endif %}" id="{{ menu_id }}-openclose">
<i aria-hidden="true">+</i>
</button>
<div aria-hidden="{% if state == 'closed' %}true{% else %}false{% endif %}" {% if state == 'closed' %}class="stream-menu-closed"{% endif %} id="{{ menu_id }}">
<div class="c-sf-add-panel">
{% regroup child_blocks by meta.group as grouped_child_blocks %}
{% for child_blocks in grouped_child_blocks %}
{% if child_blocks.grouper %}
<h4 class="c-sf-add-panel__group-title">{{ child_blocks.grouper }}</h4>
{% endif %}
<div class="c-sf-add-panel__grid">
{% for child_block in child_blocks.list %}
<button type="button" class="c-sf-button action-add-block-{{ child_block.name }}">
<span class="c-sf-button__icon">
<i class="icon icon-{{ child_block.meta.icon }}"></i>
</span>
<span class="c-sf-button__label">{{ child_block.label }}</span>
</button>
{% endfor %}
</div>
{% endfor %}
</div>
</div>

Wyświetl plik

@ -1,21 +0,0 @@
{% load wagtailadmin_tags %}
<div class="{{ classname }}">
{% if help_text %}
<span>
<div class="help">
{% icon name="help" class_name="default" %}
{{ help_text }}
</div>
</span>
{% endif %}
{% for child in children.values %}
<div class="field {% if child.block.required %}required{% endif %}">
{% if child.block.label %}
<label class="field__label" {% if child.id_for_label %}for="{{ child.id_for_label }}"{% endif %}>{{ child.block.label }}</label>
{% endif %}
{{ child.render_form }}
</div>
{% endfor %}
</div>

Wyświetl plik

@ -7,7 +7,6 @@ from collections.abc import MutableSequence
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
from django.forms.utils import ErrorList
from django.template.loader import render_to_string
from django.utils.functional import cached_property
from django.utils.html import format_html_join
from django.utils.translation import gettext as _
@ -92,23 +91,6 @@ class BaseStreamBlock(Block):
self.sorted_child_blocks(), key=lambda child_block: child_block.meta.group
)
def render_list_member(self, block_type_name, value, prefix, index, errors=None, id=None):
"""
Render the HTML for a single list item. This consists of a container, hidden fields
to manage ID/deleted state/type, delete/reorder buttons, and the child block's own HTML.
"""
child_block = self.child_blocks[block_type_name]
child = child_block.bind(value, prefix="%s-value" % prefix, errors=errors)
return render_to_string('wagtailadmin/block_forms/stream_member.html', {
'child_blocks': self.sorted_child_blocks(),
'block_type_name': block_type_name,
'child_block': child_block,
'prefix': prefix,
'child': child,
'index': index,
'block_id': id,
})
def value_from_datadict(self, data, files, prefix):
count = int(data['%s-count' % prefix])
values_with_indexes = []