var elementBase = require('plugins/core/edumed/elementBase'),
OrderExerciseView = require('./view');
-var OrderExerciceElement = Object.create(elementBase);
-_.extend(OrderExerciceElement, {
+var OrderExerciseElement = Object.create(elementBase);
+_.extend(OrderExerciseElement, {
init: function() {
elementBase.init.call(this);
}.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);
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) {
}
});
-return {tag: 'div', klass: 'exercise.order', prototype: OrderExerciceElement};
+return {tag: 'div', klass: 'exercise.order', prototype: OrderExerciseElement};
});