<commit_before>/*
Фантазии на тему API listener'ов
*/


var morph = new Morphine('App.collections.Users.$');

/*
Фичи
	- События:
		- add
		- change
		- remove
		- all

	- Всплытие событий

bubble должно быть отделным полем в объекте. В bubble должны присутствовать bubbleEmitter и bubbleHandler.
BubbleHandler это callback от родителя, который вызывается на объекте при возникновении любого события, 
либо при приходе всплывающего события снизу. Так каждый очередной объект уведомляется о всплывающем событии.
BubbleEmitter инициирует вызов BubbleHandler'a. Все.


Каждый объект/коллекция хранит свой список подписок. 
Реализовать опциональное всплытие событий. При всплытии, событие проходящее через каждый 
уровень структуры объекта должно дополнить свой пройденный path. Это нужно чтобы любой 
из получателей события мог узнать, кто эмитировал событие и при необходимости обратиться к нему.

Объект события должен быть самостоятельной сущностью. Должна быть возможность реализовать api событий

---
Bubble-события ловить только если подписка осуществлялась следующим способом:
morph.get('App.collections').on('change', 'App.collections.data', function (e) {  }); // Ловим всплывающие события с App.collections.data
morph.get('App.collections').on('change', '*', function (e) {  }); // Ловим всплывающие события со всех вложенных объектов



*/

// +
morph.get('App.collections').on('change', function (e) {  });

// -
morph.get('App.collections').on('change').then(function () {  });

// -
morph.get('App.collections').change().then(function () {  });

<commit_msg>comment<commit_after>/*
Фантазии на тему API listener'ов
*/


var morph = new Morphine('App.collections.Users.$');

/*
Фичи
	- События:
		- add
		- change
		- remove
		- all

	- Всплытие событий

bubble должно быть отделным полем в объекте. В bubble должны присутствовать bubbleEmitter и bubbleHandler.
BubbleHandler это callback от родителя, который вызывается на объекте при возникновении любого события, 
либо при приходе всплывающего события снизу. Так каждый очередной объект уведомляется о всплывающем событии.
BubbleEmitter инициирует вызов BubbleHandler'a. Все.


Каждый объект/коллекция хранит свой список подписок. 
Реализовать опциональное всплытие событий. При всплытии, событие проходящее через каждый 
уровень структуры объекта должно дополнить свой пройденный path. Это нужно чтобы любой 
из получателей события мог узнать, кто эмитировал событие и при необходимости обратиться к нему.

Объект события должен быть самостоятельной сущностью. Должна быть возможность реализовать api событий

---
Bubble-события ловить только если подписка осуществлялась следующим способом:
morph.get('App.collections').on('change', 'App.collections.data', function (e) {  }); // Ловим всплывающие события с App.collections.data
morph.get('App.collections').on('change', '*', function (e) {  }); // Ловим всплывающие события со всех вложенных объектов

-------

После того как сделал формирование пути по ходу всплытия событий стало ясно, что генерацию ВСЕХ событий лучше сделать через bubble, 
т.к. этот механизм прокидывает события по всей morphine-структуре. При генерации на каждой ноде событие имеет актуальный path. 
Дублировать генерацию в EventEmitter и bubbleEmit не имеет смысла.


*/

// +
morph.get('App.collections').on('change', function (e) {  });

// -
morph.get('App.collections').on('change').then(function () {  });

// -
morph.get('App.collections').change().then(function () {  });


{'fraction_non_alphanumeric': 0.09772268665321418, 'fraction_numerical': 0.0, 'mean_word_length': 4.578778135048232, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1186547', 'n_tokens_mistral': 1370, 'n_tokens_neox': 1563, 'n_words': 346}