JSFiddle - React, Tailwind, and code Playground
JavaScript
( function( window, document, undefined ) {
"use strict";
/**
* Main framework.
* Consists of utility methods, ConfigManager and ModuleManager.
*
* Краткое описание (눈_눈;)
*
* Фреймворк позволяет строить приложение из компонент.
* Приложение состоит из компонент разных типов:
* - module - часть приложения, singleton работающий по принципу init-refresh-destroy;
* - class - конструктор некоторого класса;
* - lib - набор методов/свойств;
* - fn - простая функция.
*
* Компоненты могут зависеть от других компонент, образуя иерархию.
* Чем больше зависимостей у компоненты, тем больше ее вес: weight = max(dependence weight) + 1.
*
* По URL и/или DOM приложение понимает, какие компоненты нужно использовать в данный момент.
* Формируется 3 списка:
* - компоненты для удаления;
* - компоненты для обновления;
* - компоненты для инициализации.
*
* Сначала происходит удаление (от самых тяжелых к самым легким),
* затем обновление и инициализация (от самых легких к самым тяжелым).
* Компоненты могут удаляться, обновляться или инититься асинхронно,
* при этом зависимые компоненты будут дожидаться их.
*
* TODO:
* – Сделать, чтобы Air.define понимал тип модуля по префиксу "module.", "class.", "lib." или "fn.".
* – В классах приходится делать util.inherit чтобы пользоваться модулями. Подумать на этот счет.
*/
var framework = new function() {
var self = this;
/**
* Set of utility functions.
* @module utility
*/
self.utility = new function() {
var manager = this,
current_uid = 0;
/**
* Creates function which messages to console with color markers.
* @param {string} color - HEX-color.
* @return {function} log.
*
* @callback log
* @param {...*} - Usual console.log arguments
*/
manager.consoleMessage = function( color, sign, type ) {
return function() {
var args = [],
args_length = arguments.length,
i;
for ( i = 0; i <...