Source: constructors/Sequence.js

/**
 * This file is part of Sesatheque.
 *   Copyright 2014-2015, Association Sésamath
 *
 * Sesatheque is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License version 3
 * as published by the Free Software Foundation.
 *
 * Sesatheque is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with Sesatheque (LICENCE.txt).
 * @see http://www.gnu.org/licenses/agpl.txt
 *
 *
 * Ce fichier fait partie de l'application Sésathèque, créée par l'association Sésamath.
 *
 * Sésathèque est un logiciel libre ; vous pouvez le redistribuer ou le modifier suivant
 * les termes de la GNU Affero General Public License version 3 telle que publiée par la
 * Free Software Foundation.
 * Sésathèque est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE,
 * sans même la garantie tacite de QUALITÉ MARCHANDE ou d'ADÉQUATION à UN BUT PARTICULIER.
 * Consultez la GNU Affero General Public License pour plus de détails.
 * Vous devez avoir reçu une copie de la GNU General Public License en même temps que Sésathèque
 * (cf LICENCE.txt et http://vvlibri.org/fr/Analyse/gnu-affero-general-public-license-v3-analyse
 * pour une explication en français)
 */

'use strict'

import tools from 'sesajstools'
const { hasProp } = tools

/**
 * Objet Sequence de sesalab, n'est pas utilisé par sesatheque ou sesatheque-client, mis ici pour documenter le format
 * @constructor
 */
function Sequence (values) {
  /**
   * Titre de la séquence
   * @type string
   * @default ''
   */
  this.nom = values.nom || ''
  /**
   * Liste des sous-séquences
   * @type {SousSequence[]}
   */
  this.sousSequences = values.sousSequences || []
  /**
   * True si la séquence est prioritaire
   * @type boolean
   * @default false
   */
  this.prioritaire = Boolean(values.prioritaire)
  /**
   * True si la séquence est active
   * @type boolean
   * @default true
   */
  this.active = hasProp(values, 'active') ? Boolean(values.active) : true
  /**
   * 0 => libre
   * 1 => ordonnée
   * 2 => ordonnée avec minimum de réussite
   * @type number
   * @default 0
   */
  this.type = values.type || 0
  if ([0, 1, 2].indexOf(this.type) === -1) throw Error(`Type ${values.type} invalide`)
  /**
   * Description
   * @type {string}
   * @default ''
   */
  this.description = values.description || ''
  /**
   * Message pour l'élève
   * @type {string}
   * @default ''
   */
  this.message = values.message || ''
  /**
   * Timestamp de début d'une séquence limitée dans le temps
   * @type {number}
   * @default undefined
   */
  this.fromTs = values.fromTs
  /**
   * Timestamp de fin d'une séquence limitée dans le temps
   * @type {number}
   * @default undefined
   */
  this.toTs = values.toTs
  /**
   * Délai en s de non-zapping appliqué aux exercices qui ne le préciseraient pas
   * @type {number}
   * @default 10
   */
  this.nonZapping = values.nonZapping || 10
  /**
   * Nb maximum de visionnage appliqué aux exercices qui ne le préciseraient pas
   * @type {number}
   * @default undefined
   */
  this.maximumVisionnage = values.maximumVisionnage
  /**
   * Minimum de réussite appliqué aux exercices qui ne le préciseraient pas (nombre entre 0 et 1)
   * @type {number}
   * @default undefined
   */
  this.minimumReussite = values.minimumReussite
}

export default Sequence