Repository: woowabros/WoowahanJS Branch: v1 Commit: 14acd472b60a Files: 253 Total size: 810.8 KB Directory structure: gitextract_la2rqcub/ ├── .babelrc ├── .gitignore ├── CONTRIBUTING.md ├── README.en.md ├── README.md ├── dist/ │ └── woowahan.js ├── docs/ │ ├── README.md │ ├── action-reducer.md │ ├── collection-view.md │ ├── dom-refs.md │ ├── event.md │ ├── first-app.md │ ├── popup-view.md │ ├── project-setup.md │ ├── route.md │ ├── store.md │ ├── view-model.md │ └── view.md ├── examples/ │ ├── README.md │ ├── bind/ │ │ ├── .babelrc │ │ ├── gulpfile.js │ │ ├── hello-view.hbs │ │ ├── hello-view.js │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ ├── plugin/ │ │ │ └── index.js │ │ └── webpack.config.js │ ├── collection/ │ │ ├── .babelrc │ │ ├── collection-first.js │ │ ├── collection-second.js │ │ ├── gulpfile.js │ │ ├── hello-view.js │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ └── webpack.config.js │ ├── domrefs/ │ │ ├── .babelrc │ │ ├── gulpfile.js │ │ ├── index.html │ │ ├── main-view.hbs │ │ ├── main-view.js │ │ ├── main.js │ │ ├── package.json │ │ └── webpack.config.js │ ├── hello-yarn/ │ │ ├── README.md │ │ ├── app/ │ │ │ ├── hello-view.js │ │ │ └── index.js │ │ ├── index.html │ │ ├── package.json │ │ └── webpack.config.js │ ├── helloworld/ │ │ ├── .babelrc │ │ ├── gulpfile.js │ │ ├── hello-view.js │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ └── webpack.config.js │ ├── listview/ │ │ ├── .babelrc │ │ ├── action/ │ │ │ └── index.js │ │ ├── global.config.js │ │ ├── gulpfile.js │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ ├── plugin.config.js │ │ ├── reducer/ │ │ │ ├── core-reducer.js │ │ │ ├── one-user.js │ │ │ └── users.js │ │ ├── server/ │ │ │ ├── data/ │ │ │ │ └── users.json │ │ │ ├── demo.js │ │ │ └── proxy.js │ │ ├── view/ │ │ │ ├── control/ │ │ │ │ ├── pager.hbs │ │ │ │ └── pager.js │ │ │ ├── layout.hbs │ │ │ ├── layout.js │ │ │ ├── not-found.js │ │ │ ├── users/ │ │ │ │ ├── index.hbs │ │ │ │ ├── index.js │ │ │ │ ├── user-detail.js │ │ │ │ ├── user.hbs │ │ │ │ └── user.js │ │ │ ├── welcome.hbs │ │ │ └── welcome.js │ │ └── webpack.config.js │ ├── middleware/ │ │ ├── app.js │ │ ├── index.html │ │ └── woowahan.js │ ├── modal/ │ │ ├── .babelrc │ │ ├── gulpfile.js │ │ ├── hello-view.js │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ ├── sass/ │ │ │ └── main.scss │ │ ├── view/ │ │ │ ├── modal-view-bootstrap/ │ │ │ │ ├── modal-view-bootstrap.hbs │ │ │ │ └── modal-view-bootstrap.js │ │ │ └── modal-view-normal/ │ │ │ ├── modal-view-normal.hbs │ │ │ └── modal-view-normal.js │ │ └── webpack.config.js │ ├── plugin/ │ │ ├── .babelrc │ │ ├── gulpfile.js │ │ ├── hello-view.js │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ ├── plugin/ │ │ │ └── list.js │ │ └── webpack.config.js │ ├── popup/ │ │ ├── .babelrc │ │ ├── gulpfile.js │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ ├── scss/ │ │ │ └── main.scss │ │ ├── view/ │ │ │ ├── component/ │ │ │ │ ├── alert-view.hbs │ │ │ │ ├── alert-view.js │ │ │ │ ├── base-view.hbs │ │ │ │ ├── base-view.js │ │ │ │ ├── index.js │ │ │ │ ├── popup-view.hbs │ │ │ │ └── popup-view.js │ │ │ └── layout/ │ │ │ ├── main-layout.hbs │ │ │ └── main-layout.js │ │ └── webpack.config.js │ ├── route/ │ │ ├── .babelrc │ │ ├── action/ │ │ │ └── index.js │ │ ├── gulpfile.js │ │ ├── index.html │ │ ├── main.js │ │ ├── middleware/ │ │ │ └── index.js │ │ ├── package.json │ │ ├── sass/ │ │ │ └── main.scss │ │ ├── template/ │ │ │ ├── main.hbs │ │ │ ├── sub1.hbs │ │ │ ├── sub2-2.hbs │ │ │ └── sub2.hbs │ │ ├── view/ │ │ │ ├── child.js │ │ │ ├── content1.hbs │ │ │ ├── content1.js │ │ │ ├── content2.hbs │ │ │ ├── content2.js │ │ │ ├── content3.hbs │ │ │ ├── content3.js │ │ │ ├── index.js │ │ │ ├── layout1.hbs │ │ │ ├── layout1.js │ │ │ ├── layout2.hbs │ │ │ ├── layout2.js │ │ │ ├── layout3.hbs │ │ │ ├── layout3.js │ │ │ ├── main.hbs │ │ │ ├── main.js │ │ │ ├── main1.hbs │ │ │ ├── main1.js │ │ │ ├── main2.hbs │ │ │ ├── main2.js │ │ │ ├── main3.hbs │ │ │ ├── main3.js │ │ │ ├── sub-child.js │ │ │ ├── sub-content1.hbs │ │ │ ├── sub-content1.js │ │ │ ├── sub-content2.hbs │ │ │ └── sub-content2.js │ │ └── webpack.config.js │ ├── schema/ │ │ ├── .babelrc │ │ ├── gulpfile.js │ │ ├── hello-view.js │ │ ├── index.html │ │ ├── main.js │ │ ├── package.json │ │ ├── schema.hbs │ │ └── webpack.config.js │ ├── timer/ │ │ ├── index.html │ │ └── js/ │ │ ├── main.js │ │ └── woowahan.js │ ├── todo/ │ │ ├── .babelrc │ │ ├── action/ │ │ │ └── index.js │ │ ├── global.config.js │ │ ├── gulpfile.js │ │ ├── index.html │ │ ├── keycode.js │ │ ├── main.js │ │ ├── package.json │ │ ├── reducer/ │ │ │ └── todos.js │ │ ├── schema/ │ │ │ └── todo.js │ │ ├── template/ │ │ │ ├── todo-app.hbs │ │ │ ├── todo-item.hbs │ │ │ └── todo-state.hbs │ │ ├── view/ │ │ │ ├── todo-app.js │ │ │ ├── todo-item.js │ │ │ └── todo-state.js │ │ └── webpack.config.js │ └── transition/ │ ├── .babelrc │ ├── gulpfile.js │ ├── index.html │ ├── main.js │ ├── package.json │ ├── view/ │ │ ├── component/ │ │ │ ├── base-view.hbs │ │ │ ├── base-view.js │ │ │ └── index.js │ │ └── layout/ │ │ ├── main-layout.hbs │ │ └── main-layout.js │ └── webpack.config.js ├── index.js ├── lib/ │ ├── action.js │ ├── collection-view.js │ ├── component.js │ ├── error.js │ ├── event.js │ ├── events.js │ ├── item-view.js │ ├── layout.js │ ├── middleware.js │ ├── plugin/ │ │ ├── checkbox.js │ │ ├── input-text.js │ │ ├── select.js │ │ └── text.js │ ├── plugin.js │ ├── popup-view.js │ ├── reducer.js │ ├── router.js │ ├── schema.js │ ├── store.js │ ├── types.js │ ├── view.js │ └── woowahan.js ├── package.json ├── src/ │ ├── action.js │ ├── collection-view.js │ ├── component.js │ ├── error.js │ ├── event.js │ ├── events.js │ ├── item-view.js │ ├── layout.js │ ├── middleware.js │ ├── plugin/ │ │ ├── checkbox.js │ │ ├── input-text.js │ │ ├── select.js │ │ └── text.js │ ├── plugin.js │ ├── popup-view.js │ ├── reducer.js │ ├── router.js │ ├── schema.js │ ├── store.js │ ├── types.js │ ├── view.js │ └── woowahan.js └── test/ ├── mocha.opts ├── schema.js ├── store.js └── types.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .babelrc ================================================ { "presets": ["es2015"] } ================================================ FILE: .gitignore ================================================ # Created by .ignore support plugin (hsz.mobi) ### Node template # Logs logs *.log npm-debug.log* # Runtime data pids *.pid *.seed # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage # nyc test coverage .nyc_output # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt # node-waf configuration .lock-wscript # Compiled binary addons (http://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules jspm_packages # Optional npm cache directory .npm # Optional REPL history .node_repl_history ### JetBrains template # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff: .idea ## File-based project format: *.iws ## Plugin-specific files: # IntelliJ /out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties ### OSX template *.DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk examples/**/dist ================================================ FILE: CONTRIBUTING.md ================================================ # WoowahanJS에 기여하기 :+1::tada: WoowahanJS에 관심을 가져주셔서 감사합니다. :tada::+1: ## 이슈 제출 * [여기](https://github.com/woowabros/WoowahanJS/issues/new)에서 새로운 이슈를 제출할 수 있습니다. 이슈를 제출하기 전에 아래의 항목들을 숙지하고 가능한한 이슈에 대해 최대한 많은 정보와 자세한 설명을 포함해야 합니다. * 작성하려는 이슈가 이미 있는지 [여기](https://github.com/woowabros/WoowahanJS/issues)에서 검색 후 등록해야 합니다. 비슷한 이슈가 있다면 댓글로 추가 내용을 덧붙일 수 있습니다. * 이슈에는 하나의 문제 또는 제안을 작성해야 합니다. 하나의 이슈에 2개 이상의 내용을 제출할 수 없습니다. * 가능하다면 다음 항목을 포함해야 합니다: * 사용중인 WoowahanJS의 버전 * 사용중인 운영체제 * 무엇을 하려고 했고, 어떤 결과를 예측했으며, 어떤 것이 예측한대로 작동하지 않았는지에 대한 서술 * 스크린샷 또는 GIF 애니메이션 이미지들 * 터미널에 출력된 에러의 내용 또는 개발자 도구, 알림창에 뜬 내용 ## Pull request(PR) 하기 * `master` 브랜치의 코드는 수정할 수 없습니다. * PR은 `develop` 브랜치만 허용합니다. * `develop` 브랜치를 부모로 한 토픽 브랜치를 활용하는 것을 권장합니다. * 가능하다면 다음 항목을 포함해야 합니다: * 스크린샷 또는 GIF 애니메이션 이미지들 ================================================ FILE: README.en.md ================================================ # WoowahanJS WoowahanJS는 보다 큰 규모의 웹 어플리케이션 개발을 위한 프레임워크입니다. 현대의 웹 어플리케이션은 많은 수의 컴포넌트로 복잡하게 구성된 뷰와 상태를 관리하는 HTTP 기반 클라이언트 어플리케이션 입니다. 일정 규모 이상의 웹 어플리케이션을 개발하기 위해선 다양한 디자이너, 퍼블리셔 및 프로그래머가 협업해야 합니다. WoowahanJS는 퍼블리셔와 프로그래머간 협업이 쉬운 환경을 제공합니다. 빠르고 생산성 높은 UI 작업을 위해 계층 뷰 컴포넌트 관리와 One-way data binding을 지원하며 UI와 비즈니스 코드간 종속성을 최소화 하기 위한 아키텍처로 설계되었습니다. ## 영향을 받은 것들 WoowahanJS는 유명한 [BackboneJS](http://backbonejs.org) 기반 위에서 작성되었습니다. [BackboneJS](http://backbonejs.org)는 [UnderscoreJS](http://underscorejs.org), [jQuery](http://jquery.com) 종속성을 포함하므로 WoowahanJS도 자연스럽게 언제든 [UnderscoreJS](http://underscorejs.org)와 [jQuery](http://jquery.com)를 사용할 수 있습니다. API 호출에서 촉발되는 상태 흐름과 관리를 위해 [React](https://facebook.github.io/react/) 프로젝트의 [Flux](https://facebook.github.io/flux) 및 [Redux](http://redux.js.org) 아키텍처의 아이디어를 구현했습니다. 하지만 WoowahanJS를 사용하기 위해 이들을 선행학습 할 필요는 없습니다. ## 빠르게 시작하기 저장소를 Clone 한 뒤 [Example](./examples) 디렉토리의 셈플들을 살펴보세요. WoowahanJS를 가장 빠르게 시작할 수 있는 지름길입니다. ## 설치 ``` $ mkdir hello-woowa && cd hello-woowa $ npm init $ npm install --save woowahan ``` ## Hello, WoowahanJS ```Javascript import Woowahan from 'woowahan'; const Main = Woowahan.View.create('Main', { template: '