├── .gitignore ├── README.md ├── index.js ├── package.json ├── src ├── components │ └── ui.js └── lib │ ├── Plain.js │ ├── PlainComponent.js │ ├── PlainDom.js │ ├── PlainObserver.js │ ├── PlainRenderer.js │ └── utils.js └── ui.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 18 | .grunt 19 | 20 | # node-waf configuration 21 | .lock-wscript 22 | 23 | # Compiled binary addons (http://nodejs.org/api/addons.html) 24 | build/Release 25 | 26 | # Dependency directories 27 | node_modules 28 | jspm_packages 29 | 30 | # Optional npm cache directory 31 | .npm 32 | 33 | # Optional REPL history 34 | .node_repl_history 35 | 36 | .idea -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Plainjs 2 | Простой и быстрый Javascript фреймворк уровня представления (View). 3 | 4 | Примеры использования Plainjs можно посмотреть в репозитории https://github.com/oberset/plainjs-test-app 5 | 6 | Plainjs рендерит ваши данные в html-код страницы. Для отрисовки данных на странице используется нативный DOM-интерфейс браузера. Рендеринг осуществляется на основе html-шаблона (т.к сам шаблон представляет из себя кусок обычного html, его парсинг тоже осуществляется с помощью DOM браузера). 7 | 8 | Пример "Hello World" (отрисуем строку текста в браузере): 9 | 10 | ```javascript 11 | import { PlainComponent as Pjs } from 'plainjs'; 12 | 13 | Pjs.render('
', { hello: 'Hello World!!!' }, document.querySelector('.hello')); 14 | ``` 15 | 16 | В приведенном примере мы импортируем класс PlainComponent (в примере используется синтаксис es6) и вызываем у него статический метод *render*. В качестве параметров методу *render* мы передаем html-шаблон, порцию данных и родительский DOM-узел, в который будет осуществляться вставка результата рендеринга. 17 | 18 | Для управления данными можно создать собственный класс. В следующем примере мы создадим простой компонент состоящий из шаблона и класса-обработчика. Компонент будет состоять из поля checkbox и кнопки, при нажатии на которую checkbox будет менять свое состояние checked/unchecked. 19 | 20 | Подключение компонента: 21 | ```javascript 22 | import { PlainComponent as Pjs } from 'plainjs'; 23 | import { Checkbox, CheckboxTemplate } from './components/checkbox/checkbox'; 24 | 25 | Pjs.render(CheckboxTemplate, Checkbox, document.querySelector('.container-checkbox')); 26 | ``` 27 | 28 | Код html-шаблона */components/checkbox/checkbox.html*: 29 | ```html 30 |