├── .babelrc ├── .codeclimate.yml ├── .csslintrc ├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .gitattributes ├── .gitignore ├── .istanbul.yml ├── .sequelizerc ├── .travis.yml ├── LICENSE ├── Makefile ├── README.md ├── config ├── default.json ├── sequelize │ └── config.json ├── test.json └── webpack │ ├── debug.config.js │ ├── development.config.js │ ├── production.config.js │ └── test.config.js ├── iisnode.js ├── images ├── app │ └── v3w │ │ ├── apple-touch-icon-114x114.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-144x144.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-180x180.png │ │ ├── apple-touch-icon-57x57.png │ │ ├── apple-touch-icon-72x72.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── apple-touch-icon.png │ │ └── favicon.ico ├── ccnda.png ├── ccnda@2x.png ├── ccnda_icon_mini.png ├── ccnda_icon_mini@2x.png ├── dotmatrix.png ├── icon.png ├── image.png ├── msword.png ├── oursevents-m.png ├── oursevents-m@2x.png ├── oursevents.png ├── oursevents@2x.png ├── pdf.png └── twbible.png ├── jsconfig.json ├── nodemon.json ├── package.json ├── robots.txt ├── semantic.json ├── src ├── client │ ├── DevTools.js │ ├── admin.js │ ├── admin │ │ ├── actions │ │ │ ├── AdActions.js │ │ │ ├── AdminActions.js │ │ │ ├── AuthActions.js │ │ │ ├── PostActions.js │ │ │ ├── StatisticActions.js │ │ │ └── UserActions.js │ │ ├── components │ │ │ ├── AdminHandler.js │ │ │ ├── AdsComponent.js │ │ │ ├── AdsHandler.js │ │ │ ├── BlockedComponent.js │ │ │ ├── BlockedHandler.js │ │ │ ├── DashComponent.js │ │ │ ├── DashHandler.js │ │ │ ├── DisabledComponent.js │ │ │ ├── DisabledHandler.js │ │ │ ├── LoginComponent.js │ │ │ ├── LoginHandler.js │ │ │ ├── MembersComponent.js │ │ │ ├── MembersDetailComponent.js │ │ │ ├── MembersDetailHandler.js │ │ │ ├── MembersHandler.js │ │ │ ├── PermissionsComponent.js │ │ │ ├── PermissionsHandler.js │ │ │ ├── SpamComponent.js │ │ │ ├── SpamHandler.js │ │ │ ├── StatisticsComponent.js │ │ │ ├── StatisticsHandler.js │ │ │ ├── addon │ │ │ │ └── require-auth.js │ │ │ ├── index.js │ │ │ └── widget │ │ │ │ ├── AdsNavWidget.js │ │ │ │ ├── AdsTableWidget.js │ │ │ │ ├── DetailWidget.js │ │ │ │ ├── MembersNavWidget.js │ │ │ │ ├── MembersTableWidget.js │ │ │ │ ├── MenuWidget.js │ │ │ │ ├── NavWidget.js │ │ │ │ ├── PaginationWidget.js │ │ │ │ ├── PermissionsNavWidget.js │ │ │ │ ├── PermissionsTableWidget.js │ │ │ │ ├── TableWidget.js │ │ │ │ └── index.js │ │ ├── constants │ │ │ └── ActionTypes.js │ │ ├── index.js │ │ ├── pages │ │ │ └── NotFound.js │ │ ├── reducers │ │ │ ├── AdStore.js │ │ │ ├── AdminStore.js │ │ │ ├── AuthStore.js │ │ │ ├── PostStore.js │ │ │ ├── StatisticStore.js │ │ │ ├── UserStore.js │ │ │ └── index.js │ │ └── routes.js │ ├── fallback.js │ ├── index.js │ └── main.js ├── server │ ├── adminView.js │ ├── appView.js │ ├── db │ │ ├── dao │ │ │ ├── admins │ │ │ │ ├── adminsProvider.js │ │ │ │ └── index.js │ │ │ ├── locations │ │ │ │ ├── index.js │ │ │ │ └── locationsProvider.js │ │ │ ├── posts │ │ │ │ ├── index.js │ │ │ │ └── postsProvider.js │ │ │ ├── promotions │ │ │ │ ├── index.js │ │ │ │ └── promotionsProvider.js │ │ │ ├── statistics │ │ │ │ ├── index.js │ │ │ │ └── statisticsProvider.js │ │ │ ├── users │ │ │ │ ├── index.js │ │ │ │ └── usersProvider.js │ │ │ └── usersInfo │ │ │ │ ├── index.js │ │ │ │ └── usersInfoProvider.js │ │ ├── index.js │ │ └── models │ │ │ ├── admin.js │ │ │ ├── index.js │ │ │ ├── location.js │ │ │ ├── post.js │ │ │ ├── promotion.js │ │ │ ├── user.js │ │ │ └── userInfo.js │ ├── index.js │ ├── jwt-helper.js │ ├── koa.js │ ├── passport │ │ ├── auth │ │ │ ├── rest-auth-loose.js │ │ │ └── rest-auth.js │ │ ├── basic.js │ │ ├── facebook.js │ │ ├── google.js │ │ ├── local-jwt.js │ │ └── local.js │ ├── routes.js │ ├── services │ │ ├── admin │ │ │ ├── index.js │ │ │ └── v1 │ │ │ │ ├── admins.js │ │ │ │ ├── index.js │ │ │ │ ├── posts.js │ │ │ │ ├── promotions.js │ │ │ │ ├── statistics.js │ │ │ │ └── users.js │ │ ├── index.js │ │ └── v1 │ │ │ ├── cals.js │ │ │ ├── index.js │ │ │ ├── ogs.js │ │ │ ├── posts.js │ │ │ ├── promotions.js │ │ │ ├── searches.js │ │ │ ├── uploads.js │ │ │ ├── users.js │ │ │ └── usersInfo.js │ ├── translator-helper.js │ └── twbAuth.js ├── shared │ ├── actions │ │ ├── AdActions.js │ │ ├── AuthActions.js │ │ ├── CacheActions.js │ │ ├── EventActions.js │ │ ├── LocaleActions.js │ │ ├── MapActions.js │ │ ├── OgActions.js │ │ ├── PostActions.js │ │ ├── SearchActions.js │ │ ├── SignupActions.js │ │ ├── UploadActions.js │ │ └── UserActions.js │ ├── components │ │ ├── ADContent.js │ │ ├── AppContainer.js │ │ ├── AppHandler.js │ │ ├── CalComponent.js │ │ ├── CalHandler.js │ │ ├── ChangePasswordComponent.js │ │ ├── ChangePasswordHandler.js │ │ ├── CpropComponent.js │ │ ├── CpropHandler.js │ │ ├── CpropList.js │ │ ├── HeaderComponent.js │ │ ├── HeaderHandler.js │ │ ├── HomeComponent.js │ │ ├── HomeHandler.js │ │ ├── LocaleSwitcher.js │ │ ├── LoginComponent.js │ │ ├── LoginHandler.js │ │ ├── LogoutComponent.js │ │ ├── LogoutHandler.js │ │ ├── ManageComponent.js │ │ ├── ManageHandler.js │ │ ├── NearbyComponent.js │ │ ├── NearbyHandler.js │ │ ├── NearbyList.js │ │ ├── OgComponent.js │ │ ├── OgHandler.js │ │ ├── PostComponent.js │ │ ├── PostDetailComponent.js │ │ ├── PostDetailHandler.js │ │ ├── PostEditHandler.js │ │ ├── PostEditRingHandler.js │ │ ├── PostHandler.js │ │ ├── RightSidebar.js │ │ ├── SearchComponent.js │ │ ├── SearchHandler.js │ │ ├── Sidebar.js │ │ ├── SignupComponent.js │ │ ├── SignupHandler.js │ │ ├── SyncTokenHandler.js │ │ ├── TWBLoginComponent.js │ │ ├── TWBLoginHandler.js │ │ ├── WallComponent.js │ │ ├── WallCpropComponent.js │ │ ├── WallCpropHandler.js │ │ ├── WallHandler.js │ │ ├── addon │ │ │ ├── ad.js │ │ │ ├── connect-i18n.js │ │ │ ├── image-upload.js │ │ │ ├── lightbox │ │ │ │ ├── index.js │ │ │ │ └── lightbox.js │ │ │ ├── loading │ │ │ │ ├── index.js │ │ │ │ └── loading.js │ │ │ ├── maps │ │ │ │ ├── gmap.js │ │ │ │ ├── marker.js │ │ │ │ ├── pin.js │ │ │ │ └── search-menu.js │ │ │ ├── require-auth.js │ │ │ └── tabs │ │ │ │ ├── index.js │ │ │ │ ├── tab-list.js │ │ │ │ ├── tab-panel.js │ │ │ │ ├── tab.js │ │ │ │ └── tabs.js │ │ ├── index.js │ │ └── wall │ │ │ ├── PostCard.js │ │ │ ├── PostCards.js │ │ │ └── WallButtons.js │ ├── constants │ │ └── ActionTypes.js │ ├── i18n │ │ ├── en.js │ │ ├── zh-hant-cn.js │ │ └── zh-hant-tw.js │ ├── pages │ │ └── NotFound.js │ ├── reducers │ │ ├── AdStore.js │ │ ├── AuthStore.js │ │ ├── CpropStore.js │ │ ├── EventStore.js │ │ ├── LocaleStore.js │ │ ├── ManageStore.js │ │ ├── MapStore.js │ │ ├── NewsStore.js │ │ ├── OgNearbyStore.js │ │ ├── OgStore.js │ │ ├── OverviewStore.js │ │ ├── PostStore.js │ │ ├── SearchStore.js │ │ ├── SignupStore.js │ │ ├── UploadStore.js │ │ ├── UserStore.js │ │ └── index.js │ ├── routes.js │ └── utils │ │ ├── browser-utils.js │ │ ├── common-utils.js │ │ ├── date-utils.js │ │ ├── file-utils.js │ │ ├── forms.js │ │ ├── geoloc-utils.js │ │ ├── hashids-plus.js │ │ ├── httpcheck.js │ │ ├── image-resolver.js │ │ ├── locale-utils.js │ │ ├── localpath.js │ │ ├── promiseMiddleware.js │ │ ├── redux-universal-resolver.js │ │ ├── redux-utils.js │ │ ├── semantic-custom.js │ │ └── tongwen.js └── vendor │ └── tongwen │ ├── index.js │ ├── tongwen_core.js │ ├── tongwen_table_ps2t.js │ ├── tongwen_table_pt2s.js │ ├── tongwen_table_s2t.js │ └── tongwen_table_t2s.js ├── styles ├── css │ ├── addon │ │ ├── csshake.min.css │ │ ├── lightbox.css │ │ ├── loading.css │ │ ├── nearby.css │ │ └── pin.css │ ├── admin.css │ ├── animation.css │ ├── fallback.less │ ├── images.css │ ├── screen.css │ └── ui │ │ ├── admin.less │ │ ├── assets │ │ ├── next.svg │ │ ├── prev.svg │ │ └── select-handler.svg │ │ ├── base.less │ │ ├── checkbox.less │ │ ├── date-picker.css │ │ └── spinkit.css └── semantic │ ├── gulpfile.js │ ├── src │ ├── definitions │ │ ├── behaviors │ │ │ ├── api.js │ │ │ ├── colorize.js │ │ │ ├── form.js │ │ │ ├── state.js │ │ │ ├── visibility.js │ │ │ └── visit.js │ │ ├── collections │ │ │ ├── breadcrumb.less │ │ │ ├── form.less │ │ │ ├── grid.less │ │ │ ├── menu.less │ │ │ ├── message.less │ │ │ └── table.less │ │ ├── elements │ │ │ ├── button.less │ │ │ ├── container.less │ │ │ ├── divider.less │ │ │ ├── flag.less │ │ │ ├── header.less │ │ │ ├── icon.less │ │ │ ├── image.less │ │ │ ├── input.less │ │ │ ├── label.less │ │ │ ├── list.less │ │ │ ├── loader.less │ │ │ ├── rail.less │ │ │ ├── reveal.less │ │ │ ├── segment.less │ │ │ └── step.less │ │ ├── globals │ │ │ ├── reset.less │ │ │ ├── site.js │ │ │ └── site.less │ │ ├── modules │ │ │ ├── accordion.js │ │ │ ├── accordion.less │ │ │ ├── checkbox.js │ │ │ ├── checkbox.less │ │ │ ├── dimmer.js │ │ │ ├── dimmer.less │ │ │ ├── dropdown.js │ │ │ ├── dropdown.less │ │ │ ├── embed.js │ │ │ ├── embed.less │ │ │ ├── modal.js │ │ │ ├── modal.less │ │ │ ├── nag.js │ │ │ ├── nag.less │ │ │ ├── popup.js │ │ │ ├── popup.less │ │ │ ├── progress.js │ │ │ ├── progress.less │ │ │ ├── rating.js │ │ │ ├── rating.less │ │ │ ├── search.js │ │ │ ├── search.less │ │ │ ├── shape.js │ │ │ ├── shape.less │ │ │ ├── sidebar.js │ │ │ ├── sidebar.less │ │ │ ├── sticky.js │ │ │ ├── sticky.less │ │ │ ├── tab.js │ │ │ ├── tab.less │ │ │ ├── transition.js │ │ │ └── transition.less │ │ └── views │ │ │ ├── ad.less │ │ │ ├── card.less │ │ │ ├── comment.less │ │ │ ├── feed.less │ │ │ ├── item.less │ │ │ └── statistic.less │ ├── semantic.less │ ├── site │ │ ├── collections │ │ │ ├── breadcrumb.overrides │ │ │ ├── breadcrumb.variables │ │ │ ├── form.overrides │ │ │ ├── form.variables │ │ │ ├── grid.overrides │ │ │ ├── grid.variables │ │ │ ├── menu.overrides │ │ │ ├── menu.variables │ │ │ ├── message.overrides │ │ │ ├── message.variables │ │ │ ├── table.overrides │ │ │ └── table.variables │ │ ├── elements │ │ │ ├── button.overrides │ │ │ ├── button.variables │ │ │ ├── container.overrides │ │ │ ├── container.variables │ │ │ ├── divider.overrides │ │ │ ├── divider.variables │ │ │ ├── flag.overrides │ │ │ ├── flag.variables │ │ │ ├── header.overrides │ │ │ ├── header.variables │ │ │ ├── icon.overrides │ │ │ ├── icon.variables │ │ │ ├── image.overrides │ │ │ ├── image.variables │ │ │ ├── input.overrides │ │ │ ├── input.variables │ │ │ ├── label.overrides │ │ │ ├── label.variables │ │ │ ├── list.overrides │ │ │ ├── list.variables │ │ │ ├── loader.overrides │ │ │ ├── loader.variables │ │ │ ├── rail.overrides │ │ │ ├── rail.variables │ │ │ ├── reveal.overrides │ │ │ ├── reveal.variables │ │ │ ├── segment.overrides │ │ │ ├── segment.variables │ │ │ ├── step.overrides │ │ │ └── step.variables │ │ ├── globals │ │ │ ├── reset.overrides │ │ │ ├── reset.variables │ │ │ ├── site.overrides │ │ │ └── site.variables │ │ ├── modules │ │ │ ├── accordion.overrides │ │ │ ├── accordion.variables │ │ │ ├── chatroom.overrides │ │ │ ├── chatroom.variables │ │ │ ├── checkbox.overrides │ │ │ ├── checkbox.variables │ │ │ ├── dimmer.overrides │ │ │ ├── dimmer.variables │ │ │ ├── dropdown.overrides │ │ │ ├── dropdown.variables │ │ │ ├── embed.overrides │ │ │ ├── embed.variables │ │ │ ├── modal.overrides │ │ │ ├── modal.variables │ │ │ ├── nag.overrides │ │ │ ├── nag.variables │ │ │ ├── popup.overrides │ │ │ ├── popup.variables │ │ │ ├── progress.overrides │ │ │ ├── progress.variables │ │ │ ├── rating.overrides │ │ │ ├── rating.variables │ │ │ ├── search.overrides │ │ │ ├── search.variables │ │ │ ├── shape.overrides │ │ │ ├── shape.variables │ │ │ ├── sidebar.overrides │ │ │ ├── sidebar.variables │ │ │ ├── sticky.overrides │ │ │ ├── sticky.variables │ │ │ ├── tab.overrides │ │ │ ├── tab.variables │ │ │ ├── transition.overrides │ │ │ ├── transition.variables │ │ │ ├── video.overrides │ │ │ └── video.variables │ │ └── views │ │ │ ├── ad.overrides │ │ │ ├── ad.variables │ │ │ ├── card.overrides │ │ │ ├── card.variables │ │ │ ├── comment.overrides │ │ │ ├── comment.variables │ │ │ ├── feed.overrides │ │ │ ├── feed.variables │ │ │ ├── item.overrides │ │ │ ├── item.variables │ │ │ ├── statistic.overrides │ │ │ └── statistic.variables │ ├── theme.config │ ├── theme.less │ └── themes │ │ ├── amazon │ │ ├── elements │ │ │ ├── button.overrides │ │ │ └── button.variables │ │ └── globals │ │ │ └── site.variables │ │ ├── basic │ │ ├── assets │ │ │ └── fonts │ │ │ │ ├── icons.eot │ │ │ │ ├── icons.svg │ │ │ │ ├── icons.ttf │ │ │ │ └── icons.woff │ │ ├── collections │ │ │ ├── table.overrides │ │ │ └── table.variables │ │ ├── elements │ │ │ ├── button.overrides │ │ │ ├── button.variables │ │ │ ├── icon.overrides │ │ │ ├── icon.variables │ │ │ ├── step.overrides │ │ │ └── step.variables │ │ ├── globals │ │ │ ├── reset.overrides │ │ │ └── reset.variables │ │ ├── modules │ │ │ ├── progress.overrides │ │ │ └── progress.variables │ │ └── views │ │ │ ├── card.overrides │ │ │ └── card.variables │ │ ├── bookish │ │ └── elements │ │ │ ├── header.overrides │ │ │ └── header.variables │ │ ├── bootstrap3 │ │ └── elements │ │ │ ├── button.overrides │ │ │ └── button.variables │ │ ├── chubby │ │ ├── collections │ │ │ ├── form.overrides │ │ │ ├── form.variables │ │ │ ├── menu.overrides │ │ │ └── menu.variables │ │ ├── elements │ │ │ ├── button.overrides │ │ │ ├── button.variables │ │ │ ├── header.overrides │ │ │ └── header.variables │ │ ├── modules │ │ │ ├── accordion.overrides │ │ │ └── accordion.variables │ │ └── views │ │ │ ├── comment.overrides │ │ │ └── comment.variables │ │ ├── classic │ │ ├── collections │ │ │ ├── table.overrides │ │ │ └── table.variables │ │ ├── elements │ │ │ ├── button.overrides │ │ │ ├── button.variables │ │ │ ├── header.overrides │ │ │ └── header.variables │ │ ├── modules │ │ │ ├── progress.overrides │ │ │ └── progress.variables │ │ └── views │ │ │ ├── card.overrides │ │ │ └── card.variables │ │ ├── colored │ │ └── modules │ │ │ ├── checkbox.overrides │ │ │ └── checkbox.variables │ │ ├── default │ │ ├── assets │ │ │ ├── fonts │ │ │ │ ├── icons.eot │ │ │ │ ├── icons.svg │ │ │ │ ├── icons.ttf │ │ │ │ ├── icons.woff │ │ │ │ └── icons.woff2 │ │ │ └── images │ │ │ │ └── flags.png │ │ ├── collections │ │ │ ├── breadcrumb.overrides │ │ │ ├── breadcrumb.variables │ │ │ ├── form.overrides │ │ │ ├── form.variables │ │ │ ├── grid.overrides │ │ │ ├── grid.variables │ │ │ ├── menu.overrides │ │ │ ├── menu.variables │ │ │ ├── message.overrides │ │ │ ├── message.variables │ │ │ ├── table.overrides │ │ │ └── table.variables │ │ ├── elements │ │ │ ├── button.overrides │ │ │ ├── button.variables │ │ │ ├── container.overrides │ │ │ ├── container.variables │ │ │ ├── divider.overrides │ │ │ ├── divider.variables │ │ │ ├── flag.overrides │ │ │ ├── flag.variables │ │ │ ├── header.overrides │ │ │ ├── header.variables │ │ │ ├── icon.overrides │ │ │ ├── icon.variables │ │ │ ├── image.overrides │ │ │ ├── image.variables │ │ │ ├── input.overrides │ │ │ ├── input.variables │ │ │ ├── label.overrides │ │ │ ├── label.variables │ │ │ ├── list.overrides │ │ │ ├── list.variables │ │ │ ├── loader.overrides │ │ │ ├── loader.variables │ │ │ ├── rail.overrides │ │ │ ├── rail.variables │ │ │ ├── reveal.overrides │ │ │ ├── reveal.variables │ │ │ ├── segment.overrides │ │ │ ├── segment.variables │ │ │ ├── step.overrides │ │ │ └── step.variables │ │ ├── globals │ │ │ ├── reset.overrides │ │ │ ├── reset.variables │ │ │ ├── site.overrides │ │ │ └── site.variables │ │ ├── modules │ │ │ ├── accordion.overrides │ │ │ ├── accordion.variables │ │ │ ├── chatroom.overrides │ │ │ ├── chatroom.variables │ │ │ ├── checkbox.overrides │ │ │ ├── checkbox.variables │ │ │ ├── dimmer.overrides │ │ │ ├── dimmer.variables │ │ │ ├── dropdown.overrides │ │ │ ├── dropdown.variables │ │ │ ├── embed.overrides │ │ │ ├── embed.variables │ │ │ ├── modal.overrides │ │ │ ├── modal.variables │ │ │ ├── nag.overrides │ │ │ ├── nag.variables │ │ │ ├── popup.overrides │ │ │ ├── popup.variables │ │ │ ├── progress.overrides │ │ │ ├── progress.variables │ │ │ ├── rating.overrides │ │ │ ├── rating.variables │ │ │ ├── search.overrides │ │ │ ├── search.variables │ │ │ ├── shape.overrides │ │ │ ├── shape.variables │ │ │ ├── sidebar.overrides │ │ │ ├── sidebar.variables │ │ │ ├── sticky.overrides │ │ │ ├── sticky.variables │ │ │ ├── tab.overrides │ │ │ ├── tab.variables │ │ │ ├── transition.overrides │ │ │ └── transition.variables │ │ └── views │ │ │ ├── ad.overrides │ │ │ ├── ad.variables │ │ │ ├── card.overrides │ │ │ ├── card.variables │ │ │ ├── comment.overrides │ │ │ ├── comment.variables │ │ │ ├── feed.overrides │ │ │ ├── feed.variables │ │ │ ├── item.overrides │ │ │ ├── item.variables │ │ │ ├── statistic.overrides │ │ │ └── statistic.variables │ │ ├── duo │ │ └── elements │ │ │ ├── loader.overrides │ │ │ └── loader.variables │ │ ├── fixed-width │ │ ├── collections │ │ │ ├── grid.overrides │ │ │ └── grid.variables │ │ └── modules │ │ │ ├── modal.overrides │ │ │ └── modal.variables │ │ ├── flat │ │ ├── collections │ │ │ ├── form.overrides │ │ │ └── form.variables │ │ └── globals │ │ │ ├── site.overrides │ │ │ └── site.variables │ │ ├── github │ │ ├── assets │ │ │ └── fonts │ │ │ │ ├── octicons-local.ttf │ │ │ │ ├── octicons.svg │ │ │ │ ├── octicons.ttf │ │ │ │ └── octicons.woff │ │ ├── collections │ │ │ ├── breadcrumb.variables │ │ │ ├── form.overrides │ │ │ ├── form.variables │ │ │ ├── grid.variables │ │ │ ├── menu.overrides │ │ │ ├── menu.variables │ │ │ ├── message.overrides │ │ │ ├── message.variables │ │ │ └── table.variables │ │ ├── elements │ │ │ ├── button.overrides │ │ │ ├── button.variables │ │ │ ├── header.variables │ │ │ ├── icon.overrides │ │ │ ├── icon.variables │ │ │ ├── image.variables │ │ │ ├── input.overrides │ │ │ ├── input.variables │ │ │ ├── label.overrides │ │ │ ├── label.variables │ │ │ ├── segment.overrides │ │ │ ├── segment.variables │ │ │ ├── step.overrides │ │ │ └── step.variables │ │ ├── globals │ │ │ └── site.variables │ │ └── modules │ │ │ ├── dropdown.overrides │ │ │ ├── dropdown.variables │ │ │ └── popup.variables │ │ ├── gmail │ │ └── collections │ │ │ ├── message.overrides │ │ │ └── message.variables │ │ ├── instagram │ │ └── views │ │ │ ├── card.overrides │ │ │ └── card.variables │ │ ├── material │ │ ├── assets │ │ │ └── fonts │ │ │ │ ├── icons.eot │ │ │ │ ├── icons.svg │ │ │ │ ├── icons.ttf │ │ │ │ └── icons.woff │ │ ├── collections │ │ │ ├── menu.overrides │ │ │ └── menu.variables │ │ ├── elements │ │ │ ├── button.overrides │ │ │ ├── button.variables │ │ │ ├── header.overrides │ │ │ ├── header.variables │ │ │ ├── icon.overrides │ │ │ └── icon.variables │ │ ├── globals │ │ │ ├── site.overrides │ │ │ └── site.variables │ │ └── modules │ │ │ ├── dropdown.overrides │ │ │ ├── dropdown.variables │ │ │ ├── modal.overrides │ │ │ └── modal.variables │ │ ├── pulsar │ │ └── elements │ │ │ ├── loader.overrides │ │ │ └── loader.variables │ │ ├── raised │ │ └── elements │ │ │ ├── button.overrides │ │ │ └── button.variables │ │ ├── resetcss │ │ └── globals │ │ │ ├── reset.overrides │ │ │ └── reset.variables │ │ ├── round │ │ └── elements │ │ │ ├── button.overrides │ │ │ └── button.variables │ │ ├── rtl │ │ └── globals │ │ │ ├── site.overrides │ │ │ └── site.variables │ │ ├── striped │ │ └── modules │ │ │ ├── progress.overrides │ │ │ └── progress.variables │ │ ├── timeline │ │ └── views │ │ │ ├── feed.overrides │ │ │ └── feed.variables │ │ └── twitter │ │ └── elements │ │ ├── button.overrides │ │ └── button.variables │ └── tasks │ ├── README.md │ ├── admin │ ├── components │ │ ├── create.js │ │ ├── init.js │ │ └── update.js │ ├── distributions │ │ ├── create.js │ │ ├── init.js │ │ └── update.js │ ├── publish.js │ ├── register.js │ └── release.js │ ├── build.js │ ├── build │ ├── assets.js │ ├── css.js │ └── javascript.js │ ├── check-install.js │ ├── clean.js │ ├── collections │ ├── README.md │ ├── admin.js │ ├── build.js │ ├── internal.js │ └── rtl.js │ ├── config │ ├── admin │ │ ├── github.js │ │ ├── oauth.example.js │ │ ├── release.js │ │ └── templates │ │ │ ├── README.md │ │ │ ├── bower.json │ │ │ ├── component-package.js │ │ │ ├── composer.json │ │ │ ├── css-package.js │ │ │ ├── less-package.js │ │ │ └── package.json │ ├── defaults.js │ ├── docs.js │ ├── npm │ │ └── gulpfile.js │ ├── project │ │ ├── config.js │ │ ├── install.js │ │ └── release.js │ ├── tasks.js │ └── user.js │ ├── docs │ ├── build.js │ ├── metadata.js │ └── serve.js │ ├── install.js │ ├── rtl │ ├── build.js │ └── watch.js │ ├── version.js │ └── watch.js ├── tests └── spec.js ├── views ├── admin.html ├── admins │ └── index.html ├── index.html ├── posts │ └── index.html └── users │ └── index.html ├── web.config ├── webpack ├── server.js └── utils │ ├── clean-dist.js │ ├── write-admin-stats.js │ └── write-stats.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["react", "es2015", "stage-0"], 3 | "plugins": [ 4 | [ 5 | "transform-decorators-legacy", 6 | "transform-runtime", 7 | "add-module-exports" 8 | ] 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | exclude_paths: 2 | - styles/** 3 | - public/** 4 | - tests/** 5 | - coverage/** 6 | - lib/** 7 | - webpack/** 8 | - config/** 9 | - src/server/db/migrations/** 10 | - src/server/db/models/** 11 | - src/shared/utils/semantic-custom.js 12 | - src/vendor/** 13 | engines: 14 | eslint: 15 | enabled: true 16 | ratings: 17 | paths: 18 | - src/** 19 | -------------------------------------------------------------------------------- /.csslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "vendor-prefix" : true, 3 | "duplicate-properties" : true, 4 | "display-property-grouping" : true, 5 | "empty-rules" : true, 6 | 7 | "adjoining-classes" : false, 8 | "box-model" : false, 9 | "compatible-vendor-prefixes" : false, 10 | "box-sizing" : false, 11 | "duplicate-background-images" : false, 12 | "floats" : false, 13 | "important" : false, 14 | "overqualified-elements" : false, 15 | "rules-count" : false, 16 | "shorthand" : false, 17 | "zero-units" : false 18 | } 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | [*] 8 | 9 | # Change these settings to your own preference 10 | indent_style = space 11 | indent_size = 2 12 | 13 | # We recommend you to keep these unchanged 14 | end_of_line = lf 15 | charset = utf-8 16 | trim_trailing_whitespace = true 17 | insert_final_newline = true 18 | 19 | [*.md] 20 | trim_trailing_whitespace = false 21 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | config/ 2 | coverage/ 3 | images/ 4 | lib/ 5 | node_modules/ 6 | storage/ 7 | styles/ 8 | tests/ 9 | uploads/ 10 | views/ 11 | webpack/ 12 | src/vendor/ 13 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "babel-eslint", 3 | "extends": "eslint-config-airbnb", 4 | "plugins": ["react"], 5 | "env": { 6 | "browser": true, 7 | "node": true 8 | }, 9 | "rules": { 10 | "react/jsx-quotes": 0, 11 | "react/jsx-uses-react": 1, 12 | "react/jsx-uses-vars": 1, 13 | "react/no-did-mount-set-state": 1, 14 | "react/no-did-update-set-state": 1, 15 | "react/no-multi-comp": 2, 16 | "react/prop-types": 2, 17 | "react/react-in-jsx-scope": 2, 18 | "react/self-closing-comp": 1, 19 | "react/wrap-multilines": 2, 20 | 21 | "jsx-quotes": [2, "prefer-double"], 22 | "quotes": [2, "single", "avoid-escape"], 23 | "comma-dangle": [2, "never"], 24 | "no-underscore-dangle": 0, 25 | "space-in-brackets": 0, 26 | "func-names": 0, 27 | "no-else-return": 0, 28 | "no-param-reassign": 0, 29 | "semi": 0, 30 | "comma-spacing": 0, 31 | "space-before-function-paren": 0, 32 | "new-cap": 0, 33 | "no-unused-vars": 0, 34 | "no-unused-expressions": 0, 35 | "space-infix-ops": 0, 36 | "no-empty": 0, 37 | "no-undef": 0, 38 | "prefer-const": 0 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | .gitattributes 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | 29 | # database files 30 | *.sqlite 31 | 32 | # global config 33 | config/development.json 34 | config/statging.json 35 | config/production.json 36 | 37 | # db mata json 38 | meta-*.json 39 | 40 | # SASS 41 | .sass-cache 42 | 43 | public/assets 44 | 45 | lib/ 46 | 47 | storage/* 48 | 49 | uploads/* 50 | 51 | *.env 52 | 53 | .DS_Store 54 | */.DS_Store 55 | 56 | *.logs 57 | 58 | iisnode/* 59 | 60 | .vscode/ 61 | 62 | sitemap.xml 63 | -------------------------------------------------------------------------------- /.istanbul.yml: -------------------------------------------------------------------------------- 1 | verbose: false 2 | instrumentation: 3 | default-excludes: true 4 | excludes: 5 | - styles/** 6 | - public/** 7 | - tests/** 8 | - coverage/** 9 | - lib/** 10 | - webpack/** 11 | - config/** 12 | - src/server/db/migrations/** 13 | - src/server/db/models/** 14 | - src/shared/utils/semantic-custom.js 15 | - src/vendor/** 16 | reporting: 17 | print: summary 18 | reports: 19 | - lcov 20 | dir: ./coverage 21 | -------------------------------------------------------------------------------- /.sequelizerc: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | 3 | module.exports = { 4 | 'config': path.resolve('config/sequelize/config.json'), 5 | 'models-path': path.resolve('db/models'), 6 | 'migrations-path': path.resolve('db/migrations') 7 | } 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "6" 4 | - "7" 5 | - "8" 6 | sudo: false 7 | script: npm run test:ci 8 | after_success: 9 | - ./node_modules/.bin/codeclimate-test-reporter < coverage/lcov.info 10 | - cat coverage/lcov.info | ./node_modules/.bin/coveralls 11 | - rm -rf coverage 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Hsin-lin Cheng 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /config/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "SESSION_KEYS": [ 4 | "this is a secret key, please replace it and keep secrets." 5 | ], 6 | "SALT": "GOD'S IN HIS HEAVEN, ALL'S RIGHT WITH THE WORLD.", 7 | "BASEID": 9999, 8 | "SEED": 1412 9 | }, 10 | "ReCAPTCHA": { 11 | "KEY": "see https://github.com/dozoisch/react-google-recaptcha", 12 | "SECRET": "KEEPSECRETS" 13 | }, 14 | "passport": { 15 | "FACEBOOK_APP_ID": "1234", 16 | "FACEBOOK_APP_SECRET": "secret", 17 | "FACEBOOK_CALLBACK": "/auth/facebook/callback", 18 | "GOOGLE_APP_ID": "1234", 19 | "GOOGLE_APP_SECRET": "secret", 20 | "GOOGLE_CALLBACK": "/auth/google/callback" 21 | }, 22 | "sequelize": { 23 | "DATABASE": "", 24 | "USERNAME": "", 25 | "PASSWORD": "" 26 | }, 27 | "jwt": { 28 | "SECRET_OR_KEY": "thisisasecretkey", 29 | "OPTIONS": { 30 | "ALG": "HS256", 31 | "EXP": "3h", 32 | "ISS": "http://localhost:3000/api/v1/login", 33 | "AUD": "http://localhost:3000" 34 | }, 35 | "PERMIT": { 36 | "advanced": [""] 37 | } 38 | }, 39 | "admin": { 40 | "defaultEmail": "admin@example.com", 41 | "defaultPassword": "admin" 42 | }, 43 | "twb": { 44 | "ACCESS_ID": "" 45 | }, 46 | "sitemap": { 47 | "ACCESS_KEY": "testonly" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /config/test.json: -------------------------------------------------------------------------------- 1 | { 2 | "app": { 3 | "SESSION_KEYS": [ 4 | "this is a secret key, please replace it and keep secrets." 5 | ], 6 | "SALT": "GOD'S IN HIS HEAVEN, ALL'S RIGHT WITH THE WORLD.", 7 | "BASEID": 9999, 8 | "SEED": 1412 9 | }, 10 | "ReCAPTCHA": { 11 | "KEY": "", 12 | "SECRET": "" 13 | }, 14 | "passport": { 15 | "FACEBOOK_APP_ID": "1234", 16 | "FACEBOOK_APP_SECRET": "secret", 17 | "FACEBOOK_CALLBACK": "/auth/facebook/callback", 18 | "GOOGLE_APP_ID": "1234", 19 | "GOOGLE_APP_SECRET": "secret", 20 | "GOOGLE_CALLBACK": "/auth/google/callback" 21 | }, 22 | "sequelize": { 23 | "DATABASE": "", 24 | "USERNAME": "", 25 | "PASSWORD": "" 26 | }, 27 | "jwt": { 28 | "SECRET_OR_KEY": "thisisasecretkey", 29 | "OPTIONS": { 30 | "ALG": "HS256", 31 | "EXP": "3h", 32 | "ISS": "http://localhost:3000/api/v1/login", 33 | "AUD": "http://localhost:3000" 34 | } 35 | }, 36 | "admin": { 37 | "defaultEmail": "admin@example.com", 38 | "defaultPassword": "admin" 39 | }, 40 | "twb": { 41 | "ACCESS_ID": "" 42 | }, 43 | "sitemap": { 44 | "ACCESS_KEY": "testonly" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /iisnode.js: -------------------------------------------------------------------------------- 1 | require('./lib/server'); 2 | -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon-57x57.png -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon-72x72.png -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /images/app/v3w/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/apple-touch-icon.png -------------------------------------------------------------------------------- /images/app/v3w/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/app/v3w/favicon.ico -------------------------------------------------------------------------------- /images/ccnda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/ccnda.png -------------------------------------------------------------------------------- /images/ccnda@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/ccnda@2x.png -------------------------------------------------------------------------------- /images/ccnda_icon_mini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/ccnda_icon_mini.png -------------------------------------------------------------------------------- /images/ccnda_icon_mini@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/ccnda_icon_mini@2x.png -------------------------------------------------------------------------------- /images/dotmatrix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/dotmatrix.png -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/icon.png -------------------------------------------------------------------------------- /images/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/image.png -------------------------------------------------------------------------------- /images/msword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/msword.png -------------------------------------------------------------------------------- /images/oursevents-m.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/oursevents-m.png -------------------------------------------------------------------------------- /images/oursevents-m@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/oursevents-m@2x.png -------------------------------------------------------------------------------- /images/oursevents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/oursevents.png -------------------------------------------------------------------------------- /images/oursevents@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/oursevents@2x.png -------------------------------------------------------------------------------- /images/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/pdf.png -------------------------------------------------------------------------------- /images/twbible.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/images/twbible.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "module": "commonjs" 5 | } 6 | } -------------------------------------------------------------------------------- /nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": [ 3 | "./src/server/", 4 | "./src/client/admin/routes.js", 5 | "./src/shared/routes.js", 6 | "./src/shared/i18n/", 7 | "./views/" 8 | ], 9 | "ext": "html css less js" 10 | } 11 | -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: /ring 3 | 4 | Sitemap: https://event.oursweb.net/sitemap.xml 5 | -------------------------------------------------------------------------------- /semantic.json: -------------------------------------------------------------------------------- 1 | { 2 | "base": "styles/semantic/", 3 | "paths": { 4 | "source": { 5 | "config": "src/theme.config", 6 | "definitions": "src/definitions/", 7 | "site": "src/site/", 8 | "themes": "src/themes/" 9 | }, 10 | "output": { 11 | "packaged": "dist/", 12 | "uncompressed": "dist/components/", 13 | "compressed": "dist/components/", 14 | "themes": "dist/themes/" 15 | }, 16 | "clean": "dist/" 17 | }, 18 | "permission": false, 19 | "rtl": false, 20 | "version": "2.2.10" 21 | } -------------------------------------------------------------------------------- /src/client/DevTools.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { createDevTools } from 'redux-devtools' 4 | 5 | import LogMonitor from 'redux-devtools-log-monitor' 6 | import DockMonitor from 'redux-devtools-dock-monitor' 7 | import SliderMonitor from 'redux-slider-monitor' 8 | 9 | const DevTools = createDevTools( 10 | 15 | 16 | 17 | 18 | ) 19 | 20 | module.exports = DevTools 21 | -------------------------------------------------------------------------------- /src/client/admin.js: -------------------------------------------------------------------------------- 1 | require('babel-polyfill') 2 | require('./admin/index') 3 | -------------------------------------------------------------------------------- /src/client/admin/components/AdminHandler.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import ReactCSSTransitionGroup from 'react-addons-css-transition-group' 3 | 4 | if (process.env.BROWSER) { 5 | require('css/ui/base') 6 | require('css/ui/admin') 7 | require('css/animation') 8 | require('css/admin') 9 | require('css/addon/csshake.min') 10 | require('css/images') 11 | require('sweetalert/dist/sweetalert') 12 | } 13 | 14 | export default class AdminHandler extends Component { 15 | 16 | static propTypes = { 17 | children: PropTypes.any 18 | } 19 | 20 | constructor (props) { 21 | super(props) 22 | } 23 | 24 | componentDidMount () { 25 | require('fastclick').attach(document.body) 26 | } 27 | 28 | render () { 29 | return ( 30 | 34 | {this.props.children} 35 | 36 | ) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/client/admin/components/AdsComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import { 4 | Menu, 5 | AdsTable as Table, 6 | AdsNav as Nav 7 | } from 'client/admin/components/widget' 8 | 9 | export default class Ads extends Component { 10 | 11 | constructor (props) { 12 | super(props) 13 | } 14 | 15 | render () { 16 | return ( 17 |
18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 | 26 | 27 | 28 | 29 | 30 | ) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/client/admin/components/BlockedComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import { 4 | Menu, 5 | MembersTable as Table, 6 | MembersNav as Nav 7 | } from 'client/admin/components/widget' 8 | 9 | export default class Blocked extends Component { 10 | 11 | constructor (props) { 12 | super(props) 13 | } 14 | 15 | render () { 16 | return ( 17 |
18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 |
27 |
28 |
29 | 30 | 31 | 32 | 33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/client/admin/components/DashComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import { 4 | Menu, 5 | Table, 6 | Nav 7 | } from 'client/admin/components/widget' 8 | 9 | export default class Dash extends Component { 10 | 11 | constructor (props) { 12 | super(props) 13 | } 14 | 15 | render () { 16 | return ( 17 |
18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 |
27 |
28 |
29 | 30 | 31 | 32 | 33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/client/admin/components/DisabledComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import { 4 | Menu, 5 | PermissionsTable as Table, 6 | PermissionsNav as Nav 7 | } from 'client/admin/components/widget' 8 | 9 | export default class Disabled extends Component { 10 | 11 | constructor (props) { 12 | super(props) 13 | } 14 | 15 | render () { 16 | return ( 17 |
18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 |
27 |
28 |
29 | 30 | 31 | 32 | 33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/client/admin/components/LoginHandler.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import Login from './LoginComponent' 3 | import { bindActionCreators } from 'redux' 4 | import { connect } from 'react-redux' 5 | import * as AuthActions from 'client/admin/actions/AuthActions' 6 | 7 | class LoginHandler extends Component { 8 | 9 | static propTypes = { 10 | dispatch: PropTypes.func.isRequired 11 | } 12 | 13 | constructor (props) { 14 | super(props) 15 | } 16 | 17 | render () { 18 | const { dispatch } = this.props 19 | return ( 20 | 24 | ) 25 | } 26 | } 27 | 28 | export default connect(state => ({ 29 | auth: state.auth 30 | }))(LoginHandler) 31 | -------------------------------------------------------------------------------- /src/client/admin/components/MembersComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import { 4 | Menu, 5 | MembersTable as Table, 6 | MembersNav as Nav 7 | } from 'client/admin/components/widget' 8 | 9 | export default class Members extends Component { 10 | 11 | constructor (props) { 12 | super(props) 13 | } 14 | 15 | render () { 16 | return ( 17 |
18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 |
27 |
28 |
29 | 30 | 31 | 32 | 33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/client/admin/components/MembersDetailComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import { 4 | Menu, 5 | Detail, 6 | MembersTable as Table, 7 | MembersNav as Nav 8 | } from 'client/admin/components/widget' 9 | 10 | export default class MembersDetail extends Component { 11 | 12 | constructor (props) { 13 | super(props) 14 | } 15 | 16 | render () { 17 | return ( 18 |
19 |
20 |
21 |
22 |
23 | 24 |
25 |
26 | 27 |
28 |
29 |
30 |
31 | ) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/client/admin/components/MembersDetailHandler.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import MembersDetail from './MembersDetailComponent' 3 | import { bindActionCreators } from 'redux' 4 | import { connect } from 'react-redux' 5 | import * as UserActions from 'client/admin/actions/UserActions' 6 | 7 | class MembersDetailHandler extends Component { 8 | 9 | static propTypes = { 10 | dispatch: PropTypes.func.isRequired, 11 | params: PropTypes.object.isRequired, 12 | collect: PropTypes.object.isRequired 13 | } 14 | 15 | constructor (props) { 16 | super(props) 17 | } 18 | 19 | componentWillMount () { 20 | const { dispatch, params } = this.props 21 | const { id } = params 22 | if (id) { 23 | dispatch(UserActions.getDetail(id)) 24 | } 25 | } 26 | 27 | render () { 28 | const { dispatch } = this.props 29 | return ( 30 | 35 | ) 36 | } 37 | } 38 | 39 | export default connect(state => ({ 40 | collect: state.user 41 | }))(MembersDetailHandler) 42 | -------------------------------------------------------------------------------- /src/client/admin/components/PermissionsComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import { 4 | Menu, 5 | PermissionsTable as Table, 6 | PermissionsNav as Nav 7 | } from 'client/admin/components/widget' 8 | 9 | export default class Permissions extends Component { 10 | 11 | constructor (props) { 12 | super(props) 13 | } 14 | 15 | render () { 16 | return ( 17 |
18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 |
27 |
28 |
29 | 30 | 31 | 32 | 33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/client/admin/components/SpamComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import { 4 | Menu, 5 | Table, 6 | Nav 7 | } from 'client/admin/components/widget' 8 | 9 | export default class Spam extends Component { 10 | 11 | constructor (props) { 12 | super(props) 13 | } 14 | 15 | render () { 16 | return ( 17 |
18 |
19 |
20 |
21 |
22 | 23 |
24 |
25 |
27 |
28 |
29 | 30 | 31 | 32 | 33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/client/admin/components/StatisticsHandler.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import Statistics from './StatisticsComponent' 3 | import { bindActionCreators } from 'redux' 4 | import { connect } from 'react-redux' 5 | import * as StatisticActions from 'client/admin/actions/StatisticActions' 6 | import * as AuthActions from 'client/admin/actions/AuthActions' 7 | import moment from 'moment' 8 | 9 | class StatisticsHandler extends Component { 10 | 11 | static propTypes = { 12 | dispatch: PropTypes.func.isRequired, 13 | collect: PropTypes.object.isRequired, 14 | auth: PropTypes.object.isRequired 15 | } 16 | 17 | constructor (props) { 18 | super(props) 19 | } 20 | 21 | componentWillMount () { 22 | const { dispatch } = this.props 23 | const { year, month } = this.props.collect 24 | dispatch(StatisticActions.fetchData(year, month)) 25 | } 26 | 27 | render () { 28 | const { dispatch } = this.props 29 | return ( 30 | 35 | ) 36 | } 37 | } 38 | 39 | export default connect(state => ({ 40 | auth: state.auth, 41 | collect: state.statistic 42 | }))(StatisticsHandler) 43 | -------------------------------------------------------------------------------- /src/client/admin/components/addon/require-auth.js: -------------------------------------------------------------------------------- 1 | import { 2 | checkToken, 3 | getToken, 4 | showUser, 5 | logout 6 | } from 'client/admin/actions/AuthActions' 7 | 8 | export default function (nextState, replaceState) { 9 | const nextPathname = nextState.location.pathname 10 | const { dispatch, getState } = this.store 11 | 12 | dispatch(checkToken()) 13 | if (!getState().auth.verified) { 14 | this.store.dispatch(logout()) 15 | replaceState({ nextPathname: nextPathname }, '/ring') 16 | } 17 | if (!getToken()) { 18 | this.store.dispatch(logout()) 19 | replaceState({ nextPathname: nextPathname }, '/ring') 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/client/admin/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as Admin } from './AdminHandler' 2 | export { default as Dash } from './DashHandler' 3 | export { default as Spam } from './SpamHandler' 4 | export { default as Members } from './MembersHandler' 5 | export { default as MembersDetail } from './MembersDetailHandler' 6 | export { default as Blocked } from './BlockedHandler' 7 | export { default as Login } from './LoginHandler' 8 | export { default as Ads } from './AdsHandler' 9 | export { default as Permissions } from './PermissionsHandler' 10 | export { default as Statistics } from './StatisticsHandler' 11 | export { default as Disabled } from './DisabledHandler' 12 | -------------------------------------------------------------------------------- /src/client/admin/components/widget/index.js: -------------------------------------------------------------------------------- 1 | export { default as Menu } from './MenuWidget' 2 | export { default as Pagination } from './PaginationWidget' 3 | export { default as Table } from './TableWidget' 4 | export { default as MembersTable } from './MembersTableWidget' 5 | export { default as AdsTable } from './AdsTableWidget' 6 | export { default as PermissionsTable } from './PermissionsTableWidget' 7 | export { default as Nav } from './NavWidget' 8 | export { default as MembersNav } from './MembersNavWidget' 9 | export { default as AdsNav } from './AdsNavWidget' 10 | export { default as PermissionsNav } from './PermissionsNavWidget' 11 | export { default as Detail } from './DetailWidget' 12 | -------------------------------------------------------------------------------- /src/client/admin/pages/NotFound.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { Link } from 'react-router' 3 | 4 | export default class NotFound extends Component { 5 | 6 | render () { 7 | return ( 8 |
9 |
10 |
11 |

HTTP 404

12 |
13 |
14 |
15 | ) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/client/admin/reducers/StatisticStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | LOAD_STATISTICS_STARTED, 3 | LOAD_STATISTICS_COMPLETED, 4 | LOAD_STATISTICS_FAILED 5 | } from 'client/admin/constants/ActionTypes' 6 | import { createReducer } from 'shared/utils/redux-utils' 7 | import moment from 'moment' 8 | 9 | const initialState = { 10 | done: false, 11 | year: moment().year(), 12 | month: moment().month() + 1, 13 | items: [], 14 | countUsers: null, 15 | countPosts: null, 16 | data: [], 17 | errors: null 18 | } 19 | 20 | export default createReducer(initialState, { 21 | [LOAD_STATISTICS_STARTED]: () => 22 | ({ done: false }), 23 | [LOAD_STATISTICS_COMPLETED]: (state, action) => 24 | ({ done: true, year: action.year, month: action.month, countPosts: action.countPosts, countUsers: action.countUsers, items: action.items, data: action.data, errors: null }), 25 | [LOAD_STATISTICS_FAILED]: (state, action) => 26 | ({ done: false, errors: action.errors }) 27 | }) 28 | -------------------------------------------------------------------------------- /src/client/admin/reducers/index.js: -------------------------------------------------------------------------------- 1 | export { default as admin } from './AdminStore' 2 | export { default as auth } from './AuthStore' 3 | export { default as post } from './PostStore' 4 | export { default as user } from './UserStore' 5 | export { default as statistic } from './StatisticStore' 6 | export { default as ad } from './AdStore' 7 | -------------------------------------------------------------------------------- /src/client/fallback.js: -------------------------------------------------------------------------------- 1 | if (process.env.BROWSER) { 2 | require('css/ui/checkbox') 3 | } 4 | -------------------------------------------------------------------------------- /src/client/index.js: -------------------------------------------------------------------------------- 1 | require('babel-polyfill') 2 | require('./main') 3 | -------------------------------------------------------------------------------- /src/server/adminView.js: -------------------------------------------------------------------------------- 1 | import nunjucks from 'nunjucks' 2 | import route from 'koa-route' 3 | import fs from 'fs' 4 | import path from 'path' 5 | 6 | nunjucks.configure('views', { 7 | autoescape: true 8 | }) 9 | 10 | function *reactRoute () { 11 | const env = process.env.NODE_ENV 12 | let assets 13 | if (env === 'development') { 14 | assets = fs.readFileSync( 15 | path.resolve(__dirname, '../../storage/webpack-admin-stats.json') 16 | ) 17 | assets = JSON.parse(assets) 18 | } else { 19 | assets = require('storage/webpack-admin-stats.json') 20 | } 21 | this.body = nunjucks.render('admin.html', { 22 | env: process.env, 23 | assets 24 | }) 25 | } 26 | 27 | export default function (app) { 28 | app.use(route.get('/ring', reactRoute)) 29 | app.use(route.get('/ring/(.*)', reactRoute)) 30 | } 31 | -------------------------------------------------------------------------------- /src/server/db/dao/admins/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./adminsProvider') 2 | -------------------------------------------------------------------------------- /src/server/db/dao/locations/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./locationsProvider') 2 | -------------------------------------------------------------------------------- /src/server/db/dao/posts/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./postsProvider') 2 | -------------------------------------------------------------------------------- /src/server/db/dao/promotions/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./promotionsProvider') 2 | -------------------------------------------------------------------------------- /src/server/db/dao/statistics/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./statisticsProvider') 2 | -------------------------------------------------------------------------------- /src/server/db/dao/users/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./usersProvider') 2 | -------------------------------------------------------------------------------- /src/server/db/dao/usersInfo/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./usersInfoProvider') 2 | -------------------------------------------------------------------------------- /src/server/db/dao/usersInfo/usersInfoProvider.js: -------------------------------------------------------------------------------- 1 | const bcrypt = require('co-bcryptjs') 2 | const hashids = require('src/shared/utils/hashids-plus') 3 | const models = require('src/server/db/models') 4 | import { isFinite } from 'lodash' 5 | 6 | exports.createOrUpdate = function *(hid, info) { 7 | const fillable = [ 8 | 'uid', 9 | 'cid', 10 | 'ocname', 11 | 'contact', 12 | 'country', 13 | 'city', 14 | 'address', 15 | 'place', 16 | 'zipcode', 17 | 'lat', 18 | 'lng', 19 | 'tel', 20 | 'fax', 21 | 'url', 22 | 'email' 23 | ] 24 | const id = +hashids.decode(hid) 25 | if (!isFinite(id)) return false 26 | const userInfo = yield models.usersInfo.findOne({ 27 | where: { uid: id } 28 | }) 29 | 30 | if (!userInfo) { 31 | info.uid = id 32 | return yield models.usersInfo.create(info, { fields: fillable }) 33 | } else { 34 | return yield userInfo.update(info, { fields: fillable }) 35 | } 36 | } 37 | 38 | exports.load = function *(hid) { 39 | const id = +hashids.decode(hid) 40 | if (!isFinite(id)) return {} 41 | return yield models.usersInfo.findOne({ 42 | where: { uid: id }, 43 | raw: true 44 | }) 45 | } 46 | -------------------------------------------------------------------------------- /src/server/db/index.js: -------------------------------------------------------------------------------- 1 | exports.users = require('./dao/users') 2 | exports.posts = require('./dao/posts') 3 | exports.usersInfo = require('./dao/usersInfo') 4 | exports.admins = require('./dao/admins') 5 | exports.promotions = require('./dao/promotions') 6 | exports.statistics = require('./dao/statistics') 7 | exports.locations = require('./dao/locations') 8 | -------------------------------------------------------------------------------- /src/server/db/models/index.js: -------------------------------------------------------------------------------- 1 | const pg = require('pg') 2 | // https://github.com/sequelize/sequelize/issues/1774 3 | pg.defaults.parseInt8 = true 4 | // https://github.com/sequelize/sequelize/issues/3781 5 | delete pg.native 6 | 7 | const fs = require('fs') 8 | const path = require('path') 9 | const Sequelize = require('sequelize') 10 | const basename = path.basename(module.filename) 11 | const env = process.env.NODE_ENV || 'development' 12 | const config = require('config/sequelize/config')[env] 13 | const account = require('config').sequelize 14 | const sequelize = new Sequelize( 15 | account.DATABASE, 16 | account.USERNAME, 17 | account.PASSWORD, 18 | config 19 | ) 20 | const db = {} 21 | 22 | fs 23 | .readdirSync(__dirname) 24 | .filter(function (file) { 25 | return (file.indexOf('.') !== 0) && (file !== basename) 26 | }) 27 | .forEach(function (file) { 28 | const model = sequelize.import(path.join(__dirname, file)) 29 | db[model.name] = model 30 | }) 31 | 32 | Object.keys(db).forEach(function (modelName) { 33 | /* istanbul ignore else */ 34 | if ('associate' in db[modelName]) { 35 | db[modelName].associate(db) 36 | } 37 | }) 38 | 39 | db.sequelize = sequelize 40 | db.Sequelize = Sequelize 41 | 42 | module.exports = db 43 | -------------------------------------------------------------------------------- /src/server/db/models/promotion.js: -------------------------------------------------------------------------------- 1 | module.exports = function (sequelize, Sequelize) { 2 | return sequelize.define('promotions', { 3 | id: { 4 | allowNull: false, 5 | autoIncrement: true, 6 | primaryKey: true, 7 | type: Sequelize.BIGINT 8 | }, 9 | script: { 10 | unique: false, 11 | type: Sequelize.STRING 12 | }, 13 | name: { 14 | allowNull: true, 15 | type: Sequelize.STRING 16 | }, 17 | status: { 18 | defaultValue: 0, 19 | type: Sequelize.INTEGER 20 | }, 21 | comment: { 22 | allowNull: true, 23 | type: Sequelize.STRING 24 | } 25 | }, { 26 | classMethods: { 27 | associate: function (models) { 28 | // associations can be defined here 29 | } 30 | }, 31 | instanceMethods: { 32 | toJSON: function () { 33 | const values = this.get() 34 | delete values.created_at 35 | delete values.updated_at 36 | delete values.deleted_at 37 | return values 38 | } 39 | } 40 | }); 41 | } 42 | -------------------------------------------------------------------------------- /src/server/index.js: -------------------------------------------------------------------------------- 1 | delete process.env.BROWSER 2 | 3 | const env = process.env.NODE_ENV || 'development' 4 | 5 | const path = require('path') 6 | const modulePath = require('app-module-path') 7 | 8 | modulePath.addPath(path.join(__dirname, '../../')) 9 | 10 | if (env !== 'production') { 11 | modulePath.addPath(path.join(__dirname, '../../src')) 12 | } else { 13 | modulePath.addPath(path.join(__dirname, '../../lib')) 14 | } 15 | 16 | modulePath.addPath(path.join(__dirname, '../../styles')) 17 | 18 | require('babel-core/register'); 19 | require('babel-polyfill'); 20 | 21 | const app = require('./koa.js') 22 | module.exports = app 23 | -------------------------------------------------------------------------------- /src/server/passport/auth/rest-auth-loose.js: -------------------------------------------------------------------------------- 1 | import passport from 'koa-passport' 2 | import db from 'src/server/db' 3 | 4 | const config = require('config').admin 5 | const Admin = db.admins 6 | 7 | export default function *(next) { 8 | const ctx = this 9 | yield* passport.authenticate( 10 | 'jwt', 11 | { session: false }, 12 | function *(err, user, info) { 13 | const count = yield Admin.count() 14 | if (count === 0) { 15 | ctx.user = { 16 | id: 0, 17 | email: config.defaultEmail 18 | } 19 | yield next 20 | } else { 21 | if (err || !user) { 22 | ctx.status = 401 23 | ctx.body = {} 24 | } else { 25 | ctx.user = user 26 | ctx.info = info 27 | yield next 28 | } 29 | } 30 | }).call(this, next) 31 | } 32 | -------------------------------------------------------------------------------- /src/server/passport/auth/rest-auth.js: -------------------------------------------------------------------------------- 1 | import passport from 'koa-passport' 2 | 3 | export default function *(next) { 4 | const ctx = this 5 | yield* passport.authenticate( 6 | 'jwt', 7 | { session: false }, 8 | function *(err, user, info) { 9 | if (err || !user) { 10 | ctx.status = 401 11 | ctx.body = {} 12 | } else { 13 | ctx.user = user 14 | ctx.info = info 15 | yield next 16 | } 17 | }).call(this, next) 18 | } 19 | -------------------------------------------------------------------------------- /src/server/passport/basic.js: -------------------------------------------------------------------------------- 1 | import passport from 'koa-passport' 2 | import { BasicStrategy } from 'passport-http' 3 | import conifg from 'config' 4 | import db from 'src/server/db' 5 | import co from 'co' 6 | import debug from 'debug' 7 | 8 | const User = db.users 9 | 10 | export default passport.use(new BasicStrategy( 11 | function (email, password, done) { 12 | co(function *() { 13 | try { 14 | const user = yield User.auth(email, password) 15 | if (!user) { 16 | throw new Error('no user') 17 | } else { 18 | return user 19 | } 20 | } catch (err) { 21 | throw err 22 | } 23 | }) 24 | .then(function (user) { 25 | return done(null, user) 26 | }) 27 | .catch(function (err) { 28 | return done(err) 29 | }) 30 | } 31 | )) 32 | -------------------------------------------------------------------------------- /src/server/passport/local-jwt.js: -------------------------------------------------------------------------------- 1 | import passport from 'koa-passport' 2 | import db from 'src/server/db' 3 | import co from 'co' 4 | import config from 'config' 5 | import debug from 'debug' 6 | 7 | const JwtStrategy = require('passport-jwt').Strategy 8 | const User = db.users 9 | const Admin = db.admins 10 | 11 | const opts = {} 12 | opts.secretOrKey = config.jwt.SECRET_OR_KEY 13 | opts.algorithm = config.jwt.OPTIONS.ALG 14 | opts.expiresIn = config.jwt.OPTIONS.EXP 15 | opts.issuer = config.jwt.OPTIONS.ISS 16 | opts.audience = config.jwt.OPTIONS.AUD 17 | 18 | export default passport.use(new JwtStrategy(opts, function (payload, done) { 19 | co(function* () { 20 | try { 21 | let user 22 | if (!!payload.isAdmin) { 23 | user = yield Admin.loadByEmail(payload.email) 24 | } else { 25 | user = yield User.loadByEmail(payload.email) 26 | } 27 | 28 | if (!user) { 29 | throw new Error('no user') 30 | } else { 31 | return user 32 | } 33 | } catch (err) { 34 | throw new Error(err) 35 | } 36 | }) 37 | .then(function (user) { 38 | return done(null, user, payload) 39 | }) 40 | .catch(function (err) { 41 | return done(err, null, payload) 42 | }) 43 | })) 44 | -------------------------------------------------------------------------------- /src/server/passport/local.js: -------------------------------------------------------------------------------- 1 | import passport from 'koa-passport' 2 | import db from 'src/server/db' 3 | import co from 'co' 4 | import debug from 'debug' 5 | 6 | const config = require('config').admin 7 | const LocalStrategy = require('passport-local').Strategy 8 | const Admin = db.admins 9 | 10 | export default passport.use(new LocalStrategy({ 11 | usernameField: 'email', 12 | passwordField: 'passwd', 13 | session: false 14 | }, function (email, passwd, done) { 15 | co(function *() { 16 | try { 17 | // if db is empty and default email and password 18 | const count = yield Admin.count() 19 | if (count === 0 20 | && email === config.defaultEmail 21 | && passwd === config.defaultPassword) { 22 | return { 23 | id: 0, 24 | email: config.defaultEmail 25 | } 26 | } 27 | 28 | const user = yield Admin.auth(email, passwd) 29 | if (!user) { 30 | throw new Error('no permissions') 31 | } else { 32 | return user 33 | } 34 | } catch (err) { 35 | throw err 36 | } 37 | }) 38 | .then(function (user) { 39 | return done(null, user) 40 | }) 41 | .catch(function (err) { 42 | return done(err) 43 | }) 44 | })) 45 | -------------------------------------------------------------------------------- /src/server/services/admin/index.js: -------------------------------------------------------------------------------- 1 | exports.v1 = require('./v1') 2 | -------------------------------------------------------------------------------- /src/server/services/admin/v1/index.js: -------------------------------------------------------------------------------- 1 | import compose from 'koa-compose' 2 | import admins from './admins' 3 | import posts from './posts' 4 | import users from './users' 5 | import promotions from './promotions' 6 | import statistics from './statistics' 7 | 8 | const router = compose([ 9 | admins.middleware(), 10 | posts.middleware(), 11 | users.middleware(), 12 | promotions.middleware(), 13 | statistics.middleware() 14 | ]) 15 | 16 | module.exports = router 17 | -------------------------------------------------------------------------------- /src/server/services/index.js: -------------------------------------------------------------------------------- 1 | exports.v1 = require('./v1') 2 | -------------------------------------------------------------------------------- /src/server/services/v1/cals.js: -------------------------------------------------------------------------------- 1 | import Resource from 'koa-resource-router' 2 | import db from 'src/server/db' 3 | 4 | const Post = db.posts 5 | 6 | export default new Resource('cals', { 7 | // GET /cals 8 | index: function *(next) { 9 | const { action } = this.request.query 10 | 11 | if (action === 'countPostInMonth') { 12 | const { year, month } = this.request.query 13 | this.body = yield Post.countPerDayInMonth(year, month) 14 | } 15 | } 16 | }) 17 | -------------------------------------------------------------------------------- /src/server/services/v1/index.js: -------------------------------------------------------------------------------- 1 | import compose from 'koa-compose' 2 | import users from './users' 3 | import usersInfo from './usersInfo' 4 | import cals from './cals' 5 | import posts from './posts' 6 | import uploads from './uploads' 7 | import searches from './searches' 8 | import promotions from './promotions' 9 | import ogs from './ogs' 10 | 11 | const router = compose([ 12 | users.middleware(), 13 | usersInfo.middleware(), 14 | posts.middleware(), 15 | cals.middleware(), 16 | uploads.middleware(), 17 | searches.middleware(), 18 | promotions.middleware(), 19 | ogs.middleware() 20 | ]) 21 | 22 | module.exports = router 23 | -------------------------------------------------------------------------------- /src/server/services/v1/promotions.js: -------------------------------------------------------------------------------- 1 | import Resource from 'koa-resource-router' 2 | import db from 'src/server/db' 3 | 4 | const Promotion = db.promotions 5 | 6 | export default new Resource('promotions', { 7 | // GET /cpromotions 8 | index: function *(next) { 9 | this.body = yield Promotion.fetchPair() 10 | } 11 | }) 12 | -------------------------------------------------------------------------------- /src/server/translator-helper.js: -------------------------------------------------------------------------------- 1 | import { originLocaleName, supportedList } from 'shared/utils/locale-utils' 2 | 3 | export function TranslatorInit (defaultLocale) { 4 | const Translator = require('counterpart').Instance 5 | const lang = originLocaleName(defaultLocale) 6 | const translator = new Translator() 7 | supportedList.forEach((locale) => { 8 | translator.registerTranslations(locale, require('shared/i18n/' + locale)) 9 | }) 10 | translator.setFallbackLocale(supportedList[0]) 11 | translator.setLocale(lang) 12 | 13 | return { translator, lang } 14 | } 15 | -------------------------------------------------------------------------------- /src/shared/actions/CacheActions.js: -------------------------------------------------------------------------------- 1 | import { 2 | CLEAR_UPLOAD_COMPLETED, 3 | LIST_POST_RELOADED, 4 | LIST_CPROP_POST_RELOADED, 5 | LIST_MANAGE_POST_RELOADED, 6 | LIST_OVERVIEW_POST_RELOADED, 7 | LIST_NEWS_POST_RELOADED, 8 | LIST_OG_POST_RELOADED, 9 | LIST_OG_POST_NEARBY_RELOADED, 10 | SEARCH_NEARBY_RELOADED, 11 | CLEAR_CACHE_COMPLETED 12 | }from 'shared/constants/ActionTypes' 13 | 14 | export function clearCache () { 15 | return dispatch => { 16 | dispatch({ type: CLEAR_UPLOAD_COMPLETED }) 17 | dispatch({ type: LIST_POST_RELOADED }) 18 | dispatch({ type: LIST_CPROP_POST_RELOADED }) 19 | dispatch({ type: LIST_MANAGE_POST_RELOADED }) 20 | dispatch({ type: LIST_OVERVIEW_POST_RELOADED }) 21 | dispatch({ type: LIST_NEWS_POST_RELOADED }) 22 | dispatch({ type: LIST_OG_POST_RELOADED }) 23 | dispatch({ type: LIST_OG_POST_NEARBY_RELOADED }) 24 | 25 | return dispatch({ type: CLEAR_CACHE_COMPLETED }) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/shared/actions/EventActions.js: -------------------------------------------------------------------------------- 1 | import { 2 | EVENT_SCROLL_POSITION_RELOADED, 3 | EVENT_SCROLL_POSITION_STARTED, 4 | EVENT_SCROLL_POSITION_COMPLETED, 5 | EVENT_SCROLL_POSITION_FAILED 6 | } from 'shared/constants/ActionTypes' 7 | 8 | export function saveScrollPosition (scrollTop, store, reload=false) { 9 | return async (dispatch, getState) => { 10 | /* cache service */ 11 | const _scrollTop = getState().event.scrollTop 12 | if (!reload && scrollTop > 0 && _scrollTop === scrollTop) { 13 | return null 14 | } 15 | 16 | if (reload) { 17 | dispatch({ type: EVENT_SCROLL_POSITION_RELOADED }) 18 | } 19 | 20 | dispatch({ type: EVENT_SCROLL_POSITION_STARTED }) 21 | 22 | if (scrollTop >= 0) { 23 | return dispatch({ 24 | type: EVENT_SCROLL_POSITION_COMPLETED, 25 | scrollTop: scrollTop, 26 | store: store 27 | }) 28 | } else { 29 | return dispatch({ 30 | type: EVENT_SCROLL_POSITION_FAILED, 31 | errors: { message: 'scrollTop Error'} 32 | }) 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/shared/components/AppContainer.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | 3 | const Translate = require('react-translate-component') 4 | 5 | export default class AppContainer extends Component { 6 | 7 | static propTypes = { 8 | children: PropTypes.any, 9 | translator: Translate.translatorType 10 | } 11 | 12 | static childContextTypes = { 13 | translator: Translate.translatorType 14 | } 15 | 16 | constructor (props) { 17 | super(props) 18 | } 19 | 20 | getChildContext () { 21 | return { 22 | translator: this.props.translator 23 | } 24 | } 25 | 26 | render () { 27 | const { children } = this.props 28 | return children() 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/shared/components/AppHandler.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import Header from './HeaderHandler' 3 | 4 | if (process.env.BROWSER) { 5 | require('css/ui/base') 6 | require('css/animation') 7 | require('css/screen') 8 | require('css/addon/csshake.min') 9 | require('css/images') 10 | require('css/addon/pin') 11 | require('sweetalert/dist/sweetalert') 12 | } 13 | 14 | export default class AppHandler extends Component { 15 | 16 | static propTypes = { 17 | children: PropTypes.any 18 | } 19 | 20 | constructor (props) { 21 | super(props) 22 | } 23 | 24 | componentDidMount () { 25 | require('fastclick').attach(document.body) 26 | } 27 | 28 | render () { 29 | return ( 30 |
31 |
32 |
33 | {this.props.children} 34 |
35 |
36 | ) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/shared/components/CpropComponent.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import { Link } from 'react-router' 3 | import WallButtons from 'shared/components/wall/WallButtons' 4 | import { PostPropArray } from 'shared/utils/forms' 5 | import { keys, map, range, at } from 'lodash' 6 | import { originLocaleName } from 'shared/utils/locale-utils' 7 | import shouldPureComponentUpdate from 'react-pure-render/function' 8 | import CpropList from './CpropList' 9 | 10 | export default class Cprop extends Component { 11 | 12 | static propTypes = { 13 | defaultLocale: PropTypes.string.isRequired 14 | } 15 | 16 | constructor (props) { 17 | super(props) 18 | } 19 | 20 | shouldComponentUpdate = shouldPureComponentUpdate 21 | 22 | /* eslint-disable max-len */ 23 | render () { 24 | return ( 25 |
26 |
27 | 28 | 31 |
32 |
33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/shared/components/CpropHandler.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import Cprop from './CpropComponent' 3 | import { updateTitle } from '../actions/LocaleActions' 4 | import { connect } from 'react-redux' 5 | import Helmet from 'react-helmet' 6 | import connectI18n from 'shared/components/addon/connect-i18n' 7 | 8 | class CpropHandler extends Component { 9 | 10 | static propTypes = { 11 | dispatch: PropTypes.func.isRequired, 12 | _T: PropTypes.func.isRequired 13 | } 14 | 15 | constructor (props) { 16 | super(props) 17 | } 18 | 19 | componentWillMount () { 20 | const { dispatch } = this.props 21 | dispatch(updateTitle('title.cal')) 22 | } 23 | 24 | render () { 25 | const { _T } = this.props 26 | const title = _T('title.cprop') 27 | const defaultTitle = _T('title.site') 28 | 29 | return ( 30 |
31 | 32 | 33 |
34 | ) 35 | } 36 | } 37 | 38 | export default connect()(connectI18n()(CpropHandler)) 39 | -------------------------------------------------------------------------------- /src/shared/components/HeaderHandler.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import Header from './HeaderComponent' 3 | import { bindActionCreators } from 'redux' 4 | import { connect } from 'react-redux' 5 | import * as AuthActions from 'shared/actions/AuthActions' 6 | import * as SearchActions from 'shared/actions/SearchActions' 7 | 8 | class HeaderHandler extends Component { 9 | 10 | static propTypes = { 11 | dispatch: PropTypes.func.isRequired 12 | } 13 | 14 | constructor (props) { 15 | super(props) 16 | } 17 | 18 | render () { 19 | const { dispatch } = this.props 20 | return ( 21 |
26 | ) 27 | } 28 | } 29 | 30 | export default connect(state => ({ 31 | auth: state.auth, 32 | search: state.search 33 | }))(HeaderHandler) 34 | -------------------------------------------------------------------------------- /src/shared/components/RightSidebar.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | 3 | const Menu = require('react-burger-menu').slide 4 | 5 | export default class RightSidebar extends Component { 6 | 7 | static propTypes = { 8 | children: PropTypes.any, 9 | isOpen: PropTypes.bool, 10 | isMenuOpen: PropTypes.func 11 | } 12 | 13 | static contextTypes = { 14 | history: PropTypes.object.isRequired 15 | } 16 | 17 | constructor (props) { 18 | super(props) 19 | } 20 | 21 | render () { 22 | return ( 23 |
24 | 31 |
32 | { this.props.children } 33 |
34 |
35 |
36 | ) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/shared/components/Sidebar.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | 3 | const Menu = require('react-burger-menu').stack 4 | 5 | export default class Sidebar extends Component { 6 | 7 | static propTypes = { 8 | children: PropTypes.any, 9 | isOpen: PropTypes.bool, 10 | isMenuOpen: PropTypes.func 11 | } 12 | 13 | static contextTypes = { 14 | history: PropTypes.object.isRequired 15 | } 16 | 17 | constructor (props) { 18 | super(props) 19 | } 20 | 21 | render () { 22 | return ( 23 |
24 | 30 |
31 | { this.props.children } 32 |
33 |
34 |
35 | ) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/shared/components/addon/ad.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable max-len */ 2 | // ref: https://gist.github.com/Ambroos/734933c4d3d11c3af847 3 | import React, { Component, PropTypes } from 'react' 4 | 5 | export default class Ad extends Component { 6 | 7 | static propTypes = { 8 | size: PropTypes.string.isRequired, 9 | link: PropTypes.string.isRequired 10 | } 11 | 12 | constructor (props) { 13 | super(props) 14 | 15 | this.loaded = false 16 | } 17 | 18 | componentDidMount () { 19 | this.loadAd() 20 | this.loaded = true 21 | } 22 | 23 | loadAd = () => { 24 | if (!this.loaded) { 25 | try { 26 | require('postscribe/htmlParser/htmlParser.js') 27 | const postscribe = require('exports?postscribe!postscribe') 28 | postscribe('#hotrank-container-' + this.props.size, 29 | ``) 30 | } catch (err) {/* DON'T CARE */} 31 | } 32 | } 33 | 34 | render () { 35 | if (process.env.BROWSER) { 36 | return ( 37 |
40 |
41 | ) 42 | } else { 43 | return (
) 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/shared/components/addon/lightbox/index.js: -------------------------------------------------------------------------------- 1 | export { default as Lightbox } from './lightbox' 2 | -------------------------------------------------------------------------------- /src/shared/components/addon/loading/index.js: -------------------------------------------------------------------------------- 1 | export { default as Loading } from './loading' 2 | -------------------------------------------------------------------------------- /src/shared/components/addon/maps/pin.js: -------------------------------------------------------------------------------- 1 | 2 | import React, { PropTypes, Component } from 'react' 3 | import shouldPureComponentUpdate from 'react-pure-render/function' 4 | 5 | const K_WIDTH = 1000 6 | const K_HEIGHT = 50 7 | 8 | export default class Pin extends Component { 9 | 10 | static propTypes = { 11 | place: PropTypes.string 12 | } 13 | 14 | static defaultProps = {} 15 | 16 | constructor (props) { 17 | super(props) 18 | } 19 | 20 | shouldComponentUpdate = shouldPureComponentUpdate 21 | 22 | render () { 23 | return ( 24 |
25 |
26 |
27 |
28 |
29 | { this.props.place 30 | &&
31 | { this.props.place } 32 |
} 33 |
34 |
35 | ) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/shared/components/addon/require-auth.js: -------------------------------------------------------------------------------- 1 | import { checkToken, showUser, logout } from 'shared/actions/AuthActions' 2 | 3 | export default function (nextState, replaceState) { 4 | const nextPathname = nextState.location.pathname 5 | const { dispatch, getState } = this.store 6 | if (process.env.BROWSER) dispatch(checkToken()) 7 | const isAuthenticated = getState().auth.isAuthenticated 8 | const verified = getState().auth.verified 9 | 10 | dispatch(showUser(getState().auth.token)) 11 | 12 | if (!isAuthenticated) { 13 | replaceState({ nextPathname: nextPathname }, '/login') 14 | } 15 | 16 | if (process.env.BROWSER && !verified) { 17 | this.store.dispatch(logout()) 18 | replaceState({ nextPathname: nextPathname }, '/login') 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/shared/components/addon/tabs/index.js: -------------------------------------------------------------------------------- 1 | export { default as Tab } from './tab' 2 | export { default as Tabs } from './tabs' 3 | export { default as TabList } from './tab-list' 4 | export { default as TabPanel } from './tab-panel' 5 | -------------------------------------------------------------------------------- /src/shared/components/addon/tabs/tab-list.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | 3 | export default class TabList extends Component { 4 | 5 | static propTypes = { 6 | children: PropTypes.any, 7 | onSelect: PropTypes.func, 8 | selectedIndex: PropTypes.number 9 | } 10 | 11 | constructor (props) { 12 | super(props) 13 | } 14 | 15 | render () { 16 | return ( 17 |
18 | {React.Children.map(this.props.children, (child, index) => { 19 | return index === this.props.selectedIndex ? 20 | React.cloneElement(child, { 21 | active: true, 22 | onSelect: this.props.onSelect, 23 | index: index, 24 | ref: 'tab-' + index 25 | }) : 26 | React.cloneElement(child, { 27 | active: false, 28 | onSelect: this.props.onSelect, 29 | index: index, 30 | ref: 'tab-' + index 31 | }) 32 | })} 33 |
34 | ) 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/shared/components/addon/tabs/tab-panel.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import classNames from 'classnames' 3 | 4 | export default class TabPanel extends Component { 5 | 6 | static propTypes = { 7 | children: PropTypes.any, 8 | selectedIndex: PropTypes.number, 9 | index: PropTypes.number 10 | } 11 | 12 | static defaultProps = { 13 | index: 0 14 | } 15 | 16 | constructor (props) { 17 | super(props) 18 | } 19 | 20 | render () { 21 | const actived = this.props.selectedIndex === this.props.index 22 | const status = actived ? 23 | classNames('ui', 'bottom', 'attached', 'tab', 'segment', 'active') : 24 | classNames('ui', 'bottom', 'attached', 'tab', 'segment') 25 | 26 | return ( 27 | actived && ( 28 |
29 | {this.props.children} 30 |
31 | ) 32 | ) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/shared/components/addon/tabs/tab.js: -------------------------------------------------------------------------------- 1 | import React, { Component, PropTypes } from 'react' 2 | import classNames from 'classnames' 3 | 4 | export default class Tab extends Component { 5 | 6 | static propTypes = { 7 | children: PropTypes.any, 8 | active: PropTypes.bool, 9 | onSelect: PropTypes.func, 10 | index: PropTypes.number 11 | } 12 | 13 | constructor (props) { 14 | super(props) 15 | } 16 | 17 | render () { 18 | const statusClass = classNames('item', { 'active': !!this.props.active }) 19 | 20 | return ( 21 | 24 | {this.props.children} 25 | 26 | ) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/shared/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as App } from './AppHandler' 2 | export { default as Home } from './HomeHandler' 3 | export { default as Login } from './LoginHandler' 4 | export { default as Logout } from './LogoutHandler' 5 | export { default as Signup } from './SignupHandler' 6 | export { default as Post } from './PostHandler' 7 | export { default as PostDetail } from './PostDetailHandler' 8 | export { default as PostEdit } from './PostEditHandler' 9 | export { default as PostEditRing } from './PostEditRingHandler' 10 | export { default as Manage } from './ManageHandler' 11 | export { default as Wall } from './WallHandler' 12 | export { default as WallCprop } from './WallCpropHandler' 13 | export { default as Cal } from './CalHandler' 14 | export { default as Cprop } from './CpropHandler' 15 | export { default as ChangePassword } from './ChangePasswordHandler' 16 | export { default as SyncToken } from './SyncTokenHandler' 17 | export { default as Search } from './SearchHandler' 18 | export { default as Nearby } from './NearbyHandler' 19 | export { default as Og } from './OgHandler' 20 | export { default as TWBLogin } from './TWBLoginHandler' 21 | -------------------------------------------------------------------------------- /src/shared/components/wall/WallButtons.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { Link } from 'react-router' 3 | 4 | export default class WallButtons extends Component { 5 | 6 | static propTypes = {} 7 | 8 | constructor (props) { 9 | super(props) 10 | } 11 | 12 | render () { 13 | const Translate = require('react-translate-component') 14 | return ( 15 |
16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 |
31 | ) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/shared/pages/NotFound.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { Link } from 'react-router' 3 | 4 | export default class NotFound extends Component { 5 | 6 | render () { 7 | return ( 8 |
9 |
10 |
11 |

HTTP 404

12 |
13 |
14 |
15 | ) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/shared/reducers/AdStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | FETCH_AD_STARTED, 3 | FETCH_AD_COMPLETED, 4 | FETCH_AD_FAILED 5 | } from 'shared/constants/ActionTypes' 6 | import { createReducer } from 'shared/utils/redux-utils' 7 | 8 | const initialState = { 9 | ads: {} 10 | } 11 | 12 | export default createReducer(initialState, { 13 | [FETCH_AD_STARTED]: () => (initialState), 14 | [FETCH_AD_COMPLETED]: (state, action) => 15 | ({ ads: action.ads }), 16 | [FETCH_AD_FAILED]: (state, action) => 17 | ({ errors: action.errors }) 18 | }) 19 | -------------------------------------------------------------------------------- /src/shared/reducers/EventStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | EVENT_SCROLL_POSITION_RELOADED, 3 | EVENT_SCROLL_POSITION_STARTED, 4 | EVENT_SCROLL_POSITION_COMPLETED, 5 | EVENT_SCROLL_POSITION_FAILED 6 | } from 'shared/constants/ActionTypes' 7 | import { createReducer } from 'shared/utils/redux-utils' 8 | 9 | const initialState = { 10 | errors: {} 11 | } 12 | 13 | export default createReducer(initialState, { 14 | [EVENT_SCROLL_POSITION_RELOADED]: () => (initialState), 15 | [EVENT_SCROLL_POSITION_STARTED]: () => ({ errors: {} }), 16 | [EVENT_SCROLL_POSITION_COMPLETED]: (state, action) => 17 | ({ 18 | [action.store]: { scrollTop: action.scrollTop }, 19 | errors: {} 20 | }), 21 | [EVENT_SCROLL_POSITION_FAILED]: (state, action) => 22 | ({ errors: action.errors }) 23 | }) 24 | -------------------------------------------------------------------------------- /src/shared/reducers/LocaleStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | SYNC_SERVER_LOCALE_COMPLETED, 3 | SYNC_CLIENT_LOCALE_COMPLETED, 4 | UPDATE_TITLE_COMPLETED 5 | } from 'shared/constants/ActionTypes' 6 | import { createReducer } from 'shared/utils/redux-utils' 7 | 8 | const initialState = { 9 | locale: '', 10 | title: '' 11 | } 12 | 13 | export default createReducer(initialState, { 14 | [SYNC_CLIENT_LOCALE_COMPLETED]: (state, action) => 15 | ({ 16 | locale: 17 | typeof action.locale !== 'undefined' 18 | ? action.locale 19 | : state.locale 20 | }), 21 | [SYNC_SERVER_LOCALE_COMPLETED]: (state, action) => 22 | ({ 23 | locale: 24 | typeof action.locale !== 'undefined' 25 | ? action.locale 26 | : state.locale 27 | }), 28 | [UPDATE_TITLE_COMPLETED]: (state, action) => 29 | ({ title: action.title }) 30 | }) 31 | -------------------------------------------------------------------------------- /src/shared/reducers/ManageStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | LIST_MANAGE_POST_RELOADED, 3 | LIST_MANAGE_POST_STARTED, 4 | LIST_MANAGE_POST_COMPLETED, 5 | LIST_MANAGE_POST_FAILED 6 | } from 'shared/constants/ActionTypes' 7 | import { createReducer } from 'shared/utils/redux-utils' 8 | 9 | const initialState = { 10 | isFetching: false, 11 | errors: {}, 12 | posts: [], 13 | offset: 0, 14 | limit: 0, 15 | hasMore: true 16 | } 17 | 18 | export default createReducer(initialState, { 19 | [LIST_MANAGE_POST_RELOADED]: () => (initialState), 20 | [LIST_MANAGE_POST_STARTED]: () => ({ 21 | isFetching: true 22 | }), 23 | [LIST_MANAGE_POST_COMPLETED]: (state, action) => { 24 | let hasMore = false 25 | if (action.posts.length === action.limit) { 26 | hasMore = true 27 | } 28 | const posts = state.posts.concat(action.posts) 29 | return { 30 | errors: {}, 31 | content: {}, 32 | loading: false, 33 | posts: posts, 34 | offset: state.offset + action.limit, 35 | limit: action.limit, 36 | hasMore: hasMore, 37 | isFetching: false 38 | } 39 | }, 40 | [LIST_MANAGE_POST_FAILED]: (state, action) => 41 | ({ isFetching: false, errors: action.errors }) 42 | }) 43 | -------------------------------------------------------------------------------- /src/shared/reducers/NewsStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | LIST_NEWS_POST_RELOADED, 3 | LIST_NEWS_POST_STARTED, 4 | LIST_NEWS_POST_COMPLETED, 5 | LIST_NEWS_POST_FAILED 6 | } from 'shared/constants/ActionTypes' 7 | import { createReducer } from 'shared/utils/redux-utils' 8 | 9 | const initialState = { 10 | isFetching: false, 11 | errors: {}, 12 | posts: [], 13 | offset: 0, 14 | limit: 0, 15 | hasMore: true 16 | } 17 | 18 | export default createReducer(initialState, { 19 | [LIST_NEWS_POST_RELOADED]: () => (initialState), 20 | [LIST_NEWS_POST_STARTED]: () => ({ 21 | isFetching: true 22 | }), 23 | [LIST_NEWS_POST_COMPLETED]: (state, action) => { 24 | let hasMore = false 25 | if (action.posts.length === action.limit) { 26 | hasMore = true 27 | } 28 | const posts = state.posts.concat(action.posts) 29 | return { 30 | errors: {}, 31 | content: {}, 32 | loading: false, 33 | posts: posts, 34 | offset: state.offset + action.limit, 35 | limit: action.limit, 36 | hasMore: hasMore, 37 | isFetching: false 38 | } 39 | }, 40 | [LIST_NEWS_POST_FAILED]: (state, action) => 41 | ({ isFetching: false, errors: action.errors }) 42 | }) 43 | -------------------------------------------------------------------------------- /src/shared/reducers/OgStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | LIST_OG_POST_RELOADED, 3 | LIST_OG_POST_STARTED, 4 | LIST_OG_POST_COMPLETED, 5 | LIST_OG_POST_FAILED 6 | } from 'shared/constants/ActionTypes' 7 | import { createReducer } from 'shared/utils/redux-utils' 8 | 9 | const initialState = { 10 | isFetching: false, 11 | errors: {}, 12 | data: [], 13 | oginfo: {}, 14 | offset: 0, 15 | limit: 0, 16 | hasMore: true, 17 | cid: 0 18 | } 19 | 20 | export default createReducer(initialState, { 21 | [LIST_OG_POST_RELOADED]: () => (initialState), 22 | [LIST_OG_POST_STARTED]: () => ({ 23 | isFetching: true 24 | }), 25 | [LIST_OG_POST_COMPLETED]: (state, action) => { 26 | let hasMore = false 27 | if (action.data.length === action.limit) { 28 | hasMore = true 29 | } 30 | const data = state.data.concat(action.data) 31 | return { 32 | errors: {}, 33 | loading: false, 34 | data: data, 35 | oginfo: action.oginfo, 36 | offset: state.offset + action.limit, 37 | limit: action.limit, 38 | hasMore: hasMore, 39 | cid: action.cid, 40 | isFetching: false 41 | } 42 | }, 43 | [LIST_OG_POST_FAILED]: (state, action) => 44 | ({ isFetching: false, errors: action.errors, cid: action.cid }) 45 | }) 46 | -------------------------------------------------------------------------------- /src/shared/reducers/OverviewStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | LIST_OVERVIEW_POST_RELOADED, 3 | LIST_OVERVIEW_POST_STARTED, 4 | LIST_OVERVIEW_POST_COMPLETED, 5 | LIST_OVERVIEW_POST_FAILED 6 | } from 'shared/constants/ActionTypes' 7 | import { createReducer } from 'shared/utils/redux-utils' 8 | 9 | const initialState = { 10 | isFetching: false, 11 | errors: {}, 12 | posts: [], 13 | offset: 0, 14 | limit: 0, 15 | hasMore: true 16 | } 17 | 18 | export default createReducer(initialState, { 19 | [LIST_OVERVIEW_POST_RELOADED]: () => (initialState), 20 | [LIST_OVERVIEW_POST_STARTED]: () => ({ 21 | isFetching: true 22 | }), 23 | [LIST_OVERVIEW_POST_COMPLETED]: (state, action) => { 24 | let hasMore = false 25 | if (action.posts.length === action.limit) { 26 | hasMore = true 27 | } 28 | const posts = state.posts.concat(action.posts) 29 | return { 30 | errors: {}, 31 | content: {}, 32 | loading: false, 33 | posts: posts, 34 | offset: state.offset + action.limit, 35 | limit: action.limit, 36 | hasMore: hasMore, 37 | isFetching: false 38 | } 39 | }, 40 | [LIST_OVERVIEW_POST_FAILED]: (state, action) => 41 | ({ isFetching: false, errors: action.errors }) 42 | }) 43 | -------------------------------------------------------------------------------- /src/shared/reducers/SignupStore.js: -------------------------------------------------------------------------------- 1 | import { 2 | SIGNUP_USER_STARTED, 3 | SIGNUP_USER_COMPLETED, 4 | SIGNUP_USER_FAILED, 5 | GET_SITE_KEY_COMPLETED, 6 | GET_SITE_KEY_FAILED 7 | } from 'shared/constants/ActionTypes' 8 | import { createReducer } from 'shared/utils/redux-utils' 9 | 10 | const initialState = { 11 | response: {}, 12 | errors: {}, 13 | sitekey: null 14 | } 15 | 16 | export default createReducer(initialState, { 17 | [SIGNUP_USER_STARTED]: () => (initialState), 18 | [SIGNUP_USER_COMPLETED]: (state, action) => 19 | ({ response: action.response, errors: null }), 20 | [SIGNUP_USER_FAILED]: (state, action) => 21 | ({ errors: action.errors }), 22 | [GET_SITE_KEY_COMPLETED]: (state, action) => 23 | ({ sitekey: action.sitekey, errors: null }), 24 | [GET_SITE_KEY_FAILED]: (state, action) => 25 | ({ sitekey: null, errors: action.errors }) 26 | }) 27 | -------------------------------------------------------------------------------- /src/shared/reducers/index.js: -------------------------------------------------------------------------------- 1 | export { default as signup } from './SignupStore' 2 | export { default as auth } from './AuthStore' 3 | export { default as user } from './UserStore' 4 | export { default as post } from './PostStore' 5 | export { default as overview } from './OverviewStore' 6 | export { default as news } from './NewsStore' 7 | export { default as manage } from './ManageStore' 8 | export { default as cprop } from './CpropStore' 9 | export { default as locale } from './LocaleStore' 10 | export { default as upload } from './UploadStore' 11 | export { default as map } from './MapStore' 12 | export { default as search } from './SearchStore' 13 | export { default as ad } from './AdStore' 14 | export { default as og } from './OgStore' 15 | export { default as ognearby } from './OgNearbyStore' 16 | -------------------------------------------------------------------------------- /src/shared/utils/common-utils.js: -------------------------------------------------------------------------------- 1 | export function EQUAL (a, b) { 2 | let _a = a 3 | let _b = b 4 | if (typeof _a === 'undefined') _a = null 5 | if (typeof _b === 'undefined') _b = null 6 | 7 | return (_a === _b) 8 | } 9 | 10 | export function nl2br (str) { 11 | return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1
$2') 12 | } 13 | -------------------------------------------------------------------------------- /src/shared/utils/file-utils.js: -------------------------------------------------------------------------------- 1 | export function getFileExt (filename) { 2 | return filename.split('.').pop() 3 | } 4 | 5 | export function getFileName (filename) { 6 | return filename.split('/').pop() 7 | } 8 | 9 | export function checkImageFile (file) { 10 | if (getFileExt(file) === 'pdf' || 11 | getFileExt(file) === 'doc' || 12 | getFileExt(file) === 'docx') { 13 | return false 14 | } 15 | 16 | return true 17 | } 18 | -------------------------------------------------------------------------------- /src/shared/utils/httpcheck.js: -------------------------------------------------------------------------------- 1 | import counterpart from 'counterpart' 2 | 3 | export function checkUnauthorized (errors, replaceState) { 4 | if (!process.env.BROWSER) return false 5 | 6 | const swal = require('sweetalert') 7 | if (errors === 'Unauthorized') { 8 | return swal({ 9 | title: counterpart('http.error.401.title'), 10 | text: counterpart('http.error.401.text'), 11 | type: 'error' 12 | }, function() { 13 | replaceState({}, '/logout') 14 | }) 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/shared/utils/image-resolver.js: -------------------------------------------------------------------------------- 1 | module.exports = (imagePath) => { 2 | if (process.env.BROWSER) { 3 | throw new Error('image-resolver called on browser') 4 | } else { 5 | let images 6 | if (process.env.NODE_ENV === 'development') { 7 | const fs = require('fs') 8 | const path = require('path') 9 | images = fs.readFileSync( 10 | path.resolve(__dirname, '../../../storage/webpack-stats.json') 11 | ) 12 | images = JSON.parse(images).images 13 | } 14 | else images = require('../../../storage/webpack-stats.json').images 15 | 16 | const regex = new RegExp(`${imagePath}$`) 17 | const image = images.find(img => regex.test(img.original)) 18 | 19 | if (image) { 20 | return image.compiled 21 | } 22 | 23 | return '' 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/shared/utils/localpath.js: -------------------------------------------------------------------------------- 1 | const HOST = 'localhost' 2 | const PROTOCOL = 'http' 3 | const PORT = '3000' 4 | const LOCAL_PATH = typeof document === 'undefined' 5 | ? `${PROTOCOL}://${HOST}:${PORT}` 6 | : '' 7 | 8 | module.exports = LOCAL_PATH 9 | -------------------------------------------------------------------------------- /src/shared/utils/promiseMiddleware.js: -------------------------------------------------------------------------------- 1 | function onError (err) { 2 | setTimeout(function () { 3 | throw err 4 | }, 0) 5 | } 6 | 7 | function isPromise (val) { 8 | return val && typeof val.then === 'function' 9 | } 10 | 11 | module.exports = () => { 12 | return next => action => { 13 | return isPromise(action) 14 | ? action.then(next, onError) 15 | : next(action) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/shared/utils/redux-universal-resolver.js: -------------------------------------------------------------------------------- 1 | // borrow from universal-redux-boilerplate 2 | // https://github.com/savemysmartphone/universal-redux-boilerplate 3 | 4 | export default class ReduxResolver { 5 | 6 | constructor () { 7 | this.pending = [] 8 | this.firstRendering = true 9 | } 10 | 11 | resolve (action) { 12 | const [, ...args] = arguments 13 | if (process.env.BROWSER && !this.firstRendering) { 14 | return action(...args) 15 | } else { 16 | this.pending = [ 17 | ...this.pending, 18 | { action, args } 19 | ] 20 | } 21 | } 22 | 23 | async dispatch () { 24 | await Promise.all( 25 | this.pending.map(({ action, args }) => { 26 | return action(...args) 27 | } 28 | )) 29 | } 30 | 31 | clear () { 32 | this.pending = [] 33 | this.firstRendering = false 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/shared/utils/redux-utils.js: -------------------------------------------------------------------------------- 1 | // borrow from react-redux-starter-kit 2 | // https://github.com/davezuko/react-redux-starter-kit 3 | 4 | export function createConstants (...constants) { 5 | return constants.reduce((acc, constant) => { 6 | return Object.assign({}, acc, { [constant]: constant }) 7 | }, {}) 8 | } 9 | 10 | export function createReducer (initialState, reducerMap) { 11 | return (state = initialState, action) => { 12 | const reducer = reducerMap[action.type] 13 | 14 | return reducer ? Object.assign({}, state, reducer(state, action)) : state 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/vendor/tongwen/index.js: -------------------------------------------------------------------------------- 1 | let TongWen 2 | 3 | if (process.env.BROWSER) { 4 | TongWen = require('./tongwen_core').TongWen 5 | require('./tongwen_table_s2t')(TongWen) 6 | require('./tongwen_table_t2s')(TongWen) 7 | //require('./tongwen_table_ps2t')(TongWen) 8 | //require('./tongwen_table_pt2s')(TongWen) 9 | } 10 | 11 | module.exports = TongWen 12 | -------------------------------------------------------------------------------- /styles/css/addon/lightbox.css: -------------------------------------------------------------------------------- 1 | .lightbox { 2 | position: fixed; 3 | z-index: 999; 4 | width: 100%; 5 | height: 100%; 6 | text-align: center; 7 | top: 0; 8 | left: 0; 9 | background: rgba(0,0,0,0.85); 10 | } 11 | 12 | .lightbox-wrap { 13 | width: 100%; 14 | height: 100%; 15 | display: inline-block; 16 | vertical-align: middle; 17 | } 18 | 19 | .lightbox-wrap:before { 20 | content: ''; 21 | display: inline-block; 22 | height: 100%; 23 | vertical-align: middle; 24 | } 25 | 26 | .lightbox img { 27 | border-radius: 12px; 28 | max-width: 96%; 29 | max-height: 82%; 30 | display: inline-block; 31 | vertical-align: middle; 32 | } 33 | 34 | .lightbox-appear { 35 | opacity: 0.01; 36 | transition: opacity .4s ease-in; 37 | } 38 | 39 | .lightbox-appear.lightbox-appear-active { 40 | opacity: 1; 41 | } 42 | 43 | .lightbox-appear { 44 | opacity: 0.01; 45 | transition: opacity .4s ease-in; 46 | } 47 | 48 | .lightbox-appear.lightbox-appear-active { 49 | opacity: 1; 50 | } 51 | -------------------------------------------------------------------------------- /styles/css/addon/loading.css: -------------------------------------------------------------------------------- 1 | .xloading { 2 | position: fixed; 3 | z-index: 999; 4 | width: 100%; 5 | height: 100%; 6 | text-align: center; 7 | top: 0; 8 | left: 0; 9 | background: rgba(0,0,0,0.85); 10 | color: white !important; 11 | } 12 | 13 | .xloading-wrap { 14 | width: 100%; 15 | height: 100%; 16 | display: inline-block; 17 | vertical-align: middle; 18 | } 19 | 20 | .xloading-wrap:before { 21 | content: ''; 22 | display: inline-block; 23 | height: 100%; 24 | vertical-align: middle; 25 | } 26 | 27 | .xloading-wrap .fade-in.spinner { 28 | display: inline-block; 29 | vertical-align: middle; 30 | position: relative; 31 | left: -10px; 32 | bottom: 0; 33 | 34 | .wordpress { 35 | background: rgba(252, 58, 48, 1); 36 | } 37 | } 38 | 39 | .xloading-appear { 40 | opacity: 0.01; 41 | transition: opacity .4s ease-in; 42 | } 43 | 44 | .xloading-appear.xloading-appear-active { 45 | opacity: 1; 46 | } 47 | 48 | .xloading-appear { 49 | opacity: 0.01; 50 | transition: opacity .4s ease-in; 51 | } 52 | 53 | .xloading-appear.xloading-appear-active { 54 | opacity: 1; 55 | } 56 | -------------------------------------------------------------------------------- /styles/css/animation.css: -------------------------------------------------------------------------------- 1 | $transition-duration: 28ms; 2 | 3 | .RouteTransition-enter, .RouteTransition-leave { 4 | backface-visibility: hidden; 5 | transition: opacity $transition-duration ease-in; 6 | } 7 | 8 | .RouteTransition-enter { 9 | opacity: 0.01; 10 | &.RouteTransition-enter-active { 11 | opacity: 1; 12 | } 13 | } 14 | 15 | .RouteTransition-leave { 16 | opacity: 1; 17 | &.RouteTransition-leave-active { 18 | opacity: 0.01; 19 | } 20 | } 21 | 22 | .MessageTransition-enter, .MessageTransition-leave { 23 | backface-visibility: hidden; 24 | transition: opacity $transition-duration ease-out; 25 | } 26 | 27 | .MessageTransition-enter { 28 | opacity: 0.01; 29 | &.MessageTransition-enter-active { 30 | opacity: 1; 31 | } 32 | } 33 | 34 | .MessageTransition-leave { 35 | opacity: 1; 36 | &.MessageTransition-leave-active { 37 | opacity: 0.01; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /styles/css/fallback.less: -------------------------------------------------------------------------------- 1 | @import 'ui/checkbox.less'; 2 | -------------------------------------------------------------------------------- /styles/css/ui/admin.less: -------------------------------------------------------------------------------- 1 | & { @import '../../semantic/src/definitions/collections/table'; } 2 | & { @import '../../semantic/src/definitions/views/statistic.less'; } 3 | 4 | 5 | @media only screen and (max-width: 1079px) { 6 | main { 7 | min-width: 660px; 8 | } 9 | 10 | .ui.grid > [class*="four wide"].column { 11 | width: 100% !important; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /styles/css/ui/assets/next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | next 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /styles/css/ui/assets/prev.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | prev 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /styles/css/ui/assets/select-handler.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /styles/css/ui/checkbox.less: -------------------------------------------------------------------------------- 1 | & { @import '../../semantic/src/definitions/modules/checkbox.less'; } 2 | -------------------------------------------------------------------------------- /styles/semantic/src/definitions/elements/flag.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI - Flag 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Released under the MIT license 7 | * http://opensource.org/licenses/MIT 8 | * 9 | */ 10 | 11 | 12 | /******************************* 13 | Theme 14 | *******************************/ 15 | 16 | @type : 'element'; 17 | @element : 'flag'; 18 | 19 | @import (multiple) '../../theme.config'; 20 | 21 | 22 | /******************************* 23 | Flag 24 | *******************************/ 25 | 26 | i.flag:not(.icon) { 27 | display: inline-block; 28 | 29 | width: @width; 30 | height: @height; 31 | 32 | line-height: @height; 33 | vertical-align: @verticalAlign; 34 | margin: 0em @margin 0em 0em; 35 | 36 | text-decoration: inherit; 37 | 38 | speak: none; 39 | font-smoothing: antialiased; 40 | backface-visibility: hidden; 41 | } 42 | 43 | /* Sprite */ 44 | i.flag:not(.icon):before { 45 | display: inline-block; 46 | content: ''; 47 | background: url(@spritePath) no-repeat -108px -1976px; 48 | width: @width; 49 | height: @height; 50 | } 51 | 52 | .loadUIOverrides(); 53 | -------------------------------------------------------------------------------- /styles/semantic/src/definitions/globals/reset.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI - Reset 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Released under the MIT license 7 | * http://opensource.org/licenses/MIT 8 | * 9 | */ 10 | 11 | /******************************* 12 | Theme 13 | *******************************/ 14 | 15 | @type : 'global'; 16 | @element : 'reset'; 17 | 18 | @import (multiple) '../../theme.config'; 19 | 20 | /******************************* 21 | Reset 22 | *******************************/ 23 | 24 | /* Border-Box */ 25 | *, 26 | *:before, 27 | *:after { 28 | box-sizing: inherit; 29 | } 30 | html { 31 | box-sizing: border-box; 32 | } 33 | 34 | /* iPad Input Shadows */ 35 | input[type="text"], input[type="email"], input[type="search"], input[type="password"] { 36 | -webkit-appearance: none; 37 | -moz-appearance: none; /* mobile firefox too! */ 38 | } 39 | 40 | .loadUIOverrides(); 41 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/breadcrumb.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/breadcrumb.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/form.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/form.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/grid.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/grid.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/menu.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/menu.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/message.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/message.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/table.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/collections/table.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/button.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/button.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/container.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/container.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/divider.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/divider.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/flag.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/flag.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Flag Variables 3 | --------------------*/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/header.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/header.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/icon.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/icon.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/image.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/image.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/input.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/input.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/label.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/label.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/list.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/list.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/loader.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/loader.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/rail.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/rail.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/reveal.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/reveal.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/segment.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/segment.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/step.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/elements/step.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/globals/reset.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/globals/reset.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Global Variables 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/globals/site.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/globals/site.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Global Variables 3 | *******************************/ 4 | 5 | @orange : rgba(244, 110, 47, 1); 6 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/accordion.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/accordion.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/chatroom.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/chatroom.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/checkbox.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/checkbox.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/dimmer.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/dimmer.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/dropdown.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/dropdown.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/embed.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/embed.variables: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/site/modules/embed.variables -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/modal.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/modal.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/nag.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/nag.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/popup.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/popup.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/progress.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/progress.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/rating.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/rating.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/search.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/search.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/shape.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/shape.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/sidebar.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/sidebar.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/sticky.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/sticky.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/tab.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/tab.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/transition.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/transition.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/video.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/modules/video.variables: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/site/modules/video.variables -------------------------------------------------------------------------------- /styles/semantic/src/site/views/ad.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/ad.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/card.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/card.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/comment.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/comment.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/feed.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/feed.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/item.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/item.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/statistic.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/site/views/statistic.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/amazon/elements/button.overrides: -------------------------------------------------------------------------------- 1 | .ui.button { 2 | background-image: linear-gradient(center top , #F7F8FA, #E7E9EC) repeat scroll 0 0 rgba(0, 0, 0, 0); 3 | } 4 | 5 | .ui.primary.button { 6 | color: #111111; 7 | border: 1px solid; 8 | border-color: #C59F43 #AA8326 #957321; 9 | } 10 | .ui.primary.button:hover { 11 | border-color: #C59F43 #AA8326 #957321; 12 | color: #111111; 13 | } 14 | 15 | .ui.secondary.button { 16 | border: 1px solid; 17 | border-color: #3D444C #2F353B #2C3137; 18 | } 19 | .ui.secondary.button:hover { 20 | border-color: #32373E #24282D #212429; 21 | } 22 | 23 | 24 | .ui.labeled.icon.buttons .button .icon, 25 | .ui.labeled.icon.button .icon { 26 | padding-bottom: 0.48em; 27 | padding-top: 0.48em; 28 | position: absolute; 29 | text-align: center; 30 | width: 2em; 31 | height: 2em; 32 | top: 0.3em; 33 | left: 0.4em; 34 | border-radius: 3px; 35 | } 36 | .ui.right.labeled.icon.buttons .button .icon, 37 | .ui.right.labeled.icon.button .icon { 38 | left: auto; 39 | right: 0.4em; 40 | border-radius: 3px; 41 | } 42 | 43 | .ui.basic.labeled.icon.buttons .button > .icon, 44 | .ui.basic.labeled.icon.button > .icon { 45 | padding-top: 0.4em !important; 46 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/amazon/globals/site.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Global Variables 3 | *******************************/ 4 | 5 | @pageMinWidth : 1049px; 6 | @pageOverflowX : visible; 7 | 8 | @emSize: 13px; 9 | @fontSize : 13px; 10 | @fontName : 'Arial'; 11 | @importGoogleFonts : false; 12 | 13 | @h1: 2.25em; 14 | 15 | @defaultBorderRadius: 0.30769em; /* 4px @ 13em */ 16 | 17 | @disabledOpacity: 0.3; 18 | 19 | @black: #444C55; 20 | @orange: #FDE07B; 21 | 22 | @linkColor: #0066C0; 23 | @linkHoverColor: #C45500; 24 | @linkHoverUnderline: underline; 25 | 26 | @borderColor: rgba(0, 0, 0, 0.13); 27 | @solidBorderColor: #DDDDDD; 28 | @internalBorderColor: rgba(0, 0, 0, 0.06); 29 | @selectedBorderColor: #51A7E8; 30 | 31 | /* Breakpoints */ 32 | @largeMonitorBreakpoint: 1049px; 33 | @computerBreakpoint: @largeMonitorBreakpoint; 34 | @tabletBreakpoint: @largeMonitorBreakpoint; 35 | 36 | /* Colors */ 37 | @blue: #80A6CD; 38 | @green: #60B044; 39 | @orange: #D26911; 40 | 41 | 42 | @infoBackgroundColor: #E6F1F6; 43 | @infoTextColor: #4E575B; -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/basic/assets/fonts/icons.eot -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/basic/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/basic/assets/fonts/icons.woff -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/collections/table.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/collections/table.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Table Variables 3 | --------------------*/ 4 | 5 | @headerBackground: @white; 6 | 7 | @cellVerticalPadding: 1em; 8 | @cellHorizontalPadding: 1em; 9 | 10 | @stateMarkerWidth: 1px; -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/elements/button.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/elements/button.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Button Variables 3 | --------------------*/ 4 | 5 | /* Button Variables */ 6 | @textTransform: none; 7 | @fontWeight: normal; 8 | @textColor: #333333; 9 | 10 | @primaryColor: #333333; 11 | 12 | @borderRadius: 0.25em; 13 | 14 | @backgroundColor: #EEEEEE; 15 | @backgroundImage: none; 16 | @boxShadow: none; 17 | 18 | @hoverBackgroundColor: #DDDDDD; 19 | @hoverBackgroundImage: none; 20 | @hoverBoxShadow: none; 21 | 22 | @downBackgroundColor: #D0D0D0; 23 | @downBackgroundImage: none; 24 | @downBoxShadow: none; 25 | 26 | @activeBackgroundColor: #CCCCCC; 27 | @activeBackgroundImage: none; 28 | @activeBoxShadow: none; 29 | 30 | @verticalBoxShadow: none; 31 | 32 | @loadingBackgroundColor: #F0F0F0; 33 | 34 | @labeledIconLeftShadow: none; 35 | @labeledIconRightShadow: none; 36 | 37 | @mini: 0.6rem; 38 | @tiny: 0.7rem; 39 | @small: 0.85rem; 40 | @medium: 0.92rem; 41 | @large: 1rem; 42 | @big: 1.125rem; 43 | @huge: 1.25rem; 44 | @massive: 1.3rem; 45 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/elements/icon.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Icon Variables 3 | --------------------*/ 4 | 5 | @fontPath : "../../themes/basic/assets/fonts"; 6 | 7 | @src: 8 | url("@{fontPath}/@{fontName}.eot?#iefix") format('embedded-opentype'), 9 | url("@{fontPath}/@{fontName}.woff") format('woff'), 10 | url("@{fontPath}/@{fontName}.ttf") format('truetype'), 11 | url("@{fontPath}/@{fontName}.svg#icons") format('svg') 12 | ; -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/elements/step.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | .ui.steps .step:after { 6 | display: none !important; 7 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/elements/step.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Step Variables 3 | --------------------*/ 4 | 5 | @background: transparent; 6 | @borderRadius: 500em; 7 | @boxShadow: none; 8 | 9 | @activeBackground: #E5E5E5; 10 | @iconDistance: 0.8em; -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/globals/reset.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | /* No Additonal Resets */ -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/globals/reset.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Reset 3 | *******************************/ -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/modules/progress.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Progress 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/modules/progress.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Progress 3 | *******************************/ 4 | 5 | @background: transparent; 6 | @border: none; 7 | @padding: 0em; 8 | 9 | @progressLeft: 0em; 10 | @progressWidth: 100%; 11 | @progressTextAlign: center; 12 | 13 | @labelFontWeight: normal; 14 | @labelTextAlign: left; 15 | @labelHeight: 1.5em; -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/views/card.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/basic/views/card.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Card 3 | *******************************/ 4 | 5 | /*------------------- 6 | View 7 | --------------------*/ 8 | 9 | @width: 250px; 10 | @background: transparent; 11 | @border: none; 12 | @boxShadow: none; 13 | 14 | @contentPadding: 1em 0em; 15 | 16 | @rowSpacing: 1.5em; 17 | @groupCardMargin: 0em @horizontalSpacing @rowSpacing; 18 | 19 | @extraBackground: transparent; 20 | @extraDivider: none; 21 | @extraBoxShadow: none; 22 | @extraPadding: 0.5em 0em; 23 | 24 | @extraLinkColor: @linkColor; 25 | @extraLinkHoverColor: @linkColor; 26 | 27 | @headerFontSize: 1.2em; 28 | @headerLinkColor: @linkColor; 29 | 30 | @imageBorderRadius: @borderRadius; 31 | @imageBorder: 1px solid @borderColor; 32 | 33 | @linkHoverBoxShadow: none; -------------------------------------------------------------------------------- /styles/semantic/src/themes/bookish/elements/header.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | @import url(http://fonts.googleapis.com/css?family=Karma); 6 | 7 | h1.ui.header, 8 | .ui.huge.header { 9 | font-weight: bold; 10 | } 11 | 12 | h2.ui.header, 13 | .ui.large.header { 14 | font-weight: bold; 15 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/bookish/elements/header.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Header 3 | --------------------*/ 4 | 5 | @headerFont : 'Karma', 'Times New Roman', serif; 6 | @fontWeight: normal; 7 | 8 | @iconSize: 1.5em; 9 | @iconOffset: 0.2em; 10 | @iconAlignment: top; 11 | 12 | @subHeaderFontSize: 0.85rem; 13 | 14 | @dividedBorder: 1px dotted rgba(0, 0, 0, 0.2); 15 | 16 | /* Block Header */ 17 | @blockVerticalPadding: 1.3em; 18 | @blockHorizontalPadding: 1em; 19 | 20 | /* Attached */ 21 | @attachedBackground: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.03)) repeat scroll 0 0 #F8F8F8; 22 | @attachedVerticalPadding: 1.3; 23 | @attachedHorizontalPadding: 1em; 24 | 25 | /* HTML Headings */ 26 | @h1: 1.75rem; 27 | @h2: 1.33rem; 28 | @h3: 1.33rem; 29 | @h4: 1rem; 30 | @h5: 0.9rem; 31 | 32 | /* Sizing */ 33 | @tiny: 1.5em; 34 | @small: 1.33em; 35 | @medium: 1.33em; 36 | @large: 1em; 37 | @huge: 0.9em; -------------------------------------------------------------------------------- /styles/semantic/src/themes/bootstrap3/elements/button.overrides: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/bootstrap3/elements/button.overrides -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/collections/form.overrides: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Form Variables 3 | --------------------*/ 4 | 5 | .ui.form .selection.dropdown { 6 | padding: 1.1em 1.2em; 7 | border-width: 2px; 8 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/collections/form.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Form Variables 3 | --------------------*/ 4 | 5 | @labelTextTransform: uppercase; 6 | @labelFontSize: 0.8em; 7 | 8 | @inputPadding: 1em 1.2em; 9 | @inputBorder: 2px solid @borderColor; -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/collections/menu.overrides: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/chubby/collections/menu.overrides -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/collections/menu.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Menu 3 | *******************************/ 4 | 5 | @background: @darkWhite; 6 | @boxShadow: none; 7 | @dividerSize: 0px; 8 | 9 | @verticalBoxShadow: 0px 0px 0px 2px @borderColor inset; 10 | @verticalActiveBoxShadow: none; 11 | 12 | @itemVerticalPadding: 1.25em; 13 | @itemHorizontalPadding: 2em; 14 | @itemFontWeight: bold; 15 | 16 | @activeItemBackground: @primaryColor; 17 | @activeItemTextColor: @white; 18 | @activeHoverItemBackground: @primaryColorHover; 19 | @activeHoverItemColor: @white; 20 | 21 | @secondaryItemPadding: @relativeSmall @relativeMedium; 22 | 23 | @secondaryActiveItemBackground: @primaryColor; 24 | @secondaryActiveItemColor: @white; 25 | @secondaryActiveHoverItemBackground: @primaryColorHover; 26 | @secondaryActiveHoverItemColor: @white; 27 | 28 | @secondaryPointingBorderWidth: 4px; 29 | @secondaryPointingActiveBorderColor: @primaryColor; 30 | @secondaryPointingActiveTextColor: @primaryColor; 31 | 32 | @arrowSize: 1em; 33 | @arrowActiveColor: @primaryColor; 34 | @arrowActiveHoverColor: @primaryColorHover; 35 | @arrowBorder: transparent; 36 | 37 | @paginationActiveBackground: @lightGrey; 38 | 39 | @borderColor: @darkWhite; 40 | @tabularBorderWidth: 2px; -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/elements/button.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | @import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro); 6 | 7 | .ui.labeled.icon.buttons > .button > .icon, 8 | .ui.labeled.icon.button > .icon { 9 | box-shadow: 10 | -1px 0px 0px 0px rgba(255, 255, 255, 0.2) inset, 11 | -1px 0px 0px 0px rgba(0, 0, 0, 0.05) inset 12 | ; 13 | } 14 | 15 | .ui.right.labeled.icon.buttons .button .icon, 16 | .ui.right.labeled.icon.button .icon { 17 | box-shadow: 18 | 1px 0px 0px 0px rgba(255, 255, 255, 0.2) inset, 19 | 1px 0px 0px 0px rgba(0, 0, 0, 0.05) inset 20 | ; 21 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/elements/header.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | @import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro); 6 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/elements/header.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Header 3 | --------------------*/ 4 | 5 | @headerFont : 'Source Sans Pro', Helvetica Neue, Helvetica, Arial, sans-serif; 6 | @fontWeight: bold; 7 | @textTransform: none; 8 | 9 | /* HTML Headings */ 10 | @h1: 1.33rem; 11 | @h2: 1.2rem; 12 | @h3: 1rem; 13 | @h4: 0.9rem; 14 | @h5: 0.8rem; 15 | 16 | /* Sizing */ 17 | @huge: 1.33em; 18 | @large: 1.2em; 19 | @medium: 1em; 20 | @small: 0.9em; 21 | @tiny: 0.8em; -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/modules/accordion.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | .ui.styled.accordion .accordion .active.title { 6 | border-bottom: 1px solid rgba(0, 0, 0, 0.1); 7 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/modules/accordion.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Accordion Variables 3 | --------------------*/ 4 | 5 | @iconMargin: 0em 0.5em 0em 0em; 6 | 7 | @styledActiveTitleBackground: @subtleGradient; 8 | @styledActiveTitleColor: @primaryColor; 9 | 10 | @styledActiveChildTitleBackground: transparent; 11 | 12 | @styledTitlePadding: 1.25em; 13 | @styledTitleFontWeight: bold; 14 | @styledContentPadding: 1.5em 3.25em; 15 | @styledChildContentPadding: @styledContentPadding; -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/views/comment.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | .ui.comments .comment { 6 | border-radius: 0.5em; 7 | box-shadow: 0px 1px 1px 1px rgba(0, 0, 0, 0.1); 8 | } 9 | .ui.comments .comment .comments .comment { 10 | border: 1px solid rgba(0, 0, 0, 0.1); 11 | box-shadow: none; 12 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/chubby/views/comment.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Comments 3 | *******************************/ 4 | 5 | /*------------------- 6 | Elements 7 | --------------------*/ 8 | 9 | /* Comment */ 10 | @commentBackground: #FFFFFF; 11 | @commentMargin: 1em 0em 0em; 12 | @commentPadding: 1em 1.5em; 13 | @commentBorder: 1px solid rgba(0, 0, 0, 0.1); 14 | @commentDivider: 1px solid rgba(0, 0, 0, 0.1); 15 | @firstCommentMargin: 1em; 16 | @firstCommentPadding: 1em; 17 | 18 | /* Nested Comment */ 19 | @nestedCommentsMargin: 0em 0em 0.5em 0.5em; 20 | @nestedCommentsPadding: 1em 0em 0em 1em; 21 | @nestedCommentBackground: #F0F0F0; 22 | 23 | /* Avatar */ 24 | @avatarWidth: 3.5em; 25 | @avatarSpacing: 1.5em; 26 | @avatarBorderRadius: @circularRadius; 27 | 28 | /* Content */ 29 | @contentMargin: @avatarWidth + @avatarSpacing; 30 | 31 | /* Author */ 32 | @authorFontSize: 1em; 33 | @authorColor: @primaryColor; 34 | @authorHoverColor: @primaryColorHover; 35 | @authorFontWeight: bold; 36 | 37 | @metadataDisplay: block; 38 | @metadataSpacing: 0em; 39 | @metadataColor: @textColor; 40 | 41 | /*------------------- 42 | Variations 43 | --------------------*/ 44 | 45 | /* Threaded */ 46 | @threadedCommentMargin: -1.5em 0 -1em (@avatarWidth / 2); 47 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/classic/collections/table.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/classic/collections/table.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Table 3 | *******************************/ 4 | 5 | /*------------------- 6 | Element 7 | --------------------*/ 8 | 9 | @boxShadow: @subtleGradient; 10 | 11 | @headerBackground: @subtleGradient; 12 | @headerBoxShadow: @subtleShadow; 13 | @footerBoxShadow: 0px -1px 1px 0px rgba(0, 0, 0, 0.05); 14 | @footerBackground: rgba(0, 0, 0, 0.05); 15 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/classic/elements/button.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/classic/elements/header.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/classic/elements/header.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Button 3 | *******************************/ 4 | 5 | /*------------------- 6 | Element 7 | --------------------*/ 8 | 9 | @headerFont: 'Open Sans', Arial, sans-serif; 10 | 11 | @blockBackground: @offWhite @subtleGradient; 12 | @blockBoxShadow: @subtleShadow; -------------------------------------------------------------------------------- /styles/semantic/src/themes/classic/modules/progress.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Progress 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/classic/modules/progress.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Progress 3 | *******************************/ 4 | 5 | @background: rgba(0, 0, 0, 0.05); 6 | @boxShadow: 0px 0px 4px rgba(0, 0, 0, 0.1) inset; 7 | @barBackground: @subtleGradient #888888; 8 | @border: 1px solid @borderColor; 9 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/classic/views/card.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Card 3 | *******************************/ 4 | 5 | /*------------------- 6 | View 7 | --------------------*/ 8 | 9 | /* Shadow */ 10 | @shadowDistance: 0em; 11 | @padding: 0em; 12 | 13 | /*------------------- 14 | Content 15 | --------------------*/ 16 | 17 | /* Additional Content */ 18 | @extraDivider: 1px solid rgba(0, 0, 0, 0.05); 19 | @extraBackground: #FAFAFA @subtleGradient; 20 | @extraPadding: 0.75em 1em; 21 | @extraBoxShadow: 0 1px 1px rgba(0, 0, 0, 0.15); 22 | @extraColor: @lightTextColor; 23 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/colored/modules/checkbox.overrides: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/colored/modules/checkbox.overrides -------------------------------------------------------------------------------- /styles/semantic/src/themes/colored/modules/checkbox.variables: -------------------------------------------------------------------------------- 1 | /* Checkbox */ 2 | @checkboxActiveBackground: @primaryColor; 3 | @checkboxActiveBorderColor: @primaryColor; 4 | @checkboxActiveCheckColor: @white; 5 | @checkboxTransition: none; 6 | 7 | /* Slider */ 8 | @sliderOnLineColor: @primaryColor; 9 | 10 | /* Radio */ 11 | @radioActiveBulletColor @primaryColor; 12 | 13 | /* Handle */ 14 | @handleBackground: @white @subtleGradient; 15 | @handleBoxShadow: 16 | 0px 0px 0px 1px @selectedBorderColor inset 17 | ; 18 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/default/assets/fonts/icons.eot -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/default/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/default/assets/fonts/icons.woff -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/assets/fonts/icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/default/assets/fonts/icons.woff2 -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/assets/images/flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/default/assets/images/flags.png -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/collections/breadcrumb.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/collections/breadcrumb.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Breadcrumb 3 | *******************************/ 4 | 5 | /*------------------- 6 | Breadcrumb 7 | --------------------*/ 8 | 9 | @verticalMargin: 0em; 10 | @display: inline-block; 11 | @verticalAlign: middle; 12 | 13 | @dividerSpacing: @3px; 14 | @dividerOpacity: 0.7; 15 | @dividerColor: @lightTextColor; 16 | 17 | @dividerSize: @relativeSmall; 18 | @dividerVerticalAlign: baseline; 19 | 20 | @iconDividerSize: @relativeTiny; 21 | @iconDividerVerticalAlign: baseline; 22 | 23 | @sectionMargin: 0em; 24 | @sectionPadding: 0em; 25 | 26 | /* Coupling */ 27 | @segmentPadding: @relativeMini @relativeMedium; 28 | 29 | /*------------------- 30 | States 31 | --------------------*/ 32 | 33 | @activeFontWeight: bold; -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/collections/form.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/collections/grid.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | 5 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/collections/menu.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/collections/message.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/collections/table.overrides: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/default/collections/table.overrides -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/button.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/container.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/flag.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Flag 3 | *******************************/ 4 | 5 | /*------------------- 6 | Element 7 | --------------------*/ 8 | 9 | @spritePath: "@{imagePath}/flags.png"; 10 | @width: 16px; 11 | @height: 11px; 12 | @verticalAlign: baseline; 13 | @margin: 0.5em; -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/header.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | 5 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/image.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/image.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Image 3 | *******************************/ 4 | 5 | /*------------------- 6 | Element 7 | --------------------*/ 8 | 9 | @placeholderColor: transparent; 10 | @roundedBorderRadius: 0.3125em; 11 | 12 | @imageHorizontalMargin: 0.25rem; 13 | @imageVerticalMargin: 0.5rem; 14 | @imageBorder: 1px solid rgba(0, 0, 0, 0.1); 15 | 16 | /*------------------- 17 | Types 18 | --------------------*/ 19 | 20 | /* Avatar */ 21 | @avatarSize: 2em; 22 | @avatarMargin: 0.25em; 23 | 24 | 25 | /*------------------- 26 | Variations 27 | --------------------*/ 28 | 29 | /* Spaced */ 30 | @spacedDistance: 0.5em; 31 | 32 | /* Floated */ 33 | @floatedHorizontalMargin: 1em; 34 | @floatedVerticalMargin: 1em; 35 | 36 | /* Size */ 37 | @miniWidth: 35px; 38 | @tinyWidth: 80px; 39 | @smallWidth: 150px; 40 | @mediumWidth: 300px; 41 | @largeWidth: 450px; 42 | @bigWidth: 600px; 43 | @hugeWidth: 800px; 44 | @massiveWidth: 960px; 45 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/input.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/label.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/list.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/loader.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/rail.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/rail.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Rail 3 | *******************************/ 4 | 5 | /*------------------- 6 | Element 7 | --------------------*/ 8 | 9 | @width: 300px; 10 | @height: 100%; 11 | 12 | @distance: 4rem; 13 | @splitDistance: (@distance / 2); 14 | 15 | /*------------------- 16 | Variations 17 | --------------------*/ 18 | 19 | /* Close */ 20 | @closeDistance: 2em; 21 | @veryCloseDistance: 1em; 22 | 23 | @splitCloseDistance: (@closeDistance / 2); 24 | @splitVeryCloseDistance: (@veryCloseDistance / 2); 25 | 26 | @closeWidth: ~"calc("@width~" + "@splitCloseDistance~")"; 27 | @veryCloseWidth: ~"calc("@width~" + "@splitVeryCloseDistance~")"; 28 | 29 | /* Dividing */ 30 | @dividingBorder: 1px solid @borderColor; 31 | @dividingDistance: 5rem; 32 | @splitDividingDistance: (@dividingDistance / 2); 33 | @dividingWidth: @width + @splitDividingDistance; 34 | 35 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/reveal.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/reveal.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Reveal 3 | *******************************/ 4 | 5 | @transitionDelay: 0.1s; 6 | @transitionDuration: 0.5s; 7 | @transitionEasing: cubic-bezier(0.175, 0.885, 0.320, 1); 8 | @transition: all @transitionDuration @defaultEasing @transitionDelay; 9 | 10 | @bottomZIndex: 2; 11 | @topZIndex: 3; 12 | @activeZIndex: 4; 13 | 14 | /* Types */ 15 | @rotateDegrees: 110deg; 16 | @moveTransition: transform @transitionDuration @transitionEasing @transitionDelay; 17 | @slideTransition: transform @transitionDuration @defaultEasing @transitionDelay; -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/elements/segment.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/globals/reset.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Reset 3 | *******************************/ -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/globals/site.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Global Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/chatroom.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/chatroom.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Chatroom 3 | *******************************/ -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/dimmer.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/embed.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Video Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/modal.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/nag.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/popup.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/progress.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Progress 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/search.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/shape.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/shape.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Shape 3 | *******************************/ 4 | 5 | @display: inline-block; 6 | 7 | /* Animating */ 8 | @perspective: 2000px; 9 | 10 | @duration: 0.6s; 11 | @easing: ease-in-out; 12 | 13 | @hiddenSideOpacity: 0.6; 14 | @animatingZIndex: 100; 15 | 16 | @transition: 17 | transform @duration @easing, 18 | left @duration @easing, 19 | width @duration @easing, 20 | height @duration @easing 21 | ; 22 | @sideTransition: opacity @duration @easing; 23 | @backfaceVisibility: hidden; 24 | 25 | /* Side */ 26 | @sideMargin: 0em; 27 | 28 | /*-------------- 29 | Types 30 | ---------------*/ 31 | 32 | /* Cube */ 33 | @cubeSize: 15em; 34 | @cubeBackground: #E6E6E6; 35 | @cubePadding: 2em; 36 | @cubeTextColor: @textColor; 37 | @cubeBoxShadow: 0px 0px 2px rgba(0, 0, 0, 0.3); 38 | 39 | @cubeTextAlign: center; 40 | @cubeFontSize: 2em; 41 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/sidebar.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/sidebar.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Sidebar 3 | *******************************/ 4 | 5 | /*------------------- 6 | Content 7 | --------------------*/ 8 | 9 | /* Animation */ 10 | @perspective: 1500px; 11 | @duration: 500ms; 12 | @easing: @defaultEasing; 13 | 14 | /* Dimmer */ 15 | @dimmerColor: rgba(0, 0, 0, 0.4); 16 | @dimmerTransition: opacity @duration; 17 | 18 | /* Color below page */ 19 | @canvasBackground: @lightBlack; 20 | 21 | /* Shadow */ 22 | @boxShadow: 0px 0px 20px @borderColor; 23 | @horizontalBoxShadow: @boxShadow; 24 | @verticalBoxShadow: @boxShadow; 25 | 26 | /* Layering */ 27 | @bottomLayer: 1; 28 | @middleLayer: 2; 29 | @fixedLayer: 101; 30 | @topLayer: 102; 31 | @dimmerLayer: 1000; 32 | 33 | /*------------------- 34 | Variations 35 | --------------------*/ 36 | 37 | /* Width */ 38 | @veryThinWidth: 60px; 39 | @thinWidth: 150px; 40 | @width: 260px; 41 | @wideWidth: 350px; 42 | @veryWideWidth: 475px; 43 | 44 | /* Height */ 45 | @height: 36px; 46 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/sticky.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/sticky.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Sticky 3 | *******************************/ 4 | 5 | @transitionDuration: @defaultDuration; 6 | @transition: none; 7 | @zIndex: 800; -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/tab.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Tab Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/tab.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Tab 3 | *******************************/ 4 | 5 | /* Loading */ 6 | @loadingMinHeight: 250px; 7 | @loadingContentPosition: relative; 8 | @loadingContentOffset: -10000px; 9 | 10 | @loaderDistanceFromTop: 100px; 11 | @loaderSize: 2.5em; -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/modules/transition.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Transition 3 | *******************************/ 4 | 5 | @transitionDefaultEasing: @defaultEasing; 6 | @transitionDefaultFill: both; 7 | @transitionDefaultDuration: 300ms; 8 | 9 | @use3DAcceleration: translateZ(0); 10 | @backfaceVisibility: hidden; -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/views/ad.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/views/ad.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Advertisement 3 | *******************************/ 4 | 5 | @margin: 1em 0em; 6 | @overflow: hidden; 7 | 8 | @testBackground: @lightBlack; 9 | @testColor: @white; 10 | @testFontWeight: bold; 11 | @testText: 'Ad'; 12 | @testFontSize: @relativeMedium; 13 | @testMobileFontSize: @relativeTiny; -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/views/card.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/views/comment.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/views/feed.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/views/item.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/default/views/statistic.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/duo/elements/loader.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Theme Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/duo/elements/loader.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Loader 3 | *******************************/ 4 | 5 | @shapeBorderColor: @primaryColor @primaryColor @secondaryColor @secondaryColor; 6 | @invertedShapeBorderColor: @lightPrimaryColor @lightPrimaryColor @lightSecondaryColor @lightSecondaryColor; -------------------------------------------------------------------------------- /styles/semantic/src/themes/fixed-width/collections/grid.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/fixed-width/collections/grid.variables: -------------------------------------------------------------------------------- 1 | /* Fixed Page Grid */ 2 | 3 | @mobileWidth: auto; 4 | @mobileMargin: 0em; 5 | @mobileGutter: 0em; 6 | 7 | @tabletWidth: auto; 8 | @tabletMargin: 0em; 9 | @tabletGutter: 8%; 10 | 11 | @computerWidth: 960px; 12 | @computerMargin: auto; 13 | @computerGutter: 0; 14 | 15 | @largeMonitorWidth: 1180px; 16 | @largeMonitorMargin: auto; 17 | @largeMonitorGutter: 0; 18 | 19 | @widescreenMonitorWidth: 1300px; 20 | @widescreenMargin: auto; 21 | @widescreenMonitorGutter: 0; 22 | 23 | @tableWidth: ''; -------------------------------------------------------------------------------- /styles/semantic/src/themes/fixed-width/modules/modal.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/flat/collections/form.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | .ui.form input[type="text"], 6 | .ui.form input[type="email"], 7 | .ui.form input[type="date"], 8 | .ui.form input[type="password"], 9 | .ui.form input[type="number"], 10 | .ui.form input[type="url"], 11 | .ui.form input[type="tel"] { 12 | border-bottom: 1px solid #DDDDDD; 13 | } 14 | 15 | .ui.form .selection.dropdown { 16 | border: none; 17 | box-shadow: none !important; 18 | border-bottom: 1px solid #DDDDDD; 19 | border-radius: 0em !important; 20 | } 21 | 22 | .ui.form .ui.icon.input > .icon { 23 | width: 1em; 24 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/flat/globals/site.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/assets/fonts/octicons-local.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/github/assets/fonts/octicons-local.ttf -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/assets/fonts/octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/github/assets/fonts/octicons.ttf -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/assets/fonts/octicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/github/assets/fonts/octicons.woff -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/collections/breadcrumb.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | 5 | @dividerOpacity: 1; 6 | @dividerSpacing: 0; 7 | @dividerSize: @big; 8 | @dividerColor: inherit; 9 | 10 | @huge: 1.5384em; 11 | 12 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/collections/form.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | .ui.selection.dropdown { 6 | background-color: #FAFAFA; 7 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset; 8 | border-color: #CCCCCC; 9 | } 10 | 11 | .ui.selection.dropdown:focus { 12 | box-shadow: 13 | 0px 1px 2px rgba(0, 0, 0, 0.075) inset, 14 | 0px 0px 5px rgba(81, 167, 232, 0.5) 15 | ; 16 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/collections/form.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Form 3 | *******************************/ 4 | 5 | /*------------------- 6 | Elements 7 | --------------------*/ 8 | 9 | @inputBackground: #FAFAFA; 10 | @inputBorder: 1px solid #CCCCCC; 11 | @inputBoxShadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset; 12 | @inputBorderRadius: 3px; 13 | 14 | @labelFontWeight: bold; 15 | @labelMargin: 6px; 16 | 17 | /*------------------- 18 | States 19 | --------------------*/ 20 | 21 | @inputFocusBackground: #FFFFFF; 22 | @inputFocusBoxShadow: 23 | 0px 1px 2px rgba(0, 0, 0, 0.075) inset, 24 | 0px 0px 5px rgba(81, 167, 232, 0.5) 25 | ; 26 | @inputFocusBorderColor: #51A7E8; 27 | @inputFocusBorderRadius: @inputBorderRadius; 28 | 29 | /*------------------- 30 | Types 31 | --------------------*/ 32 | 33 | 34 | /*------------------- 35 | Variations 36 | --------------------*/ 37 | 38 | /*------------------- 39 | Groups 40 | --------------------*/ 41 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/collections/grid.variables: -------------------------------------------------------------------------------- 1 | 2 | @gutterWidth: 1.538rem; -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/collections/menu.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | .ui.menu .item > .label { 6 | box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset; 7 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/collections/message.overrides: -------------------------------------------------------------------------------- 1 | .ui.info.message { 2 | background: linear-gradient(#D8EBF8, #D0E3EF); 3 | } 4 | .ui.error.message { 5 | background: linear-gradient(#F8D8D8, #EFD0D0); 6 | } 7 | .ui.warning.message { 8 | background: linear-gradient(#FFE3C8, #F5DAC0); 9 | } 10 | .ui.success.message { 11 | } 12 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/collections/message.variables: -------------------------------------------------------------------------------- 1 | @background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.05)) #FEFEFE; 2 | @boxShadow: 3 | 0px 0px 0px 1px rgba(255, 255, 255, 0.3) inset, 4 | 0px 0px 0px 1px rgba(0, 0, 0, 0.2) inset 5 | ; 6 | @verticalPadding: 15px; 7 | @horizontalPadding: 15px; 8 | 9 | @headerFontSize: 1.15em; 10 | 11 | @infoTextColor: #264C72; 12 | @warningTextColor: #613A00; 13 | @errorTextColor: #991111; 14 | 15 | @floatingBoxShadow: 16 | 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset, 17 | 0px 2px 3px 0px rgba(0, 0, 0, 0.1), 18 | 0px 0px 0px 1px rgba(0, 0, 0, 0.05) inset 19 | ; 20 | 21 | @infoBorderColor: #97C1DA; 22 | @errorBorderColor: #DA9797; 23 | @warningBorderColor: #DCA874; 24 | 25 | @small: 12px; 26 | @medium: 13px; 27 | @large: 14px; 28 | @huge: 16px; 29 | @massive: 18px; 30 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/collections/table.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | 5 | @background: #F8F8F8; 6 | 7 | @cellVerticalPadding: @relative6px; 8 | @cellHorizontalPadding: @relative8px; -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/button.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/header.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Header 3 | *******************************/ 4 | 5 | /*------------------- 6 | Element 7 | --------------------*/ 8 | 9 | @iconMargin: @4px; 10 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/icon.variables: -------------------------------------------------------------------------------- 1 | @fontPath: '../../themes/github/assets/fonts'; 2 | @fontName: 'octicons'; 3 | @fallbackSRC: ''; 4 | 5 | @width: 1em; 6 | @height: 1em; 7 | 8 | @small: 13px; 9 | @medium: 16px; 10 | @large: 18px; 11 | @big : 20px; 12 | @huge: 28px; 13 | @massive: 32px; -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/image.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | 5 | @miniWidth: 20px; -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/input.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Input 3 | *******************************/ 4 | 5 | /* Labeled Input has padding */ 6 | .ui.labeled.input { 7 | background-color: @white; 8 | border: @borderWidth solid @borderColor; 9 | border-radius: @borderRadius !important; 10 | } 11 | .ui.labeled.input input { 12 | box-shadow: none !important; 13 | border: none !important; 14 | } 15 | .ui.labeled.input .label { 16 | font-weight: normal; 17 | align-self: center; 18 | font-size: 12px; 19 | margin: @2px; 20 | border-radius: @borderRadius !important; 21 | padding: @relative5px @relative8px !important; 22 | } 23 | 24 | /* GitHub Uses Focus Group with class name added */ 25 | .ui.labeled.input.focused { 26 | border-color: @focusBorderColor; 27 | box-shadow: @focusBoxShadow; 28 | } 29 | .ui.labeled.input.focused .label { 30 | background-color: #E1EAF5; 31 | color: #4078C0; 32 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/input.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Input 3 | *******************************/ 4 | 5 | @boxShadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset; 6 | 7 | @verticalPadding: @relative7px; 8 | @horizontalPadding: @relative8px; 9 | 10 | @borderColor: #CCCCCC; 11 | 12 | @focusBorderColor: #51A7E8; 13 | @focusBoxShadow: 14 | 0 1px 2px rgba(0, 0, 0, 0.075) inset, 15 | 0 0 5px rgba(81, 167, 232, 0.5) 16 | ; -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/label.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Overrides 3 | *******************************/ 4 | 5 | /* Notification Label on GitHub */ 6 | .ui.floating.blue.label { 7 | border: 2px solid #f3f3f3 !important; 8 | background-image: linear-gradient(#7aa1d3, #4078c0) !important; 9 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/label.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | 5 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/segment.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/segment.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Standard 3 | *******************************/ 4 | 5 | /*------------------- 6 | Segment 7 | --------------------*/ 8 | 9 | @segmentBorderWidth: 1px; 10 | @border: 1px solid #D8DEE2; 11 | @boxShadow: 0px 1px 3px rgba(0, 0, 0, 0.075); 12 | 13 | @verticalPadding: 20px; 14 | @horizontalPadding: 20px; 15 | 16 | @margin: 1em; 17 | @borderRadius: 4px; 18 | 19 | /******************************* 20 | Variations 21 | *******************************/ 22 | 23 | 24 | /* Raised */ 25 | @raisedBoxShadow: 0px 1px 3px rgba(0, 0, 0, 0.075); 26 | 27 | /* Colors */ 28 | @coloredBorderSize: 0.5em; 29 | 30 | /* Ordinality */ 31 | @secondaryBackground: #F9F9F9; 32 | @secondaryColor: @textColor; 33 | 34 | @tertiaryBackground: #F0F0F0; 35 | @tertiaryColor: @textColor; 36 | 37 | @secondaryInvertedBackground: #555555; 38 | @secondaryInvertedColor: @textColor; 39 | 40 | @tertiaryInvertedBackground: #333333; 41 | @tertiaryInvertedColor: @textColor; 42 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/step.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | .ui.steps .step:after { 6 | display: none; 7 | } 8 | .ui.steps .completed.step:before { 9 | opacity: 0.5; 10 | } 11 | 12 | .ui.steps .step.active:after { 13 | display: block; 14 | border: none; 15 | border-bottom: 1px solid rgba(0, 0, 0, 0.2); 16 | border-left: 1px solid rgba(0, 0, 0, 0.2); 17 | } 18 | .ui.vertical.steps .step.active:after { 19 | display: block; 20 | border: none; 21 | top: 50%; 22 | right: 0%; 23 | border-left: none; 24 | border-bottom: 1px solid rgba(0, 0, 0, 0.2); 25 | border-right: 1px solid rgba(0, 0, 0, 0.2); 26 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/elements/step.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Step Variables 3 | --------------------*/ 4 | 5 | /* Step */ 6 | @background: linear-gradient(transparent, rgba(0, 0, 0, 0.07)); 7 | @verticalPadding: 1em; 8 | 9 | /* Group */ 10 | @stepsBackground: #FFFFFF; 11 | @stepsBoxShadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.15); 12 | 13 | /* States */ 14 | @activeBackground: #FFFFFF; 15 | @activeIconColor: @darkTextColor; 16 | 17 | /* Arrow */ 18 | @arrowTopOffset: 100%; 19 | @arrowRightOffset: 50%; 20 | @arrowBorderColor: rgba(0, 0, 0, 0.2); -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/globals/site.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Global Variables 3 | *******************************/ 4 | 5 | @pageMinWidth : 1049px; 6 | @pageOverflowX : visible; 7 | 8 | @emSize: 13px; 9 | @fontSize : 13px; 10 | @fontName : 'Arial'; 11 | @importGoogleFonts : false; 12 | 13 | @h1: 2.25em; 14 | 15 | @defaultBorderRadius: 0.2307em; 16 | 17 | @disabledOpacity: 0.3; 18 | 19 | /* Colors */ 20 | @blue: #80A6CD; 21 | @green: #78CB5B; 22 | @orange: #D26911; 23 | @black: #333333; 24 | @primaryColor: @green; 25 | @secondaryColor: @black; 26 | 27 | /* Links */ 28 | @linkColor: #4078C0; 29 | @linkHoverColor: @linkColor; 30 | @linkHoverUnderline: underline; 31 | 32 | /* Borders */ 33 | @borderColor: rgba(0, 0, 0, 0.13); 34 | @solidBorderColor: #DDDDDD; 35 | @internalBorderColor: rgba(0, 0, 0, 0.06); 36 | @selectedBorderColor: #51A7E8; 37 | 38 | /* Breakpoints */ 39 | @largeMonitorBreakpoint: 1049px; 40 | @computerBreakpoint: @largeMonitorBreakpoint; 41 | @tabletBreakpoint: @largeMonitorBreakpoint; 42 | 43 | @infoBackgroundColor: #E6F1F6; 44 | 45 | @infoTextColor: #4E575B; 46 | @warningTextColor: #613A00; 47 | @errorTextColor: #991111; -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/modules/dropdown.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | 5 | @transition: 6 | width @defaultDuration @defaultEasing 7 | ; 8 | 9 | @menuPadding: 0px; 10 | 11 | @itemVerticalPadding: @relative8px; 12 | @itemHorizontalPadding: @relative14px; 13 | 14 | @dropdownIconMargin: 0em 0em 0em 2px; 15 | 16 | @raisedBoxShadow: 0px 3px 12px rgba(0, 0, 0, 0.15); 17 | 18 | @menuPadding: @relative5px 0px; 19 | 20 | @menuHeaderMargin: 0em; 21 | @menuHeaderPadding: @relative6px @itemHorizontalPadding; 22 | @menuHeaderFontSize: @relative12px; 23 | @menuHeaderTextTransform: none; 24 | @menuHeaderFontWeight: normal; 25 | @menuHeaderColor: #767676; 26 | 27 | @menuDividerMargin: @relative8px 0em; 28 | 29 | @disabledOpacity: 0.6; 30 | 31 | /* States */ 32 | @hoveredItemBackground: #4078C0; 33 | @hoveredItemColor: @white; 34 | 35 | @pointingArrowSize: @relative9px; 36 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/github/modules/popup.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Popup 3 | *******************************/ 4 | 5 | 6 | @small: @relative10px; 7 | @medium: @relative11px; 8 | @large: @relative13px; 9 | 10 | @verticalPadding: @relative7px; 11 | @horizontalPadding: @relative11px; 12 | 13 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/gmail/collections/message.overrides: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/gmail/collections/message.overrides -------------------------------------------------------------------------------- /styles/semantic/src/themes/gmail/collections/message.variables: -------------------------------------------------------------------------------- 1 | @background: #F3F3F3; 2 | 3 | @boxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset; 4 | @borderRadius: 4px; 5 | @verticalPadding: 7px; 6 | @horizontalPadding: 15px; 7 | 8 | @headerFontSize: 1em; 9 | 10 | @floatingBoxShadow: 0px 2px 4px rgba(0, 0, 0, 0.2); 11 | 12 | @iconSize: 1.5em; 13 | @iconDistance: 1em; 14 | 15 | @warningBackgroundColor: #F9EDBE; 16 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/instagram/views/card.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | 6 | @import url(http://fonts.googleapis.com/css?family=Montserrat:700,400); 7 | 8 | .ui.cards > .card, 9 | .ui.card { 10 | font-family: 'Montserrat'; 11 | font-size-adjust: 0.5; 12 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/instagram/views/card.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Card 3 | *******************************/ 4 | 5 | /*------------------- 6 | View 7 | --------------------*/ 8 | 9 | @borderBoxShadow: none; 10 | @shadowBoxShadow: none; 11 | @boxShadow: none; 12 | 13 | 14 | @internalBorderColor: #EDEDEE; 15 | @border: 1px solid #EDEDEE; 16 | 17 | @contentPadding: 14px 20px; 18 | 19 | @metaColor: #A5A7AA; 20 | 21 | @linkHoverRaiseDistance: 0px; 22 | @linkHoverBoxShadow: none; 23 | @linkHoverBorder: 1px solid #D0D0D8; -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/material/assets/fonts/icons.eot -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/material/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/material/assets/fonts/icons.woff -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/collections/menu.overrides: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Roboto); 2 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/collections/menu.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Menu 3 | *******************************/ 4 | 5 | @fontFamily: 'Roboto', Arial, sans-serif; 6 | @boxShadow: 0px 1px 6px rgba(0, 0, 0, 0.2); 7 | @dividerSize: 0px; 8 | 9 | @itemVerticalPadding: @relativeLarge; 10 | @itemHorizontaPadding: @relativeLarge; -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/elements/button.overrides: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Roboto); 2 | 3 | .ui.button { 4 | min-width: 72px; 5 | } 6 | .ui.buttons .button { 7 | min-width: 0px; 8 | } 9 | 10 | .ui.primary.button:hover { 11 | box-shadow: 12 | 0px 0px 0px 1px rgba(0, 0, 0, 0.3) inset, 13 | 0px 2px 3px 0px rgba(0, 0, 0, 0.35) !important 14 | ; 15 | } 16 | 17 | .ui.secondary.button:hover { 18 | box-shadow: 19 | 0px 0px 0px 1px rgba(0, 0, 0, 0.2) inset, 20 | 0px 2px 3px 0px rgba(0, 0, 0, 0.3) !important 21 | ; 22 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/elements/header.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | @import url(http://fonts.googleapis.com/css?family=Roboto); 6 | 7 | h1.ui.header, 8 | .ui.huge.header { 9 | font-weight: normal; 10 | } 11 | 12 | h2.ui.header, 13 | .ui.large.header { 14 | font-weight: normal; 15 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/elements/header.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Header 3 | --------------------*/ 4 | 5 | @headerFont : 'Roboto', Arial, sans-serif; 6 | @fontWeight: normal; 7 | 8 | @iconSize: 2em; 9 | @iconOffset: 0.2em; 10 | @iconAlignment: top; 11 | 12 | @subHeaderFontSize: 1rem; 13 | 14 | 15 | /* HTML Headings */ 16 | @h1 : 2.25rem; 17 | @h2 : 2rem; 18 | @h3 : 1.75rem; 19 | @h4 : 1.5rem; 20 | @h5 : 1.25rem; 21 | 22 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/elements/icon.variables: -------------------------------------------------------------------------------- 1 | @fontPath : '../../themes/material/assets/fonts'; 2 | 3 | @width: 1em; 4 | @height: 1em; 5 | 6 | @small: 13px; 7 | @medium: 16px; 8 | @large: 18px; 9 | @big : 20px; 10 | @huge: 28px; 11 | @massive: 32px; 12 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/globals/site.overrides: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/material/globals/site.overrides -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/modules/dropdown.overrides: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Roboto:400,700); 2 | 3 | .ui.dropdown { 4 | font-family: 'Roboto'; 5 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/modules/dropdown.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Menu 3 | *******************************/ 4 | 5 | @menuBorderRadius: @borderRadius; 6 | @menuBorderColor: #DADADA; 7 | @menuBoxShadow: 0px 2px 4px rgba(0, 0, 0, 0.2); 8 | 9 | @menuPadding: @relative8px 0em; 10 | @itemVerticalPadding: 1em; 11 | @itemHorizontalPadding: 1.5em; 12 | 13 | @menuHeaderFontSize: @small; 14 | @menuHeaderFontWeight: bold; 15 | @menuHeaderTextTransform: none; 16 | 17 | @selectionBorderEmWidth: 0em; 18 | @selectionItemDivider: none; 19 | 20 | @labelBoxShadow: none; -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/modules/modal.overrides: -------------------------------------------------------------------------------- 1 | @import url(http://fonts.googleapis.com/css?family=Roboto); 2 | 3 | .ui.modal .header { 4 | font-family: "Roboto", Arial, Sans-serif !important; 5 | font-weight: 400 !important; 6 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/material/modules/modal.variables: -------------------------------------------------------------------------------- 1 | @boxShadow: 0px 10px 18px rgba(0, 0, 0, 0.22); 2 | @borderRadius: 0em; 3 | 4 | 5 | @headerBackground: @white; 6 | @headerVerticalPadding: 1.7142rem; 7 | @headerHorizontalPadding: 1.7142rem; 8 | @headerFontWeight: 400; 9 | @headerFontFamily: 'Roboto', "Helvetica Neue", Arial, sans-serif; 10 | @headerBorder: none; 11 | 12 | @contentPadding: 1rem 2rem 2rem; 13 | 14 | @actionBorder: none; 15 | @actionBackground: @white; -------------------------------------------------------------------------------- /styles/semantic/src/themes/pulsar/elements/loader.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Loader 3 | *******************************/ 4 | 5 | @loaderSpeed: 2s; 6 | @loaderLineColor: @primaryColor; 7 | @invertedLoaderLineColor: @lightPrimaryColor; 8 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/raised/elements/button.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/raised/elements/button.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Button 3 | *******************************/ 4 | 5 | /*------------------- 6 | Element 7 | --------------------*/ 8 | 9 | @backgroundColor: #F8F8F8; 10 | @backgroundImage: linear-gradient(transparent, rgba(0, 0, 0, 0.05)); 11 | @verticalAlign: middle; 12 | @borderRadius: 0.4em; 13 | @borderBoxShadowColor: @borderColor; 14 | 15 | /* Shadow */ 16 | @shadowDistance: 0.3em; 17 | @verticalPadding: 1em; 18 | @horizontalPadding: 2em; 19 | 20 | /* transition box shadow as well */ 21 | @transition: 22 | opacity @transitionDuration @transitionEasing, 23 | background-color @transitionDuration @transitionEasing, 24 | box-shadow @transitionDuration @transitionEasing, 25 | color @transitionDuration @transitionEasing, 26 | background @transitionDuration @transitionEasing 27 | ; -------------------------------------------------------------------------------- /styles/semantic/src/themes/resetcss/globals/reset.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Reset 3 | *******************************/ -------------------------------------------------------------------------------- /styles/semantic/src/themes/round/elements/button.overrides: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/styles/semantic/src/themes/round/elements/button.overrides -------------------------------------------------------------------------------- /styles/semantic/src/themes/rtl/globals/site.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Global Overrides 3 | *******************************/ 4 | 5 | /* Import Droid Arabic Kufi */ 6 | @import 'http://fonts.googleapis.com/earlyaccess/droidarabickufi.css'; 7 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/rtl/globals/site.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Site Settings 3 | *******************************/ 4 | 5 | /*------------------- 6 | Fonts 7 | --------------------*/ 8 | 9 | @googleFontName : 'Droid Sans'; 10 | 11 | /* Kufi imported in site.overrides */ 12 | @headerFont : 'Droid Arabic Kufi', 'Droid Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif; 13 | @pageFont : 'Droid Arabic Kufi', 'Droid Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif; 14 | 15 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/striped/modules/progress.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Progress 3 | *******************************/ 4 | 5 | .ui.progress .bar { 6 | background-size: 30px 30px; 7 | background-image: 8 | linear-gradient( 9 | 135deg, rgba(255, 255, 255, 0.08) 25%, transparent 25%, 10 | transparent 50%, rgba(255, 255, 255, 0.08) 50%, rgba(255, 255, 255, 0.08) 75%, 11 | transparent 75%, transparent 12 | ) 13 | ; 14 | } 15 | 16 | .ui.progress.active .bar:after { 17 | animation: none; 18 | } 19 | .ui.progress.active .bar { 20 | animation: progress-striped 3s linear infinite; 21 | } 22 | @keyframes progress-striped { 23 | 0% { 24 | background-position: 0px 0; 25 | } 26 | 100% { 27 | background-position: 60px 0; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/striped/modules/progress.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Progress 3 | *******************************/ 4 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/timeline/views/feed.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | User Variable Overrides 3 | *******************************/ 4 | 5 | .ui.feed > .event .label { 6 | border-left: 3px solid #DDDDDD; 7 | } 8 | .ui.feed > .event:last-child .label { 9 | border-left-color: transparent; 10 | } 11 | 12 | .ui.feed > .event > .label > img, 13 | .ui.feed > .event > .label > .icon { 14 | background-color: #009FDA; 15 | border-radius: 500rem; 16 | color: #FFFFFF; 17 | width: 3rem; 18 | height: 3rem; 19 | line-height: 1.5; 20 | left: -1.6rem; 21 | opacity: 1; 22 | position: relative; 23 | } 24 | 25 | .ui.feed > .event > .content { 26 | display: block; 27 | border-left: 3px solid #ddd; 28 | padding-bottom: 2em; 29 | padding-left: 4em; 30 | } 31 | .ui.feed > .event > .label + .content { 32 | display: table-cell; 33 | border-left: medium none; 34 | margin-left: 0; 35 | } -------------------------------------------------------------------------------- /styles/semantic/src/themes/timeline/views/feed.variables: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Feed 3 | *******************************/ 4 | 5 | /*------------------- 6 | Elements 7 | --------------------*/ 8 | 9 | @eventMargin: 0em 0em 0em 2em; 10 | @eventDivider: none; 11 | @eventPadding: 0em; 12 | 13 | /* Event Label */ 14 | @labelWidth: 3em; 15 | @labelHeight: 3em; 16 | 17 | @labeledContentPadding: 0.75em 0em 2em 0.75em; 18 | 19 | /* Icon */ 20 | @iconLabelBackground: @primaryColor; 21 | @iconLabelBorderRadius: @circularRadius; 22 | @iconLabelColor: @white; 23 | 24 | /* Metadata Group */ 25 | @metadataDisplay: inline-block; 26 | @metadataMargin: 1em 0em 0em; 27 | @metadataBackground: @white @subtleGradient; 28 | @metadataBorder: 1px solid @solidBorderColor; 29 | @metadataBorderRadius: 0.25em; 30 | @metadataBoxShadow: 0 1px 1px rgba(0, 0, 0, 0.05); 31 | @metadataPadding: 0.5em 1em; 32 | @metadataColor: rgba(0, 0, 0, 0.6); 33 | 34 | /*------------------- 35 | Variations 36 | --------------------*/ 37 | 38 | /* Size */ 39 | @small: 0.9em; 40 | @medium: 1em; -------------------------------------------------------------------------------- /styles/semantic/src/themes/twitter/elements/button.overrides: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Overrides 3 | *******************************/ 4 | 5 | .ui.primary.button { 6 | box-shadow: 7 | 0px 0px 0px 1px #3B88C3 inset, 8 | 0 2px 0 rgba(255, 255, 255, 0.15) inset 9 | ; 10 | } 11 | .ui.primary.button > .icon { 12 | color: #FFFFFF; 13 | } 14 | -------------------------------------------------------------------------------- /styles/semantic/src/themes/twitter/elements/button.variables: -------------------------------------------------------------------------------- 1 | /*------------------- 2 | Global Variables 3 | --------------------*/ 4 | 5 | @pageFont: Helvetica Neue, Helvetica, Arial, sans-serif; 6 | @textColor: #66757F; 7 | @blue: #55ACEE; 8 | 9 | /*------------------- 10 | Button Variables 11 | --------------------*/ 12 | 13 | @backgroundColor: #F5F8FA; 14 | @backgroundImage: linear-gradient(@white, @backgroundColor); 15 | @color: #66757F; 16 | @borderBoxShadowColor: #E1E8ED; 17 | 18 | @textTransform: none; 19 | @fontWeight: bold; 20 | @textColor: #333333; 21 | 22 | @horizontalPadding: 1.284em; 23 | @verticalPadding: 0.8571em; 24 | 25 | @activeBackgroundColor: rgba(0, 0, 0, 0.1); 26 | 27 | @primaryColor: @blue; 28 | @coloredBackgroundImage: @subtleGradient; 29 | 30 | 31 | /*------------------- 32 | States 33 | --------------------*/ 34 | 35 | @hoverBackgroundColor: #E1E8ED; 36 | @hoverBackgroundImage: linear-gradient(@white, @hoverBackgroundColor); 37 | @hoverColor: #292F33; 38 | 39 | @downBackgroundColor: #E1E8ED; 40 | @downColor: #292F33; 41 | @downPressedShadow: 0px 1px 4px rgba(0, 0, 0, 0.2) inset; 42 | 43 | @labeledIconBackgroundColor: rgba(85, 172, 238, 0.05); 44 | @labeledIconBorder: @borderBoxShadowColor; 45 | @labeledIconColor: #55ACEE; -------------------------------------------------------------------------------- /styles/semantic/tasks/README.md: -------------------------------------------------------------------------------- 1 | ## Tasks 2 | 3 | * Watch - Compile only changed files from source 4 | * Build - Build all files from source 5 | * Version - Output version number 6 | * Install - Run Installer to Set-up Paths 7 | 8 | ## How to use 9 | 10 | These tasks can be imported into your own gulpfile allowing you to avoid using Semantic's build tools 11 | 12 | ```javascript 13 | var 14 | watch = require('path/to/semantic/tasks/watch') 15 | ; 16 | gulp.task('watch ui', watch); 17 | ``` 18 | -------------------------------------------------------------------------------- /styles/semantic/tasks/admin/publish.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Release All 3 | *******************************/ 4 | 5 | /* 6 | This task update all SUI individual component repos with new versions of components 7 | 8 | * Commits changes from create components to GitHub and Tags 9 | 10 | */ 11 | 12 | var 13 | runSequence = require('run-sequence') 14 | ; 15 | 16 | /* Release All */ 17 | module.exports = function(callback) { 18 | 19 | runSequence( 20 | 'update distributions', // commit less/css versions to github 21 | 'update components', // commit components to github 22 | callback 23 | ); 24 | 25 | }; -------------------------------------------------------------------------------- /styles/semantic/tasks/admin/release.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Release 3 | *******************************/ 4 | 5 | /* 6 | This task update all SUI individual component repos with new versions of components 7 | 8 | * Initializes repositories with current versions 9 | * Creates local files at ../distributions/ with each repo for release 10 | 11 | */ 12 | 13 | var 14 | runSequence = require('run-sequence') 15 | ; 16 | 17 | /* Release All */ 18 | module.exports = function(callback) { 19 | 20 | runSequence( 21 | //'build', // build Semantic 22 | 'init distributions', // sync with current github version 23 | 'create distributions', // update each repo with changes from master repo 24 | 'init components', // sync with current github version 25 | 'create components', // update each repo 26 | callback 27 | ); 28 | 29 | }; -------------------------------------------------------------------------------- /styles/semantic/tasks/build.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Build Task 3 | *******************************/ 4 | 5 | var 6 | // dependencies 7 | gulp = require('gulp-help')(require('gulp')), 8 | runSequence = require('run-sequence'), 9 | 10 | // config 11 | config = require('./config/user'), 12 | install = require('./config/project/install'), 13 | 14 | // task sequence 15 | tasks = [] 16 | ; 17 | 18 | 19 | // sub-tasks 20 | if(config.rtl) { 21 | require('./collections/rtl')(gulp); 22 | } 23 | require('./collections/build')(gulp); 24 | 25 | 26 | module.exports = function(callback) { 27 | 28 | console.info('Building Semantic'); 29 | 30 | if( !install.isSetup() ) { 31 | console.error('Cannot find semantic.json. Run "gulp install" to set-up Semantic'); 32 | return 1; 33 | } 34 | 35 | // check for right-to-left (RTL) language 36 | if(config.rtl === true || config.rtl === 'Yes') { 37 | gulp.start('build-rtl'); 38 | return; 39 | } 40 | 41 | if(config.rtl == 'both') { 42 | tasks.push('build-rtl'); 43 | } 44 | 45 | tasks.push('build-javascript'); 46 | tasks.push('build-css'); 47 | tasks.push('build-assets'); 48 | 49 | runSequence(tasks, callback); 50 | }; 51 | -------------------------------------------------------------------------------- /styles/semantic/tasks/build/assets.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Build Task 3 | *******************************/ 4 | 5 | var 6 | gulp = require('gulp'), 7 | 8 | // gulp dependencies 9 | chmod = require('gulp-chmod'), 10 | gulpif = require('gulp-if'), 11 | 12 | // config 13 | config = require('../config/user'), 14 | tasks = require('../config/tasks'), 15 | 16 | // shorthand 17 | globs = config.globs, 18 | assets = config.paths.assets, 19 | output = config.paths.output, 20 | source = config.paths.source, 21 | 22 | log = tasks.log 23 | ; 24 | 25 | module.exports = function(callback) { 26 | 27 | console.info('Building assets'); 28 | 29 | // copy assets 30 | return gulp.src(source.themes + '/**/assets/**/*.*') 31 | .pipe(gulpif(config.hasPermission, chmod(config.permission))) 32 | .pipe(gulp.dest(output.themes)) 33 | ; 34 | 35 | }; -------------------------------------------------------------------------------- /styles/semantic/tasks/check-install.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Check Install 3 | *******************************/ 4 | 5 | var 6 | // node dependencies 7 | gulp = require('gulp'), 8 | fs = require('fs'), 9 | console = require('better-console'), 10 | install = require('./config/project/install') 11 | ; 12 | 13 | // export task 14 | module.exports = function() { 15 | 16 | setTimeout(function() { 17 | if( !install.isSetup() ) { 18 | console.log('Starting install...'); 19 | gulp.start('install'); 20 | return; 21 | } 22 | else { 23 | gulp.start('watch'); 24 | } 25 | }, 50); // Delay to allow console.clear to remove messages from check event 26 | 27 | 28 | }; -------------------------------------------------------------------------------- /styles/semantic/tasks/clean.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Clean Task 3 | *******************************/ 4 | 5 | var 6 | del = require('del'), 7 | config = require('./config/user'), 8 | tasks = require('./config/tasks') 9 | ; 10 | 11 | // cleans distribution files 12 | module.exports = function(callback) { 13 | return del([config.paths.clean], tasks.settings.del, callback); 14 | }; -------------------------------------------------------------------------------- /styles/semantic/tasks/collections/README.md: -------------------------------------------------------------------------------- 1 | ## How to use 2 | 3 | These are collections of tasks that are imported together. 4 | 5 | To import them into gulp: 6 | ```javascript 7 | var 8 | gulp = require('gulp'), 9 | // modified to point to semantic folder 10 | install = require('tasks/collections/install') 11 | ; 12 | gulp = install(gulp); 13 | 14 | // tasks are now injected and ready to be used 15 | gulp.start('install'); 16 | ``` -------------------------------------------------------------------------------- /styles/semantic/tasks/collections/build.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Define Sub-Tasks 3 | *******************************/ 4 | 5 | module.exports = function(gulp) { 6 | 7 | var 8 | // build sub-tasks 9 | buildJS = require('./../build/javascript'), 10 | buildCSS = require('./../build/css'), 11 | buildAssets = require('./../build/assets') 12 | ; 13 | 14 | // in case these tasks are undefined during import, less make sure these are available in scope 15 | gulp.task('build-javascript', 'Builds all javascript from source', buildJS); 16 | gulp.task('build-css', 'Builds all css from source', buildCSS); 17 | gulp.task('build-assets', 'Copies all assets from source', buildAssets); 18 | 19 | }; 20 | -------------------------------------------------------------------------------- /styles/semantic/tasks/collections/rtl.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Define Sub-Tasks 3 | *******************************/ 4 | 5 | module.exports = function(gulp) { 6 | 7 | var 8 | // rtl 9 | buildRTL = require('./../rtl/build'), 10 | watchRTL = require('./../rtl/watch') 11 | ; 12 | 13 | gulp.task('watch-rtl', 'Build all files as RTL', watchRTL); 14 | gulp.task('build-rtl', 'Watch files as RTL ', buildRTL); 15 | 16 | }; 17 | -------------------------------------------------------------------------------- /styles/semantic/tasks/config/admin/github.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | GitHub Login 3 | *******************************/ 4 | /* 5 | Logs into GitHub using OAuth 6 | */ 7 | 8 | var 9 | fs = require('fs'), 10 | path = require('path'), 11 | githubAPI = require('github'), 12 | 13 | // stores oauth info for GitHub API 14 | oAuthConfig = path.join(__dirname, 'oauth.js'), 15 | oAuth = fs.existsSync(oAuthConfig) 16 | ? require(oAuthConfig) 17 | : false, 18 | github 19 | ; 20 | 21 | if(!oAuth) { 22 | console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js'); 23 | } 24 | 25 | github = new githubAPI({ 26 | version : '3.0.0', 27 | debug : true, 28 | protocol : 'https', 29 | timeout : 5000 30 | }); 31 | 32 | github.authenticate({ 33 | type: 'oauth', 34 | token: oAuth.token 35 | }); 36 | 37 | module.exports = github; 38 | -------------------------------------------------------------------------------- /styles/semantic/tasks/config/admin/oauth.example.js: -------------------------------------------------------------------------------- 1 | /* 2 | Used to import GitHub Auth Token 3 | To Automate GitHub Updates 4 | */ 5 | 6 | module.exports = { 7 | token : 'AN-OAUTH2-TOKEN', 8 | username : 'github-username', 9 | name : 'Your Name', 10 | email : 'user@email.com' 11 | }; -------------------------------------------------------------------------------- /styles/semantic/tasks/config/admin/templates/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Component", 3 | "description" : "Component distribution", 4 | "homepage" : "http://www.semantic-ui.com", 5 | "author": { 6 | "name" : "Jack Lukic", 7 | "web" : "http://www.jacklukic.com" 8 | }, 9 | "ignore": [ 10 | "./index.js" 11 | ], 12 | "keywords": [ 13 | "semantic", 14 | "ui", 15 | "css3", 16 | "framework" 17 | ], 18 | "license" : [ 19 | "http://semantic-ui.mit-license.org/" 20 | ], 21 | "ignore": [ 22 | "docs", 23 | "node", 24 | "server", 25 | "spec", 26 | "src", 27 | "test" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /styles/semantic/tasks/config/admin/templates/component-package.js: -------------------------------------------------------------------------------- 1 | 2 | Package.describe({ 3 | name : 'semantic:ui-{component}', 4 | summary : 'Semantic UI - {Component}: Single component release', 5 | version : '{version}', 6 | git : 'git://github.com/Semantic-Org/UI-{Component}.git', 7 | }); 8 | 9 | Package.onUse(function(api) { 10 | api.versionsFrom('1.0'); 11 | api.addFiles([ 12 | {files} 13 | ], 'client'); 14 | }); 15 | -------------------------------------------------------------------------------- /styles/semantic/tasks/config/admin/templates/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "semantic/ui", 3 | "description" : "Semantic empowers designers and developers by creating a shared vocabulary for UI.", 4 | "homepage" : "http://www.semantic-ui.com", 5 | "authors": [ 6 | { 7 | "name" : "Jack Lukic", 8 | "email": "jacklukic@gmail.com", 9 | "web" : "http://www.jacklukic.com", 10 | "role" : "Creator" 11 | } 12 | ], 13 | "keywords": [ 14 | "semantic", 15 | "ui", 16 | "css", 17 | "framework" 18 | ], 19 | "license" : "MIT" 20 | } -------------------------------------------------------------------------------- /styles/semantic/tasks/config/admin/templates/css-package.js: -------------------------------------------------------------------------------- 1 | var 2 | where = 'client' // Adds files only to the client 3 | ; 4 | 5 | Package.describe({ 6 | name : 'semantic:ui-css', 7 | summary : 'Semantic UI - CSS Release of Semantic UI', 8 | version : '{version}', 9 | git : 'git://github.com/Semantic-Org/Semantic-UI-CSS.git', 10 | }); 11 | 12 | Package.onUse(function(api) { 13 | 14 | api.versionsFrom('1.0'); 15 | 16 | api.use('jquery', 'client'); 17 | 18 | api.addFiles([ 19 | // icons 20 | 'themes/default/assets/fonts/icons.eot', 21 | 'themes/default/assets/fonts/icons.svg', 22 | 'themes/default/assets/fonts/icons.ttf', 23 | 'themes/default/assets/fonts/icons.woff', 24 | 'themes/default/assets/fonts/icons.woff2', 25 | 26 | // flags 27 | 'themes/default/assets/images/flags.png', 28 | 29 | // release 30 | 'semantic.css', 31 | 'semantic.js' 32 | ], 'client'); 33 | 34 | }); 35 | -------------------------------------------------------------------------------- /styles/semantic/tasks/config/admin/templates/less-package.js: -------------------------------------------------------------------------------- 1 | var 2 | where = 'client' // Adds files only to the client 3 | ; 4 | 5 | Package.describe({ 6 | name : 'semantic:ui', 7 | summary : 'Semantic UI - LESS Release of Semantic UI', 8 | version : '{version}', 9 | git : 'git://github.com/Semantic-Org/Semantic-UI-LESS.git', 10 | }); 11 | 12 | Package.onUse(function(api) { 13 | 14 | api.versionsFrom('1.0'); 15 | api.use('less', 'client'); 16 | 17 | api.addFiles([ 18 | {files} 19 | ], 'client'); 20 | 21 | }); 22 | -------------------------------------------------------------------------------- /styles/semantic/tasks/config/admin/templates/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "semantic", 3 | "version": "1.0.0", 4 | "title": "Semantic UI", 5 | "description": "Semantic empowers designers and developers by creating a shared vocabulary for UI.", 6 | "homepage": "http://www.semantic-ui.com", 7 | "author": "Jack Lukic ", 8 | "license": "MIT", 9 | "repository": { 10 | "type": "git", 11 | "url": "git://github.com/Semantic-Org/Semantic-UI.git" 12 | }, 13 | "bugs": { 14 | "url": "https://github.com/Semantic-Org/Semantic-UI/issues" 15 | }, 16 | "devDependencies": {} 17 | } 18 | -------------------------------------------------------------------------------- /styles/semantic/tasks/config/docs.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Docs 3 | *******************************/ 4 | 5 | /* Paths used for "serve-docs" and "build-docs" tasks */ 6 | module.exports = { 7 | base: '', 8 | globs: { 9 | eco: '**/*.html.eco' 10 | }, 11 | paths: { 12 | clean: '../docs/out/dist/', 13 | source: { 14 | config : 'src/theme.config', 15 | definitions : 'src/definitions/', 16 | site : 'src/site/', 17 | themes : 'src/themes/' 18 | }, 19 | output: { 20 | examples : '../docs/out/examples/', 21 | less : '../docs/out/src/', 22 | metadata : '../docs/out/', 23 | packaged : '../docs/out/dist/', 24 | uncompressed : '../docs/out/dist/components/', 25 | compressed : '../docs/out/dist/components/', 26 | themes : '../docs/out/dist/themes/' 27 | }, 28 | template: { 29 | eco: '../docs/server/documents/' 30 | }, 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /styles/semantic/tasks/version.js: -------------------------------------------------------------------------------- 1 | /******************************* 2 | Version Task 3 | *******************************/ 4 | 5 | var 6 | release = require('./config/project/release') 7 | ; 8 | 9 | module.exports = function(callback) { 10 | console.log(release.title + ' ' + release.version); 11 | }; -------------------------------------------------------------------------------- /tests/spec.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lancetw/react-isomorphic-bundle/4b1d8ecd257b9d42ebaad6c16f95081affd834d9/tests/spec.js -------------------------------------------------------------------------------- /views/admins/index.html: -------------------------------------------------------------------------------- 1 | HTTP BASIC 2 | -------------------------------------------------------------------------------- /views/posts/index.html: -------------------------------------------------------------------------------- 1 | HTTP BASIC 2 | -------------------------------------------------------------------------------- /views/users/index.html: -------------------------------------------------------------------------------- 1 | HTTP BASIC 2 | -------------------------------------------------------------------------------- /webpack/server.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var path = require('path'); 4 | var env = process.env.NODE_ENV || 'development'; 5 | require('babel-core/register'); 6 | require('app-module-path').addPath(path.join(__dirname, '../')); 7 | process.env.NODE_CONFIG_DIR = path.join(__dirname, '../../config'); 8 | 9 | module.exports = [ 10 | require('config/webpack/'+ env +'.config').webpack 11 | ]; 12 | -------------------------------------------------------------------------------- /webpack/utils/clean-dist.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import del from 'del'; 4 | import path from 'path'; 5 | import debug from 'debug'; 6 | 7 | module.exports = () => { 8 | const DIST_PATH = path.resolve(__dirname, '../../public/assets/*'); 9 | del.sync([DIST_PATH]); 10 | debug('dev')('cleaned `public` directory'); 11 | }; 12 | --------------------------------------------------------------------------------