├── .gitattributes ├── .github └── ISSUE_TEMPLATE │ └── bug_report.md ├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── changelog.md ├── composer.json ├── package-lock.json ├── package.json ├── phpunit.xml ├── src ├── Assets │ ├── dist │ │ ├── css │ │ │ ├── all.css │ │ │ ├── all.css.map │ │ │ ├── cms.css │ │ │ ├── cms.css.map │ │ │ ├── vendor.css │ │ │ └── vendor.css.map │ │ ├── js │ │ │ ├── all.js │ │ │ ├── all.js.map │ │ │ ├── cms.js │ │ │ ├── cms.js.map │ │ │ ├── vendor.js │ │ │ └── vendor.js.map │ │ └── mix-manifest.json │ ├── mimes.php │ ├── src │ │ ├── fonts │ │ │ ├── SourceSansPro-Black.ttf │ │ │ ├── SourceSansPro-Semibold.ttf │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── images │ │ │ ├── blank-file-not-found.jpg │ │ │ ├── blank-file.jpg │ │ │ ├── favicon-32.png │ │ │ ├── favicon-96.png │ │ │ ├── favicon.ico │ │ │ └── logo.png │ │ ├── js │ │ │ ├── chart.min.js │ │ │ ├── cms.js │ │ │ ├── dashboard-chart.js │ │ │ ├── dashboard.js │ │ │ ├── dropzone-custom.js │ │ │ ├── forms.js │ │ │ ├── modules.js │ │ │ └── vendor │ │ │ │ ├── bootstrap-tagsinput.min.js │ │ │ │ ├── dropzone.js │ │ │ │ ├── sortable.min.js │ │ │ │ └── typeahead.bundle.js │ │ ├── sass │ │ │ ├── _base.scss │ │ │ ├── _modules.scss │ │ │ ├── _sidebar.scss │ │ │ └── cms.scss │ │ └── vendor │ │ │ ├── datepicker │ │ │ ├── bootstrap-datetimepicker-standalone.css │ │ │ ├── bootstrap-datetimepicker.css │ │ │ ├── bootstrap-datetimepicker.min.css │ │ │ ├── bootstrap-datetimepicker.min.js │ │ │ ├── moment-timezone.js │ │ │ └── moment.js │ │ │ ├── dropzone │ │ │ ├── basic.css │ │ │ ├── dropzone-amd-module.js │ │ │ ├── dropzone.css │ │ │ ├── dropzone.js │ │ │ ├── min │ │ │ │ ├── basic.min.css │ │ │ │ ├── dropzone-amd-module.min.js │ │ │ │ ├── dropzone.min.css │ │ │ │ └── dropzone.min.js │ │ │ └── readme.md │ │ │ ├── raw.min.css │ │ │ └── redactor │ │ │ ├── _langs │ │ │ ├── ar.js │ │ │ ├── cs.js │ │ │ ├── da.js │ │ │ ├── de.js │ │ │ ├── en.js │ │ │ ├── es.js │ │ │ ├── fa.js │ │ │ ├── fi.js │ │ │ ├── fr.js │ │ │ ├── he.js │ │ │ ├── hu.js │ │ │ ├── it.js │ │ │ ├── ja.js │ │ │ ├── ko.js │ │ │ ├── nl.js │ │ │ ├── no.js │ │ │ ├── pl.js │ │ │ ├── pt_br.js │ │ │ ├── ru.js │ │ │ ├── sk.js │ │ │ ├── sl.js │ │ │ ├── sv.js │ │ │ ├── tr.js │ │ │ ├── zh_cn.js │ │ │ └── zh_tw.js │ │ │ ├── _plugins │ │ │ ├── alignment │ │ │ │ ├── alignment.js │ │ │ │ └── alignment.min.js │ │ │ ├── beyondgrammar │ │ │ │ ├── beyondgrammar.js │ │ │ │ └── beyondgrammar.min.js │ │ │ ├── clips │ │ │ │ ├── clips.css │ │ │ │ ├── clips.js │ │ │ │ ├── clips.min.css │ │ │ │ └── clips.min.js │ │ │ ├── counter │ │ │ │ ├── counter.js │ │ │ │ └── counter.min.js │ │ │ ├── definedlinks │ │ │ │ ├── definedlinks.js │ │ │ │ └── definedlinks.min.js │ │ │ ├── filemanager │ │ │ │ ├── filemanager.css │ │ │ │ ├── filemanager.js │ │ │ │ ├── filemanager.min.css │ │ │ │ └── filemanager.min.js │ │ │ ├── fileselector │ │ │ │ └── fileselector.js │ │ │ ├── fontcolor │ │ │ │ ├── fontcolor.js │ │ │ │ └── fontcolor.min.js │ │ │ ├── fontfamily │ │ │ │ ├── fontfamily.js │ │ │ │ └── fontfamily.min.js │ │ │ ├── fontsize │ │ │ │ ├── fontsize.js │ │ │ │ └── fontsize.min.js │ │ │ ├── fullscreen │ │ │ │ ├── fullscreen.js │ │ │ │ └── fullscreen.min.js │ │ │ ├── handle │ │ │ │ ├── handle.css │ │ │ │ ├── handle.js │ │ │ │ ├── handle.min.css │ │ │ │ └── handle.min.js │ │ │ ├── imagemanager │ │ │ │ ├── imagemanager.js │ │ │ │ └── imagemanager.min.js │ │ │ ├── imageselector │ │ │ │ └── imageselector.js │ │ │ ├── inlinestyle │ │ │ │ ├── inlinestyle.css │ │ │ │ ├── inlinestyle.js │ │ │ │ ├── inlinestyle.min.css │ │ │ │ └── inlinestyle.min.js │ │ │ ├── limiter │ │ │ │ ├── limiter.js │ │ │ │ └── limiter.min.js │ │ │ ├── properties │ │ │ │ ├── properties.js │ │ │ │ └── properties.min.js │ │ │ ├── specialchars │ │ │ │ ├── specialchars.js │ │ │ │ └── specialchars.min.js │ │ │ ├── stockimagemanager │ │ │ │ └── stockimagemanager.js │ │ │ ├── table │ │ │ │ ├── table.js │ │ │ │ └── table.min.js │ │ │ ├── textdirection │ │ │ │ ├── textdirection.js │ │ │ │ └── textdirection.min.js │ │ │ ├── textexpander │ │ │ │ ├── textexpander.js │ │ │ │ └── textexpander.min.js │ │ │ ├── variable │ │ │ │ ├── variable.css │ │ │ │ ├── variable.js │ │ │ │ ├── variable.min.css │ │ │ │ └── variable.min.js │ │ │ ├── video │ │ │ │ ├── video.js │ │ │ │ └── video.min.js │ │ │ └── widget │ │ │ │ ├── widget.js │ │ │ │ └── widget.min.js │ │ │ ├── _scss │ │ │ ├── accessibility.scss │ │ │ ├── animation.scss │ │ │ ├── base.scss │ │ │ ├── context.scss │ │ │ ├── dropdown.scss │ │ │ ├── fullscreen.scss │ │ │ ├── icons.scss │ │ │ ├── mixins.scss │ │ │ ├── modal.scss │ │ │ ├── placeholder.scss │ │ │ ├── progress.scss │ │ │ ├── redactor.scss │ │ │ ├── source.scss │ │ │ ├── statusbar.scss │ │ │ ├── structure.scss │ │ │ ├── styles.scss │ │ │ ├── toolbar-air.scss │ │ │ ├── toolbar.scss │ │ │ ├── upload.scss │ │ │ └── variables.scss │ │ │ ├── redactor.css │ │ │ ├── redactor.js │ │ │ ├── redactor.min.css │ │ │ └── redactor.min.js │ └── themes │ │ ├── dark.css │ │ └── standard.css ├── Console │ ├── Keys.php │ ├── ModuleComposer.php │ ├── ModuleCrud.php │ ├── ModuleMake.php │ ├── ModulePublish.php │ ├── ThemeGenerate.php │ ├── ThemeLink.php │ └── ThemePublish.php ├── Controllers │ ├── ApiController.php │ ├── AssetController.php │ ├── BlogController.php │ ├── DashboardController.php │ ├── EventController.php │ ├── FAQController.php │ ├── FilesController.php │ ├── GrafiteCmsController.php │ ├── GrafiteCmsFeatureController.php │ ├── HelpController.php │ ├── ImagesController.php │ ├── LinksController.php │ ├── MenuController.php │ ├── PagesController.php │ ├── PromotionsController.php │ ├── RssController.php │ ├── SiteMapController.php │ └── WidgetsController.php ├── Facades │ ├── BlogServiceFacade.php │ ├── CmsServiceFacade.php │ ├── CryptoServiceFacade.php │ ├── EventServiceFacade.php │ ├── ModuleServiceFacade.php │ └── PageServiceFacade.php ├── GrafiteCmsProvider.php ├── Helpers │ ├── blade.php │ └── general.php ├── Middleware │ └── GrafiteCmsAnalytics.php ├── Migrations │ ├── 2015_07_03_133637_create_files_table.php │ ├── 2015_09_29_193916_create_images_table.php │ ├── 2015_09_29_211249_create_blogs_table.php │ ├── 2015_10_03_021221_create_pages_table.php │ ├── 2015_10_03_032000_create_widgets_table.php │ ├── 2015_10_03_032005_create_archives_table.php │ ├── 2015_10_12_195952_create_faqs_table.php │ ├── 2015_10_12_196052_create_events_table.php │ ├── 2015_10_28_174809_create_menus_table.php │ ├── 2015_10_28_175046_create_links_table.php │ ├── 2016_02_03_175046_add_tags_to_images.php │ ├── 2016_02_03_185046_add_templates_to_pages.php │ ├── 2016_03_20_185046_add_templates_to_blogs.php │ ├── 2016_03_20_186046_add_templates_to_events.php │ ├── 2016_06_01_002825_convert_to_published_at.php │ ├── 2016_10_27_224359_create_translations_table.php │ ├── 2016_12_11_034855_add_lang_to_translations_table.php │ ├── 2017_01_11_132526_create_analytics_table.php │ ├── 2017_06_10_234231_add_order_to_menus.php │ ├── 2017_07_05_002825_add_blocks.php │ ├── 2017_07_08_223935_add_entity_to_images.php │ ├── 2017_12_14_045216_add_hero_images.php │ └── 2018_08_24_191305_create_promotions_table.php ├── Models │ ├── Analytics.php │ ├── Archive.php │ ├── Blog.php │ ├── CmsModel.php │ ├── Event.php │ ├── FAQ.php │ ├── File.php │ ├── Image.php │ ├── Link.php │ ├── Menu.php │ ├── Page.php │ ├── Promotion.php │ ├── Translation.php │ └── Widget.php ├── Providers │ ├── CmsEventServiceProvider.php │ ├── CmsModuleProvider.php │ ├── CmsRouteProvider.php │ └── CmsServiceProvider.php ├── PublishedAssets │ ├── Config │ │ └── cms.php │ ├── Controllers │ │ ├── BlogController.php │ │ ├── EventsController.php │ │ ├── FaqController.php │ │ ├── GalleryController.php │ │ └── PagesController.php │ ├── Middleware │ │ ├── GrafiteCms.php │ │ ├── GrafiteCmsApi.php │ │ └── GrafiteCmsLanguage.php │ ├── Routes │ │ └── cms.php │ ├── Setup │ │ └── resources │ │ │ └── views │ │ │ ├── admin │ │ │ ├── dashboard.blade.php │ │ │ ├── roles │ │ │ │ ├── create.blade.php │ │ │ │ ├── edit.blade.php │ │ │ │ └── index.blade.php │ │ │ └── users │ │ │ │ ├── edit.blade.php │ │ │ │ ├── index.blade.php │ │ │ │ └── invite.blade.php │ │ │ ├── auth │ │ │ ├── activate │ │ │ │ ├── email.blade.php │ │ │ │ └── token.blade.php │ │ │ ├── login.blade.php │ │ │ ├── passwords │ │ │ │ ├── email.blade.php │ │ │ │ └── reset.blade.php │ │ │ └── register.blade.php │ │ │ ├── emails │ │ │ └── new-account.blade.php │ │ │ ├── errors │ │ │ ├── 401.blade.php │ │ │ ├── 404.blade.php │ │ │ └── 503.blade.php │ │ │ ├── partials │ │ │ ├── errors.blade.php │ │ │ ├── message.blade.php │ │ │ └── status.blade.php │ │ │ └── user │ │ │ ├── meta.blade.php │ │ │ ├── password.blade.php │ │ │ └── settings.blade.php │ ├── Theme │ │ └── resources │ │ │ └── themes │ │ │ └── themeTemplate │ │ │ ├── assets │ │ │ ├── js │ │ │ │ └── theme.js │ │ │ └── sass │ │ │ │ ├── _basic.scss │ │ │ │ └── _theme.scss │ │ │ ├── blog │ │ │ ├── all.blade.php │ │ │ ├── featured-template.blade.php │ │ │ └── show.blade.php │ │ │ ├── events │ │ │ ├── all.blade.php │ │ │ ├── calendar.blade.php │ │ │ ├── date.blade.php │ │ │ ├── featured-template.blade.php │ │ │ └── show.blade.php │ │ │ ├── faqs │ │ │ └── all.blade.php │ │ │ ├── gallery │ │ │ ├── all.blade.php │ │ │ └── show.blade.php │ │ │ ├── layout │ │ │ └── master.blade.php │ │ │ ├── pages │ │ │ ├── all.blade.php │ │ │ ├── featured-template.blade.php │ │ │ ├── home.blade.php │ │ │ ├── markdown-template.blade.php │ │ │ └── show.blade.php │ │ │ ├── partials │ │ │ ├── main-menu.blade.php │ │ │ └── navigation.blade.php │ │ │ └── public │ │ │ └── img │ │ │ └── pexels-photo-28938.jpg │ └── Views │ │ └── themes │ │ └── default │ │ ├── assets │ │ ├── js │ │ │ └── theme.js │ │ └── sass │ │ │ ├── _basic.scss │ │ │ ├── _patterns.scss │ │ │ └── _theme.scss │ │ ├── blog │ │ ├── all.blade.php │ │ ├── featured-template.blade.php │ │ └── show.blade.php │ │ ├── events │ │ ├── all.blade.php │ │ ├── calendar.blade.php │ │ ├── date.blade.php │ │ ├── featured-template.blade.php │ │ └── show.blade.php │ │ ├── faqs │ │ └── all.blade.php │ │ ├── gallery │ │ ├── all.blade.php │ │ └── show.blade.php │ │ ├── layout │ │ └── master.blade.php │ │ ├── pages │ │ ├── all.blade.php │ │ ├── featured-template.blade.php │ │ ├── home.blade.php │ │ ├── markdown-template.blade.php │ │ └── show.blade.php │ │ ├── partials │ │ ├── main-menu.blade.php │ │ └── navigation.blade.php │ │ └── public │ │ └── img │ │ └── pexels-photo-28938.jpg ├── Repositories │ ├── BlogRepository.php │ ├── CmsRepository.php │ ├── EventRepository.php │ ├── FAQRepository.php │ ├── FileRepository.php │ ├── ImageRepository.php │ ├── LinkRepository.php │ ├── MenuRepository.php │ ├── PageRepository.php │ ├── PromotionRepository.php │ ├── TranslationRepository.php │ └── WidgetRepository.php ├── Requests │ ├── BlogRequest.php │ ├── EventRequest.php │ ├── FAQRequest.php │ ├── FileRequest.php │ ├── ImagesRequest.php │ ├── LinksRequest.php │ ├── MenuRequest.php │ ├── PagesRequest.php │ ├── PromotionRequest.php │ └── WidgetRequest.php ├── Routes │ ├── api.php │ └── web.php ├── Services │ ├── AnalyticsService.php │ ├── AssetService.php │ ├── BaseService.php │ ├── BlogService.php │ ├── CmsResponseService.php │ ├── CmsService.php │ ├── CryptoService.php │ ├── EventService.php │ ├── FileService.php │ ├── ModuleService.php │ ├── Normalizer.php │ ├── PageService.php │ ├── Traits │ │ ├── DefaultModuleServiceTrait.php │ │ ├── MenuServiceTrait.php │ │ └── ModuleServiceTrait.php │ └── ValidationService.php ├── Templates │ ├── AppBasic │ │ ├── Controller.txt │ │ ├── Routes.txt │ │ └── Views │ │ │ └── index.blade.txt │ ├── AppCRUD │ │ ├── Controller.txt │ │ ├── Routes.txt │ │ └── Views │ │ │ ├── all.blade.txt │ │ │ └── show.blade.txt │ ├── Basic │ │ ├── Controller.txt │ │ ├── Provider.txt │ │ ├── Routes.txt │ │ ├── Service.txt │ │ └── Views │ │ │ ├── breadcrumbs.blade.txt │ │ │ └── index.blade.txt │ ├── CRUD │ │ ├── Controller.txt │ │ ├── CreateRequest.txt │ │ ├── ExtendedService.txt │ │ ├── Facade.txt │ │ ├── Factory.txt │ │ ├── Model.txt │ │ ├── Models │ │ │ └── Model.txt │ │ ├── Provider.txt │ │ ├── Routes.txt │ │ ├── Service.txt │ │ ├── Tests │ │ │ ├── Feature │ │ │ │ └── AcceptanceTest.txt │ │ │ └── Unit │ │ │ │ └── ServiceTest.txt │ │ ├── UpdateRequest.txt │ │ └── Views │ │ │ ├── breadcrumbs.blade.txt │ │ │ ├── create.blade.txt │ │ │ ├── edit.blade.txt │ │ │ └── index.blade.txt │ └── Composer │ │ ├── composer.stub │ │ └── readme.stub ├── Traits │ └── Translatable.php └── Views │ ├── dashboard │ ├── analytics-google.blade.php │ ├── analytics-internal.blade.php │ ├── empty.blade.php │ ├── main.blade.php │ └── panel.blade.php │ ├── help.blade.php │ ├── layouts │ ├── blank.blade.php │ ├── dashboard.blade.php │ ├── master.blade.php │ ├── module-header.blade.php │ ├── module-search.blade.php │ ├── navigation.blade.php │ ├── notifications.blade.php │ └── tabs.blade.php │ ├── modules │ ├── blocks.blade.php │ ├── blogs │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── history.blade.php │ │ └── index.blade.php │ ├── events │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── history.blade.php │ │ └── index.blade.php │ ├── faqs │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ └── index.blade.php │ ├── files │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── index.blade.php │ │ └── menu.blade.php │ ├── images │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ └── index.blade.php │ ├── links │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ └── index.blade.php │ ├── menus │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ └── index.blade.php │ ├── pages │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ ├── history.blade.php │ │ └── index.blade.php │ ├── promotions │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ └── index.blade.php │ └── widgets │ │ ├── breadcrumbs.blade.php │ │ ├── create.blade.php │ │ ├── edit.blade.php │ │ └── index.blade.php │ ├── notifications.blade.php │ ├── rss.blade.php │ └── site-map.blade.php ├── tests ├── .gitkeep ├── Console │ └── ModuleMakeTest.php ├── Feature │ ├── BlogTest.php │ ├── DashboardTest.php │ ├── EventsTest.php │ ├── FAQTest.php │ ├── FilesTest.php │ ├── ImagesTest.php │ ├── LinksTest.php │ ├── MenuTest.php │ ├── PagesTest.php │ ├── PromotionsTest.php │ └── WidgetsTest.php ├── Services │ ├── AssetServiceTest.php │ ├── BlogServiceTest.php │ ├── CmsServiceTest.php │ ├── CryptoServiceTest.php │ ├── EventServiceTest.php │ ├── NormalizerTest.php │ └── PageServiceTest.php ├── TestCase.php ├── factories │ ├── BlogFactory.php │ ├── EventFactory.php │ ├── FAQFactory.php │ ├── FileFactory.php │ ├── ImageFactory.php │ ├── LinkFactory.php │ ├── MenuFactory.php │ ├── PageFactory.php │ ├── PromotionFactory.php │ └── WidgetFactory.php └── fixtures │ ├── test-file.txt │ └── test-pic.jpg └── webpack.mix.js /.gitattributes: -------------------------------------------------------------------------------- 1 | src/Assets/* linguist-vendored 2 | src/Templates/* linguist-vendored -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | 5 | --- 6 | 7 | **Describe the bug** 8 | A clear and concise description of what the bug is. 9 | 10 | **To Reproduce** 11 | Steps to reproduce the behavior: 12 | 1. Go to '...' 13 | 2. Click on '....' 14 | 3. Scroll down to '....' 15 | 4. See error 16 | 17 | **Expected behavior** 18 | A clear and concise description of what you expected to happen. 19 | 20 | **Screenshots** 21 | If applicable, add screenshots to help explain your problem. 22 | 23 | **Desktop (please complete the following information):** 24 | - OS: [e.g. iOS] 25 | - Browser [e.g. chrome, safari] 26 | - Version [e.g. 22] 27 | 28 | **Smartphone (please complete the following information):** 29 | - Device: [e.g. iPhone6] 30 | - OS: [e.g. iOS8.1] 31 | - Browser [e.g. stock browser, safari] 32 | - Version [e.g. 22] 33 | 34 | **Additional context** 35 | Add any other context about the problem here. 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | composer.phar 3 | composer.lock 4 | .DS_Store 5 | /node_modules 6 | .idea 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 7.1 5 | 6 | before_script: 7 | - travis_retry composer self-update 8 | - travis_retry composer install --no-interaction 9 | 10 | script: vendor/bin/phpunit 11 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) Grafite Inc. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 5 | 6 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 7 | 8 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "npm run development", 5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 6 | "prod": "npm run production", 7 | "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 8 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" 9 | }, 10 | "devDependencies": { 11 | "axios": "^0.18", 12 | "bootstrap": ">=4.1.2", 13 | "cross-env": "^5.1", 14 | "jquery": "^3.2", 15 | "laravel-mix": "^2.1.14", 16 | "lodash": "^4.17.4", 17 | "popper.js": "^1.12", 18 | "vue": "^2.5.7" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests/ 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/Assets/dist/mix-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "/css/cms.css": "/css/cms.css", 3 | "/js/vendor.js": "/js/vendor.js", 4 | "/js/cms.js": "/js/cms.js", 5 | "/css/vendor.css": "/css/vendor.css" 6 | } 7 | -------------------------------------------------------------------------------- /src/Assets/src/fonts/SourceSansPro-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/fonts/SourceSansPro-Black.ttf -------------------------------------------------------------------------------- /src/Assets/src/fonts/SourceSansPro-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/fonts/SourceSansPro-Semibold.ttf -------------------------------------------------------------------------------- /src/Assets/src/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/Assets/src/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/Assets/src/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/Assets/src/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/Assets/src/images/blank-file-not-found.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/images/blank-file-not-found.jpg -------------------------------------------------------------------------------- /src/Assets/src/images/blank-file.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/images/blank-file.jpg -------------------------------------------------------------------------------- /src/Assets/src/images/favicon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/images/favicon-32.png -------------------------------------------------------------------------------- /src/Assets/src/images/favicon-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/images/favicon-96.png -------------------------------------------------------------------------------- /src/Assets/src/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/images/favicon.ico -------------------------------------------------------------------------------- /src/Assets/src/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/images/logo.png -------------------------------------------------------------------------------- /src/Assets/src/js/dashboard-chart.js: -------------------------------------------------------------------------------- 1 | /* 2 | |-------------------------------------------------------------------------- 3 | | Charts 4 | |-------------------------------------------------------------------------- 5 | */ 6 | 7 | $(function () { 8 | 9 | var _chartDataConfig = { 10 | type: 'line', 11 | data: { 12 | labels: _chartData._labels, 13 | datasets: [{ 14 | label: "Visits", 15 | backgroundColor: [ 16 | "#36A2EB" 17 | ], 18 | hoverBackgroundColor: [ 19 | "#36A2EB" 20 | ], 21 | pointStrokeColor: "#fff", 22 | pointHighlightFill: "#fff", 23 | pointHighlightStroke: "rgba(220,220,220,1)", 24 | data: _chartData._visits 25 | }] 26 | } 27 | } 28 | 29 | var ctx = $("#dashboardChart").get(0).getContext("2d"); 30 | window.dashboard = new Chart(ctx, _chartDataConfig); 31 | 32 | }); 33 | -------------------------------------------------------------------------------- /src/Assets/src/js/dashboard.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GrafiteInc/CMS/0ba0d09e2db220adb9445397f627d94028cfb5d3/src/Assets/src/js/dashboard.js -------------------------------------------------------------------------------- /src/Assets/src/js/dropzone-custom.js: -------------------------------------------------------------------------------- 1 | Dropzone.options.fileDropzone = { 2 | paramName: "location", 3 | addRemoveLinks: true, 4 | autoProcessQueue: false, 5 | init: function() { 6 | this.on("success", function(file, responseText) { 7 | file.serverData = responseText.data; 8 | $(['name', 'original', 'mime', 'size']).each(function() { 9 | $("#fileDetailsForm").prepend(''); 10 | }); 11 | this.options.autoProcessQueue = true; 12 | }); 13 | this.on("queuecomplete", function(){ 14 | $('#fileDetailsForm').submit(); 15 | }); 16 | this.on("removedfile", function(file) { 17 | if (! file.serverData) { 18 | return; 19 | } else { 20 | $.get(_url+"/cms/files/remove/"+file.serverData.name); 21 | $("#file_"+file.serverData.name).remove(); 22 | } 23 | }); 24 | }, 25 | accept: function(file, done) { 26 | done(); 27 | } 28 | }; -------------------------------------------------------------------------------- /src/Assets/src/sass/_modules.scss: -------------------------------------------------------------------------------- 1 | .dropzone { 2 | border: dotted; 3 | margin-bottom: 24px; 4 | } 5 | 6 | .dz-message { 7 | margin-top: 3em !important; 8 | } 9 | 10 | .bootstrap-tagsinput .tag { 11 | font-size: 100% !important; 12 | padding: 0.6em !important; 13 | background-color: purple; 14 | border-radius: 2px; 15 | margin-right: 3px; 16 | color: #FFF; 17 | } 18 | 19 | .selectable { 20 | cursor: pointer; 21 | } 22 | 23 | .selected-highlight { 24 | background-color: #FEF1B5; 25 | border-color: #EEC900; 26 | } -------------------------------------------------------------------------------- /src/Assets/src/sass/cms.scss: -------------------------------------------------------------------------------- 1 | /* 2 | |-------------------------------------------------------------------------- 3 | | Grafite CMS 4 | |-------------------------------------------------------------------------- 5 | */ 6 | 7 | @import "base.scss"; 8 | @import "modules.scss"; 9 | @import "sidebar.scss"; 10 | -------------------------------------------------------------------------------- /src/Assets/src/vendor/dropzone/basic.css: -------------------------------------------------------------------------------- 1 | /* 2 | * The MIT License 3 | * Copyright (c) 2012 Matias Meno 4 | */ 5 | .dropzone, .dropzone * { 6 | box-sizing: border-box; } 7 | 8 | .dropzone { 9 | position: relative; } 10 | .dropzone .dz-preview { 11 | position: relative; 12 | display: inline-block; 13 | width: 120px; 14 | margin: 0.5em; } 15 | .dropzone .dz-preview .dz-progress { 16 | display: block; 17 | height: 15px; 18 | border: 1px solid #aaa; } 19 | .dropzone .dz-preview .dz-progress .dz-upload { 20 | display: block; 21 | height: 100%; 22 | width: 0; 23 | background: green; } 24 | .dropzone .dz-preview .dz-error-message { 25 | color: red; 26 | display: none; } 27 | .dropzone .dz-preview.dz-error .dz-error-message, .dropzone .dz-preview.dz-error .dz-error-mark { 28 | display: block; } 29 | .dropzone .dz-preview.dz-success .dz-success-mark { 30 | display: block; } 31 | .dropzone .dz-preview .dz-error-mark, .dropzone .dz-preview .dz-success-mark { 32 | position: absolute; 33 | display: none; 34 | left: 30px; 35 | top: 30px; 36 | width: 54px; 37 | height: 58px; 38 | left: 50%; 39 | margin-left: -27px; } 40 | -------------------------------------------------------------------------------- /src/Assets/src/vendor/dropzone/min/basic.min.css: -------------------------------------------------------------------------------- 1 | .dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:0.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px} 2 | -------------------------------------------------------------------------------- /src/Assets/src/vendor/dropzone/readme.md: -------------------------------------------------------------------------------- 1 | # Warning! 2 | 3 | You shouldn't pull these files from the github master branch directly! 4 | 5 | They might be outdated or not working at all since I normally only push them 6 | when I create a version release. 7 | 8 | To be sure to get a proper release, please go to the 9 | [dropzone releases section on github](https://github.com/enyo/dropzone/releases/latest). 10 | 11 | -------------------------------------------------------------------------------- /src/Assets/src/vendor/redactor/_plugins/alignment/alignment.min.js: -------------------------------------------------------------------------------- 1 | Redactor.add("plugin","alignment",{translations:{en:{align:"Align","align-left":"Align Left","align-center":"Align Center","align-right":"Align Right","align-justify":"Align Justify"}},init:function(t){this.app=t,this.opts=t.opts,this.lang=t.lang,this.block=t.block,this.toolbar=t.toolbar},start:function(){var t={};t.left={title:this.lang.get("align-left"),api:"plugin.alignment.set",args:"left"},t.center={title:this.lang.get("align-center"),api:"plugin.alignment.set",args:"center"},t.right={title:this.lang.get("align-right"),api:"plugin.alignment.set",args:"right"},t.justify={title:this.lang.get("align-justify"),api:"plugin.alignment.set",args:"justify"};var i=this.toolbar.addButton("alignment",{title:this.lang.get("align")});i.setIcon(''),i.setDropdown(t)},set:function(t){if("left"===t&&"ltr"===this.opts.direction)return this._remove();var i={style:{"text-align":t}};this.block.toggle(i)},_remove:function(){this.block.remove({style:"text-align"})}}); -------------------------------------------------------------------------------- /src/Assets/src/vendor/redactor/_plugins/beyondgrammar/beyondgrammar.min.js: -------------------------------------------------------------------------------- 1 | !function(t){t.add("plugin","beyondgrammar",{init:function(t){this.app=t,this.opts=t.opts,this.editor=t.editor,this.cleaner=t.cleaner},onoriginalblur:function(r){if(t.dom(r.target).hasClass("pwa-suggest"))return r.preventDefault(),void(this.app.stopBlur=!0);this.app.stopBlur=!1},onsource:{closed:function(){this.editor.focus(),this._activate()}},start:function(){this.GrammarChecker=this._getGrammarChecker(),this.opts.beyondgrammar&&this.GrammarChecker&&(this.cleaner.addUnconvertRules("spellcheck",function(t){t.find(".pwa-mark").unwrap()}),this._activate())},_activate:function(){var t=this.editor.getElement();t.attr("spellcheck",!1);var r=new this.GrammarChecker(t.get(),this.opts.beyondgrammar.service,this.opts.beyondgrammar.grammar);r.init().then(function(){r.activate()})},_getGrammarChecker:function(){return void 0!==window.BeyondGrammar&&window.BeyondGrammar.GrammarChecker}})}(Redactor); -------------------------------------------------------------------------------- /src/Assets/src/vendor/redactor/_plugins/clips/clips.css: -------------------------------------------------------------------------------- 1 | .redactor-clips-list { 2 | list-style: none; 3 | margin: 0; 4 | padding: 0; 5 | } 6 | .redactor-clips-list li { 7 | display: inline-block; 8 | margin-right: 4px; 9 | margin-bottom: 4px; 10 | } 11 | .redactor-clips-list span { 12 | white-space: nowrap; 13 | background: rgba(0,125,255, .75); 14 | color: #fff; 15 | display: inline-block; 16 | padding: 3px 6px; 17 | line-height: 1; 18 | border-radius: 4px; 19 | cursor: pointer; 20 | } -------------------------------------------------------------------------------- /src/Assets/src/vendor/redactor/_plugins/clips/clips.min.css: -------------------------------------------------------------------------------- 1 | .redactor-clips-list{list-style:none;margin:0;padding:0}.redactor-clips-list li{display:inline-block;margin-right:4px;margin-bottom:4px}.redactor-clips-list span{white-space:nowrap;background:rgba(0,125,255,.75);color:#fff;display:inline-block;padding:3px 6px;line-height:1;border-radius:4px;cursor:pointer} -------------------------------------------------------------------------------- /src/Assets/src/vendor/redactor/_plugins/clips/clips.min.js: -------------------------------------------------------------------------------- 1 | !function(i){i.add("plugin","clips",{translations:{en:{clips:"Clips","clips-select":"Please, select a clip"}},modals:{clips:""},init:function(i){this.app=i,this.opts=i.opts,this.lang=i.lang,this.toolbar=i.toolbar,this.insertion=i.insertion},onmodal:{clips:{open:function(i){this._build(i)}}},start:function(){if(this.opts.clips){var i={title:this.lang.get("clips"),api:"plugin.clips.open"};this.toolbar.addButton("clips",i).setIcon('')}},open:function(i){var t={title:this.lang.get("clips"),width:"600px",name:"clips"};this.app.api("module.modal.build",t)},_build:function(i){var t=i.getBody(),s=this._buildLabel(),l=this._buildList();this._buildItems(l),t.html(""),t.append(s),t.append(l)},_buildLabel:function(){var t=i.dom("