X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/856f00d24d37590a78b78833a8aa305983e58e45..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 7c5e383..4fb7507 100644 --- a/src/editor/plugins/core/edumed/order/element.js +++ b/src/editor/plugins/core/edumed/order/element.js @@ -6,13 +6,13 @@ define(function(require) { var _ = require('libs/underscore'); -var documentElement = require('modules/documentCanvas/canvas/documentElement'), +var elementBase = require('plugins/core/edumed/elementBase'), OrderExerciseView = require('./view'); -var OrderExerciceElement = Object.create(documentElement.DocumentNodeElement.prototype); +var OrderExerciceElement = Object.create(elementBase); _.extend(OrderExerciceElement, { init: function() { - documentElement.DocumentNodeElement.prototype.init.call(this); + elementBase.init.call(this); this.view = new OrderExerciseView(this, this.wlxmlNode); this._container().append(this.view.dom); @@ -53,10 +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); @@ -78,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) {