Code Monkey home page Code Monkey logo

ha-app-docs's Introduction

Структура приложения

(Файлы: ha-app/app.js, ha-app/app/event-dispatcher.js)

Чтобы не передавать в конструкторы каждого отображения (view) и каждой модели ссылки на уже существующие объекты, введён-таки снова god-объект "приложение" (App), который хранит в себе ссылки на объекты, доступ к которым необходим из других объектов.

Пример:

// ha-app/models/code.js
var app = require('../app')();

var Code = function() {
  var code = { ... };

  // --- skip ---

  app.register('model.code', code);

  return code;
}

// ha-app/wrappers/javascript-runner.js
var app = require('../app')();

var JavascriptRunner = function() {
  var runner = {
    // --- skip ---

    evaluate: function() {
      // Получаем ссылку на модель
      var code = app.get('model.code');
      // Получаем javascript-код
      var jsCode = code.js;
      // --- skip ---
    }
  };

  // --- skip ---

  return runner;
};

Кроме того, объект App обеспечивает передачу сообщений от любого отображения или модели к любому объекту, подписавшемуся на это сообщение.

Пример:

// Получаем ссылку на объект "Приложение"
var app = require('../app')();

var ShowAnswersView = function() {
  var view = {
    initialize: function() {
      // Если у задачи вызван метод addAnswers, отображаем кнопку
      app.on('task.has.answers', this.onTaskHasAnswers, this);

      // При нажатии кнопки "Показать ответы"
      document.querySelector('.js--show-answers').addEventListener('click',
        function() {
          // Отправляем сообщение объекту "Ответы"
          app.emit('answers.show');
        }
      );
    },

    // --- skip ---
  };

  view.initialize();

  return view;
}

Остальные объекты: модели, отображения и обёртки будут рассмотрены ниже.

Модели (model) - объекты, хранящие в себе данные. По изменению данных могут отправлять события. Могут содержать логику, в частности, для заданий определяют - выполнено ли задание или нет.

  • Task - базовая модель для заданий

  • JavascriptTask - javascript-задание

  • JavascriptChallengeTask - javascript-испытание

  • Goal - цель в задании

  • JavascriptGoal - цель в javascript-задании

  • JavascriptChallengeGoal - цель в javascript-испытании

  • Code - модель, хранящая текущее состояние кода

  • AstAsserts - проверки совпадения кода с заданными шаблонами

  • ConsoleAsserts - проверка содержимого консоли

Отображения (view) - объекты, плотно связанные с DOM, реагируют на события, что-нибудь меняют в DOM и отправляют события, реагируя на DOM-события.

  • TaskView - отображение задания. На самом деле, могло бы быть обёрткой, т.к. по большей части создаёт другие отображения, обёртки и модели
  • GoalsView - показывает, насколько выполнены задания
  • JavascriptConsoleView - отображает сообщения от консоли
  • JavascriptControlsView - кнопки управления заданием (проверить на сервере, сохранить код и т.п.)
  • JavascriptRunView - кнопка "выполнить код", чекбокс "автовыполнение"
  • NextTaskView - кнопка "следующее задание"
  • ShowAnswersView - кнопка "показать ответ"
  • TaskCompletedView - сообщение "задание выполнено"

Обёртки (wrapper) - объекты, содержащие в себе всю остальную логику, не попавшую в модели или отображения.

  • Answers - получает доступ к редакторам и выводит в них автоматическое выполнение задания
  • Console - объект, принимающий методы вместо стандартного window.console
  • ConsoleSlowdown - прокладка между Console и JavascriptConsoleView.
  • Editor - базовый редактор, обёртка над Ace.js
  • CssEditor - базовый редактор с выбранным css режимом (пока не реализован)
  • HtmlEditor - базовый редактор с выбранным html режимом (пока не реализован)
  • JsEditor - базовый редактор с выбранным js режимом
  • Editors - контейнер для нескольких редакторов задачи
  • JavascriptRunner - обёртка, выполняющая javascript-код
  • Storage - обёртка над localStorage
  • Timer - обёртка над setTimeout
  • Timers - стандартные таймеры, таймер на автосохранение и на выполнение кода/обновление iframe-а
  • XHR - обёртка для выполнения запросов к серверу

ha-app-docs's People

Watchers

 avatar

Forkers

polyuretanio

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.