Creating a main menu with createButton(), adds a margin to the grid. Why?
Submitted by Adrian2589 on Tue, 09/07/2021 - 16:18
Forums:
Hi,
I'm new at coding in H5P, and I'm trying to make my own modifications of H5P-FindTheWords in order to understand its code better.
I'm facing this issue, and I don't know how to fix it... I'm using createButton() function in order to create a main menu, but as soon as I click on Start Game, a margin is added between the grid and the button:


I've also noticed that each time I make web browser smaller or larger, the grid starts removing the margin until it's in the correct position. Why is this happening?
My code:
FindTheWords.prototype.registerDOMElements = function () {
const that = this;
this.$playArea = $('<div />', {
class: 'h5p-play-area'
});
this.$taskDescription = $('<div />', {
class: 'h5p-task-description',
html: this.options.taskDescription,
tabIndex: 0,
});
// timer part
this.$timer = $('<div/>', {
class: 'time-status',
tabindex: 0,
html: '<span role="term" ><em class="fa fa-clock-o" ></em>' +
this.options.l10n.timeSpent + '</span >:' +
'<span role="definition" class="h5p-time-spent" >0:00</span>'
});
this.timer = new FindTheWords.Timer(this.$timer.find('.h5p-time-spent'));
// counter part
const counterText = that.options.l10n.found
.replace('@found', '<span class="h5p-counter">0</span>')
.replace('@totalWords', '<span><strong>' + this.vocabulary.words.length + '</strong></span>');
this.$counter = $('<div/>', {
class: 'counter-status',
tabindex: 0,
html: '<div role="term"><span role="definition">' + counterText + '</span></div>'
});
this.counter = new FindTheWords.Counter(this.$counter.find('.h5p-counter'));
// feedback plus progressBar
this.$feedback = $('<div/>', {
class: 'feedback-element',
tabindex: '0'
});
this.$progressBar = UI.createScoreBar(this.vocabulary.words.length, 'scoreBarLabel');
// buttons section
this.$startGameButton = this.createButton('start game', 'play', this.options.l10n.startGame, this.startGame); //button for the menu
that.$submitButton = that.createButton('submit', 'check', that.options.l10n.check, that.gameSubmitted);
if (this.options.behaviour.enableShowSolution) {
this.$showSolutionButton = this.createButton('solution', 'eye', this.options.l10n.showSolution, that.showSolutions);
}
if (this.options.behaviour.enableRetry) {
this.$retryButton = this.createButton('retry', 'undo', this.options.l10n.tryAgain, that.resetTask);
}
FindTheWords.prototype.attach = function ($container) {
this.$container = $container.addClass('h5p-find-the-words');
this.triggerXAPI('attempted');
if (this.grid) {
this.calculateElementSize();
this.grid.appendTo(this.$puzzleContainer, this.elementSize);
this.$puzzleContainer.appendTo(this.$gameContainer);
if (this.options.behaviour.showVocabulary) {
this.setVocabularyMode();
this.vocabulary.appendTo(this.$vocabularyContainer, this.isVocModeBlock);
this.$vocabularyContainer.appendTo(this.$gameContainer);
}
}
this.$timer.appendTo(this.$statusContainer);
this.$counter.appendTo(this.$statusContainer);
this.$feedback.appendTo(this.$feedbackContainer);
this.$progressBar.appendTo(this.$feedbackContainer);
this.$container.append(this.$startGameButton); //Here I add startGameButton to the container
};
FindTheWords.prototype.startGame = function () {
$(this.$startGameButton).remove();
this.$submitButton.appendTo(this.$buttonContainer);
//append status and feedback and button containers to footer
this.$statusContainer.appendTo(this.$footerContainer);
this.$feedbackContainer.appendTo(this.$footerContainer);
this.$buttonContainer.appendTo(this.$footerContainer);
//append description , cards and footer to main container.
this.$taskDescription.appendTo(this.$playArea);
this.$gameContainer.appendTo(this.$playArea);
this.$footerContainer.appendTo(this.$playArea);
this.$playArea.appendTo(this.$container);
this.grid.drawGrid(MARGIN);
this.registerGridEvents();
this.trigger('resize');
}
If anyone can help me with this, it would be appreciated!
Thanks in advance!
otacke
Tue, 09/07/2021 - 20:03
Permalink
Hi!I guess you'd have to ask
Hi!
I guess you'd have to ask the author of that content type for the "why". It's Jithin Thankachan (not a member of the H5P core team), but I think he cannot contribute to H5P anymore.
Find the Words in fact has a couple of quirks, maybe you have come across one of them.
Best,
Oliver