X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/ac50cae92710f684c801ad933b924de2bec2b460..2f9850da2c6ad0258f87c3d8972689da6aa8011d:/src/editor/plugins/core/edumed/order/element.js diff --git a/src/editor/plugins/core/edumed/order/element.js b/src/editor/plugins/core/edumed/order/element.js index a81155e..4fb7507 100644 --- a/src/editor/plugins/core/edumed/order/element.js +++ b/src/editor/plugins/core/edumed/order/element.js @@ -53,11 +53,21 @@ _.extend(OrderExerciceElement, { }.bind(this)); + this.view.on('shuffleItems', function () { + this.wlxmlNode.document.transaction(function() { + this.shuffleItems(); + }.bind(this), { + metadata: { + description: gettext('Set random order') + } + }); + }.bind(this)); + var exerciseNode = this.wlxmlNode; this.createContainer(this.wlxmlNode.object.getDescription(), { resetBackground: true, manages: function(node, removedFrom) { - if(node.is('list.orderable')) { + if(node.is('list.orderable') || (removedFrom && removedFrom.is('list.orderable'))) { return false; } return exerciseNode.sameNode(node.parent() || removedFrom); //!n.hasFollowingSibing(this.params.listnode); @@ -79,12 +89,36 @@ _.extend(OrderExerciceElement, { this.reloadView(); } }, + onNodeDetached: function(event) { + var node = event.meta.node; + if(node.is('item.answer') && event.meta.parent && event.meta.parent.is('list.orderable')) { + this.reloadView(); + this.updateNumbers(); + } + }, reloadView: function() { this.view.clearItems(); this.wlxmlNode.object.getItems().forEach(function(item) { this.view.addItem(item); }.bind(this)); }, + updateNumbers: function () { + var answer = 1; + this.view.sortedItemViews().forEach(function (itemView) { + itemView.item.setAnswer(answer); + answer++; + }) + }, + shuffleItems: function () { + var items = this.wlxmlNode.object.getItems(); + var currentIndex = items.length, randomIndex; + while (0 !== currentIndex) { + randomIndex = Math.floor(Math.random() * currentIndex); + currentIndex -= 1; + items[currentIndex].node.after(items[randomIndex].node); + } + this.reloadView(); + }, getVerticallyFirstTextElement: function() { var toret; this.containers.some(function(container) {