tmpJSONParser.js 4.52 KB
(function(tmpJSONParser, $, undefined) {

  var base_parameter_json = {};
  var movement_parameter_json = {};

  function _getLoggedUser() {
    var pybossa_rembember_token = Cookies.get('remember_token');
    var splitted_token_id = pybossa_rembember_token.split('|');
    return splitted_token_id.length > 0 ? splitted_token_id[0]
        : 'anonymous';
  }

  function _setupBaseParameterJSON(tmpJSON) {
    base_parameter_json['userId'] = _getLoggedUser();
    base_parameter_json['sinal'] = tmpJSON['sinal'];
    base_parameter_json['interpolacao'] = 'normal';
    base_parameter_json['movimentos'] = [];
    movement_parameter_json = {
      'facial': {},
      'mao_direita': {},
      'mao_esquerda': {}
    };
    base_parameter_json['movimentos'].push(movement_parameter_json);
  }

  function _parseParameterValue(value) {
	if (typeof value == "string" && value.toLowerCase() == 'true') {
		return true;
	} else if (typeof value == "string" && value.toLowerCase() == 'false') {
		return false;
	} else {
		return !isNaN(value) ? parseInt(value) : value;
	}
  }

  function _parseTempFacialParameterJSON(tmpJSON) {
    var attrs = dynworkflow.getFacialParameters();
    for (var i in attrs) {
      var attr = attrs[i];
      parameterValue = tmpJSON['facial'][attr][0];
      movement_parameter_json['facial'][attr] = _parseParameterValue(parameterValue);
    }
  }
  
  function _parseHand(hand) {
	var parsedHand = hand == 'right-hand' ? 'mao_direita' : hand;
	parsedHand = hand == 'left-hand' ? 'mao_esquerda' : parsedHand;
	return parsedHand;
  }
  
  // Default parser
  function _defaultMovementParser(tmpJSON, movementName, hand) {
	var attrs = dynworkflow.getMovementParameters(movementName);
	var parsedHand = _parseHand(hand);
	
	for (var i in attrs) {
	    var attr = attrs[i];
	    var parameterValue = '';
	    if (attr == 'configuracao') {
	      parameterValue = tmpJSON[hand][attr][1];
	    } else if (attr == 'articulacao') {
	      parameterValue =  articulation.processValue(hand,
	          tmpJSON[hand][attr]);
	    } else {
	      parameterValue = tmpJSON[hand][attr][0];
	    }
	    movement_parameter_json[parsedHand][movementName][attr] =
	      _parseParameterValue(parameterValue);
	}
  }
	
  function _retilinearMovementParser(tmpJSON, movementName, hand) {
	var attrs = dynworkflow.getMovementParameters(movementName);
	var parsedHand = _parseHand(hand);
	
	for (var i in attrs) {
	    var attr = attrs[i];
	    var initParameterValue = '';
	    var endParameterValue = '';
	    if (attr == 'configuracao-retilineo') {
	      initParameterValue = tmpJSON[hand][attr][1];
	      endParameterValue = tmpJSON[hand][attr][3];
	    } else if (attr == 'articulacao-retilineo') {
	      initSlice = tmpJSON[hand][attr].slice(0, 2);
	      endSlice = tmpJSON[hand][attr].slice(2, 4);
	      initParameterValue =  articulation.processValue(hand, initSlice);
	      endParameterValue =  articulation.processValue(hand, endSlice);
	    } else {
	      initParameterValue = tmpJSON[hand][attr][0];
	      endParameterValue = tmpJSON[hand][attr][1];
	    }
	    attr = attr.replace('-retilineo', '');
	    var initAttr = attr + '_inicial';
	    var endAttr = attr + '_final';
	    movement_parameter_json[parsedHand][movementName][initAttr] =
	      _parseParameterValue(initParameterValue);
	    movement_parameter_json[parsedHand][movementName][endAttr] =
		      _parseParameterValue(endParameterValue);
	}
  }
  
  function _circularMovementParser(tmpJSON, movementName, hand) {
	  var parsedHand = _parseHand(hand);
	  _defaultMovementParser(tmpJSON, movementName, hand);
	  movement_parameter_json[parsedHand][movementName]['lado_oposto'] = false;
  }

  function _parseTempMovementParameterJSON(tmpJSON, hand) {
    var movimentConfig = tmpJSON[hand]['movimento'];
    if (typeof movimentConfig == 'undefined') return;

    var movementName = movimentConfig[0];
    var parsedHand = _parseHand(hand);
    movement_parameter_json[parsedHand][movementName] = {};
    
    if (movementName == 'retilineo') {
    	_retilinearMovementParser(tmpJSON, movementName, hand);
    } else if (movementName == 'circular') {
    	_circularMovementParser(tmpJSON, movementName, hand);
    } else {
    	_defaultMovementParser(tmpJSON, movementName, hand);
    }
  }

  tmpJSONParser.parse = function(tmpJSON) {
    _setupBaseParameterJSON(tmpJSON);
    _parseTempFacialParameterJSON(tmpJSON);
    _parseTempMovementParameterJSON(tmpJSON, 'right-hand');
    _parseTempMovementParameterJSON(tmpJSON, 'left-hand');
    return base_parameter_json;
  };

}(window.tmpJSONParser = window.tmpJSONParser || {}, jQuery));