/*global require, define, document, $, console, window */
/*jslint nomen: true, debug: true, bitwise: true, todo: true*/
/**
* @module App
*/
define([
"framework",
"underscore",
"backbone",
"modules/mainPack"
],
/**
* Widget constructor class
* @name ElascticnodeWidget
* @requires framework {Object} jQuery|Zepto
* @requires underscore {Object} Underscore
* @requires backbone {Object} Backbone
* @requires module:mainPack {Object} Loader dependent modules
* @class Widget
* @param config {Object} Init config object
* @constructor
* @return {Object} Widget constructor
* @see module:App
*/
function ($, _, Backbone) {
"use strict";
return function (config) {
/**
* @name module:App#config
* @memberof module:App
* @inner
* @example config = {
* type: "exams",
* interval: 10,
* host: "school.elasticnode.ru",
* container: "body",
* title: "My title",
* }
* */
var self = this,
status = 0,
id = 'enw' + (100000 * Math.random() | 0),
path,
pack,
view = {},
setStatus = function (val) {
/*
* -1 error
* 0 waiting
* 1 rendered
* 2 data fetched
*/
status = view.status = val;
return val;
},
/**
* @name module:App#renderer
* @description View render function
* @memberof module:App
* @function renderer
* @inner
*/
renderer,
/**
* @name module:App#flushView
* @description Assigned view destructor
* @memberof module:App
* @function flushView
* @param view {Object} Backbone.View instance
* @inner
*/
flushView = function (view) {
if (view && view.$el) {
view.undelegateEvents();
view.$el.unbind();