├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── LICENSE.txt ├── README.md ├── bower.json ├── docs ├── config.json ├── contents │ ├── articles │ │ ├── 001-getting-started │ │ │ └── index.md │ │ ├── 002-installation-guidelines │ │ │ └── index.md │ │ ├── 011-changing-color-scheme │ │ │ ├── index.md │ │ │ └── new-color-scheme.jpg │ │ ├── 012-project-structure │ │ │ └── index.md │ │ ├── 013-create-new-page │ │ │ └── index.md │ │ ├── 014-switch-to-blur-theme │ │ │ └── index.md │ │ ├── 051-sidebar │ │ │ └── index.md │ │ └── 091-downloads │ │ │ └── index.md │ ├── css │ │ └── main.css │ ├── images │ │ ├── blur-admin-logo.png │ │ ├── blur-preview-mint.jpg │ │ ├── blur-preview.jpg │ │ ├── favicon.png │ │ ├── why-design.svg │ │ ├── why-practices.svg │ │ └── why-structure.svg │ └── index.json ├── package.json ├── plugins │ └── paginator.coffee └── templates │ ├── article.jade │ ├── index.jade │ └── layout.jade ├── gulp ├── build.js ├── conf.js ├── devRelease.js ├── docs.js ├── images.js ├── inject.js ├── marketplace.js ├── scripts.js ├── server.js ├── styles.js └── watch.js ├── gulpfile.js ├── package.json ├── preview.html └── src ├── 404.html ├── app ├── app.js ├── pages │ ├── charts │ │ ├── amCharts │ │ │ ├── amCharts.module.js │ │ │ ├── areaChart │ │ │ │ ├── AreaChartCtrl.js │ │ │ │ └── areaChart.html │ │ │ ├── barChart │ │ │ │ ├── BarChartCtrl.js │ │ │ │ └── barChart.html │ │ │ ├── charts.html │ │ │ ├── combinedChart │ │ │ │ ├── combinedChart.html │ │ │ │ └── combinedChartCtrl.js │ │ │ ├── funnelChart │ │ │ │ ├── FunnelChartCtrl.js │ │ │ │ └── funnelChart.html │ │ │ ├── ganttChart │ │ │ │ ├── ganttChart.html │ │ │ │ └── ganttChartCtrl.js │ │ │ ├── lineChart │ │ │ │ ├── LineChartCtrl.js │ │ │ │ └── lineChart.html │ │ │ └── pieChart │ │ │ │ ├── PieChartCtrl.js │ │ │ │ └── pieChart.html │ │ ├── chartJs │ │ │ ├── chartJs.html │ │ │ ├── chartJs.module.js │ │ │ ├── chartJs1DCtrl.js │ │ │ ├── chartJs2DCtrl.js │ │ │ └── chartJsWaveCtrl.js │ │ ├── chartist │ │ │ ├── chartist.html │ │ │ ├── chartist.module.js │ │ │ └── chartistCtrl.js │ │ ├── charts.module.js │ │ └── morris │ │ │ ├── morris.html │ │ │ ├── morris.module.js │ │ │ └── morrisCtrl.js │ ├── components │ │ ├── components.module.js │ │ ├── mail │ │ │ ├── MailTabCtrl.js │ │ │ ├── composeBox │ │ │ │ ├── compose.html │ │ │ │ ├── composeBoxCtrl.js │ │ │ │ └── composeModal.js │ │ │ ├── detail │ │ │ │ ├── MailDetailCtrl.js │ │ │ │ └── mailDetail.html │ │ │ ├── list │ │ │ │ ├── MailListCtrl.js │ │ │ │ └── mailList.html │ │ │ ├── mail.html │ │ │ ├── mail.module.js │ │ │ └── mailMessages.js │ │ ├── timeline │ │ │ ├── TimelineCtrl.js │ │ │ ├── timeline.html │ │ │ └── timeline.module.js │ │ └── tree │ │ │ ├── tree.html │ │ │ ├── tree.module.js │ │ │ └── treeCtrl.js │ ├── dashboard │ │ ├── blurFeed │ │ │ ├── BlurFeedCtrl.js │ │ │ ├── blurFeed.directive.js │ │ │ └── blurFeed.html │ │ ├── calendar │ │ │ └── dashboardCalendar.js │ │ ├── dashboard.html │ │ ├── dashboard.module.js │ │ ├── dashboardCalendar │ │ │ ├── DashboardCalendarCtrl.js │ │ │ ├── dashboardCalendar.directive.js │ │ │ └── dashboardCalendar.html │ │ ├── dashboardLineChart │ │ │ ├── DashboardLineChartCtrl.js │ │ │ ├── dashboardLineChart.directive.js │ │ │ └── dashboardLineChart.html │ │ ├── dashboardMap │ │ │ ├── DashboardMapCtrl.js │ │ │ ├── dashboardMap.directive.js │ │ │ └── dashboardMap.html │ │ ├── dashboardPieChart │ │ │ ├── DashboardPieChartCtrl.js │ │ │ ├── dashboardPieChart.directive.js │ │ │ └── dashboardPieChart.html │ │ ├── dashboardTodo │ │ │ ├── DashboardTodoCtrl.js │ │ │ ├── dashboardTodo.directive.js │ │ │ └── dashboardTodo.html │ │ ├── pieCharts │ │ │ └── dashboardPieChart.js │ │ ├── popularApp │ │ │ ├── popularApp.directive.js │ │ │ └── popularApp.html │ │ ├── trafficChart │ │ │ ├── TrafficChartCtrl.js │ │ │ ├── trafficChart.directive.js │ │ │ └── trafficChart.html │ │ └── weather │ │ │ ├── WeatherCtrl.js │ │ │ ├── weather.directive.js │ │ │ └── weather.html │ ├── form │ │ ├── form.module.js │ │ ├── inputs │ │ │ ├── inputs.html │ │ │ └── widgets │ │ │ │ ├── checkboxesRadios.html │ │ │ │ ├── datePickers │ │ │ │ ├── datePickers.html │ │ │ │ ├── datepickerCtrl.js │ │ │ │ └── datepickerpopupCtrl.js │ │ │ │ ├── inputGroups.html │ │ │ │ ├── oldSelect │ │ │ │ ├── OldSelectpickerPanelCtrl.js │ │ │ │ ├── select.html │ │ │ │ └── selectpicker.directive.js │ │ │ │ ├── oldSwitches │ │ │ │ ├── OldSwitchPanelCtrl.js │ │ │ │ ├── switch.directive.js │ │ │ │ └── switch.html │ │ │ │ ├── select │ │ │ │ ├── GroupSelectpickerOptions.js │ │ │ │ ├── SelectpickerPanelCtrl.js │ │ │ │ └── select.html │ │ │ │ ├── standardFields.html │ │ │ │ ├── switches │ │ │ │ ├── SwitchDemoPanelCtrl.js │ │ │ │ └── switch.html │ │ │ │ ├── tagsInput │ │ │ │ ├── tagsInput.directive.js │ │ │ │ └── tagsInput.html │ │ │ │ └── validationStates.html │ │ ├── layouts │ │ │ ├── layouts.html │ │ │ └── widgets │ │ │ │ ├── basicForm.html │ │ │ │ ├── blockForm.html │ │ │ │ ├── formWithoutLabels.html │ │ │ │ ├── horizontalForm.html │ │ │ │ └── inlineForm.html │ │ └── wizard │ │ │ ├── wizard.html │ │ │ └── wizrdCtrl.js │ ├── maps │ │ ├── google-maps │ │ │ ├── GmapPageCtrl.js │ │ │ └── google-maps.html │ │ ├── leaflet │ │ │ ├── LeafletPageCtrl.js │ │ │ └── leaflet.html │ │ ├── map-bubbles │ │ │ ├── MapBubblePageCtrl.js │ │ │ └── map-bubbles.html │ │ ├── map-lines │ │ │ ├── MapLinesPageCtrl.js │ │ │ └── map-lines.html │ │ ├── maps.html │ │ └── maps.module.js │ ├── pages.module.js │ ├── profile │ │ ├── ProfileModalCtrl.js │ │ ├── ProfilePageCtrl.js │ │ ├── profile.html │ │ ├── profile.module.js │ │ └── profileModal.html │ ├── tables │ │ ├── TablesPageCtrl.js │ │ ├── basic │ │ │ └── tables.html │ │ ├── smart │ │ │ └── tables.html │ │ ├── tables.module.js │ │ └── widgets │ │ │ ├── basicTable.html │ │ │ ├── borderedTable.html │ │ │ ├── condensedTable.html │ │ │ ├── contextualTable.html │ │ │ ├── editableRowTable.html │ │ │ ├── editableTable.html │ │ │ ├── hoverRows.html │ │ │ ├── responsiveTable.html │ │ │ ├── smartTable.html │ │ │ └── stripedRows.html │ └── ui │ │ ├── alerts │ │ ├── alerts.html │ │ └── alerts.module.js │ │ ├── buttons │ │ ├── ButtonPageCtrl.js │ │ ├── buttons.html │ │ ├── buttons.module.js │ │ └── widgets │ │ │ ├── buttonGroups.html │ │ │ ├── buttons.html │ │ │ ├── dropdowns.html │ │ │ ├── iconButtons.html │ │ │ ├── largeButtons.html │ │ │ └── progressButtons.html │ │ ├── grid │ │ ├── baseGrid.html │ │ ├── grid.html │ │ └── grid.module.js │ │ ├── icons │ │ ├── IconsPageCtrl.js │ │ ├── icons.html │ │ ├── icons.module.js │ │ └── widgets │ │ │ ├── fontAwesomeIcons.html │ │ │ ├── ionicons.html │ │ │ ├── kameleon.html │ │ │ ├── kameleonRounded.html │ │ │ └── socicon.html │ │ ├── modals │ │ ├── ModalsPageCtrl.js │ │ ├── modalTemplates │ │ │ ├── basicModal.html │ │ │ ├── dangerModal.html │ │ │ ├── infoModal.html │ │ │ ├── largeModal.html │ │ │ ├── smallModal.html │ │ │ ├── successModal.html │ │ │ └── warningModal.html │ │ ├── modals.html │ │ ├── modals.module.js │ │ ├── notifications │ │ │ ├── NotificationsCtrl.js │ │ │ └── notifications.html │ │ └── progressModal │ │ │ ├── ProgressModalCtrl.js │ │ │ └── progressModal.html │ │ ├── notifications │ │ ├── NotificationsPageCtrl.js │ │ ├── notifications.html │ │ └── notifications.module.js │ │ ├── panels │ │ ├── panels.html │ │ └── panels.module.js │ │ ├── progressBars │ │ ├── progressBars.html │ │ ├── progressBars.module.js │ │ └── widgets │ │ │ ├── animated.html │ │ │ ├── basic.html │ │ │ ├── label.html │ │ │ ├── stacked.html │ │ │ └── striped.html │ │ ├── slider │ │ ├── slider.html │ │ └── slider.module.js │ │ ├── tabs │ │ ├── contextualAccordion.html │ │ ├── mainTabs.html │ │ ├── sampleAccordion.html │ │ ├── sideTabs.html │ │ ├── tabs.html │ │ └── tabs.module.js │ │ ├── typography │ │ ├── typography.html │ │ └── typography.module.js │ │ └── ui.module.js └── theme │ ├── components │ ├── baPanel │ │ ├── baPanel.directive.js │ │ ├── baPanel.service.js │ │ ├── baPanelBlur.directive.js │ │ ├── baPanelBlurHelper.service.js │ │ └── baPanelSelf.directive.js │ ├── baSidebar │ │ ├── BaSidebarCtrl.js │ │ ├── ba-sidebar.html │ │ ├── baSidebar.directive.js │ │ ├── baSidebar.service.js │ │ └── baSidebarHelpers.directive.js │ ├── baWizard │ │ ├── baWizard.directive.js │ │ ├── baWizard.html │ │ ├── baWizardCtrl.js │ │ ├── baWizardStep.directive.js │ │ └── baWizardStep.html │ ├── backTop │ │ ├── backTop.directive.js │ │ ├── backTop.html │ │ └── lib │ │ │ └── jquery.backTop.min.js │ ├── components.module.js │ ├── contentTop │ │ ├── contentTop.directive.js │ │ └── contentTop.html │ ├── msgCenter │ │ ├── MsgCenterCtrl.js │ │ ├── msgCenter.directive.js │ │ └── msgCenter.html │ ├── pageTop │ │ ├── pageTop.directive.js │ │ └── pageTop.html │ ├── progressBarRound │ │ ├── progressBarRound.directive.js │ │ └── progressBarRound.html │ ├── toastrLibConfig.js │ └── widgets │ │ ├── widgets.directive.js │ │ └── widgets.html │ ├── directives │ ├── animatedChange.js │ ├── autoExpand.js │ ├── autoFocus.js │ ├── includeWithScope.js │ ├── ionSlider.js │ ├── ngFileSelect.js │ ├── scrollPosition.js │ ├── trackWidth.js │ └── zoomIn.js │ ├── filters │ ├── image │ │ ├── appImage.js │ │ ├── kameleonImg.js │ │ └── profilePicture.js │ └── text │ │ └── removeHtml.js │ ├── inputs │ ├── baSwitcher │ │ ├── baSwitcher.html │ │ └── baSwitcher.js │ └── inputs.module.js │ ├── services │ ├── baProgressModal.js │ ├── baUtil.js │ ├── fileReader.js │ ├── preloader.js │ └── stopableInterval.js │ ├── theme.config.js │ ├── theme.configProvider.js │ ├── theme.constants.js │ ├── theme.module.js │ ├── theme.run.js │ └── theme.service.js ├── assets ├── fonts │ ├── socicon.eot │ ├── socicon.svg │ ├── socicon.ttf │ ├── socicon.woff │ └── socicon.woff2 ├── img │ ├── app │ │ ├── browsers │ │ │ ├── chrome.svg │ │ │ ├── firefox.svg │ │ │ ├── ie.svg │ │ │ ├── opera.svg │ │ │ └── safari.svg │ │ ├── feed │ │ │ ├── genom.png │ │ │ ├── my-little-kitten.png │ │ │ ├── new-york-location.png │ │ │ └── vader-and-me-preview.png │ │ ├── my-app-logo.png │ │ ├── profile │ │ │ ├── Alexander.png │ │ │ ├── Andrey.png │ │ │ ├── Kostya.png │ │ │ ├── Nasta.png │ │ │ ├── Nick.png │ │ │ └── Vlad.png │ │ ├── skin-thumbnails │ │ │ ├── 01_default.jpg │ │ │ ├── 02_transparent.jpg │ │ │ ├── 03_blue.jpg │ │ │ ├── 04_peachy.jpg │ │ │ ├── 05_material.jpg │ │ │ └── 06_transblue.jpg │ │ ├── todo │ │ │ └── check-icon.png │ │ └── typography │ │ │ ├── banner.png │ │ │ ├── typo01.png │ │ │ ├── typo03.png │ │ │ ├── typo04.png │ │ │ ├── typo05.png │ │ │ ├── typo06.png │ │ │ └── typo07.png │ ├── arrow-green-up.svg │ ├── arrow-red-down.svg │ ├── blue-bg.jpg │ ├── blur-bg-blurred.jpg │ ├── blur-bg-mobile.jpg │ ├── blur-bg.jpg │ ├── chernika.png │ ├── comments.svg │ ├── face.svg │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── green-bg.jpg │ ├── money.svg │ ├── peachy-bg.jpg │ ├── person.svg │ ├── refresh.svg │ ├── shopping-cart.svg │ ├── theme │ │ ├── icon │ │ │ ├── feed │ │ │ │ ├── feed-image.svg │ │ │ │ ├── feed-location.svg │ │ │ │ └── feed-video.svg │ │ │ └── kameleon │ │ │ │ ├── Alien.svg │ │ │ │ ├── Analytics.svg │ │ │ │ ├── Apartment.svg │ │ │ │ ├── Batman.svg │ │ │ │ ├── Beach.svg │ │ │ │ ├── Bell.svg │ │ │ │ ├── Bonsai.svg │ │ │ │ ├── Boss-3.svg │ │ │ │ ├── Boss-5.svg │ │ │ │ ├── Burglar.svg │ │ │ │ ├── Bus.svg │ │ │ │ ├── Candy.svg │ │ │ │ ├── Checklist.svg │ │ │ │ ├── Cheese.svg │ │ │ │ ├── Chessboard.svg │ │ │ │ ├── Clipboard-Plan.svg │ │ │ │ ├── Desert.svg │ │ │ │ ├── Dna.svg │ │ │ │ ├── Euro-Coin.svg │ │ │ │ ├── Food-Dome.svg │ │ │ │ ├── Hacker.svg │ │ │ │ ├── Images.svg │ │ │ │ ├── Key.svg │ │ │ │ ├── Laptop-Signal.svg │ │ │ │ ├── Locked-Cloud.svg │ │ │ │ ├── Love-Letter.svg │ │ │ │ ├── Magician.svg │ │ │ │ ├── Makeup.svg │ │ │ │ ├── Medal-2.svg │ │ │ │ ├── Microscope.svg │ │ │ │ ├── Mind-Map-Paper.svg │ │ │ │ ├── Money-Increase.svg │ │ │ │ ├── Music-Equalizer.svg │ │ │ │ ├── Ninja.svg │ │ │ │ ├── Online-Shopping.svg │ │ │ │ ├── Pantone.svg │ │ │ │ ├── Party-Poppers.svg │ │ │ │ ├── Phone-Booth.svg │ │ │ │ ├── Programming.svg │ │ │ │ ├── Santa.svg │ │ │ │ ├── Shop.svg │ │ │ │ ├── Street-View.svg │ │ │ │ ├── Student-3.svg │ │ │ │ ├── Surfer.svg │ │ │ │ ├── Surgeon.svg │ │ │ │ ├── Tower.svg │ │ │ │ └── Vector.svg │ │ ├── no-photo.png │ │ └── palette.png │ └── transblue-bg.jpg └── pictures │ ├── pic-andrey.png │ ├── pic-kostia.png │ ├── pic-nasta.png │ ├── pic-profile.png │ ├── pic-vova.png │ └── tinder-logo.jpg ├── auth.html ├── index.html ├── reg.html └── sass ├── 404.scss ├── README.md ├── app ├── _alerts.scss ├── _buttonsPage.scss ├── _chartsPage.scss ├── _dashboard.scss ├── _email.scss ├── _form.scss ├── _grid.scss ├── _iconsPage.scss ├── _modalNotifications.scss ├── _modals.scss ├── _notifications.scss ├── _profile.scss ├── _slider.scss ├── _table.scss ├── _tabsPage.scss ├── _tplSkinPanel.scss ├── _tree.scss ├── _typography.scss └── maps │ ├── _google-maps.scss │ ├── _leaflet.scss │ ├── _map-bubbles.scss │ └── _map-lines.scss ├── auth.scss ├── common.scss ├── main.scss └── theme ├── _blur-admin-theme.scss ├── _buttons.scss ├── _datePicker.scss ├── _icons.scss ├── _layout.scss ├── _preloader.scss ├── _socicon.scss ├── _table.scss ├── _tree.scss ├── bootstrap-overrides ├── _panel.scss └── _tabs.scss ├── components ├── _accordion.scss ├── _baWizard.scss ├── _backTop.scss ├── _contentTop.scss ├── _msgCenter.scss ├── _pageTop.scss ├── _progressRound.scss ├── _sidebar.scss └── _widgets.scss ├── conf ├── _mixins.scss ├── _variables.scss └── colorScheme │ ├── _blur.scss │ └── _mint.scss └── dashboard ├── _amChart.scss ├── _amChartMap.scss ├── _blurFeed.scss ├── _calendar.scss ├── _pieCharts.scss ├── _popularApp.scss ├── _timeline.scss ├── _todo.scss ├── _trafficChart.scss └── _weather.scss /.gitignore: -------------------------------------------------------------------------------- 1 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion 2 | 3 | *.iml 4 | 5 | ## Directory-based project format: 6 | .idea/ 7 | # if you remove the above rule, at least ignore the following: 8 | 9 | # User-specific stuff: 10 | # .idea/workspace.xml 11 | # .idea/tasks.xml 12 | # .idea/dictionaries 13 | 14 | # Sensitive or high-churn files: 15 | # .idea/dataSources.ids 16 | # .idea/dataSources.xml 17 | # .idea/sqlDataSources.xml 18 | # .idea/dynamic.xml 19 | # .idea/uiDesigner.xml 20 | 21 | # Gradle: 22 | # .idea/gradle.xml 23 | # .idea/libraries 24 | 25 | # Mongo Explorer plugin: 26 | # .idea/mongoSettings.xml 27 | 28 | ## File-based project format: 29 | *.ipr 30 | *.iws 31 | 32 | ## Plugin-specific files: 33 | 34 | # IntelliJ 35 | /out/ 36 | 37 | # mpeltonen/sbt-idea plugin 38 | .idea_modules/ 39 | 40 | # JIRA plugin 41 | atlassian-ide-plugin.xml 42 | 43 | # Crashlytics plugin (for Android Studio and IntelliJ) 44 | com_crashlytics_export_strings.xml 45 | crashlytics.properties 46 | crashlytics-build.properties 47 | 48 | node_modules 49 | gulp.1 50 | build 51 | .tmp 52 | 53 | /src/release 54 | /release 55 | /bower_components 56 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | 3 | language: node_js 4 | 5 | node_js: 6 | - "8" 7 | 8 | addons: 9 | apt: 10 | sources: 11 | - ubuntu-toolchain-r-test 12 | packages: 13 | - g++-4.8 14 | 15 | install: 16 | - npm config set spin false 17 | - npm install -g gulp 18 | 19 | - npm install 20 | 21 | script: 22 | - gulp build 23 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | v1.3.1 - 15 Dec 2016 2 | -------------------- 3 | - Fix gulp build 4 | - Update dependencies 5 | - Fix datepicker position 6 | 7 | v1.3.0 - 10 Dec 2016 8 | -------------------- 9 | - Update bower dependencies 10 | - Add progress dialog component 11 | - Add datepicker component 12 | - Scroll up pages upon navigation 13 | - CSS-only switchers 14 | - Use ui-select instead of bootstrap-select 15 | 16 | v1.2.0 - 16 May 2016 17 | -------------------- 18 | - Refactoring to improve customization, fixes #22, #26 19 | - Add documentation 20 | - Sidebar refactoring, fixes #14, #15, #27 21 | - Bootstrap select refactoring #18 22 | 23 | v1.1.1 - 11 Apr 2016 24 | -------------------- 25 | - Improved scrolling performance, fixes #2 26 | - Set 0.9.5 version for the Chartist library by default, fixes #5 27 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2016 Akvemus GSC 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. 9 | Status API Training Shop Blog About 10 | © 2016 GitHub, Inc. Terms Privacy Security Contact Help 11 | -------------------------------------------------------------------------------- /docs/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "baseUrl": "/blur-admin/", 3 | "locals": { 4 | "url": "http://localhost:8080", 5 | "name": "The Wintersmith's blog", 6 | "owner": "Someone", 7 | "description": "Ramblings of an immor(t)al demigod" 8 | }, 9 | "plugins": [ 10 | "./plugins/paginator.coffee" 11 | ], 12 | "require": { 13 | "moment": "moment", 14 | "_": "underscore", 15 | "typogr": "typogr" 16 | }, 17 | "jade": { 18 | "pretty": true 19 | }, 20 | "markdown": { 21 | "smartLists": true, 22 | "smartypants": true 23 | }, 24 | "paginator": { 25 | "perPage": 3, 26 | "groupSort": { 27 | "Quick Start": 1000, 28 | "Customization": 900, 29 | "Components": 800, 30 | "Other": 100 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /docs/contents/articles/011-changing-color-scheme/new-color-scheme.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/docs/contents/articles/011-changing-color-scheme/new-color-scheme.jpg -------------------------------------------------------------------------------- /docs/contents/articles/091-downloads/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Downloads 3 | author: vl 4 | sort: 900 5 | group: Other 6 | template: article.jade 7 | --- 8 | 9 | If you have problems installing node.js and/or other tools to build and run BlurAdmin on your machine and you just want to download html/js/css files, you can find links for download on this page. 10 | 11 | Development (non-compressed) files can be found in `{ARCHIVE_ROOT}/blur-admin-{VERSION}/dev-release` directory. Compressed files are in `{ARCHIVE_ROOT}/blur-admin-{VERSION}/release` directory. 12 | Then you can just open `index.html` to view your local version. 13 | 14 | **Please note**: *As chrome doesn't support AJAX requests, when you open HTML file via **file** protocol, you might need to disable web security to have your template running.* 15 | 16 | Sample command on OS X: 17 | 18 | ```bash 19 | open -a Google\ Chrome --args --disable-web-security --user-data-dir=~/ChromeDevSession/ 20 | ``` 21 | 22 | Sample command on Linux: 23 | 24 | ```bash 25 | google-chrome --user-data-dir="~/chrome-dev-session" --disable-web-security 26 | ``` 27 | 28 | Sample command on Windows: 29 | 30 | ```bash 31 | start chrome --user-data-dir="C:/Chrome dev session" --disable-web-security 32 | ``` 33 | 34 | ## Links for downloads 35 | 36 | [BlurAdmin 1.3.1](/blur-admin/downloads/blur-admin-1.3.1.zip) 37 | [BlurAdmin 1.2.0](/blur-admin/downloads/blur-admin-1.2.0.zip) 38 | 39 | -------------------------------------------------------------------------------- /docs/contents/images/blur-admin-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/docs/contents/images/blur-admin-logo.png -------------------------------------------------------------------------------- /docs/contents/images/blur-preview-mint.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/docs/contents/images/blur-preview-mint.jpg -------------------------------------------------------------------------------- /docs/contents/images/blur-preview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/docs/contents/images/blur-preview.jpg -------------------------------------------------------------------------------- /docs/contents/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/docs/contents/images/favicon.png -------------------------------------------------------------------------------- /docs/contents/index.json: -------------------------------------------------------------------------------- 1 | { 2 | "template": "index.jade", 3 | "activeHome": true 4 | } 5 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "moment": "2.3.x", 4 | "underscore": "1.4.x", 5 | "typogr": "0.5.x" 6 | }, 7 | "private": "true" 8 | } 9 | -------------------------------------------------------------------------------- /docs/templates/article.jade: -------------------------------------------------------------------------------- 1 | 2 | extends layout 3 | 4 | block title 5 | | BlurAdmin documentation - #{page.title] 6 | 7 | block content 8 | section.content.wrap.documentationContent 9 | div.nav-docs 10 | each group in groupedArticles 11 | div.nav-docs.section 12 | h3=group.groupName 13 | ul 14 | each article in group.items 15 | li 16 | a(href=article.url)(class= locals.page === article ? 'active': '')= article.title 17 | div.inner-content 18 | h1=locals.page.title 19 | div.subHeader 20 | != typogr(page.html).typogrify() 21 | 22 | -------------------------------------------------------------------------------- /gulp/conf.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file contains the variables used in other gulp files 3 | * which defines tasks 4 | * By design, we only put there very generic config values 5 | * which are used in several places to keep good readability 6 | * of the tasks 7 | */ 8 | 9 | var gutil = require('gulp-util'); 10 | 11 | /** 12 | * The main paths of your project handle these with care 13 | */ 14 | exports.paths = { 15 | src: 'src', 16 | dist: 'release', 17 | devDist: 'dev-release', 18 | tmp: '.tmp', 19 | e2e: 'e2e' 20 | }; 21 | 22 | /** 23 | * Wiredep is the lib which inject bower dependencies in your project 24 | * Mainly used to inject script tags in the index.html but also used 25 | * to inject css preprocessor deps and js files in karma 26 | */ 27 | exports.wiredep = { 28 | exclude: [/\/bootstrap\.js$/, /\/bootstrap-sass\/.*\.js/, /\/require\.js/], 29 | directory: 'bower_components' 30 | }; 31 | 32 | /** 33 | * Common implementation for an error handler of a Gulp plugin 34 | */ 35 | exports.errorHandler = function(title) { 36 | 'use strict'; 37 | 38 | return function(err) { 39 | gutil.log(gutil.colors.red('[' + title + ']'), err.toString()); 40 | this.emit('end'); 41 | }; 42 | }; 43 | -------------------------------------------------------------------------------- /gulp/docs.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var gulp = require('gulp'); 4 | 5 | var $ = require('gulp-load-plugins')(); 6 | 7 | gulp.task('wintersmith-generate', $.shell.task([ 8 | 'wintersmith build' 9 | ], { cwd: 'docs' })); 10 | 11 | gulp.task('deploy-docs', ['wintersmith-generate'], function() { 12 | return gulp.src('./docs/build/**/*') 13 | .pipe($.ghPages()); 14 | }); -------------------------------------------------------------------------------- /gulp/images.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var path = require('path'); 4 | var gulp = require('gulp'); 5 | var conf = require('./conf'); 6 | 7 | gulp.task('copyVendorImages', function () { 8 | return gulp 9 | .src([ 10 | path.join(conf.wiredep.directory, '**/ammap/dist/ammap/images/**/*'), 11 | path.join(conf.wiredep.directory, '**/amcharts/dist/amcharts/images/**/*'), 12 | path.join(conf.wiredep.directory, '**/ionrangeslider/img/**/*'), 13 | path.join(conf.wiredep.directory, '**/jstree/dist/themes/**/*'), 14 | path.join(conf.wiredep.directory, '**/leaflet/dist/images/**/*') 15 | ]) 16 | .pipe(gulp.dest(path.join(conf.paths.tmp, 'serve', '/assets/img/theme/vendor'))); 17 | }); 18 | 19 | -------------------------------------------------------------------------------- /gulp/marketplace.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var path = require('path'); 4 | var gulp = require('gulp'); 5 | var zip = require('gulp-zip'); 6 | var prompt = require('gulp-prompt'); 7 | var rename = require('gulp-rename'); 8 | 9 | gulp.task('marketplace-release', ['build', 'dev-release'], function () { 10 | return gulp.src('') 11 | .pipe(prompt.prompt({ 12 | type: 'input', 13 | name: 'version', 14 | message: 'Please enter release version (x.x.x)' 15 | }, function (res) { 16 | var nameAndVersion = 'blur-admin-' + res.version; 17 | return gulp 18 | .src(['src/**', 'release/**', 'dev-release/**', 'gulp/**', 'bower.json', 'gulpfile.js', 'package.json', 'README.md', '.gitignore'], {base: "."}) 19 | .pipe(rename(function (path) { 20 | path.dirname = nameAndVersion + '/' + path.dirname; 21 | })) 22 | .pipe(zip(nameAndVersion + '.zip')) 23 | .pipe(gulp.dest('.')); 24 | })); 25 | 26 | }); -------------------------------------------------------------------------------- /gulp/scripts.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var path = require('path'); 4 | var gulp = require('gulp'); 5 | var conf = require('./conf'); 6 | 7 | var browserSync = require('browser-sync'); 8 | 9 | var $ = require('gulp-load-plugins')(); 10 | 11 | 12 | gulp.task('scripts-reload', function() { 13 | return buildScripts() 14 | .pipe(browserSync.stream()); 15 | }); 16 | 17 | gulp.task('scripts', function() { 18 | return buildScripts(); 19 | }); 20 | 21 | function buildScripts() { 22 | return gulp.src(path.join(conf.paths.src, '/app/**/*.js')) 23 | .pipe($.eslint()) 24 | .pipe($.eslint.format()) 25 | .pipe($.size()) 26 | }; 27 | -------------------------------------------------------------------------------- /gulp/watch.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var path = require('path'); 4 | var gulp = require('gulp'); 5 | var conf = require('./conf'); 6 | 7 | var browserSync = require('browser-sync'); 8 | 9 | function isOnlyChange(event) { 10 | return event.type === 'changed'; 11 | } 12 | 13 | gulp.task('watch', ['inject'], function () { 14 | 15 | gulp.watch([path.join(conf.paths.src, '/*.html'), 'bower.json'], ['inject-reload']); 16 | 17 | gulp.watch([ 18 | path.join(conf.paths.src, '/sass/**/*.css'), 19 | path.join(conf.paths.src, '/sass/**/*.scss') 20 | ], function(event) { 21 | if(isOnlyChange(event)) { 22 | gulp.start('styles-reload'); 23 | } else { 24 | gulp.start('inject-reload'); 25 | } 26 | }); 27 | 28 | gulp.watch(path.join(conf.paths.src, '/app/**/*.js'), function(event) { 29 | if(isOnlyChange(event)) { 30 | gulp.start('scripts-reload'); 31 | } else { 32 | gulp.start('inject-reload'); 33 | } 34 | }); 35 | 36 | gulp.watch(path.join(conf.paths.src, '/app/**/*.html'), function(event) { 37 | browserSync.reload(event.path); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var gulp = require('gulp'); 4 | var wrench = require('wrench'); 5 | 6 | /** 7 | * This will load all js or coffee files in the gulp directory 8 | * in order to load all gulp tasks 9 | */ 10 | wrench.readdirSyncRecursive('./gulp').filter(function(file) { 11 | return (/\.(js|coffee)$/i).test(file); 12 | }).map(function(file) { 13 | require('./gulp/' + file); 14 | }); 15 | 16 | 17 | /** 18 | * Default task clean temporaries directories and launch the 19 | * main optimization build task 20 | */ 21 | gulp.task('default', ['clean'], function () { 22 | gulp.start('build'); 23 | }); 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blur_admin", 3 | "version": "1.3.1", 4 | "devDependencies": { 5 | "bower": "~1.8.4", 6 | "browser-sync": "~2.18.2", 7 | "browser-sync-spa": "~1.0.3", 8 | "chalk": "~1.1.1", 9 | "del": "~2.2.2", 10 | "eslint-plugin-angular": "~0.12.0", 11 | "estraverse": "~4.2.0", 12 | "gulp": "~3.9.0", 13 | "gulp-angular-filesort": "~1.1.1", 14 | "gulp-angular-templatecache": "~2.0.0", 15 | "gulp-autoprefixer": "~3.1.1", 16 | "gulp-eslint": "~1.0.0", 17 | "gulp-filter": "~4.0.0", 18 | "gulp-flatten": "~0.3.1", 19 | "gulp-gh-pages": "^0.5.4", 20 | "gulp-inject": "~4.1.0", 21 | "gulp-load-plugins": "~1.4.0", 22 | "gulp-minify-css": "~1.2.1", 23 | "gulp-minify-html": "~1.0.4", 24 | "gulp-ng-annotate": "~2.0.0", 25 | "gulp-prompt": "^0.2.0", 26 | "gulp-protractor": "~3.0.0", 27 | "gulp-rename": "^1.2.2", 28 | "gulp-replace": "~0.5.4", 29 | "gulp-rev": "~7.1.2", 30 | "gulp-rev-replace": "~0.4.2", 31 | "gulp-sass": "^4.0.1", 32 | "gulp-shell": "^0.5.2", 33 | "gulp-size": "~2.1.0", 34 | "gulp-sourcemaps": "~1.6.0", 35 | "gulp-uglify": "~2.0.0", 36 | "gulp-useref": "~1.3.0", 37 | "gulp-util": "~3.0.6", 38 | "gulp-zip": "^3.0.2", 39 | "http-proxy-middleware": "~0.17.2", 40 | "lodash": "~4.17.2", 41 | "main-bower-files": "~2.13.1", 42 | "uglify-save-license": "~0.4.1", 43 | "wiredep": "~4.0.0", 44 | "wrench": "~1.5.8" 45 | }, 46 | "scripts": { 47 | "postinstall": "bower install" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /preview.html: -------------------------------------------------------------------------------- 1 | <p> 2 | <a href="http://akveo.com/blur-admin/" rel="nofollow"> 3 | <img src="http://akveo.com/admin-images/blur-admin/promo_blur.jpg"> 4 | </a> 5 | </p> 6 | 7 | <p> 8 | <h2>Description</h2> 9 | Latest and the most trending web design approaches were brought together in Blur admin to deliver you the best experience ever. Each color, character and image was carefully selected to make you love what you see.<br /> 10 | <br /> 11 | Extremely beautiful. Elegant. Charming. Enjoy it.<br /> 12 | <br /> 13 | Love,<br /> 14 | Akveo team 15 | </p> 16 | 17 | <p> 18 | <h2>Features</h2> 19 | <ul> 20 | <li>Responsive layout</li> 21 | <li>High resolution</li> 22 | <li>Bootstrap CSS Framework</li> 23 | <li>Sass</li> 24 | <li>Gulp build</li> 25 | <li>AngularJS</li> 26 | <li>Jquery</li> 27 | <li>Jquery ui</li> 28 | <li>WHAT YOU GUYS CONSIDER SHOULD BE HERE? PAGES AND STUFF OR ONLY FEATURES MENTIONED ABOVE?</li> 29 | 30 | </ul> 31 | </p> 32 | 33 | 34 | -------------------------------------------------------------------------------- /src/404.html: -------------------------------------------------------------------------------- 1 | <!DOCTYPE html> 2 | <html lang="en"> 3 | <head> 4 | <meta charset="utf-8"> 5 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 | <meta name="viewport" content="width=device-width, initial-scale=1"> 7 | <title>Blur Admin</title> 8 | 9 | <link href='https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900italic,900&subset=latin,greek,greek-ext,vietnamese,cyrillic-ext,latin-ext,cyrillic' rel='stylesheet' type='text/css'> 10 | 11 | <link rel="icon" type="image/png" sizes="16x16" href="assets/img/favicon-16x16.png"> 12 | <link rel="icon" type="image/png" sizes="32x32" href="assets/img/favicon-32x32.png"> 13 | <link rel="icon" type="image/png" sizes="96x96" href="assets/img/favicon-96x96.png"> 14 | 15 | <!-- build:css({.tmp/serve,src}) styles/404.css --> 16 | <!-- inject:css --> 17 | <!-- css files will be automatically insert here --> 18 | <!-- endinject --> 19 | <!-- endbuild --> 20 | </head> 21 | <body> 22 | <div class="page-not-found-modal"> 23 | <h1>404 Error</h1> 24 | 25 | <p>Sorry, that page doesn't exist. <a href="/">Go to Home Page.</a></p> 26 | </div> 27 | </body> 28 | </html> -------------------------------------------------------------------------------- /src/app/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('BlurAdmin', [ 4 | 'ngAnimate', 5 | 'ui.bootstrap', 6 | 'ui.sortable', 7 | 'ui.router', 8 | 'ngTouch', 9 | 'toastr', 10 | 'smart-table', 11 | "xeditable", 12 | 'ui.slimscroll', 13 | 'ngJsTree', 14 | 'angular-progress-button-styles', 15 | 16 | 'BlurAdmin.theme', 17 | 'BlurAdmin.pages' 18 | ]); -------------------------------------------------------------------------------- /src/app/pages/charts/amCharts/areaChart/areaChart.html: -------------------------------------------------------------------------------- 1 | <div id="areaChart" class="admin-chart" ng-controller="AreaChartCtrl"></div> -------------------------------------------------------------------------------- /src/app/pages/charts/amCharts/barChart/barChart.html: -------------------------------------------------------------------------------- 1 | <div id="barChart" class="admin-chart" ng-controller="BarChartCtrl"></div> -------------------------------------------------------------------------------- /src/app/pages/charts/amCharts/combinedChart/combinedChart.html: -------------------------------------------------------------------------------- 1 | <div id="zoomAxisChart" class="admin-chart" ng-controller="combinedChartCtrl"></div> 2 | -------------------------------------------------------------------------------- /src/app/pages/charts/amCharts/funnelChart/funnelChart.html: -------------------------------------------------------------------------------- 1 | <div id="funnelChart" class="admin-chart" ng-controller="FunnelChartCtrl"></div> -------------------------------------------------------------------------------- /src/app/pages/charts/amCharts/ganttChart/ganttChart.html: -------------------------------------------------------------------------------- 1 | <div id="gnattChart" class="admin-chart" ng-controller="ganttChartCtrl"></div> -------------------------------------------------------------------------------- /src/app/pages/charts/amCharts/lineChart/lineChart.html: -------------------------------------------------------------------------------- 1 | <div id="lineChart" class="admin-chart" ng-controller="LineChartCtrl"></div> -------------------------------------------------------------------------------- /src/app/pages/charts/amCharts/pieChart/pieChart.html: -------------------------------------------------------------------------------- 1 | <div id="pieChart" class="admin-chart" ng-controller="PieChartCtrl"></div> 2 | -------------------------------------------------------------------------------- /src/app/pages/charts/chartJs/chartJs1DCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12/16/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.charts.chartJs') 9 | .controller('chartJs1DCtrl', chartJs1DCtrl); 10 | 11 | /** @ngInject */ 12 | function chartJs1DCtrl($scope, baConfig) { 13 | var layoutColors = baConfig.colors; 14 | 15 | $scope.labels =["Sleeping", "Designing", "Coding", "Cycling"]; 16 | $scope.data = [20, 40, 5, 35]; 17 | $scope.options = { 18 | elements: { 19 | arc: { 20 | borderWidth: 0 21 | } 22 | }, 23 | legend: { 24 | display: true, 25 | position: 'bottom', 26 | labels: { 27 | fontColor: layoutColors.defaultText 28 | } 29 | } 30 | }; 31 | 32 | $scope.changeData = function () { 33 | $scope.data = shuffle($scope.data); 34 | }; 35 | 36 | function shuffle(o){ 37 | for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x){} 38 | return o; 39 | } 40 | } 41 | 42 | })(); -------------------------------------------------------------------------------- /src/app/pages/charts/chartJs/chartJs2DCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12/16/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.charts.chartJs') 9 | .controller('chartJs2DCtrl', chartJs2DCtrl); 10 | 11 | /** @ngInject */ 12 | function chartJs2DCtrl($scope) { 13 | $scope.labels =["May", "Jun", "Jul", "Aug", "Sep"]; 14 | $scope.data = [ 15 | [65, 59, 90, 81, 56], 16 | [28, 48, 40, 19, 88] 17 | ]; 18 | $scope.series = ['Product A', 'Product B']; 19 | 20 | 21 | $scope.changeData = function () { 22 | $scope.data[0] = shuffle($scope.data[0]); 23 | $scope.data[1] = shuffle($scope.data[1]); 24 | }; 25 | 26 | function shuffle(o){ 27 | for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x){} 28 | return o; 29 | } 30 | } 31 | 32 | })(); -------------------------------------------------------------------------------- /src/app/pages/charts/chartJs/chartJsWaveCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12/16/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.charts.chartJs') 9 | .controller('chartJsWaveCtrl', chartJsWaveCtrl); 10 | 11 | /** @ngInject */ 12 | function chartJsWaveCtrl($scope, $interval, stopableInterval) { 13 | $scope.labels =["Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 14 | $scope.data = [1, 9, 3, 4, 5, 6, 7, 8, 2].map(function(e){ 15 | return Math.sin(e) * 25 +25; 16 | }); 17 | 18 | stopableInterval.start($interval, function(){ 19 | var tempArray = []; 20 | var lastElement = $scope.data[$scope.data.length-1]; 21 | for(var i = $scope.data.length-1; i > 0; i--){ 22 | tempArray[i] = $scope.data[i-1]; 23 | } 24 | tempArray[0] = lastElement; 25 | $scope.data = tempArray; 26 | }, 400) 27 | } 28 | 29 | })(); -------------------------------------------------------------------------------- /src/app/pages/charts/chartist/chartist.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12/17/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.charts.chartist', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('charts.chartist', { 15 | url: '/chartist', 16 | templateUrl: 'app/pages/charts/chartist/chartist.html', 17 | title: 'Chartist', 18 | sidebarMeta: { 19 | order: 100, 20 | }, 21 | }); 22 | } 23 | 24 | })(); -------------------------------------------------------------------------------- /src/app/pages/charts/charts.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.charts', [ 9 | 'BlurAdmin.pages.charts.amCharts', 10 | 'BlurAdmin.pages.charts.chartJs', 11 | 'BlurAdmin.pages.charts.chartist', 12 | 'BlurAdmin.pages.charts.morris' 13 | ]) 14 | .config(routeConfig); 15 | 16 | /** @ngInject */ 17 | function routeConfig($stateProvider) { 18 | $stateProvider 19 | .state('charts', { 20 | url: '/charts', 21 | abstract: true, 22 | template: '<div ui-view autoscroll="true" autoscroll-body-top></div>', 23 | title: 'Charts', 24 | sidebarMeta: { 25 | icon: 'ion-stats-bars', 26 | order: 150, 27 | }, 28 | }); 29 | } 30 | 31 | })(); 32 | -------------------------------------------------------------------------------- /src/app/pages/charts/morris/morris.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12/18/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.charts.morris', []) 9 | .config(routeConfig).config(function(baConfigProvider){ 10 | var layoutColors = baConfigProvider.colors; 11 | Morris.Donut.prototype.defaults.backgroundColor = 'transparent'; 12 | Morris.Donut.prototype.defaults.labelColor = layoutColors.defaultText; 13 | Morris.Grid.prototype.gridDefaults.gridLineColor = layoutColors.borderDark; 14 | Morris.Grid.prototype.gridDefaults.gridTextColor = layoutColors.defaultText; 15 | }); 16 | 17 | /** @ngInject */ 18 | function routeConfig($stateProvider) { 19 | $stateProvider 20 | .state('charts.morris', { 21 | url: '/morris', 22 | templateUrl: 'app/pages/charts/morris/morris.html', 23 | title: 'Morris', 24 | sidebarMeta: { 25 | order: 300, 26 | } 27 | }); 28 | } 29 | 30 | })(); -------------------------------------------------------------------------------- /src/app/pages/components/components.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author k.danovsky 3 | * created on 15.01.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components', [ 9 | 'BlurAdmin.pages.components.mail', 10 | 'BlurAdmin.pages.components.timeline', 11 | 'BlurAdmin.pages.components.tree', 12 | ]) 13 | .config(routeConfig); 14 | 15 | /** @ngInject */ 16 | function routeConfig($stateProvider) { 17 | $stateProvider 18 | .state('components', { 19 | url: '/components', 20 | template : '<ui-view autoscroll="true" autoscroll-body-top></ui-view>', 21 | abstract: true, 22 | title: 'Components', 23 | sidebarMeta: { 24 | icon: 'ion-gear-a', 25 | order: 100, 26 | }, 27 | }); 28 | } 29 | 30 | })(); 31 | -------------------------------------------------------------------------------- /src/app/pages/components/mail/MailTabCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.mail') 9 | .controller('MailTabCtrl', MailTabCtrl); 10 | 11 | /** @ngInject */ 12 | function MailTabCtrl(composeModal, mailMessages) { 13 | 14 | var vm = this; 15 | vm.navigationCollapsed = true; 16 | vm.showCompose = function(subject, to , text){ 17 | composeModal.open({ 18 | subject : subject, 19 | to: to, 20 | text: text 21 | }) 22 | }; 23 | 24 | vm.tabs = mailMessages.getTabs(); 25 | } 26 | 27 | })(); 28 | -------------------------------------------------------------------------------- /src/app/pages/components/mail/composeBox/compose.html: -------------------------------------------------------------------------------- 1 | <div class="compose-header"> 2 | <span> 3 | New message 4 | </span> 5 | <span class="header-controls"> 6 | <i class="ion-minus-round"></i> 7 | <i class="ion-arrow-resize"></i> 8 | <i ng-click="$dismiss()" class="ion-close-round"></i> 9 | </span> 10 | </div> 11 | <div> 12 | <input type="text" class="form-control compose-input default-color" placeholder="To" ng-model="boxCtrl.to"> 13 | <input type="text" class="form-control compose-input default-color" placeholder="Subject" ng-model="boxCtrl.subject"> 14 | <div class="compose-container"> 15 | <text-angular-toolbar ta-toolbar-class="toolbarMain" name="toolbarMain" ta-toolbar="[['h1','h2','h3','bold','italics', 'underline', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull']]"></text-angular-toolbar> 16 | <text-angular name="htmlcontent" ta-target-toolbars='toolbarMain,toolbarFooter' ng-model="boxCtrl.text"></text-angular> 17 | </div> 18 | </div> 19 | <div class="compose-footer clearfix"> 20 | <button type="button" ng-click="$dismiss()" class="btn btn-send">Send</button> 21 | <text-angular-toolbar ta-toolbar-class="toolbarFooter" name="toolbarFooter" ta-toolbar="[['insertLink', 'insertImage', 'html', 'quote','insertVideo']]"></text-angular-toolbar> 22 | <div class="footer-controls"> 23 | <i class="footer-control-first compose-footer-icon ion-arrow-down-b"></i> 24 | <i ng-click="$dismiss()" class="compose-footer-icon ion-android-delete"></i> 25 | </div> 26 | </div> -------------------------------------------------------------------------------- /src/app/pages/components/mail/composeBox/composeBoxCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 24/12/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.mail') 9 | .controller('composeBoxCtrl', composeBoxCtrl); 10 | 11 | /** @ngInject */ 12 | function composeBoxCtrl(subject, to, text) { 13 | var vm = this; 14 | vm.subject = subject; 15 | vm.to = to; 16 | vm.text = text; 17 | } 18 | })(); -------------------------------------------------------------------------------- /src/app/pages/components/mail/composeBox/composeModal.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12/24/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.mail') 9 | .service('composeModal', composeModal); 10 | 11 | /** @ngInject */ 12 | function composeModal($uibModal) { 13 | this.open = function(options){ 14 | return $uibModal.open({ 15 | animation: false, 16 | templateUrl: 'app/pages/components/mail/composeBox/compose.html', 17 | controller: 'composeBoxCtrl', 18 | controllerAs: 'boxCtrl', 19 | size: 'compose', 20 | resolve: { 21 | subject: function () { 22 | return options.subject; 23 | }, 24 | to: function () { 25 | return options.to; 26 | }, 27 | text: function () { 28 | return options.text; 29 | } 30 | } 31 | }); 32 | } 33 | 34 | } 35 | 36 | })(); -------------------------------------------------------------------------------- /src/app/pages/components/mail/detail/MailDetailCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 28.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.mail') 9 | .controller('MailDetailCtrl', MailDetailCtrl); 10 | 11 | /** @ngInject */ 12 | function MailDetailCtrl($stateParams, mailMessages) { 13 | var vm = this; 14 | vm.mail = mailMessages.getMessageById($stateParams.id); 15 | vm.label = $stateParams.label; 16 | } 17 | 18 | })(); 19 | -------------------------------------------------------------------------------- /src/app/pages/components/mail/list/MailListCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 28.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.mail') 9 | .controller('MailListCtrl', MailListCtrl); 10 | 11 | /** @ngInject */ 12 | function MailListCtrl($stateParams, mailMessages) { 13 | var vm = this; 14 | vm.messages = mailMessages.getMessagesByLabel($stateParams.label); 15 | vm.label = $stateParams.label; 16 | } 17 | 18 | })(); 19 | -------------------------------------------------------------------------------- /src/app/pages/components/mail/mail.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.mail', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider,$urlRouterProvider) { 13 | $stateProvider 14 | .state('components.mail', { 15 | url: '/mail', 16 | abstract: true, 17 | templateUrl: 'app/pages/components/mail/mail.html', 18 | controller: "MailTabCtrl", 19 | controllerAs: "tabCtrl", 20 | title: 'Mail', 21 | sidebarMeta: { 22 | order: 0, 23 | }, 24 | }).state('components.mail.label', { 25 | url: '/:label', 26 | templateUrl: 'app/pages/components/mail/list/mailList.html', 27 | title: 'Mail', 28 | controller: "MailListCtrl", 29 | controllerAs: "listCtrl" 30 | }).state('components.mail.detail', { 31 | url: '/:label/:id', 32 | templateUrl: 'app/pages/components/mail/detail/mailDetail.html', 33 | title: 'Mail', 34 | controller: "MailDetailCtrl", 35 | controllerAs: "detailCtrl" 36 | }); 37 | $urlRouterProvider.when('/components/mail','/components/mail/inbox'); 38 | } 39 | 40 | })(); 41 | -------------------------------------------------------------------------------- /src/app/pages/components/timeline/TimelineCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.timeline') 9 | .controller('TimelineCtrl', TimelineCtrl); 10 | 11 | /** @ngInject */ 12 | function TimelineCtrl() { 13 | var timelineBlocks = $('.cd-timeline-block'), 14 | offset = 0.8; 15 | 16 | //hide timeline blocks which are outside the viewport 17 | hideBlocks(timelineBlocks, offset); 18 | 19 | //on scolling, show/animate timeline blocks when enter the viewport 20 | $(window).on('scroll', function () { 21 | if (!window.requestAnimationFrame) { 22 | setTimeout(function () { 23 | showBlocks(timelineBlocks, offset); 24 | }, 100); 25 | } else { 26 | window.requestAnimationFrame(function () { 27 | showBlocks(timelineBlocks, offset); 28 | }); 29 | } 30 | }); 31 | 32 | function hideBlocks(blocks, offset) { 33 | blocks.each(function () { 34 | ( $(this).offset().top > $(window).scrollTop() + $(window).height() * offset ) && $(this).find('.cd-timeline-img, .cd-timeline-content').addClass('is-hidden'); 35 | }); 36 | } 37 | 38 | function showBlocks(blocks, offset) { 39 | blocks.each(function () { 40 | ( $(this).offset().top <= $(window).scrollTop() + $(window).height() * offset && $(this).find('.cd-timeline-img').hasClass('is-hidden') ) && $(this).find('.cd-timeline-img, .cd-timeline-content').removeClass('is-hidden').addClass('bounce-in'); 41 | }); 42 | } 43 | } 44 | })(); -------------------------------------------------------------------------------- /src/app/pages/components/timeline/timeline.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 1/12/16 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.timeline', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('components.timeline', { 15 | url: '/timeline', 16 | templateUrl: 'app/pages/components/timeline/timeline.html', 17 | title: 'Timeline', 18 | sidebarMeta: { 19 | icon: 'ion-ios-pulse', 20 | order: 100, 21 | }, 22 | }); 23 | } 24 | })(); -------------------------------------------------------------------------------- /src/app/pages/components/tree/tree.html: -------------------------------------------------------------------------------- 1 | <div class="row" ng-controller="treeCtrl"> 2 | <div class="col-md-6"> 3 | <div ba-panel ba-panel-title="Basic Action" ba-panel-class="with-scroll tree-panel"> 4 | <div class="row"> 5 | <div class="col-sm-4"> 6 | <div class="control-side text-center"> 7 | <div> 8 | <button class="btn btn-primary" ng-click="addNewNode()">Add</button> 9 | </div> 10 | <div> 11 | <button class="btn btn-primary" ng-click="collapse()">Collapse All</button> 12 | </div> 13 | <div> 14 | <button class="btn btn-primary" ng-click="expand()">Expand All</button> 15 | </div> 16 | <div> 17 | <button class="btn btn-primary" ng-click="refresh()">Refresh</button> 18 | </div> 19 | </div> 20 | </div> 21 | <div class="col-sm-8"> 22 | <div js-tree="basicConfig" ng-model="treeData" should-apply="applyModelChanges()" tree="basicTree" tree-events="ready:readyCB"></div> 23 | </div> 24 | </div> 25 | </div> 26 | </div> 27 | <div class="col-md-6"> 28 | <div ba-panel ba-panel-title="Drag & Drop" ba-panel-class="with-scroll tree-panel"> 29 | <div js-tree="dragConfig" ng-model="dragData"></div> 30 | </div> 31 | </div> 32 | </div> 33 | </div> 34 | -------------------------------------------------------------------------------- /src/app/pages/components/tree/tree.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12.21.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.components.tree', []) 9 | .config(routeConfig) 10 | .config(function(){ 11 | $.jstree.defaults.core.themes.url = true; 12 | $.jstree.defaults.core.themes.dir = "assets/img/theme/vendor/jstree/dist/themes"; 13 | }); 14 | 15 | /** @ngInject */ 16 | function routeConfig($stateProvider) { 17 | $stateProvider 18 | .state('components.tree', { 19 | url: '/tree', 20 | templateUrl: 'app/pages/components/tree/tree.html', 21 | title: 'Tree View', 22 | sidebarMeta: { 23 | order: 200, 24 | }, 25 | }); 26 | } 27 | 28 | })(); 29 | -------------------------------------------------------------------------------- /src/app/pages/dashboard/blurFeed/blurFeed.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('blurFeed', blurFeed); 10 | 11 | /** @ngInject */ 12 | function blurFeed() { 13 | return { 14 | restrict: 'E', 15 | controller: 'BlurFeedCtrl', 16 | templateUrl: 'app/pages/dashboard/blurFeed/blurFeed.html' 17 | }; 18 | } 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/blurFeed/blurFeed.html: -------------------------------------------------------------------------------- 1 | 2 | <div class="feed-messages-container" track-width="smallContainerWidth" min-width="360"> 3 | <div class="feed-message" ng-repeat="message in feed" ng-click="expandMessage(message)"> 4 | <div class="message-icon" ng-if="message.type == 'text-message'"> 5 | <img class="photo-icon" ng-src="{{::( message.author | profilePicture )}}"> 6 | </div> 7 | <div class="message-icon" ng-if="message.type != 'text-message'"> 8 | <img class="photo-icon" ng-src="{{::( message.author | profilePicture )}}"> 9 | <span class="sub-photo-icon" ng-class="::message.type"></span> 10 | </div> 11 | <div class="text-block text-message"> 12 | <div class="message-header"> 13 | <span class="author">{{ ::message.author }} {{ ::message.surname}}</span> 14 | </div> 15 | <div class="message-content line-clamp" ng-class="{'line-clamp-2' : !message.expanded}"> 16 | <span ng-if="message.preview">{{message.header}} </span>{{::message.text}} 17 | </div> 18 | <div class="preview" ng-show="message.expanded" ng-if="message.preview"> 19 | <a href="{{::message.link}}" target="_blank"> 20 | <img ng-src="{{ ::( message.preview | appImage )}}"> 21 | </a> 22 | </div> 23 | <div ng-show="message.expanded" class="message-time"> 24 | <div class="post-time"> 25 | {{::message.time}} 26 | </div> 27 | <div class="ago-time"> 28 | {{::message.ago}} 29 | </div> 30 | </div> 31 | </div> 32 | </div> 33 | </div> 34 | -------------------------------------------------------------------------------- /src/app/pages/dashboard/calendar/dashboardCalendar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .service('dashboardCalendar', dashboardCalendar); 10 | 11 | /** @ngInject */ 12 | function dashboardCalendar() { 13 | 14 | } 15 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboard.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('dashboard', { 15 | url: '/dashboard', 16 | templateUrl: 'app/pages/dashboard/dashboard.html', 17 | title: 'Dashboard', 18 | sidebarMeta: { 19 | icon: 'ion-android-home', 20 | order: 0, 21 | }, 22 | }); 23 | } 24 | 25 | })(); 26 | -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardCalendar/dashboardCalendar.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('dashboardCalendar', dashboardCalendar); 10 | 11 | /** @ngInject */ 12 | function dashboardCalendar() { 13 | return { 14 | restrict: 'E', 15 | controller: 'DashboardCalendarCtrl', 16 | templateUrl: 'app/pages/dashboard/dashboardCalendar/dashboardCalendar.html' 17 | }; 18 | } 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardCalendar/dashboardCalendar.html: -------------------------------------------------------------------------------- 1 | <div id='calendar' class="blurCalendar"></div> -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardLineChart/dashboardLineChart.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('dashboardLineChart', dashboardLineChart); 10 | 11 | /** @ngInject */ 12 | function dashboardLineChart() { 13 | return { 14 | restrict: 'E', 15 | controller: 'DashboardLineChartCtrl', 16 | templateUrl: 'app/pages/dashboard/dashboardLineChart/dashboardLineChart.html' 17 | }; 18 | } 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardLineChart/dashboardLineChart.html: -------------------------------------------------------------------------------- 1 | <div id="amchart"></div> -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardMap/dashboardMap.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('dashboardMap', dashboardMap); 10 | 11 | /** @ngInject */ 12 | function dashboardMap() { 13 | return { 14 | restrict: 'E', 15 | controller: 'DashboardMapCtrl', 16 | templateUrl: 'app/pages/dashboard/dashboardMap/dashboardMap.html' 17 | }; 18 | } 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardMap/dashboardMap.html: -------------------------------------------------------------------------------- 1 | <div id="amChartMap"></div> -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardPieChart/dashboardPieChart.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('dashboardPieChart', dashboardPieChart); 10 | 11 | /** @ngInject */ 12 | function dashboardPieChart() { 13 | return { 14 | restrict: 'E', 15 | controller: 'DashboardPieChartCtrl', 16 | templateUrl: 'app/pages/dashboard/dashboardPieChart/dashboardPieChart.html' 17 | }; 18 | } 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardPieChart/dashboardPieChart.html: -------------------------------------------------------------------------------- 1 | <div class="row pie-charts"> 2 | <div class="pie-chart-item-container" ng-repeat="chart in charts"> 3 | <div ba-panel> 4 | <div class="pie-chart-item"> 5 | <div class="chart" rel="{{ ::chart.color }}" data-percent="60"> <span class="percent"></span> </div> 6 | <div class="description"> 7 | <div>{{ ::chart.description }}</div> 8 | <div class="description-stats">{{ ::chart.stats }}</div> 9 | </div> 10 | <i class="chart-icon i-{{ ::chart.icon }}"></i> 11 | </div> 12 | </div> 13 | </div> 14 | </div> -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardTodo/dashboardTodo.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('dashboardTodo', dashboardTodo); 10 | 11 | /** @ngInject */ 12 | function dashboardTodo() { 13 | return { 14 | restrict: 'EA', 15 | controller: 'DashboardTodoCtrl', 16 | templateUrl: 'app/pages/dashboard/dashboardTodo/dashboardTodo.html' 17 | }; 18 | } 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/dashboardTodo/dashboardTodo.html: -------------------------------------------------------------------------------- 1 | <div class="task-todo-container" ng-class="{'transparent': transparent}"> 2 | <input type="text" value="" class="form-control task-todo" placeholder="Task to do.." ng-keyup="addToDoItem($event)" ng-model="newTodoText"/> 3 | <i ng-click="addToDoItem('',true)" class="add-item-icon ion-plus-round"></i> 4 | <div class="box-shadow-border"></div> 5 | <ul class="todo-list" ui-sortable ng-model="todoList"> 6 | <li ng-repeat="item in todoList" ng-if="!item.deleted" ng-init="activeItem=false" 7 | ng-class="{checked: isChecked, active: activeItem}" 8 | ng-mouseenter="activeItem=true" ng-mouseleave="activeItem=false"> 9 | <div class="blur-container"><div class="blur-box"></div></div> 10 | <i class="mark" style="background-color: {{::item.color}}"></i> 11 | <label class="todo-checkbox custom-checkbox custom-input-success"> 12 | <input type="checkbox" ng-model="isChecked"> 13 | <span class="cut-with-dots">{{ item.text }}</span> 14 | </label> 15 | <i class="remove-todo ion-ios-close-empty" ng-click="item.deleted = true"></i> 16 | </li> 17 | </ul> 18 | </div> 19 | -------------------------------------------------------------------------------- /src/app/pages/dashboard/pieCharts/dashboardPieChart.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .service('dashboardPieChart', dashboardPieChart); 10 | 11 | /** @ngInject */ 12 | function dashboardPieChart() { 13 | 14 | } 15 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/popularApp/popularApp.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('popularApp', popularApp); 10 | 11 | /** @ngInject */ 12 | function popularApp() { 13 | return { 14 | restrict: 'E', 15 | templateUrl: 'app/pages/dashboard/popularApp/popularApp.html' 16 | }; 17 | } 18 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/popularApp/popularApp.html: -------------------------------------------------------------------------------- 1 | <div class="popular-app-img-container"> 2 | <div class="popular-app-img"> 3 | <img ng-src="{{::( 'app/my-app-logo.png' | appImage )}}"/> 4 | <span class="logo-text">Super App</span> 5 | </div> 6 | </div> 7 | <div class="popular-app-cost row"> 8 | <div class="col-xs-9"> 9 | Most Popular App 10 | </div> 11 | <div class="col-xs-3 text-right"> 12 | 175$ 13 | </div> 14 | </div> 15 | <div class="popular-app-info row"> 16 | <div class="col-xs-4 text-left"> 17 | <div class="info-label">Total Visits</div> 18 | <div>47,512</div> 19 | </div> 20 | <div class="col-xs-4 text-center"> 21 | <div class="info-label">New Visits</div> 22 | <div>9,217</div> 23 | </div> 24 | <div class="col-xs-4 text-right"> 25 | <div class="info-label">Sales</div> 26 | <div>2,928</div> 27 | </div> 28 | </div> 29 | -------------------------------------------------------------------------------- /src/app/pages/dashboard/trafficChart/trafficChart.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('trafficChart', trafficChart); 10 | 11 | /** @ngInject */ 12 | function trafficChart() { 13 | return { 14 | restrict: 'E', 15 | controller: 'TrafficChartCtrl', 16 | templateUrl: 'app/pages/dashboard/trafficChart/trafficChart.html' 17 | }; 18 | } 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/dashboard/trafficChart/trafficChart.html: -------------------------------------------------------------------------------- 1 | <div class="channels-block" ng-class="{'transparent': transparent}"> 2 | <div class="chart-bg"></div> 3 | <div class="traffic-chart" id="trafficChart"> 4 | <div class="canvas-holder"> 5 | <canvas id="chart-area" width="280" height="280"></canvas> 6 | <div class="traffic-text"> 7 | 1,900,128 8 | <span>Views Total</span> 9 | </div> 10 | </div> 11 | </div> 12 | 13 | <div class="channels-info"> 14 | <div> 15 | <div class="channels-info-item" ng-repeat="label in doughnutData.labels" 16 | ng-init="i = $index; data = doughnutData.datasets[0]"> 17 | <div class="legend-color" style="background-color: {{::data.backgroundColor[i]}}"></div> 18 | <p>{{::label}}<span class="channel-number">+{{data.percentage[i]}}%</span></p> 19 | <div class="progress progress-sm channel-progress"> 20 | <div class="progress-bar " role="progressbar" 21 | aria-valuenow="{{data.percentage[i]}}" aria-valuemin="0" aria-valuemax="100" 22 | style="width: {{item.percentage}}%"> 23 | </div> 24 | </div> 25 | </div> 26 | </div> 27 | </div> 28 | </div> 29 | 30 | -------------------------------------------------------------------------------- /src/app/pages/dashboard/weather/weather.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.dashboard') 9 | .directive('weather', weather); 10 | 11 | /** @ngInject */ 12 | function weather() { 13 | return { 14 | restrict: 'EA', 15 | controller: 'WeatherCtrl', 16 | templateUrl: 'app/pages/dashboard/weather/weather.html' 17 | }; 18 | } 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/form/form.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.form', ['ui.select', 'ngSanitize']) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('form', { 15 | url: '/form', 16 | template : '<ui-view autoscroll="true" autoscroll-body-top></ui-view>', 17 | abstract: true, 18 | title: 'Form Elements', 19 | sidebarMeta: { 20 | icon: 'ion-compose', 21 | order: 250, 22 | }, 23 | }) 24 | .state('form.inputs', { 25 | url: '/inputs', 26 | templateUrl: 'app/pages/form/inputs/inputs.html', 27 | title: 'Form Inputs', 28 | sidebarMeta: { 29 | order: 0, 30 | }, 31 | }) 32 | .state('form.layouts', { 33 | url: '/layouts', 34 | templateUrl: 'app/pages/form/layouts/layouts.html', 35 | title: 'Form Layouts', 36 | sidebarMeta: { 37 | order: 100, 38 | }, 39 | }) 40 | .state('form.wizard', 41 | { 42 | url: '/wizard', 43 | templateUrl: 'app/pages/form/wizard/wizard.html', 44 | controller: 'WizardCtrl', 45 | controllerAs: 'vm', 46 | title: 'Form Wizard', 47 | sidebarMeta: { 48 | order: 200, 49 | }, 50 | }); 51 | } 52 | })(); 53 | -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/datePickers/datePickers.html: -------------------------------------------------------------------------------- 1 | <div class="datepicker row"> 2 | <div class="col-xlg-6 col-md-12 col-sm-6" ng-controller="datepickerCtrl"> 3 | <h4>Inline</h4> 4 | <label>Selected date is: <em>{{dt | date:'fullDate' }}</em></label> 5 | <div class="uib-datepicker-wrap"> 6 | <uib-datepicker ng-model="dt" datepicker-options="options"></uib-datepicker> 7 | </div> 8 | </div> 9 | 10 | <div class="col-xlg-6 col-md-12 col-sm-6" ng-controller="datepickerpopupCtrl"> 11 | <h4>Popup</h4> 12 | <label>Selected date is: <em>{{dt | date:'fullDate' }}</em></label> 13 | <p class="input-group"> 14 | <input type="text" class="form-control" uib-datepicker-popup="{{format}}" datepicker-options="options" ng-model="dt" is-open="opened" ng-required="true" close-text="Close" alt-input-formats="altInputFormats" show-button-bar="false" /> 15 | <span class="input-group-btn"> 16 | <button type="button" class="btn btn-default" ng-click="open()"><i class="glyphicon glyphicon-calendar"></i></button> 17 | </span> 18 | </p> 19 | <label>Format: <span class="muted-text">(manual alternate <em>{{altInputFormats[0]}}</em>)</span></label> <select class="form-control" ng-model="format" ng-options="f for f in formats"><option></option></select> 20 | </div> 21 | 22 | </div> -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/datePickers/datepickerCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by n.poltoratsky 3 | * on 23.06.2016. 4 | */ 5 | (function(){ 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.form') 9 | .controller('datepickerCtrl', datepickerCtrl); 10 | 11 | /** @ngInject */ 12 | function datepickerCtrl($scope) { 13 | 14 | $scope.dt = new Date(); 15 | $scope.options = { 16 | showWeeks: false 17 | }; 18 | 19 | } 20 | })(); -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/datePickers/datepickerpopupCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by n.poltoratsky 3 | * on 23.06.2016. 4 | */ 5 | (function(){ 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.form') 9 | .controller('datepickerpopupCtrl', datepickerpopupCtrl); 10 | 11 | /** @ngInject */ 12 | function datepickerpopupCtrl($scope) { 13 | 14 | $scope.open = open; 15 | $scope.opened = false; 16 | $scope.formats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate']; 17 | $scope.format = $scope.formats[0]; 18 | $scope.options = { 19 | showWeeks: false 20 | }; 21 | 22 | function open() { 23 | $scope.opened = true; 24 | } 25 | } 26 | })(); -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/inputGroups.html: -------------------------------------------------------------------------------- 1 | <div class="input-group"> 2 | <span class="input-group-addon input-group-addon-primary addon-left" id="basic-addon1">@</span> 3 | <input type="text" class="form-control with-primary-addon" placeholder="Username" aria-describedby="basic-addon1"> 4 | </div> 5 | 6 | <div class="input-group"> 7 | <input type="text" class="form-control with-warning-addon" placeholder="Recipient's username" aria-describedby="basic-addon2"> 8 | <span class="input-group-addon input-group-addon-warning addon-right" id="basic-addon2">@example.com</span> 9 | </div> 10 | 11 | <div class="input-group"> 12 | <span class="input-group-addon addon-left input-group-addon-success">lt;/span> 13 | <input type="text" class="form-control with-success-addon" aria-label="Amount (to the nearest dollar)"> 14 | <span class="input-group-addon addon-right input-group-addon-success">.00</span> 15 | </div> 16 | 17 | <div class="input-group"> 18 | <input type="text" class="form-control with-danger-addon" placeholder="Search for..."> 19 | <span class="input-group-btn"> 20 | <button class="btn btn-danger" type="button">Go!</button> 21 | </span> 22 | </div> -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/oldSelect/OldSelectpickerPanelCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 22.04.2016 4 | * @deprecated 5 | */ 6 | (function () { 7 | 'use strict'; 8 | 9 | angular.module('BlurAdmin.pages.form') 10 | .controller('OldSelectpickerPanelCtrl', OldSelectpickerPanelCtrl); 11 | 12 | /** @ngInject */ 13 | function OldSelectpickerPanelCtrl() { 14 | var vm = this; 15 | 16 | vm.standardSelectItems = [ 17 | { label: 'Option 1', value: 1 }, 18 | { label: 'Option 2', value: 2 }, 19 | { label: 'Option 3', value: 3 }, 20 | { label: 'Option 4', value: 4 }, 21 | ]; 22 | 23 | vm.selectWithSearchItems = [ 24 | { label: 'Hot Dog, Fries and a Soda', value: 1 }, 25 | { label: 'Burger, Shake and a Smile', value: 2 }, 26 | { label: 'Sugar, Spice and all things nice', value: 3 }, 27 | { label: 'Baby Back Ribs', value: 4 }, 28 | ]; 29 | 30 | vm.groupedSelectItems = [ 31 | { label: 'Group 1 - Option 1', value: 1, group: 'Group 1' }, 32 | { label: 'Group 2 - Option 2', value: 2, group: 'Group 2' }, 33 | { label: 'Group 1 - Option 3', value: 3, group: 'Group 1' }, 34 | { label: 'Group 2 - Option 4', value: 4, group: 'Group 2' }, 35 | ]; 36 | 37 | } 38 | 39 | })(); 40 | -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/oldSelect/selectpicker.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | * @deprecated 5 | */ 6 | (function () { 7 | 'use strict'; 8 | 9 | angular.module('BlurAdmin.pages.form') 10 | .directive('selectpicker', selectpicker); 11 | 12 | /** @ngInject */ 13 | function selectpicker() { 14 | return { 15 | restrict: 'A', 16 | require: '?ngOptions', 17 | priority: 1500, // make priority bigger than ngOptions and ngRepeat 18 | link: { 19 | pre: function(scope, elem, attrs) { 20 | elem.append('<option data-hidden="true" disabled value="">' + (attrs.title || 'Select something') + '</option>') 21 | }, 22 | post: function(scope, elem, attrs) { 23 | function refresh() { 24 | elem.selectpicker('refresh'); 25 | } 26 | 27 | if (attrs.ngModel) { 28 | scope.$watch(attrs.ngModel, refresh); 29 | } 30 | 31 | if (attrs.ngDisabled) { 32 | scope.$watch(attrs.ngDisabled, refresh); 33 | } 34 | 35 | elem.selectpicker({ dropupAuto: false, hideDisabled: true }); 36 | } 37 | } 38 | }; 39 | } 40 | 41 | 42 | })(); -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/oldSwitches/OldSwitchPanelCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 07.06.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.form') 9 | .controller('OldSwitchPanelCtrl', OldSwitchPanelCtrl); 10 | 11 | /** @ngInject */ 12 | function OldSwitchPanelCtrl() { 13 | var vm = this; 14 | 15 | vm.switcherValues = { 16 | primary: true, 17 | warning: true, 18 | danger: true, 19 | info: true, 20 | success: true 21 | }; 22 | } 23 | 24 | })(); 25 | -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/oldSwitches/switch.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | * 5 | */ 6 | (function () { 7 | 'use strict'; 8 | 9 | angular.module('BlurAdmin.pages.form') 10 | .directive('switch', switchDirective); 11 | 12 | /** @ngInject */ 13 | function switchDirective($timeout) { 14 | return { 15 | restrict: 'EA', 16 | replace: true, 17 | scope: { 18 | ngModel: '=' 19 | }, 20 | template: function(el, attrs) { 21 | return '<div class="switch-container ' + (attrs.color || '') + '"><input type="checkbox" ng-model="ngModel"></div>'; 22 | }, 23 | link: function (scope, elem, attr) { 24 | var input = $(elem).find('input'); 25 | input.bootstrapSwitch({ 26 | size: 'small', 27 | onColor: attr.color 28 | }); 29 | input.on('switchChange.bootstrapSwitch', function(event, state) { 30 | scope.ngModel = state; 31 | scope.$apply(); 32 | }); 33 | 34 | } 35 | }; 36 | } 37 | })(); 38 | -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/oldSwitches/switch.html: -------------------------------------------------------------------------------- 1 | <div ng-controller="OldSwitchPanelCtrl as switchPanelVm" class="switches clearfix"> 2 | <switch color="primary" ng-model="switchPanelVm.switcherValues.primary"></switch> 3 | <switch color="warning" ng-model="switchPanelVm.switcherValues.warning"></switch> 4 | <switch color="danger" ng-model="switchPanelVm.switcherValues.danger"></switch> 5 | <switch color="info" ng-model="switchPanelVm.switcherValues.info"></switch> 6 | <switch color="success" ng-model="switchPanelVm.switcherValues.success"></switch> 7 | </div> -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/select/GroupSelectpickerOptions.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author p.maslava 3 | * created on 28.11.2016 4 | */ 5 | 6 | (function() { 7 | 'use strict'; 8 | 9 | angular.module('BlurAdmin.pages.form') 10 | .filter('groupSelectpickerOptions', GroupSelectpickerOptions); 11 | 12 | /** @ngInject */ 13 | function GroupSelectpickerOptions() { 14 | return function (items, props) { 15 | var out = []; 16 | 17 | if (angular.isArray(items)) { 18 | var keys = Object.keys(props); 19 | 20 | items.forEach(function (item) { 21 | var itemMatches = false; 22 | 23 | for (var i = 0; i < keys.length; i++) { 24 | var prop = keys[i]; 25 | var text = props[prop].toLowerCase(); 26 | if (item[prop].toString().toLowerCase().indexOf(text) !== -1) { 27 | itemMatches = true; 28 | break; 29 | } 30 | } 31 | 32 | if (itemMatches) { 33 | out.push(item); 34 | } 35 | }); 36 | } else { 37 | // Let the output be the input untouched 38 | out = items; 39 | } 40 | 41 | return out; 42 | }; 43 | } 44 | })(); -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/standardFields.html: -------------------------------------------------------------------------------- 1 | <form> 2 | <div class="form-group"> 3 | <label for="input01">Text</label> 4 | <input type="text" class="form-control" id="input01" placeholder="Text"> 5 | </div> 6 | <div class="form-group"> 7 | <label for="input02">Password</label> 8 | <input type="password" class="form-control" id="input02" placeholder="Password"> 9 | </div> 10 | <div class="form-group"> 11 | <label for="input03">Rounded Corners</label> 12 | <input type="text" class="form-control form-control-rounded" id="input03" placeholder="Rounded Corners"> 13 | </div> 14 | <div class="form-group"> 15 | <label for="input04">With help</label> 16 | <input type="text" class="form-control" id="input04" placeholder="With help"> 17 | <span class="help-block sub-little-text">A block of help text that breaks onto a new line and may extend beyond one line.</span> 18 | </div> 19 | <div class="form-group"> 20 | <label for="input05">Disabled Input</label> 21 | <input type="text" class="form-control" id="input05" placeholder="Disabled Input" disabled> 22 | </div> 23 | 24 | <div class="form-group"> 25 | <label for="textarea01">Textarea</label> 26 | <textarea placeholder="Default Input" class="form-control" id="textarea01"></textarea> 27 | </div> 28 | 29 | <div class="form-group"> 30 | <input type="text" class="form-control input-sm" id="input2" placeholder="Small Input"> 31 | </div> 32 | <div class="form-group"> 33 | <input type="text" class="form-control input-lg" id="input4" placeholder="Large Input"> 34 | </div> 35 | </form> -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/switches/SwitchDemoPanelCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 10.12.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.form') 9 | .controller('SwitchDemoPanelCtrl', SwitchDemoPanelCtrl); 10 | 11 | /** @ngInject */ 12 | function SwitchDemoPanelCtrl() { 13 | var vm = this; 14 | vm.switches = { 15 | s1: true, 16 | s2: false, 17 | s3: true, 18 | s4: true, 19 | s5: false 20 | }; 21 | } 22 | 23 | })(); 24 | -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/switches/switch.html: -------------------------------------------------------------------------------- 1 | <div ng-controller="SwitchDemoPanelCtrl as vm"> 2 | <ba-switcher switcher-style="primary" switcher-value="vm.switches.s1"></ba-switcher> 3 | <ba-switcher switcher-style="success" switcher-value="vm.switches.s2"></ba-switcher> 4 | <ba-switcher switcher-style="warning" switcher-value="vm.switches.s3"></ba-switcher> 5 | <ba-switcher switcher-style="danger" switcher-value="vm.switches.s4"></ba-switcher> 6 | <ba-switcher switcher-style="info" switcher-value="vm.switches.s5"></ba-switcher> 7 | </div> 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/tagsInput/tagsInput.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.form') 9 | .directive('tagInput', tagInput); 10 | 11 | /** @ngInject */ 12 | function tagInput() { 13 | return { 14 | restrict: 'A', 15 | link: function( $scope, elem, attr) { 16 | $(elem).tagsinput({ 17 | tagClass: 'label label-' + attr.tagInput 18 | }); 19 | } 20 | }; 21 | } 22 | })(); -------------------------------------------------------------------------------- /src/app/pages/form/inputs/widgets/tagsInput/tagsInput.html: -------------------------------------------------------------------------------- 1 | <div class="form-group"> 2 | <div class="form-group"> 3 | <input type="text" tag-input="primary" value="Amsterdam,Washington,Sydney,Beijing,Cairo" data-role="tagsinput" placeholder="Add Tag"> 4 | </div> 5 | <div class="form-group"> 6 | <input type="text" tag-input="warning" value="Minsk,Prague,Vilnius,Warsaw" data-role="tagsinput" placeholder="Add Tag"> 7 | </div> 8 | <div class="form-group"> 9 | <input type="text" tag-input="danger" value="London,Berlin,Paris,Rome,Munich" data-role="tagsinput" placeholder="Add Tag"> 10 | </div> 11 | </div> -------------------------------------------------------------------------------- /src/app/pages/form/layouts/layouts.html: -------------------------------------------------------------------------------- 1 | <div class="widgets"> 2 | 3 | <div class="row"> 4 | <div class="col-md-12" 5 | ba-panel 6 | ba-panel-title="Inline Form" 7 | ba-panel-class="with-scroll"> 8 | <div ng-include="'app/pages/form/layouts/widgets/inlineForm.html'"></div> 9 | </div> 10 | </div> 11 | 12 | <div class="row"> 13 | <div class="col-md-6"> 14 | <div 15 | ba-panel 16 | ba-panel-title="Basic Form" 17 | ba-panel-class="with-scroll"> 18 | <div ng-include="'app/pages/form/layouts/widgets/basicForm.html'"></div> 19 | </div> 20 | 21 | <div 22 | ba-panel 23 | ba-panel-title="Horizontal Form" 24 | ba-panel-class="with-scroll"> 25 | <div ng-include="'app/pages/form/layouts/widgets/horizontalForm.html'"></div> 26 | </div> 27 | </div> 28 | <div class="col-md-6"> 29 | <div 30 | ba-panel 31 | ba-panel-title="Form Without Labels" 32 | ba-panel-class="with-scroll"> 33 | <div ng-include="'app/pages/form/layouts/widgets/formWithoutLabels.html'"></div> 34 | </div> 35 | <div 36 | ba-panel 37 | ba-panel-title="Block Form" 38 | ba-panel-class="with-scroll"> 39 | <div ng-include="'app/pages/form/layouts/widgets/blockForm.html'"></div> 40 | </div> 41 | </div> 42 | </div> 43 | 44 | </div> -------------------------------------------------------------------------------- /src/app/pages/form/layouts/widgets/basicForm.html: -------------------------------------------------------------------------------- 1 | <form> 2 | <div class="form-group"> 3 | <label for="exampleInputEmail1">Email address</label> 4 | <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email"> 5 | </div> 6 | <div class="form-group"> 7 | <label for="exampleInputPassword1">Password</label> 8 | <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password"> 9 | </div> 10 | <div class="checkbox"> 11 | <label class="custom-checkbox"> 12 | <input type="checkbox"> 13 | <span>Check me out</span> 14 | </label> 15 | </div> 16 | <button type="submit" class="btn btn-danger">Submit</button> 17 | </form> -------------------------------------------------------------------------------- /src/app/pages/form/layouts/widgets/blockForm.html: -------------------------------------------------------------------------------- 1 | <div class="row"> 2 | <div class="col-sm-6"> 3 | <div class="form-group"> 4 | <label for="inputFirstName">First Name</label> 5 | <input type="text" class="form-control" id="inputFirstName" placeholder="First Name"> 6 | </div> 7 | </div> 8 | <div class="col-sm-6"> 9 | <div class="form-group"> 10 | <label for="inputLastName">Last Name</label> 11 | <input type="text" class="form-control" id="inputLastName" placeholder="Last Name"> 12 | </div> 13 | </div> 14 | </div> 15 | <div class="row"> 16 | <div class="col-sm-6"> 17 | <div class="form-group"> 18 | <label for="inputFirstName">Email</label> 19 | <input type="email" class="form-control" id="inputEmail" placeholder="Email"> 20 | </div> 21 | </div> 22 | <div class="col-sm-6"> 23 | <div class="form-group"> 24 | <label for="inputWebsite">Website</label> 25 | <input type="text" class="form-control" id="inputWebsite" placeholder="Website"> 26 | </div> 27 | </div> 28 | </div> 29 | <button type="submit" class="btn btn-primary">Submit</button> -------------------------------------------------------------------------------- /src/app/pages/form/layouts/widgets/formWithoutLabels.html: -------------------------------------------------------------------------------- 1 | <form> 2 | <div class="form-group"> 3 | <input type="text" class="form-control" placeholder="Recipients"> 4 | </div> 5 | <div class="form-group"> 6 | <input type="text" class="form-control" placeholder="Subject"> 7 | </div> 8 | <div class="form-group"> 9 | <textarea class="form-control" placeholder="Message"></textarea> 10 | </div> 11 | <button type="submit" class="btn btn-success">Send</button> 12 | </form> -------------------------------------------------------------------------------- /src/app/pages/form/layouts/widgets/horizontalForm.html: -------------------------------------------------------------------------------- 1 | <form class="form-horizontal"> 2 | <div class="form-group"> 3 | <label for="inputEmail3" class="col-sm-2 control-label">Email</label> 4 | <div class="col-sm-10"> 5 | <input type="email" class="form-control" id="inputEmail3" placeholder="Email"> 6 | </div> 7 | </div> 8 | <div class="form-group"> 9 | <label for="inputPassword3" class="col-sm-2 control-label">Password</label> 10 | <div class="col-sm-10"> 11 | <input type="password" class="form-control" id="inputPassword3" placeholder="Password"> 12 | </div> 13 | </div> 14 | <div class="form-group"> 15 | <div class="col-sm-offset-2 col-sm-10"> 16 | <div class="checkbox"> 17 | <label class="custom-checkbox"> 18 | <input type="checkbox"> 19 | <span>Remember me</span> 20 | </label> 21 | </div> 22 | </div> 23 | </div> 24 | <div class="form-group"> 25 | <div class="col-sm-offset-2 col-sm-10"> 26 | <button type="submit" class="btn btn-warning">Sign in</button> 27 | </div> 28 | </div> 29 | </form> -------------------------------------------------------------------------------- /src/app/pages/form/layouts/widgets/inlineForm.html: -------------------------------------------------------------------------------- 1 | <form class="row form-inline"> 2 | <div class="form-group col-sm-3 col-xs-6"> 3 | <input type="text" class="form-control" id="exampleInputName2" placeholder="Name"> 4 | </div> 5 | <div class="form-group col-sm-3 col-xs-6"> 6 | <input type="email" class="form-control" id="exampleInputEmail2" placeholder="Email"> 7 | </div> 8 | <div class="checkbox"> 9 | <label class="custom-checkbox"> 10 | <input type="checkbox"> 11 | <span>Remember me</span> 12 | </label> 13 | </div> 14 | <button type="submit" class="btn btn-primary">Send invitation</button> 15 | </form> -------------------------------------------------------------------------------- /src/app/pages/form/wizard/wizrdCtrl.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular.module('BlurAdmin.pages.form') 5 | .controller('WizardCtrl', WizardCtrl); 6 | 7 | /** @ngInject */ 8 | function WizardCtrl($scope) { 9 | var vm = this; 10 | 11 | vm.personalInfo = {}; 12 | vm.productInfo = {}; 13 | vm.shipment = {}; 14 | 15 | vm.arePersonalInfoPasswordsEqual = function () { 16 | return vm.personalInfo.confirmPassword && vm.personalInfo.password == vm.personalInfo.confirmPassword; 17 | }; 18 | } 19 | 20 | })(); 21 | 22 | -------------------------------------------------------------------------------- /src/app/pages/maps/google-maps/GmapPageCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.maps') 9 | .controller('GmapPageCtrl', GmapPageCtrl); 10 | 11 | /** @ngInject */ 12 | function GmapPageCtrl($timeout) { 13 | function initialize() { 14 | var mapCanvas = document.getElementById('google-maps'); 15 | var mapOptions = { 16 | center: new google.maps.LatLng(44.5403, -78.5463), 17 | zoom: 8, 18 | mapTypeId: google.maps.MapTypeId.ROADMAP 19 | }; 20 | var map = new google.maps.Map(mapCanvas, mapOptions); 21 | } 22 | 23 | $timeout(function(){ 24 | initialize(); 25 | }, 100); 26 | } 27 | 28 | })(); 29 | -------------------------------------------------------------------------------- /src/app/pages/maps/google-maps/google-maps.html: -------------------------------------------------------------------------------- 1 | <div ba-panel ba-panel-title="Google Maps" class="viewport100"> 2 | <div id="google-maps"></div> 3 | </div> 4 | -------------------------------------------------------------------------------- /src/app/pages/maps/leaflet/LeafletPageCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.maps') 9 | .controller('LeafletPageCtrl', LeafletPageCtrl); 10 | 11 | /** @ngInject */ 12 | function LeafletPageCtrl($timeout) { 13 | function initialize() { 14 | L.Icon.Default.imagePath = 'assets/img/theme/vendor/leaflet/dist/images'; 15 | var map = L.map(document.getElementById('leaflet-map')).setView([51.505, -0.09], 13); 16 | L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { 17 | attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors' 18 | }).addTo(map); 19 | 20 | L.marker([51.5, -0.09]).addTo(map) 21 | .bindPopup('A pretty CSS3 popup.<br> Easily customizable.') 22 | .openPopup(); 23 | } 24 | 25 | $timeout(function(){ 26 | initialize(); 27 | }, 100); 28 | 29 | } 30 | 31 | })(); 32 | -------------------------------------------------------------------------------- /src/app/pages/maps/leaflet/leaflet.html: -------------------------------------------------------------------------------- 1 | <div ba-panel ba-panel-title="Leaflet" class="viewport100"> 2 | <div id="leaflet-map"></div> 3 | </div> -------------------------------------------------------------------------------- /src/app/pages/maps/map-bubbles/map-bubbles.html: -------------------------------------------------------------------------------- 1 | <div ba-panel ba-panel-title="Map with Bubbles" class="viewport100"> 2 | <div id="map-bubbles"></div> 3 | </div> 4 | -------------------------------------------------------------------------------- /src/app/pages/maps/map-lines/map-lines.html: -------------------------------------------------------------------------------- 1 | <div ba-panel ba-panel-title="Line Map" class="viewport100"> 2 | <div id="map-lines"></div> 3 | </div> 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/app/pages/maps/maps.html: -------------------------------------------------------------------------------- 1 | <div class="widgets"> 2 | 3 | <div class="row"> 4 | <div class="col-md-12" ui-view autoscroll="true" autoscroll-body-top></div> 5 | </div> 6 | 7 | </div> -------------------------------------------------------------------------------- /src/app/pages/pages.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages', [ 9 | 'ui.router', 10 | 11 | 'BlurAdmin.pages.dashboard', 12 | 'BlurAdmin.pages.ui', 13 | 'BlurAdmin.pages.components', 14 | 'BlurAdmin.pages.form', 15 | 'BlurAdmin.pages.tables', 16 | 'BlurAdmin.pages.charts', 17 | 'BlurAdmin.pages.maps', 18 | 'BlurAdmin.pages.profile', 19 | ]) 20 | .config(routeConfig); 21 | 22 | /** @ngInject */ 23 | function routeConfig($urlRouterProvider, baSidebarServiceProvider) { 24 | $urlRouterProvider.otherwise('/dashboard'); 25 | 26 | baSidebarServiceProvider.addStaticItem({ 27 | title: 'Pages', 28 | icon: 'ion-document', 29 | subMenu: [{ 30 | title: 'Sign In', 31 | fixedHref: 'auth.html', 32 | blank: true 33 | }, { 34 | title: 'Sign Up', 35 | fixedHref: 'reg.html', 36 | blank: true 37 | }, { 38 | title: 'User Profile', 39 | stateRef: 'profile' 40 | }, { 41 | title: '404 Page', 42 | fixedHref: '404.html', 43 | blank: true 44 | }] 45 | }); 46 | baSidebarServiceProvider.addStaticItem({ 47 | title: 'Menu Level 1', 48 | icon: 'ion-ios-more', 49 | subMenu: [{ 50 | title: 'Menu Level 1.1', 51 | disabled: true 52 | }, { 53 | title: 'Menu Level 1.2', 54 | subMenu: [{ 55 | title: 'Menu Level 1.2.1', 56 | disabled: true 57 | }] 58 | }] 59 | }); 60 | } 61 | 62 | })(); 63 | -------------------------------------------------------------------------------- /src/app/pages/profile/ProfileModalCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 21.01.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.profile') 9 | .controller('ProfileModalCtrl', ProfileModalCtrl); 10 | 11 | /** @ngInject */ 12 | function ProfileModalCtrl($scope, $uibModalInstance) { 13 | $scope.link = ''; 14 | $scope.ok = function () { 15 | $uibModalInstance.close($scope.link); 16 | }; 17 | } 18 | 19 | })(); -------------------------------------------------------------------------------- /src/app/pages/profile/profile.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.profile', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('profile', { 15 | url: '/profile', 16 | title: 'Profile', 17 | templateUrl: 'app/pages/profile/profile.html', 18 | controller: 'ProfilePageCtrl', 19 | }); 20 | } 21 | 22 | })(); 23 | -------------------------------------------------------------------------------- /src/app/pages/profile/profileModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content"> 2 | <div class="modal-header"> 3 | <button type="button" class="close" ng-click="$dismiss()" aria-label="Close"> 4 | <em class="ion-ios-close-empty sn-link-close"></em> 5 | </button> 6 | <h4 class="modal-title" id="myModalLabel">Add Account</h4> 7 | </div> 8 | <form name="linkForm"> 9 | <div class="modal-body"> 10 | <p>Paste a link to your profile into the box below</p> 11 | 12 | <div class="form-group"> 13 | <input type="text" class="form-control" placeholder="Link to Profile" ng-model="link"> 14 | </div> 15 | </div> 16 | <div class="modal-footer"> 17 | <button type="button" class="btn btn-primary" ng-click="ok(link)">Save changes</button> 18 | </div> 19 | </form> 20 | </div> 21 | -------------------------------------------------------------------------------- /src/app/pages/tables/smart/tables.html: -------------------------------------------------------------------------------- 1 | <div class="widgets"> 2 | 3 | <div class="row"> 4 | <div class="col-md-12"> 5 | <div ba-panel ba-panel-title="Editable Rows" ba-panel-class="with-scroll"> 6 | <div include-with-scope="app/pages/tables/widgets/editableRowTable.html"></div> 7 | </div> 8 | </div> 9 | </div> 10 | 11 | <div class="row"> 12 | <div class="col-md-12"> 13 | <div ba-panel ba-panel-title="Editable Cells" ba-panel-class="with-scroll"> 14 | <div include-with-scope="app/pages/tables/widgets/editableTable.html"></div> 15 | </div> 16 | </div> 17 | </div> 18 | 19 | <div class="row"> 20 | <div class="col-md-12"> 21 | <div ba-panel ba-panel-title="Smart Table With Filtering, Sorting And Pagination" ba-panel-class="with-scroll"> 22 | <div include-with-scope="app/pages/tables/widgets/smartTable.html"></div> 23 | </div> 24 | </div> 25 | </div> 26 | 27 | </div> -------------------------------------------------------------------------------- /src/app/pages/tables/tables.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.tables', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider, $urlRouterProvider) { 13 | $stateProvider 14 | .state('tables', { 15 | url: '/tables', 16 | template : '<ui-view autoscroll="true" autoscroll-body-top></ui-view>', 17 | abstract: true, 18 | controller: 'TablesPageCtrl', 19 | title: 'Tables', 20 | sidebarMeta: { 21 | icon: 'ion-grid', 22 | order: 300, 23 | }, 24 | }).state('tables.basic', { 25 | url: '/basic', 26 | templateUrl: 'app/pages/tables/basic/tables.html', 27 | title: 'Basic Tables', 28 | sidebarMeta: { 29 | order: 0, 30 | }, 31 | }).state('tables.smart', { 32 | url: '/smart', 33 | templateUrl: 'app/pages/tables/smart/tables.html', 34 | title: 'Smart Tables', 35 | sidebarMeta: { 36 | order: 100, 37 | }, 38 | }); 39 | $urlRouterProvider.when('/tables','/tables/basic'); 40 | } 41 | 42 | })(); 43 | -------------------------------------------------------------------------------- /src/app/pages/tables/widgets/borderedTable.html: -------------------------------------------------------------------------------- 1 | <div class="horizontal-scroll"> 2 | <table class="table table-bordered"> 3 | <thead> 4 | <tr> 5 | <th class="browser-icons"></th> 6 | <th>Browser</th> 7 | <th class="align-right">Visits</th> 8 | <th class="align-right">Purchases</th> 9 | <th class="align-right">%</th> 10 | </tr> 11 | </thead> 12 | <tbody> 13 | <tr ng-repeat="item in metricsTableData"> 14 | <td><img ng-src="{{::( item.image | appImage )}}" width="20" height="20"></td> 15 | <td ng-class="nowrap">{{item.browser}}</td> 16 | <td class="align-right">{{item.visits}}</td> 17 | <td class="align-right">{{item.purchases}}</td> 18 | <td class="align-right">{{item.percent}}</td> 19 | </tr> 20 | </tbody> 21 | </table> 22 | </div> -------------------------------------------------------------------------------- /src/app/pages/tables/widgets/condensedTable.html: -------------------------------------------------------------------------------- 1 | <div class="horizontal-scroll"> 2 | <table class="table table-condensed"> 3 | <thead> 4 | <tr> 5 | <th class="table-id">#</th> 6 | <th>First Name</th> 7 | <th>Last Name</th> 8 | <th>Username</th> 9 | <th>Email</th> 10 | <th>Status</th> 11 | </tr> 12 | </thead> 13 | <tbody> 14 | <tr ng-repeat="item in peopleTableData"> 15 | <td class="table-id">{{item.id}}</td> 16 | <td>{{item.firstName}}</td> 17 | <td>{{item.lastName}}</td> 18 | <td>{{item.username}}</td> 19 | <td><a class="email-link" ng-href="mailto:{{item.email}}">{{item.email}}</a></td> 20 | <td><button class="status-button btn btn-xs btn-{{item.status}}">{{item.status}}</button></td> 21 | </tr> 22 | </tbody> 23 | </table> 24 | </div> -------------------------------------------------------------------------------- /src/app/pages/tables/widgets/contextualTable.html: -------------------------------------------------------------------------------- 1 | <table class="table"> 2 | <tr> 3 | <th>#</th> 4 | <th>First Name</th> 5 | <th>Last Name</th> 6 | <th>Username</th> 7 | <th>Email</th> 8 | <th>Age</th> 9 | </tr> 10 | <tr class="primary"> 11 | <td>1</td> 12 | <td>Mark</td> 13 | <td>Otto</td> 14 | <td>@mdo</td> 15 | <td><a class="email-link " ng-href="mailto:mdo@gmail.com" href="mailto:mdo@gmail.com">mdo@gmail.com</a></td> 16 | <td>28</td> 17 | </tr> 18 | <tr class="success"> 19 | <td>2</td> 20 | <td>Jacob</td> 21 | <td>Thornton</td> 22 | <td>@fat</td> 23 | <td><a class="email-link " ng-href="mailto:fat@yandex.ru" href="mailto:fat@yandex.ru">fat@yandex.ru</a></td> 24 | <td>45</td> 25 | </tr> 26 | <tr class="warning"> 27 | <td>3</td> 28 | <td>Larry</td> 29 | <td>Bird</td> 30 | <td>@twitter</td> 31 | <td><a class="email-link " ng-href="mailto:twitter@outlook.com" href="mailto:twitter@outlook.com">twitter@outlook.com</a> 32 | </td> 33 | <td>18</td> 34 | </tr> 35 | <tr class="danger"> 36 | <td>4</td> 37 | <td>John</td> 38 | <td>Snow</td> 39 | <td>@snow</td> 40 | <td><a class="email-link" ng-href="mailto:snow@gmail.com" href="mailto:snow@gmail.com">snow@gmail.com</a></td> 41 | <td>20</td> 42 | </tr> 43 | <tr class="info"> 44 | <td>5</td> 45 | <td>Jack</td> 46 | <td>Sparrow</td> 47 | <td>@jack</td> 48 | <td><a class="email-link" ng-href="mailto:jack@yandex.ru" href="mailto:jack@yandex.ru">jack@yandex.ru</a></td> 49 | <td>30</td> 50 | </tr> 51 | </table> -------------------------------------------------------------------------------- /src/app/pages/tables/widgets/editableTable.html: -------------------------------------------------------------------------------- 1 | <div class="horizontal-scroll"> 2 | <table class="table table-hover" st-table="editableTableData"> 3 | <thead> 4 | <tr class="sortable"> 5 | <th class="table-id" st-sort="id" st-sort-default="true">#</th> 6 | <th st-sort="firstName">First Name</th> 7 | <th st-sort="lastName">Last Name</th> 8 | <th st-sort="username">Username</th> 9 | <th st-sort="email">Email</th> 10 | <th st-sort="age">Age</th> 11 | </tr> 12 | </thead> 13 | <tbody> 14 | <tr ng-repeat="item in editableTableData" class="editable-tr-wrap"> 15 | <td class="table-id">{{item.id}}</td> 16 | <td><span editable-text="item.firstName" blur="cancel">{{item.firstName}}</span></td> 17 | <td><span editable-text="item.lastName" blur="cancel">{{item.lastName}}</span></td> 18 | <td><span editable-text="item.username" blur="cancel">{{item.username}}</span></td> 19 | <td><a class="email-link" ng-href="mailto:{{item.email}}">{{item.email}}</a></td> 20 | <td><span editable-text="item.age" blur="cancel">{{item.age}}</span></td> 21 | </tr> 22 | </tbody> 23 | <tfoot> 24 | <tr> 25 | <td colspan="6" class="text-center"> 26 | <div st-pagination="" st-items-by-page="12" st-displayed-pages="5"></div> 27 | </td> 28 | </tr> 29 | </tfoot> 30 | </table> 31 | </div> -------------------------------------------------------------------------------- /src/app/pages/tables/widgets/hoverRows.html: -------------------------------------------------------------------------------- 1 | <div class="horizontal-scroll"> 2 | <table class="table table-hover"> 3 | <thead> 4 | <tr class="black-muted-bg"> 5 | <th class="browser-icons"></th> 6 | <th>Browser</th> 7 | <th class="align-right">Visits</th> 8 | <th class="table-arr"></th> 9 | <th class="align-right">Purchases</th> 10 | <th class="table-arr"></th> 11 | <th class="align-right">%</th> 12 | <th class="table-arr"></th> 13 | </tr> 14 | </thead> 15 | <tbody> 16 | <tr ng-repeat="item in metricsTableData" class="no-top-border"> 17 | <td><img ng-src="{{::( item.image | appImage )}}" width="20" height="20"></td> 18 | <td ng-class="nowrap">{{item.browser}}</td> 19 | <td class="align-right">{{item.visits}}</td> 20 | <td class="table-arr"><i ng-class="{'icon-up': item.isVisitsUp, 'icon-down': !item.isVisitsUp }"></i></td> 21 | <td class="align-right">{{item.purchases}}</td> 22 | <td class="table-arr"><i ng-class="{'icon-up': item.isPurchasesUp, 'icon-down': !item.isPurchasesUp }"></i></td> 23 | <td class="align-right">{{item.percent}}</td> 24 | <td class="table-arr"><i ng-class="{'icon-up': item.isPercentUp, 'icon-down': !item.isPercentUp }"></i></td> 25 | </tr> 26 | </tbody> 27 | </table> 28 | </div> -------------------------------------------------------------------------------- /src/app/pages/tables/widgets/stripedRows.html: -------------------------------------------------------------------------------- 1 | <div class="vertical-scroll"> 2 | <table class="table table-striped"> 3 | <thead> 4 | <tr> 5 | <th class="table-id">#</th> 6 | <th>First Name</th> 7 | <th>Last Name</th> 8 | <th>Username</th> 9 | <th>Email</th> 10 | <th>Age</th> 11 | </tr> 12 | </thead> 13 | <tbody> 14 | <tr ng-repeat="item in smartTableData"> 15 | <td class="table-id">{{item.id}}</td> 16 | <td>{{item.firstName}}</td> 17 | <td>{{item.lastName}}</td> 18 | <td>{{item.username}}</td> 19 | <td><a class="email-link" ng-href="mailto:{{item.email}}">{{item.email}}</a></td> 20 | <td>{{item.age}}</td> 21 | </tr> 22 | </tbody> 23 | </table> 24 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/alerts/alerts.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.alerts', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.alerts', { 15 | url: '/alerts', 16 | templateUrl: 'app/pages/ui/alerts/alerts.html', 17 | title: 'Alerts', 18 | sidebarMeta: { 19 | order: 500, 20 | }, 21 | }); 22 | } 23 | 24 | })(); 25 | -------------------------------------------------------------------------------- /src/app/pages/ui/buttons/ButtonPageCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.buttons') 9 | .controller('ButtonPageCtrl', ButtonPageCtrl); 10 | 11 | /** @ngInject */ 12 | function ButtonPageCtrl($scope, $timeout) { 13 | $scope.progressFunction = function() { 14 | return $timeout(function() {}, 3000); 15 | }; 16 | } 17 | 18 | })(); 19 | -------------------------------------------------------------------------------- /src/app/pages/ui/buttons/buttons.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.buttons', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.buttons', { 15 | url: '/buttons', 16 | templateUrl: 'app/pages/ui/buttons/buttons.html', 17 | controller: 'ButtonPageCtrl', 18 | title: 'Buttons', 19 | sidebarMeta: { 20 | order: 100, 21 | }, 22 | }); 23 | } 24 | 25 | })(); 26 | -------------------------------------------------------------------------------- /src/app/pages/ui/buttons/widgets/buttonGroups.html: -------------------------------------------------------------------------------- 1 | <div class="btn-group-example"> 2 | <div class="btn-group" role="group" aria-label="Basic example"> 3 | <button type="button" class="btn btn-danger">Left</button> 4 | <button type="button" class="btn btn-danger">Middle</button> 5 | <button type="button" class="btn btn-danger">Right</button> 6 | </div> 7 | </div> 8 | 9 | <div class="btn-toolbar-example"> 10 | <div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups"> 11 | <div class="btn-group" role="group" aria-label="First group"> 12 | <button type="button" class="btn btn-primary">1</button> 13 | <button type="button" class="btn btn-primary">2</button> 14 | <button type="button" class="btn btn-primary">3</button> 15 | <button type="button" class="btn btn-primary">4</button> 16 | </div> 17 | <div class="btn-group" role="group" aria-label="Second group"> 18 | <button type="button" class="btn btn-primary">5</button> 19 | <button type="button" class="btn btn-primary">6</button> 20 | <button type="button" class="btn btn-primary">7</button> 21 | </div> 22 | <div class="btn-group" role="group" aria-label="Third group"> 23 | <button type="button" class="btn btn-primary">8</button> 24 | </div> 25 | </div> 26 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/buttons/widgets/iconButtons.html: -------------------------------------------------------------------------------- 1 | <ul class="btn-list clearfix"> 2 | <li><button type="button" class="btn btn-primary btn-icon"><i class="ion-android-download"></i></button></li> 3 | <li><button type="button" class="btn btn-default btn-icon"><i class="ion-stats-bars"></i></button></li> 4 | <li><button type="button" class="btn btn-success btn-icon"><i class="ion-android-checkmark-circle"></i></button></li> 5 | <li><button type="button" class="btn btn-info btn-icon"><i class="ion-information"></i></button></li> 6 | <li><button type="button" class="btn btn-warning btn-icon"><i class="ion-android-warning"></i></button></li> 7 | <li><button type="button" class="btn btn-danger btn-icon"><i class="ion-nuclear"></i></button></li> 8 | </ul> 9 | 10 | <h5 class="panel-subtitle">Buttons with icons</h5> 11 | 12 | <ul class="btn-list clearfix"> 13 | <li><button type="button" class="btn btn-primary btn-with-icon"><i class="ion-android-download"></i>Primary</button></li> 14 | <li><button type="button" class="btn btn-default btn-with-icon"><i class="ion-stats-bars"></i>Default</button></li> 15 | <li><button type="button" class="btn btn-success btn-with-icon"><i class="ion-android-checkmark-circle"></i>Success</button></li> 16 | <li><button type="button" class="btn btn-info btn-with-icon"><i class="ion-information"></i>Info</button></li> 17 | <li><button type="button" class="btn btn-warning btn-with-icon"><i class="ion-android-warning"></i>Warning</button></li> 18 | <li><button type="button" class="btn btn-danger btn-with-icon"><i class="ion-nuclear"></i>Danger</button></li> 19 | </ul> -------------------------------------------------------------------------------- /src/app/pages/ui/buttons/widgets/largeButtons.html: -------------------------------------------------------------------------------- 1 | <div class="row btns-row btns-same-width-lg"> 2 | <div class="col-sm-4 col-xs-6"><button type="button" class="btn btn-primary btn-lg">Primary</button></div> 3 | <div class="col-sm-4 col-xs-6"><button type="button" class="btn btn-success btn-lg">Success</button></div> 4 | <div class="col-sm-4 col-xs-6"><button type="button" class="btn btn-info btn-lg">Info</button></div> 5 | <div class="col-sm-4 col-xs-6"><button type="button" class="btn btn-default btn-lg">Default</button></div> 6 | <div class="col-sm-4 col-xs-6"><button type="button" class="btn btn-warning btn-lg">Warning</button></div> 7 | <div class="col-sm-4 col-xs-6"><button type="button" class="btn btn-danger btn-lg">Danger</button></div> 8 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/grid/grid.html: -------------------------------------------------------------------------------- 1 | <div class="widgets"> 2 | 3 | <div class="row"> 4 | <div class="col-md-12" 5 | ba-panel 6 | ba-panel-title="Inline Form" 7 | ba-panel-class="with-scroll"> 8 | <div ng-include="'app/pages/ui/grid/baseGrid.html'"></div> 9 | </div> 10 | </div> 11 | 12 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/grid/grid.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.grid', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.grid', { 15 | url: '/grid', 16 | templateUrl: 'app/pages/ui/grid/grid.html', 17 | title: 'Grid', 18 | sidebarMeta: { 19 | order: 400, 20 | }, 21 | }); 22 | } 23 | 24 | })(); 25 | -------------------------------------------------------------------------------- /src/app/pages/ui/icons/icons.html: -------------------------------------------------------------------------------- 1 | <div class="widgets"> 2 | 3 | <div class="row"> 4 | <div class="col-md-6"> 5 | <div 6 | ba-panel 7 | ba-panel-title="Kameleon SVG Icons" 8 | ba-panel-class="with-scroll"> 9 | <div include-with-scope="app/pages/ui/icons/widgets/kameleon.html"></div> 10 | </div> 11 | <div 12 | ba-panel 13 | ba-panel-title="Socicon" 14 | ba-panel-class="with-scroll"> 15 | <div include-with-scope="app/pages/ui/icons/widgets/socicon.html"></div> 16 | </div> 17 | </div> 18 | <div class="col-md-6"> 19 | <div 20 | ba-panel 21 | ba-panel-title="Icons With Rounded Background" 22 | ba-panel-class="with-scroll"> 23 | <div include-with-scope="app/pages/ui/icons/widgets/kameleonRounded.html"></div> 24 | </div> 25 | <div 26 | ba-panel 27 | ba-panel-title="ionicons" 28 | ba-panel-class="with-scroll"> 29 | <div include-with-scope="app/pages/ui/icons/widgets/ionicons.html"></div> 30 | </div> 31 | <div 32 | ba-panel 33 | ba-panel-title="Font Awesome Icons" 34 | ba-panel-class="with-scroll"> 35 | <div include-with-scope="app/pages/ui/icons/widgets/fontAwesomeIcons.html"></div> 36 | </div> 37 | </div> 38 | </div> 39 | 40 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/icons/icons.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.icons', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.icons', { 15 | url: '/icons', 16 | templateUrl: 'app/pages/ui/icons/icons.html', 17 | controller: 'IconsPageCtrl', 18 | title: 'Icons', 19 | sidebarMeta: { 20 | order: 200, 21 | }, 22 | }); 23 | } 24 | 25 | })(); 26 | -------------------------------------------------------------------------------- /src/app/pages/ui/icons/widgets/fontAwesomeIcons.html: -------------------------------------------------------------------------------- 1 | <div class="row icons-list success awesomeIcons"> 2 | <div class="col-xs-2" ng-repeat="icon in icons.fontAwesomeIcons"><i class="fa {{icon}}"></i></div> 3 | </div> 4 | <a href="http://fortawesome.github.io/Font-Awesome/icons/" target="_blank" class="see-all-icons">See all Font Awesome icons</a> -------------------------------------------------------------------------------- /src/app/pages/ui/icons/widgets/ionicons.html: -------------------------------------------------------------------------------- 1 | <div class="row icons-list primary"> 2 | <div class="col-xs-2" ng-repeat="icon in icons.ionicons"><i class="{{icon}}"></i></div> 3 | </div> 4 | <a href="http://ionicons.com/" target="_blank" class="see-all-icons">See all ionicons icons</a> -------------------------------------------------------------------------------- /src/app/pages/ui/icons/widgets/kameleon.html: -------------------------------------------------------------------------------- 1 | <div class="row clearfix"> 2 | <div class="kameleon-row" ng-repeat="icon in icons.kameleonIcons"> 3 | <div class="kameleon-icon"><img ng-src="{{:: (icon.img | kameleonImg )}}"><span>{{icon.name}}</span></div> 4 | </div> 5 | </div> 6 | 7 | <a href="http://www.kameleon.pics/" target="_blank" class="see-all-icons">See all Kamaleon icons</a> 8 | 9 | -------------------------------------------------------------------------------- /src/app/pages/ui/icons/widgets/kameleonRounded.html: -------------------------------------------------------------------------------- 1 | <div class="row clearfix"> 2 | <div class="kameleon-row" ng-repeat="icon in icons.kameleonRoundedIcons"> 3 | <div class="kameleon-icon with-round-bg {{icon.color}}"><img ng-src="{{::( icon.img | kameleonImg )}}"><span>{{ icon.name }}</span></div> 4 | </div> 5 | </div> 6 | 7 | <a href="http://www.kameleon.pics/" target="_blank" class="see-all-icons">See all Kamaleon icons</a> -------------------------------------------------------------------------------- /src/app/pages/ui/icons/widgets/socicon.html: -------------------------------------------------------------------------------- 1 | <div class="row icons-list danger"> 2 | <div class="col-xs-2" ng-repeat="icon in icons.socicon"><i class="socicon">{{ icon }}</i></div> 3 | </div> 4 | <a href="http://www.socicon.com/chart.php" target="_blank" class="see-all-icons">See all Socicon icons</a> -------------------------------------------------------------------------------- /src/app/pages/ui/modals/ModalsPageCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 18.01.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.notifications') 9 | .controller('ModalsPageCtrl', ModalsPageCtrl); 10 | 11 | /** @ngInject */ 12 | function ModalsPageCtrl($scope, $uibModal, baProgressModal) { 13 | $scope.open = function (page, size) { 14 | $uibModal.open({ 15 | animation: true, 16 | templateUrl: page, 17 | size: size, 18 | resolve: { 19 | items: function () { 20 | return $scope.items; 21 | } 22 | } 23 | }); 24 | }; 25 | $scope.openProgressDialog = baProgressModal.open; 26 | } 27 | 28 | 29 | })(); 30 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/modalTemplates/basicModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content"> 2 | <div class="modal-header"> 3 | <button type="button" class="close" ng-click="$dismiss()" aria-label="Close"> 4 | <em class="ion-ios-close-empty sn-link-close"></em> 5 | </button> 6 | <h4 class="modal-title" id="myModalLabel">Modal title</h4> 7 | </div> 8 | <div class="modal-body"> 9 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet 10 | dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper 11 | suscipit lobortis nisl ut aliquip ex ea commodo consequat. 12 | </div> 13 | <div class="modal-footer"> 14 | <button type="button" class="btn btn-primary" ng-click="$dismiss()">Save changes</button> 15 | </div> 16 | </div> 17 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/modalTemplates/dangerModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content"> 2 | <div class="modal-header bg-danger"> 3 | <i class="ion-flame modal-icon"></i><span> Error</span> 4 | </div> 5 | <div class="modal-body text-center">Your information hasn't been saved!</div> 6 | <div class="modal-footer"> 7 | <button type="button" class="btn btn-danger" ng-click="$dismiss()">OK</button> 8 | </div> 9 | </div> 10 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/modalTemplates/infoModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content"> 2 | <div class="modal-header bg-info"> 3 | <i class="ion-information-circled modal-icon"></i><span> Information</span> 4 | </div> 5 | <div class="modal-body text-center">You've got a new email!</div> 6 | <div class="modal-footer"> 7 | <button type="button" class="btn btn-info" ng-click="$dismiss()">OK</button> 8 | </div> 9 | </div> 10 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/modalTemplates/largeModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content"> 2 | <div class="modal-header"> 3 | <button type="button" class="close" ng-click="$dismiss()" aria-label="Close"> 4 | <em class="ion-ios-close-empty sn-link-close"></em> 5 | </button> 6 | <h4 class="modal-title">Modal title</h4> 7 | </div> 8 | <div class="modal-body"> 9 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet 10 | dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper 11 | suscipit lobortis nisl ut aliquip ex ea commodo consequat. 12 | </div> 13 | <div class="modal-footer"> 14 | <button type="button" class="btn btn-primary" ng-click="$dismiss()">Save changes</button> 15 | </div> 16 | </div> 17 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/modalTemplates/smallModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content"> 2 | <div class="modal-header"> 3 | <button type="button" class="close" ng-click="$dismiss()" aria-label="Close"> 4 | <em class="ion-ios-close-empty sn-link-close"></em> 5 | </button> 6 | <h4 class="modal-title">Modal title</h4> 7 | </div> 8 | <div class="modal-body"> 9 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet 10 | dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper 11 | suscipit lobortis nisl ut aliquip ex ea commodo consequat. 12 | </div> 13 | <div class="modal-footer"> 14 | <button type="button" class="btn btn-primary" ng-click="$dismiss()">Save changes</button> 15 | </div> 16 | </div> 17 | 18 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/modalTemplates/successModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content"> 2 | <div class="modal-header bg-success"> 3 | <i class="ion-checkmark modal-icon"></i><span> Success</span> 4 | </div> 5 | <div class="modal-body text-center">Your information has been saved successfully</div> 6 | <div class="modal-footer"> 7 | <button type="button" class="btn btn-success" ng-click="$dismiss()">OK</button> 8 | </div> 9 | </div> 10 | 11 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/modalTemplates/warningModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content"> 2 | <div class="modal-header bg-warning"> 3 | <i class="ion-android-warning modal-icon"></i><span> Warning</span> 4 | </div> 5 | <div class="modal-body text-center">Your computer is about to explode!</div> 6 | <div class="modal-footer"> 7 | <button type="button" class="btn btn-warning" ng-click="$dismiss()">OK</button> 8 | </div> 9 | </div> 10 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/modals.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.modals', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.modals', { 15 | url: '/modals', 16 | templateUrl: 'app/pages/ui/modals/modals.html', 17 | controller: 'ModalsPageCtrl', 18 | title: 'Modals', 19 | sidebarMeta: { 20 | order: 300, 21 | }, 22 | }); 23 | } 24 | 25 | })(); 26 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/notifications/NotificationsCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.modals') 9 | .controller('NotificationsCtrl', NotificationsCtrl); 10 | 11 | /** @ngInject */ 12 | function NotificationsCtrl($scope, toastr) { 13 | $scope.showSuccessMsg = function() { 14 | toastr.success('Your information has been saved successfully!'); 15 | }; 16 | 17 | $scope.showInfoMsg = function() { 18 | toastr.info("You've got a new email!", 'Information'); 19 | }; 20 | 21 | $scope.showErrorMsg = function() { 22 | toastr.error("Your information hasn't been saved!", 'Error'); 23 | }; 24 | 25 | $scope.showWarningMsg = function() { 26 | toastr.warning('Your computer is about to explode!', 'Warning'); 27 | }; 28 | } 29 | 30 | })(); 31 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/notifications/notifications.html: -------------------------------------------------------------------------------- 1 | <div class="modal-buttons same-width clearfix" ng-controller="NotificationsCtrl"> 2 | <button type="button" class="btn btn-success" ng-click="showSuccessMsg()">Success Notification</button> 3 | <button type="button" class="btn btn-info" ng-click="showInfoMsg()">Info Notification</button> 4 | <button type="button" class="btn btn-warning" ng-click="showWarningMsg()">Warning Notification</button> 5 | <button type="button" class="btn btn-danger" ng-click="showErrorMsg()">Danger Notification</button> 6 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/modals/progressModal/ProgressModalCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by n.poltoratsky 3 | * on 24.06.2016. 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.modals') 9 | .controller('ProgressModalCtrl', ProgressModalCtrl); 10 | 11 | function ProgressModalCtrl($timeout, baProgressModal) { 12 | 13 | baProgressModal.setProgress(0); 14 | 15 | (function changeValue() { 16 | if (baProgressModal.getProgress() >= 100) { 17 | baProgressModal.close(); 18 | } else { 19 | baProgressModal.setProgress(baProgressModal.getProgress() + 10); 20 | $timeout(changeValue, 300); 21 | } 22 | })(); 23 | } 24 | 25 | })(); 26 | -------------------------------------------------------------------------------- /src/app/pages/ui/modals/progressModal/progressModal.html: -------------------------------------------------------------------------------- 1 | <div class="modal-content" ng-controller="ProgressModalCtrl"> 2 | <div class="modal-body"> 3 | <progress-bar-round> 4 | </progress-bar-round> 5 | </div> 6 | <div class="modal-footer"> 7 | </div> 8 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/notifications/notifications.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.notifications', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.notifications', { 15 | url: '/notifications', 16 | templateUrl: 'app/pages/ui/notifications/notifications.html', 17 | controller: 'NotificationsPageCtrl', 18 | title: 'Notifications', 19 | sidebarMeta: { 20 | order: 700, 21 | }, 22 | }); 23 | } 24 | 25 | })(); 26 | -------------------------------------------------------------------------------- /src/app/pages/ui/panels/panels.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 23.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.panels', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.panels', { 15 | url: '/panels', 16 | templateUrl: 'app/pages/ui/panels/panels.html', 17 | controller: 'NotificationsPageCtrl', 18 | title: 'Panels', 19 | sidebarMeta: { 20 | order: 1100, 21 | }, 22 | }); 23 | } 24 | 25 | })(); 26 | -------------------------------------------------------------------------------- /src/app/pages/ui/progressBars/progressBars.html: -------------------------------------------------------------------------------- 1 | <div class="widgets"> 2 | 3 | <div class="row"> 4 | <div class="col-md-6"> 5 | <div 6 | ba-panel 7 | ba-panel-title="Basic" 8 | ba-panel-class="with-scroll"> 9 | <div ng-include="'app/pages/ui/progressBars/widgets/basic.html'"></div> 10 | </div> 11 | <div 12 | ba-panel 13 | ba-panel-title="Striped" 14 | ba-panel-class="with-scroll"> 15 | <div ng-include="'app/pages/ui/progressBars/widgets/striped.html'"></div> 16 | </div> 17 | </div> 18 | <div class="col-md-6"> 19 | <div 20 | ba-panel 21 | ba-panel-title="With label" 22 | ba-panel-class="with-scroll"> 23 | <div ng-include="'app/pages/ui/progressBars/widgets/label.html'"></div> 24 | </div> 25 | <div 26 | ba-panel 27 | ba-panel-title="Animated" 28 | ba-panel-class="with-scroll"> 29 | <div ng-include="'app/pages/ui/progressBars/widgets/animated.html'"></div> 30 | </div> 31 | </div> 32 | </div> 33 | 34 | <div class="row"> 35 | <div class="col-md-12" 36 | ba-panel 37 | ba-panel-title="Stacked" 38 | ba-panel-class="with-scroll"> 39 | <div ng-include="'app/pages/ui/progressBars/widgets/stacked.html'"></div> 40 | </div> 41 | </div> 42 | 43 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/progressBars/progressBars.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.progressBars', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.progressBars', { 15 | url: '/progressBars', 16 | templateUrl: 'app/pages/ui/progressBars/progressBars.html', 17 | title: 'Progress Bars', 18 | sidebarMeta: { 19 | order: 600, 20 | }, 21 | }); 22 | } 23 | 24 | })(); 25 | -------------------------------------------------------------------------------- /src/app/pages/ui/progressBars/widgets/animated.html: -------------------------------------------------------------------------------- 1 | <div class="progress"> 2 | <div class="progress-bar progress-bar-success progress-bar-striped active" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%"> 3 | <span class="sr-only">40% Complete (success)</span> 4 | </div> 5 | </div> 6 | <div class="progress"> 7 | <div class="progress-bar progress-bar-info progress-bar-striped active" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%"> 8 | <span class="sr-only">20% Complete</span> 9 | </div> 10 | </div> 11 | <div class="progress"> 12 | <div class="progress-bar progress-bar-warning progress-bar-striped active" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%"> 13 | <span class="sr-only">60% Complete (warning)</span> 14 | </div> 15 | </div> 16 | <div class="progress"> 17 | <div class="progress-bar progress-bar-danger progress-bar-striped active" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"> 18 | <span class="sr-only">80% Complete (danger)</span> 19 | </div> 20 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/progressBars/widgets/basic.html: -------------------------------------------------------------------------------- 1 | <div class="progress"> 2 | <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%"> 3 | <span class="sr-only">40% Complete (success)</span> 4 | </div> 5 | </div> 6 | <div class="progress"> 7 | <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%"> 8 | <span class="sr-only">20% Complete</span> 9 | </div> 10 | </div> 11 | <div class="progress"> 12 | <div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%"> 13 | <span class="sr-only">60% Complete (warning)</span> 14 | </div> 15 | </div> 16 | <div class="progress"> 17 | <div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"> 18 | <span class="sr-only">80% Complete (danger)</span> 19 | </div> 20 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/progressBars/widgets/label.html: -------------------------------------------------------------------------------- 1 | <div class="progress"> 2 | <div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%"> 3 | 40% Complete (success) 4 | </div> 5 | </div> 6 | <div class="progress"> 7 | <div class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%"> 8 | 20% Complete 9 | </div> 10 | </div> 11 | <div class="progress"> 12 | <div class="progress-bar progress-bar-warning" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%"> 13 | 60% Complete (warning) 14 | </div> 15 | </div> 16 | <div class="progress"> 17 | <div class="progress-bar progress-bar-danger" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"> 18 | 80% Complete (danger) 19 | </div> 20 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/progressBars/widgets/stacked.html: -------------------------------------------------------------------------------- 1 | <div class="progress"> 2 | <div class="progress-bar progress-bar-success" style="width: 35%"> 3 | <span class="sr-only">35% Complete (success)</span> 4 | </div> 5 | <div class="progress-bar progress-bar-warning progress-bar-striped" style="width: 20%"> 6 | <span class="sr-only">20% Complete (warning)</span> 7 | </div> 8 | <div class="progress-bar progress-bar-danger" style="width: 10%"> 9 | <span class="sr-only">10% Complete (danger)</span> 10 | </div> 11 | <div class="progress-bar progress-bar-info progress-bar-striped active" style="width: 20%"> 12 | <span class="sr-only">20% Complete (warning)</span> 13 | </div> 14 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/progressBars/widgets/striped.html: -------------------------------------------------------------------------------- 1 | <div class="progress"> 2 | <div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%"> 3 | <span class="sr-only">40% Complete (success)</span> 4 | </div> 5 | </div> 6 | <div class="progress"> 7 | <div class="progress-bar progress-bar-info progress-bar-striped" role="progressbar" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%"> 8 | <span class="sr-only">20% Complete</span> 9 | </div> 10 | </div> 11 | <div class="progress"> 12 | <div class="progress-bar progress-bar-warning progress-bar-striped" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%"> 13 | <span class="sr-only">60% Complete (warning)</span> 14 | </div> 15 | </div> 16 | <div class="progress"> 17 | <div class="progress-bar progress-bar-danger progress-bar-striped" role="progressbar" aria-valuenow="80" aria-valuemin="0" aria-valuemax="100" style="width: 80%"> 18 | <span class="sr-only">80% Complete (danger)</span> 19 | </div> 20 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/slider/slider.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12/22/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.slider', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.slider', { 15 | url: '/slider', 16 | templateUrl: 'app/pages/ui/slider/slider.html', 17 | title: 'Sliders', 18 | sidebarMeta: { 19 | order: 1000, 20 | }, 21 | }); 22 | } 23 | 24 | })(); 25 | -------------------------------------------------------------------------------- /src/app/pages/ui/tabs/contextualAccordion.html: -------------------------------------------------------------------------------- 1 | <uib-accordion> 2 | <uib-accordion-group heading="Primary" panel-class="panel-primary bootstrap-panel accordion-panel"> 3 | Primary <i class="ion-heart"></i> 4 | </uib-accordion-group> 5 | <uib-accordion-group heading="Success" panel-class="panel-success bootstrap-panel accordion-panel"> 6 | Success <i class="ion-checkmark-round"></i> 7 | </uib-accordion-group> 8 | <uib-accordion-group heading="Info" panel-class="panel-info bootstrap-panel accordion-panel"> 9 | Info <i class="ion-information-circled"></i> 10 | </uib-accordion-group> 11 | <uib-accordion-group heading="Warning" panel-class="panel-warning bootstrap-panel accordion-panel"> 12 | Warning <i class="ion-alert"></i> 13 | </uib-accordion-group> 14 | <uib-accordion-group heading="Danger" panel-class="panel-danger bootstrap-panel accordion-panel"> 15 | Danger <i class="ion-nuclear"></i> 16 | </uib-accordion-group> 17 | </uib-accordion> -------------------------------------------------------------------------------- /src/app/pages/ui/tabs/sampleAccordion.html: -------------------------------------------------------------------------------- 1 | <uib-accordion> 2 | <uib-accordion-group is-open="true" heading="Static Header, initially expanded" panel-class="bootstrap-panel accordion-panel panel-default"> 3 | This content is straight in the template. 4 | </uib-accordion-group> 5 | <uib-accordion-group heading="Dynamic Body Content" panel-class="bootstrap-panel accordion-panel panel-default"> 6 | <p>The body of the uib-accordion group grows to fit the contents</p> 7 | <button type="button" class="btn btn-primary btn-sm">Add Item</button> 8 | </uib-accordion-group> 9 | <uib-accordion-group heading="Custom template" panel-class="bootstrap-panel accordion-panel panel-default"> 10 | Hello 11 | </uib-accordion-group> 12 | <uib-accordion-group panel-class="bootstrap-panel accordion-panel panel-default"> 13 | <uib-accordion-heading> 14 | I can have markup, too! <i class="fa pull-right ion-settings"></i> 15 | </uib-accordion-heading> 16 | This is just some content to illustrate fancy headings. 17 | </uib-accordion-group> 18 | </uib-accordion> -------------------------------------------------------------------------------- /src/app/pages/ui/tabs/tabs.html: -------------------------------------------------------------------------------- 1 | <div> 2 | <div class="row"> 3 | <div class="col-md-6"> 4 | <div 5 | ba-panel 6 | ba-panel-class="with-scroll horizontal-tabs tabs-panel medium-panel"> 7 | <div ng-include="'app/pages/ui/tabs/mainTabs.html'"></div> 8 | </div> 9 | </div> 10 | <div class="col-md-6 tabset-group" ng-include="'app/pages/ui/tabs/sideTabs.html'"></div> 11 | </div> 12 | <div class="row accordions-row"> 13 | <div class="col-md-6" ng-include="'app/pages/ui/tabs/sampleAccordion.html'"></div> 14 | <div class="col-md-6" ng-include="'app/pages/ui/tabs/contextualAccordion.html'"></div> 15 | </div> 16 | </div> -------------------------------------------------------------------------------- /src/app/pages/ui/tabs/tabs.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 21.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.tabs', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.tabs', { 15 | url: '/tabs', 16 | templateUrl: 'app/pages/ui/tabs/tabs.html', 17 | title: 'Tabs & Accordions', 18 | sidebarMeta: { 19 | order: 800, 20 | }, 21 | }); 22 | } 23 | 24 | })(); 25 | -------------------------------------------------------------------------------- /src/app/pages/ui/typography/typography.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui.typography', []) 9 | .config(routeConfig); 10 | 11 | /** @ngInject */ 12 | function routeConfig($stateProvider) { 13 | $stateProvider 14 | .state('ui.typography', { 15 | url: '/typography', 16 | templateUrl: 'app/pages/ui/typography/typography.html', 17 | title: 'Typography', 18 | sidebarMeta: { 19 | order: 0, 20 | }, 21 | }); 22 | } 23 | 24 | })(); 25 | -------------------------------------------------------------------------------- /src/app/pages/ui/ui.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author k.danovsky 3 | * created on 12.01.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.pages.ui', [ 9 | 'BlurAdmin.pages.ui.typography', 10 | 'BlurAdmin.pages.ui.buttons', 11 | 'BlurAdmin.pages.ui.icons', 12 | 'BlurAdmin.pages.ui.modals', 13 | 'BlurAdmin.pages.ui.grid', 14 | 'BlurAdmin.pages.ui.alerts', 15 | 'BlurAdmin.pages.ui.progressBars', 16 | 'BlurAdmin.pages.ui.notifications', 17 | 'BlurAdmin.pages.ui.tabs', 18 | 'BlurAdmin.pages.ui.slider', 19 | 'BlurAdmin.pages.ui.panels', 20 | ]) 21 | .config(routeConfig); 22 | 23 | /** @ngInject */ 24 | function routeConfig($stateProvider) { 25 | $stateProvider 26 | .state('ui', { 27 | url: '/ui', 28 | template : '<ui-view autoscroll="true" autoscroll-body-top></ui-view>', 29 | abstract: true, 30 | title: 'UI Features', 31 | sidebarMeta: { 32 | icon: 'ion-android-laptop', 33 | order: 200, 34 | }, 35 | }); 36 | } 37 | 38 | })(); 39 | -------------------------------------------------------------------------------- /src/app/theme/components/baPanel/baPanel.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 23.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | /** 9 | * Includes basic panel layout inside of current element. 10 | */ 11 | angular.module('BlurAdmin.theme') 12 | .directive('baPanel', baPanel); 13 | 14 | /** @ngInject */ 15 | function baPanel(baPanel, baConfig) { 16 | return angular.extend({}, baPanel, { 17 | template: function(el, attrs) { 18 | var res = '<div class="panel ' + (baConfig.theme.blur ? 'panel-blur' : '') + ' full-invisible ' + (attrs.baPanelClass || ''); 19 | res += '" zoom-in ' + (baConfig.theme.blur ? 'ba-panel-blur' : '') + '>'; 20 | res += baPanel.template(el, attrs); 21 | res += '</div>'; 22 | return res; 23 | } 24 | }); 25 | } 26 | })(); 27 | -------------------------------------------------------------------------------- /src/app/theme/components/baPanel/baPanel.service.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 23.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .factory('baPanel', baPanel); 10 | 11 | /** @ngInject */ 12 | function baPanel() { 13 | 14 | /** Base baPanel directive */ 15 | return { 16 | restrict: 'A', 17 | transclude: true, 18 | template: function(elem, attrs) { 19 | var res = '<div class="panel-body" ng-transclude></div>'; 20 | if (attrs.baPanelTitle) { 21 | var titleTpl = '<div class="panel-heading clearfix"><h3 class="panel-title">' + attrs.baPanelTitle + '</h3></div>'; 22 | res = titleTpl + res; // title should be before 23 | } 24 | 25 | return res; 26 | } 27 | }; 28 | } 29 | 30 | })(); 31 | -------------------------------------------------------------------------------- /src/app/theme/components/baPanel/baPanelBlur.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 15.01.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .directive('baPanelBlur', baPanelBlur); 10 | 11 | /** @ngInject */ 12 | function baPanelBlur(baPanelBlurHelper, $window, $rootScope) { 13 | var bodyBgSize; 14 | 15 | baPanelBlurHelper.bodyBgLoad().then(function() { 16 | bodyBgSize = baPanelBlurHelper.getBodyBgImageSizes(); 17 | }); 18 | 19 | $window.addEventListener('resize', function() { 20 | bodyBgSize = baPanelBlurHelper.getBodyBgImageSizes(); 21 | }); 22 | 23 | return { 24 | restrict: 'A', 25 | link: function($scope, elem) { 26 | if(!$rootScope.$isMobile) { 27 | baPanelBlurHelper.bodyBgLoad().then(function () { 28 | setTimeout(recalculatePanelStyle); 29 | }); 30 | $window.addEventListener('resize', recalculatePanelStyle); 31 | 32 | $scope.$on('$destroy', function () { 33 | $window.removeEventListener('resize', recalculatePanelStyle); 34 | }); 35 | } 36 | 37 | function recalculatePanelStyle() { 38 | if (!bodyBgSize) { 39 | return; 40 | } 41 | elem.css({ 42 | backgroundSize: Math.round(bodyBgSize.width) + 'px ' + Math.round(bodyBgSize.height) + 'px', 43 | backgroundPosition: Math.floor(bodyBgSize.positionX) + 'px ' + Math.floor(bodyBgSize.positionY) + 'px' 44 | }); 45 | } 46 | 47 | } 48 | }; 49 | } 50 | 51 | })(); 52 | -------------------------------------------------------------------------------- /src/app/theme/components/baPanel/baPanelBlurHelper.service.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 15.01.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .service('baPanelBlurHelper', baPanelBlurHelper); 10 | 11 | /** @ngInject */ 12 | function baPanelBlurHelper($q) { 13 | var res = $q.defer(); 14 | var computedStyle = getComputedStyle(document.body, ':before'); 15 | var image = new Image(); 16 | image.src = computedStyle.backgroundImage.replace(/url\((['"])?(.*?)\1\)/gi, '$2'); 17 | image.onerror = function() { 18 | res.reject(); 19 | }; 20 | image.onload = function() { 21 | res.resolve(); 22 | }; 23 | 24 | this.bodyBgLoad = function() { 25 | return res.promise; 26 | }; 27 | 28 | this.getBodyBgImageSizes = function() { 29 | var elemW = document.documentElement.clientWidth; 30 | var elemH = document.documentElement.clientHeight; 31 | if(elemW <= 640) return; 32 | var imgRatio = (image.height / image.width); // original img ratio 33 | var containerRatio = (elemH / elemW); // container ratio 34 | 35 | var finalHeight, finalWidth; 36 | if (containerRatio > imgRatio) { 37 | finalHeight = elemH; 38 | finalWidth = (elemH / imgRatio); 39 | } else { 40 | finalWidth = elemW; 41 | finalHeight = (elemW * imgRatio); 42 | } 43 | return { width: finalWidth, height: finalHeight, positionX: (elemW - finalWidth)/2, positionY: (elemH - finalHeight)/2}; 44 | }; 45 | } 46 | 47 | })(); 48 | -------------------------------------------------------------------------------- /src/app/theme/components/baPanel/baPanelSelf.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 23.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | /** 9 | * Represents current element as panel, adding all necessary classes. 10 | */ 11 | angular.module('BlurAdmin.theme') 12 | .directive('baPanelSelf', baPanelSelf); 13 | 14 | /** @ngInject */ 15 | function baPanelSelf(baPanel) { 16 | return angular.extend({}, baPanel, { 17 | link: function(scope, el, attrs) { 18 | el.addClass('panel panel-white'); 19 | if (attrs.baPanelClass) { 20 | el.addClass(attrs.baPanelClass); 21 | } 22 | } 23 | }); 24 | } 25 | 26 | })(); 27 | -------------------------------------------------------------------------------- /src/app/theme/components/baSidebar/BaSidebarCtrl.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.components') 9 | .controller('BaSidebarCtrl', BaSidebarCtrl); 10 | 11 | /** @ngInject */ 12 | function BaSidebarCtrl($scope, baSidebarService) { 13 | 14 | $scope.menuItems = baSidebarService.getMenuItems(); 15 | $scope.defaultSidebarState = $scope.menuItems[0].stateRef; 16 | 17 | $scope.hoverItem = function ($event) { 18 | $scope.showHoverElem = true; 19 | $scope.hoverElemHeight = $event.currentTarget.clientHeight; 20 | var menuTopValue = 66; 21 | $scope.hoverElemTop = $event.currentTarget.getBoundingClientRect().top - menuTopValue; 22 | }; 23 | 24 | $scope.$on('$stateChangeSuccess', function () { 25 | if (baSidebarService.canSidebarBeHidden()) { 26 | baSidebarService.setMenuCollapsed(true); 27 | } 28 | }); 29 | } 30 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/baWizard/baWizard.directive.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | angular.module('BlurAdmin.theme.components') 5 | .directive('baWizard', baWizard); 6 | 7 | /** @ngInject */ 8 | function baWizard() { 9 | return { 10 | restrict: 'E', 11 | transclude: true, 12 | templateUrl: 'app/theme/components/baWizard/baWizard.html', 13 | controllerAs: '$baWizardController', 14 | controller: 'baWizardCtrl' 15 | } 16 | } 17 | })(); 18 | -------------------------------------------------------------------------------- /src/app/theme/components/baWizard/baWizard.html: -------------------------------------------------------------------------------- 1 | <div class="ba-wizard"> 2 | <div class="ba-wizard-navigation-container"> 3 | <div ng-repeat="t in $baWizardController.tabs" class="ba-wizard-navigation {{$baWizardController.tabNum == $index ? 'active' : ''}}" ng-click="$baWizardController.selectTab($index)"> 4 | {{t.title}} 5 | </div> 6 | </div> 7 | 8 | <div class="progress ba-wizard-progress"> 9 | <div class="progress-bar progress-bar-danger active" role="progressbar" 10 | aria-valuemin="0" aria-valuemax="100" ng-style="{width: $baWizardController.progress + '%'}"> 11 | </div> 12 | </div> 13 | 14 | <div class="steps" ng-transclude></div> 15 | 16 | <nav> 17 | <ul class="pager ba-wizard-pager"> 18 | <li class="previous"><button ng-disabled="$baWizardController.isFirstTab()" ng-click="$baWizardController.previousTab()" type="button" class=" btn btn-primary"><span aria-hidden="true">←</span> previous</button></li> 19 | <li class="next"> <button ng-disabled="$baWizardController.isLastTab()" ng-click="$baWizardController.nextTab()" type="button" class="btn btn-primary">next <span aria-hidden="true">→</span></button></li> 20 | </ul> 21 | </nav> 22 | </div> 23 | -------------------------------------------------------------------------------- /src/app/theme/components/baWizard/baWizardCtrl.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | angular.module('BlurAdmin.theme.components') 5 | .controller('baWizardCtrl', baWizardCtrl); 6 | 7 | /** @ngInject */ 8 | function baWizardCtrl($scope) { 9 | var vm = this; 10 | vm.tabs = []; 11 | 12 | vm.tabNum = 0; 13 | vm.progress = 0; 14 | 15 | vm.addTab = function(tab) { 16 | tab.setPrev(vm.tabs[vm.tabs.length - 1]); 17 | vm.tabs.push(tab); 18 | vm.selectTab(0); 19 | }; 20 | 21 | $scope.$watch(angular.bind(vm, function () {return vm.tabNum;}), calcProgress); 22 | 23 | vm.selectTab = function (tabNum) { 24 | vm.tabs[vm.tabNum].submit(); 25 | if (vm.tabs[tabNum].isAvailiable()) { 26 | vm.tabNum = tabNum; 27 | vm.tabs.forEach(function (t, tIndex) { 28 | tIndex == vm.tabNum ? t.select(true) : t.select(false); 29 | }); 30 | } 31 | }; 32 | 33 | vm.isFirstTab = function () { 34 | return vm.tabNum == 0; 35 | }; 36 | 37 | vm.isLastTab = function () { 38 | return vm.tabNum == vm.tabs.length - 1 ; 39 | }; 40 | 41 | vm.nextTab = function () { 42 | vm.selectTab(vm.tabNum + 1) 43 | }; 44 | 45 | vm.previousTab = function () { 46 | vm.selectTab(vm.tabNum - 1) 47 | }; 48 | 49 | function calcProgress() { 50 | vm.progress = ((vm.tabNum + 1) / vm.tabs.length) * 100; 51 | } 52 | } 53 | })(); 54 | 55 | -------------------------------------------------------------------------------- /src/app/theme/components/baWizard/baWizardStep.directive.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | angular.module('BlurAdmin.theme.components') 5 | .directive('baWizardStep', baWizardStep); 6 | 7 | /** @ngInject */ 8 | function baWizardStep() { 9 | return { 10 | restrict: 'E', 11 | transclude: true, 12 | require: '^baWizard', 13 | scope: { 14 | form: '=' 15 | }, 16 | templateUrl: 'app/theme/components/baWizard/baWizardStep.html', 17 | link: function($scope, $element, $attrs, wizard) { 18 | $scope.selected = true; 19 | 20 | var tab = { 21 | title: $attrs.title, 22 | select: select, 23 | submit: submit, 24 | isComplete: isComplete, 25 | isAvailiable: isAvailiable, 26 | prevTab: undefined, 27 | setPrev: setPrev 28 | }; 29 | 30 | wizard.addTab(tab); 31 | 32 | function select(isSelected) { 33 | if (isSelected) { 34 | $scope.selected = true; 35 | } else { 36 | $scope.selected = false; 37 | } 38 | } 39 | 40 | function submit() { 41 | $scope.form && $scope.form.$setSubmitted(true); 42 | } 43 | 44 | function isComplete() { 45 | return $scope.form ? $scope.form.$valid : true; 46 | } 47 | 48 | function isAvailiable() { 49 | return tab.prevTab ? tab.prevTab.isComplete() : true; 50 | } 51 | 52 | function setPrev(pTab) { 53 | tab.prevTab = pTab; 54 | } 55 | } 56 | }; 57 | } 58 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/baWizard/baWizardStep.html: -------------------------------------------------------------------------------- 1 | <section ng-show="selected" class="step" ng-transclude></section> -------------------------------------------------------------------------------- /src/app/theme/components/backTop/backTop.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.components') 9 | .directive('backTop', backTop); 10 | 11 | /** @ngInject */ 12 | function backTop() { 13 | return { 14 | restrict: 'E', 15 | templateUrl: 'app/theme/components/backTop/backTop.html', 16 | controller: function () { 17 | $('#backTop').backTop({ 18 | 'position': 200, 19 | 'speed': 100 20 | }); 21 | } 22 | }; 23 | } 24 | 25 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/backTop/backTop.html: -------------------------------------------------------------------------------- 1 | <i class="fa fa-angle-up back-top" id="backTop" title="Back to Top"></i> 2 | -------------------------------------------------------------------------------- /src/app/theme/components/backTop/lib/jquery.backTop.min.js: -------------------------------------------------------------------------------- 1 | /* Minified js for jQuery BackTop */ 2 | !function(o){o.fn.backTop=function(e){var n=this,i=o.extend({position:400,speed:500,color:"white"},e),t=i.position,c=i.speed,d=i.color;n.addClass("white"==d?"white":"red"==d?"red":"green"==d?"green":"black"),n.css({right:40,bottom:40,position:"fixed"}),o(document).scroll(function(){var e=o(window).scrollTop();e>=t?n.fadeIn(c):n.fadeOut(c)}),n.click(function(){o("html, body").animate({scrollTop:0},{duration:1200})})}}(jQuery); -------------------------------------------------------------------------------- /src/app/theme/components/components.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | /** 6 | * @author v.lugovsky 7 | * created on 16.12.2015 8 | */ 9 | (function () { 10 | 'use strict'; 11 | 12 | angular.module('BlurAdmin.theme.components', []); 13 | 14 | })(); 15 | -------------------------------------------------------------------------------- /src/app/theme/components/contentTop/contentTop.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.components') 9 | .directive('contentTop', contentTop); 10 | 11 | /** @ngInject */ 12 | function contentTop($location, $state) { 13 | return { 14 | restrict: 'E', 15 | templateUrl: 'app/theme/components/contentTop/contentTop.html', 16 | link: function($scope) { 17 | $scope.$watch(function () { 18 | $scope.activePageTitle = $state.current.title; 19 | }); 20 | } 21 | }; 22 | } 23 | 24 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/contentTop/contentTop.html: -------------------------------------------------------------------------------- 1 | <div class="content-top clearfix"> 2 | <h1 class="al-title">{{ activePageTitle }}</h1> 3 | 4 | <ul class="breadcrumb al-breadcrumb"> 5 | <li> 6 | <a href="#/dashboard">Home</a></li> 7 | <li>{{ activePageTitle }}</li> 8 | </ul> 9 | </div> -------------------------------------------------------------------------------- /src/app/theme/components/msgCenter/msgCenter.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.components') 9 | .directive('msgCenter', msgCenter); 10 | 11 | /** @ngInject */ 12 | function msgCenter() { 13 | return { 14 | restrict: 'E', 15 | templateUrl: 'app/theme/components/msgCenter/msgCenter.html', 16 | controller: 'MsgCenterCtrl' 17 | }; 18 | } 19 | 20 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/pageTop/pageTop.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.components') 9 | .directive('pageTop', pageTop); 10 | 11 | /** @ngInject */ 12 | function pageTop() { 13 | return { 14 | restrict: 'E', 15 | templateUrl: 'app/theme/components/pageTop/pageTop.html' 16 | }; 17 | } 18 | 19 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/pageTop/pageTop.html: -------------------------------------------------------------------------------- 1 | <div class="page-top clearfix" scroll-position="scrolled" max-height="50" ng-class="{'scrolled': scrolled}"> 2 | <a href="#/dashboard" class="al-logo clearfix"><span>Blur</span>Admin</a> 3 | <a href class="collapse-menu-link ion-navicon" ba-sidebar-toggle-menu></a> 4 | 5 | <div class="search"> 6 | <i class="ion-ios-search-strong" ng-click="startSearch()"></i> 7 | <input id="searchInput" type="text" placeholder="Search for..."> 8 | </div> 9 | 10 | <div class="user-profile clearfix"> 11 | <div class="al-user-profile" uib-dropdown> 12 | <a uib-dropdown-toggle class="profile-toggle-link"> 13 | <img ng-src="{{::( 'Nasta' | profilePicture )}}"> 14 | </a> 15 | <ul class="top-dropdown-menu profile-dropdown" uib-dropdown-menu> 16 | <li><i class="dropdown-arr"></i></li> 17 | <li><a href="#/profile"><i class="fa fa-user"></i>Profile</a></li> 18 | <li><a href><i class="fa fa-cog"></i>Settings</a></li> 19 | <li><a href class="signout"><i class="fa fa-power-off"></i>Sign out</a></li> 20 | </ul> 21 | </div> 22 | <msg-center></msg-center> 23 | </div> 24 | </div> -------------------------------------------------------------------------------- /src/app/theme/components/progressBarRound/progressBarRound.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by n.poltoratsky 3 | * on 28.06.2016. 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.components') 9 | .directive('progressBarRound', progressBarRound); 10 | 11 | /** @ngInject */ 12 | function progressBarRound(baProgressModal) { 13 | return { 14 | restrict: 'E', 15 | templateUrl: 'app/theme/components/progressBarRound/progressBarRound.html', 16 | link:function($scope, element, attrs) { 17 | $scope.baProgressDialog = baProgressModal; 18 | $scope.$watch(function () { 19 | return baProgressModal.getProgress(); 20 | }, animateBar); 21 | 22 | function animateBar() { 23 | var circle = element.find('#loader')[0]; 24 | circle.setAttribute("stroke-dasharray", baProgressModal.getProgress() * 180 * Math.PI / 100 + ", 20000"); 25 | $scope.progress = baProgressModal.getProgress(); 26 | } 27 | } 28 | } 29 | } 30 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/progressBarRound/progressBarRound.html: -------------------------------------------------------------------------------- 1 | <svg class="center-block progress-bar-round" width="200" height="200"> 2 | <circle cx="100" cy="100" r="90" fill="none" stroke="#F8F8FF" stroke-width="8"/> 3 | <circle cx="100" cy="100" r="90" fill="none" id="loader" class="" 4 | stroke="#209e91" stroke-width="8" stroke-dasharray="0,20000" 5 | transform="rotate(-90,100,100)" stroke-linecap="round"/> 6 | <text text-anchor="middle" class="loading" x="100" y="90">Loading...</text> 7 | <text class="percentage" text-anchor="middle" x="100" y="130">{{progress}}%</text> 8 | </svg> -------------------------------------------------------------------------------- /src/app/theme/components/toastrLibConfig.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 15.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.components') 9 | .config(toastrLibConfig); 10 | 11 | /** @ngInject */ 12 | function toastrLibConfig(toastrConfig) { 13 | angular.extend(toastrConfig, { 14 | closeButton: true, 15 | closeHtml: '<button>×</button>', 16 | timeOut: 5000, 17 | autoDismiss: false, 18 | containerId: 'toast-container', 19 | maxOpened: 0, 20 | newestOnTop: true, 21 | positionClass: 'toast-top-right', 22 | preventDuplicates: false, 23 | preventOpenDuplicates: false, 24 | target: 'body' 25 | }); 26 | } 27 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/widgets/widgets.directive.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.components') 9 | .directive('widgets', widgets); 10 | 11 | /** @ngInject */ 12 | function widgets() { 13 | return { 14 | restrict: 'EA', 15 | scope: { 16 | ngModel: '=' 17 | }, 18 | templateUrl: 'app/theme/components/widgets/widgets.html', 19 | replace: true 20 | }; 21 | } 22 | 23 | })(); -------------------------------------------------------------------------------- /src/app/theme/components/widgets/widgets.html: -------------------------------------------------------------------------------- 1 | <div class="widgets"> 2 | <div ng-repeat="widgetBlock in ngModel" ng-class="{'row': widgetBlock.widgets.length > 1}"> 3 | <div ng-repeat="widgetCol in widgetBlock.widgets" ng-class="{'col-md-6': widgetBlock.widgets.length === 2}" ng-model="widgetCol" class="widgets-block"> 4 | <div ba-panel ba-panel-title="{{::widget.title}}" ng-repeat="widget in widgetCol" ba-panel-class="with-scroll {{widget.panelClass}}"> 5 | <div ng-include="widget.url"></div> 6 | </div> 7 | </div> 8 | </div> 9 | </div> 10 | -------------------------------------------------------------------------------- /src/app/theme/directives/animatedChange.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Change top "Daily Downloads", "Active Users" values with animation effect 3 | */ 4 | (function () { 5 | 'use strict'; 6 | 7 | angular.module('BlurAdmin.theme') 8 | .directive('animatedChange', animatedChange); 9 | 10 | /** @ngInject */ 11 | function animatedChange($timeout) { 12 | return { 13 | link: function (scope, element) { 14 | $timeout(function () { 15 | var newValue = element.attr('new-value'); 16 | var oldvalue = parseInt(element.html()); 17 | 18 | function changeValue(val) { 19 | $timeout(function () { 20 | element.html(val); 21 | }, 30); 22 | } 23 | 24 | if (newValue > oldvalue) { 25 | for (var i = oldvalue; i <= newValue; i++) { 26 | changeValue(i); 27 | } 28 | } else { 29 | for (var j = oldvalue; j >= newValue; j--) { 30 | changeValue(j); 31 | } 32 | } 33 | $timeout(function () { 34 | element.next().find('i').addClass('show-arr'); 35 | }, 500); 36 | }, 3500); 37 | } 38 | }; 39 | } 40 | 41 | })(); -------------------------------------------------------------------------------- /src/app/theme/directives/autoExpand.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Auto expand textarea field 3 | */ 4 | (function () { 5 | 'use strict'; 6 | 7 | angular.module('BlurAdmin.theme') 8 | .directive('autoExpand', autoExpand); 9 | 10 | /** @ngInject */ 11 | function autoExpand() { 12 | return { 13 | restrict: 'A', 14 | link: function ($scope, elem) { 15 | elem.bind('keydown', function ($event) { 16 | var element = $event.target; 17 | $(element).height(0); 18 | var height = $(element)[0].scrollHeight; 19 | height = (height < 16) ? 16 : height; 20 | $(element).height(height); 21 | }); 22 | 23 | // Expand the textarea as soon as it is added to the DOM 24 | setTimeout(function () { 25 | var element = elem; 26 | $(element).height(0); 27 | var height = $(element)[0].scrollHeight; 28 | height = (height < 16) ? 16 : height; 29 | $(element).height(height); 30 | }, 0) 31 | } 32 | }; 33 | } 34 | 35 | })(); -------------------------------------------------------------------------------- /src/app/theme/directives/autoFocus.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular.module('BlurAdmin.theme') 5 | .directive('autoFocus', autoFocus); 6 | 7 | /** @ngInject */ 8 | function autoFocus($timeout, $parse) { 9 | return { 10 | link: function (scope, element, attrs) { 11 | var model = $parse(attrs.autoFocus); 12 | scope.$watch(model, function (value) { 13 | if (value === true) { 14 | $timeout(function () { 15 | element[0].focus(); 16 | element[0].select(); 17 | }); 18 | } 19 | }); 20 | element.bind('blur', function () { 21 | scope.$apply(model.assign(scope, false)); 22 | }); 23 | } 24 | }; 25 | } 26 | 27 | })(); -------------------------------------------------------------------------------- /src/app/theme/directives/includeWithScope.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .directive('includeWithScope', includeWithScope); 10 | 11 | /** @ngInject */ 12 | function includeWithScope() { 13 | return { 14 | restrict: 'AE', 15 | templateUrl: function(ele, attrs) { 16 | return attrs.includeWithScope; 17 | } 18 | }; 19 | } 20 | 21 | })(); 22 | -------------------------------------------------------------------------------- /src/app/theme/directives/ngFileSelect.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular.module('BlurAdmin.theme') 5 | .directive('ngFileSelect', ngFileSelect); 6 | 7 | /** @ngInject */ 8 | function ngFileSelect() { 9 | return { 10 | link: function ($scope, el) { 11 | el.bind('change', function (e) { 12 | $scope.file = (e.srcElement || e.target).files[0]; 13 | $scope.getFile(); 14 | }) 15 | } 16 | } 17 | } 18 | 19 | })(); -------------------------------------------------------------------------------- /src/app/theme/directives/scrollPosition.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular.module('BlurAdmin.theme') 5 | .directive('scrollPosition', scrollPosition); 6 | 7 | /** @ngInject */ 8 | function scrollPosition() { 9 | return { 10 | scope: { 11 | scrollPosition: '=', 12 | maxHeight: '=' 13 | }, 14 | link: function (scope) { 15 | $(window).on('scroll', function() { 16 | var scrollTop = $(window).scrollTop() > scope.maxHeight; 17 | if (scrollTop !== scope.prevScrollTop) { 18 | scope.$apply(function() { 19 | scope.scrollPosition = scrollTop; 20 | }); 21 | } 22 | scope.prevScrollTop = scrollTop; 23 | }); 24 | } 25 | }; 26 | } 27 | 28 | })(); -------------------------------------------------------------------------------- /src/app/theme/directives/trackWidth.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | angular.module('BlurAdmin.theme') 5 | .directive('trackWidth', trackWidth); 6 | 7 | /** @ngInject */ 8 | function trackWidth() { 9 | return { 10 | scope: { 11 | trackWidth: '=', 12 | minWidth: '=', 13 | }, 14 | link: function (scope, element) { 15 | scope.trackWidth = $(element).width() < scope.minWidth; 16 | scope.prevTrackWidth = scope.trackWidth; 17 | 18 | $(window).resize(function() { 19 | var trackWidth = $(element).width() < scope.minWidth; 20 | if (trackWidth !== scope.prevTrackWidth) { 21 | scope.$apply(function() { 22 | scope.trackWidth = trackWidth; 23 | }); 24 | } 25 | scope.prevTrackWidth = trackWidth; 26 | }); 27 | } 28 | }; 29 | } 30 | 31 | })(); -------------------------------------------------------------------------------- /src/app/theme/directives/zoomIn.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Animated load block 3 | */ 4 | (function () { 5 | 'use strict'; 6 | 7 | angular.module('BlurAdmin.theme') 8 | .directive('zoomIn', zoomIn); 9 | 10 | /** @ngInject */ 11 | function zoomIn($timeout, $rootScope) { 12 | return { 13 | restrict: 'A', 14 | link: function ($scope, elem) { 15 | var delay = 1000; 16 | 17 | if ($rootScope.$pageFinishedLoading) { 18 | delay = 100; 19 | } 20 | 21 | $timeout(function () { 22 | elem.removeClass('full-invisible'); 23 | elem.addClass('animated zoomIn'); 24 | }, delay); 25 | } 26 | }; 27 | } 28 | 29 | })(); -------------------------------------------------------------------------------- /src/app/theme/filters/image/appImage.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 17.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .filter('appImage', appImage); 10 | 11 | /** @ngInject */ 12 | function appImage(layoutPaths) { 13 | return function(input) { 14 | return layoutPaths.images.root + input; 15 | }; 16 | } 17 | 18 | })(); 19 | -------------------------------------------------------------------------------- /src/app/theme/filters/image/kameleonImg.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 17.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .filter('kameleonImg', kameleonImg); 10 | 11 | /** @ngInject */ 12 | function kameleonImg(layoutPaths) { 13 | return function(input) { 14 | return layoutPaths.images.root + 'theme/icon/kameleon/' + input + '.svg'; 15 | }; 16 | } 17 | 18 | })(); 19 | -------------------------------------------------------------------------------- /src/app/theme/filters/image/profilePicture.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 17.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .filter('profilePicture', profilePicture); 10 | 11 | /** @ngInject */ 12 | function profilePicture(layoutPaths) { 13 | return function(input, ext) { 14 | ext = ext || 'png'; 15 | return layoutPaths.images.profile + input + '.' + ext; 16 | }; 17 | } 18 | 19 | })(); 20 | -------------------------------------------------------------------------------- /src/app/theme/filters/text/removeHtml.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 23.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .filter('plainText', plainText); 10 | 11 | /** @ngInject */ 12 | function plainText() { 13 | return function(text) { 14 | return text ? String(text).replace(/<[^>]+>/gm, '') : ''; 15 | }; 16 | } 17 | 18 | })(); 19 | -------------------------------------------------------------------------------- /src/app/theme/inputs/baSwitcher/baSwitcher.html: -------------------------------------------------------------------------------- 1 | <label class="switcher-container"> 2 | <input type="checkbox" ng-model="switcherValue"> 3 | <div class="switcher" ng-class="::switcherStyle"> 4 | <div class="handle-container"> 5 | <span class="handle handle-on">ON</span> 6 | <span class="handle"></span> 7 | <span class="handle handle-off">OFF</span> 8 | </div> 9 | </div> 10 | </label> -------------------------------------------------------------------------------- /src/app/theme/inputs/baSwitcher/baSwitcher.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 10.12.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.inputs') 9 | .directive('baSwitcher', baSwitcher); 10 | 11 | /** @ngInject */ 12 | function baSwitcher() { 13 | return { 14 | templateUrl: 'app/theme/inputs/baSwitcher/baSwitcher.html', 15 | scope: { 16 | switcherStyle: '@', 17 | switcherValue: '=' 18 | } 19 | }; 20 | } 21 | 22 | })(); 23 | -------------------------------------------------------------------------------- /src/app/theme/inputs/inputs.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 10.12.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme.inputs', []); 9 | 10 | })(); 11 | -------------------------------------------------------------------------------- /src/app/theme/services/baUtil.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 03.05.2016 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .service('baUtil', baUtil); 10 | 11 | /** @ngInject */ 12 | function baUtil() { 13 | 14 | this.isDescendant = function(parent, child) { 15 | var node = child.parentNode; 16 | while (node != null) { 17 | if (node == parent) { 18 | return true; 19 | } 20 | node = node.parentNode; 21 | } 22 | return false; 23 | }; 24 | 25 | this.hexToRGB = function(hex, alpha) { 26 | var r = parseInt( hex.slice(1,3), 16 ); 27 | var g = parseInt( hex.slice(3,5), 16 ); 28 | var b = parseInt( hex.slice(5,7), 16 ); 29 | return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + alpha + ')'; 30 | }; 31 | 32 | this.hasAttr = function (elem, attrName) { 33 | var attr = $(elem).attr(attrName); 34 | return (typeof attr !== typeof undefined && attr !== false); 35 | } 36 | } 37 | })(); 38 | -------------------------------------------------------------------------------- /src/app/theme/services/fileReader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 16.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .service('fileReader', fileReader); 10 | 11 | /** @ngInject */ 12 | function fileReader($q) { 13 | var onLoad = function(reader, deferred, scope) { 14 | return function () { 15 | scope.$apply(function () { 16 | deferred.resolve(reader.result); 17 | }); 18 | }; 19 | }; 20 | 21 | var onError = function (reader, deferred, scope) { 22 | return function () { 23 | scope.$apply(function () { 24 | deferred.reject(reader.result); 25 | }); 26 | }; 27 | }; 28 | 29 | var onProgress = function(reader, scope) { 30 | return function (event) { 31 | scope.$broadcast('fileProgress', 32 | { 33 | total: event.total, 34 | loaded: event.loaded 35 | }); 36 | }; 37 | }; 38 | 39 | var getReader = function(deferred, scope) { 40 | var reader = new FileReader(); 41 | reader.onload = onLoad(reader, deferred, scope); 42 | reader.onerror = onError(reader, deferred, scope); 43 | reader.onprogress = onProgress(reader, scope); 44 | return reader; 45 | }; 46 | 47 | var readAsDataURL = function (file, scope) { 48 | var deferred = $q.defer(); 49 | 50 | var reader = getReader(deferred, scope); 51 | reader.readAsDataURL(file); 52 | 53 | return deferred.promise; 54 | }; 55 | 56 | return { 57 | readAsDataUrl: readAsDataURL 58 | }; 59 | } 60 | })(); -------------------------------------------------------------------------------- /src/app/theme/services/preloader.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 3/1/16 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .service('preloader', preloader); 10 | 11 | /** @ngInject */ 12 | function preloader($q) { 13 | return { 14 | loadImg: function (src) { 15 | var d = $q.defer(); 16 | var img = new Image(); 17 | img.src = src; 18 | img.onload = function(){ 19 | d.resolve(); 20 | }; 21 | return d.promise; 22 | }, 23 | loadAmCharts : function(){ 24 | var d = $q.defer(); 25 | AmCharts.ready(function(){ 26 | d.resolve(); 27 | }); 28 | return d.promise; 29 | } 30 | } 31 | } 32 | 33 | })(); -------------------------------------------------------------------------------- /src/app/theme/services/stopableInterval.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author a.demeshko 3 | * created on 12/21/15 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .service('stopableInterval', stopableInterval); 10 | 11 | /** @ngInject */ 12 | function stopableInterval($window) { 13 | return { 14 | start: function (interval, calback, time) { 15 | function startInterval() { 16 | return interval(calback, time); 17 | } 18 | 19 | var i = startInterval(); 20 | 21 | angular.element($window).bind('focus', function () { 22 | if (i) interval.cancel(i); 23 | i = startInterval(); 24 | }); 25 | 26 | angular.element($window).bind('blur', function () { 27 | if (i) interval.cancel(i); 28 | }); 29 | } 30 | } 31 | } 32 | 33 | })(); -------------------------------------------------------------------------------- /src/app/theme/theme.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by k.danovsky on 13.05.2016. 3 | */ 4 | 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .config(config); 10 | 11 | /** @ngInject */ 12 | function config(baConfigProvider, colorHelper, $provide) { 13 | $provide.decorator('$uiViewScroll', uiViewScrollDecorator); 14 | //baConfigProvider.changeTheme({blur: true}); 15 | // 16 | //baConfigProvider.changeColors({ 17 | // default: 'rgba(#000000, 0.2)', 18 | // defaultText: '#ffffff', 19 | // dashboard: { 20 | // white: '#ffffff', 21 | // }, 22 | //}); 23 | } 24 | 25 | /** @ngInject */ 26 | function uiViewScrollDecorator($delegate, $anchorScroll, baUtil) { 27 | return function (uiViewElement) { 28 | if (baUtil.hasAttr(uiViewElement, "autoscroll-body-top")) { 29 | $anchorScroll(); 30 | } else { 31 | $delegate(uiViewElement); 32 | } 33 | }; 34 | } 35 | })(); 36 | -------------------------------------------------------------------------------- /src/app/theme/theme.module.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovsky 3 | * created on 15.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme', [ 9 | 'toastr', 10 | 'chart.js', 11 | 'angular-chartist', 12 | 'angular.morris-chart', 13 | 'textAngular', 14 | 'BlurAdmin.theme.components', 15 | 'BlurAdmin.theme.inputs' 16 | ]); 17 | 18 | })(); 19 | -------------------------------------------------------------------------------- /src/app/theme/theme.run.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author v.lugovksy 3 | * created on 15.12.2015 4 | */ 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .run(themeRun); 10 | 11 | /** @ngInject */ 12 | function themeRun($timeout, $rootScope, layoutPaths, preloader, $q, baSidebarService, themeLayoutSettings) { 13 | var whatToWait = [ 14 | preloader.loadAmCharts(), 15 | $timeout(3000) 16 | ]; 17 | 18 | var theme = themeLayoutSettings; 19 | if (theme.blur) { 20 | if (theme.mobile) { 21 | whatToWait.unshift(preloader.loadImg(layoutPaths.images.root + 'blur-bg-mobile.jpg')); 22 | } else { 23 | whatToWait.unshift(preloader.loadImg(layoutPaths.images.root + 'blur-bg.jpg')); 24 | whatToWait.unshift(preloader.loadImg(layoutPaths.images.root + 'blur-bg-blurred.jpg')); 25 | } 26 | } 27 | 28 | $q.all(whatToWait).then(function () { 29 | $rootScope.$pageFinishedLoading = true; 30 | }); 31 | 32 | $timeout(function () { 33 | if (!$rootScope.$pageFinishedLoading) { 34 | $rootScope.$pageFinishedLoading = true; 35 | } 36 | }, 7000); 37 | 38 | $rootScope.$baSidebarService = baSidebarService; 39 | } 40 | 41 | })(); -------------------------------------------------------------------------------- /src/app/theme/theme.service.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by k.danovsky on 12.05.2016. 3 | */ 4 | 5 | (function () { 6 | 'use strict'; 7 | 8 | angular.module('BlurAdmin.theme') 9 | .service('themeLayoutSettings', themeLayoutSettings); 10 | 11 | /** @ngInject */ 12 | function themeLayoutSettings(baConfig) { 13 | var isMobile = (/android|webos|iphone|ipad|ipod|blackberry|windows phone/).test(navigator.userAgent.toLowerCase()); 14 | var mobileClass = isMobile ? 'mobile' : ''; 15 | var blurClass = baConfig.theme.blur ? 'blur-theme' : ''; 16 | angular.element(document.body).addClass(mobileClass).addClass(blurClass); 17 | 18 | return { 19 | blur: baConfig.theme.blur, 20 | mobile: isMobile, 21 | } 22 | } 23 | 24 | })(); -------------------------------------------------------------------------------- /src/assets/fonts/socicon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/fonts/socicon.eot -------------------------------------------------------------------------------- /src/assets/fonts/socicon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/fonts/socicon.ttf -------------------------------------------------------------------------------- /src/assets/fonts/socicon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/fonts/socicon.woff -------------------------------------------------------------------------------- /src/assets/fonts/socicon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/fonts/socicon.woff2 -------------------------------------------------------------------------------- /src/assets/img/app/browsers/chrome.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'><svg enable-background="new 0 0 32 32" height="32px" id="Layer_1" version="1.0" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><path d="M16,24.188c-1.625,0-3.104-0.438-4.438-1.312c-1.334-0.875-2.334-2-3-3.375L2,8c-1.375,2.459-2,5.209-2,8 c0,4,1.302,7.49,3.906,10.469c2.604,2.979,5.844,4.76,9.719,5.344l4.641-8.031C17.799,23.919,17.02,24.188,16,24.188z" fill="#4AAE48"/><path d="M10.969,9.531C12.447,8.386,14.125,8,16,8c0.25,0,13.75,0,13.75,0c-1.417-2.416-3.344-4.458-5.781-5.875 C21.531,0.709,18.875,0,16,0c-2.5,0-4.834,0.531-7,1.594C6.833,2.656,4.828,4.203,3.359,6.188L8,14 C8.458,12.209,9.489,10.678,10.969,9.531z" fill="#EA3939"/><path d="M30.797,10H21.5c1.625,1.625,2.688,3.709,2.688,6c0,1.709-0.479,3.271-1.438,4.688L16.188,32 c4.375-0.042,8.104-1.625,11.188-4.75C30.458,24.125,32,20.375,32,16C32,13.959,31.656,11.812,30.797,10z" fill="#FED14B"/><circle cx="16" cy="16" fill="#188FD1" r="6"/></g><g/><g/><g/><g/><g/><g/></svg> -------------------------------------------------------------------------------- /src/assets/img/app/browsers/opera.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'><svg enable-background="new 0 0 32 32" height="32px" id="Layer_1" version="1.0" viewBox="0 0 32 32" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><path d="M26.737,4.375c2.842,2.917,4.264,6.75,4.264,11.5c0,4.334-1.422,8.104-4.264,11.312 C23.895,30.396,20.295,32,15.938,32c-4.316,0-7.885-1.604-10.706-4.812C2.41,23.979,1,20.209,1,15.875 c0-4.75,1.39-8.583,4.171-11.5C7.95,1.459,11.54,0,15.938,0C20.295,0,23.895,1.459,26.737,4.375z M21.291,11.062 c-0.124-1.291-0.373-2.552-0.747-3.781c-0.373-1.229-0.944-2.177-1.711-2.844c-0.769-0.666-1.733-1-2.895-1 c-1.162,0-2.116,0.323-2.863,0.969C12.328,5.053,11.778,6,11.426,7.25S10.835,9.75,10.71,11c-0.124,1.25-0.187,2.771-0.187,4.562 c0,1.125,0.021,2.073,0.062,2.844c0.04,0.771,0.113,1.709,0.218,2.812c0.103,1.104,0.27,2.031,0.498,2.781 c0.228,0.75,0.538,1.49,0.934,2.219c0.394,0.729,0.902,1.281,1.524,1.656s1.348,0.562,2.179,0.562c0.829,0,1.565-0.188,2.21-0.562 c0.643-0.375,1.161-0.927,1.556-1.656C20.098,25.49,20.42,24.75,20.669,24s0.436-1.677,0.56-2.781 c0.125-1.104,0.197-2.052,0.219-2.844c0.02-0.791,0.03-1.729,0.03-2.812C21.478,13.854,21.416,12.354,21.291,11.062z" fill="#EA3939"/></g><g/><g/><g/><g/><g/><g/></svg> -------------------------------------------------------------------------------- /src/assets/img/app/browsers/safari.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" ?><svg enable-background="new 0.907 -0.205 32 32" height="32" viewBox="0.907 -0.205 32 32" width="32" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M16.907-.205c-8.836 0-16 7.164-16 16s7.164 16 16 16 16-7.164 16-16-7.164-16-16-16zm0 29c-7.18 0-13-5.82-13-13s5.82-13 13-13 13 5.82 13 13-5.82 13-13 13z" fill="#26A6D1" fill-rule="evenodd"/><path clip-rule="evenodd" d="M25.221 7.48l-6.192 10.436-4.242-4.243 10.434-6.193z" fill="#E2574C" fill-rule="evenodd"/><path clip-rule="evenodd" d="M8.594 24.11l10.435-6.193-4.242-4.243-6.193 10.436z" fill="#E4E7E7" fill-rule="evenodd"/></svg> -------------------------------------------------------------------------------- /src/assets/img/app/feed/genom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/feed/genom.png -------------------------------------------------------------------------------- /src/assets/img/app/feed/my-little-kitten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/feed/my-little-kitten.png -------------------------------------------------------------------------------- /src/assets/img/app/feed/new-york-location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/feed/new-york-location.png -------------------------------------------------------------------------------- /src/assets/img/app/feed/vader-and-me-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/feed/vader-and-me-preview.png -------------------------------------------------------------------------------- /src/assets/img/app/my-app-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/my-app-logo.png -------------------------------------------------------------------------------- /src/assets/img/app/profile/Alexander.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/profile/Alexander.png -------------------------------------------------------------------------------- /src/assets/img/app/profile/Andrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/profile/Andrey.png -------------------------------------------------------------------------------- /src/assets/img/app/profile/Kostya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/profile/Kostya.png -------------------------------------------------------------------------------- /src/assets/img/app/profile/Nasta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/profile/Nasta.png -------------------------------------------------------------------------------- /src/assets/img/app/profile/Nick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/profile/Nick.png -------------------------------------------------------------------------------- /src/assets/img/app/profile/Vlad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/profile/Vlad.png -------------------------------------------------------------------------------- /src/assets/img/app/skin-thumbnails/01_default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/skin-thumbnails/01_default.jpg -------------------------------------------------------------------------------- /src/assets/img/app/skin-thumbnails/02_transparent.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/skin-thumbnails/02_transparent.jpg -------------------------------------------------------------------------------- /src/assets/img/app/skin-thumbnails/03_blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/skin-thumbnails/03_blue.jpg -------------------------------------------------------------------------------- /src/assets/img/app/skin-thumbnails/04_peachy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/skin-thumbnails/04_peachy.jpg -------------------------------------------------------------------------------- /src/assets/img/app/skin-thumbnails/05_material.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/skin-thumbnails/05_material.jpg -------------------------------------------------------------------------------- /src/assets/img/app/skin-thumbnails/06_transblue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/skin-thumbnails/06_transblue.jpg -------------------------------------------------------------------------------- /src/assets/img/app/todo/check-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/todo/check-icon.png -------------------------------------------------------------------------------- /src/assets/img/app/typography/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/typography/banner.png -------------------------------------------------------------------------------- /src/assets/img/app/typography/typo01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/typography/typo01.png -------------------------------------------------------------------------------- /src/assets/img/app/typography/typo03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/typography/typo03.png -------------------------------------------------------------------------------- /src/assets/img/app/typography/typo04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/typography/typo04.png -------------------------------------------------------------------------------- /src/assets/img/app/typography/typo05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/typography/typo05.png -------------------------------------------------------------------------------- /src/assets/img/app/typography/typo06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/typography/typo06.png -------------------------------------------------------------------------------- /src/assets/img/app/typography/typo07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/app/typography/typo07.png -------------------------------------------------------------------------------- /src/assets/img/arrow-green-up.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | width="5px" height="13px" viewBox="0 0 5 13" enable-background="new 0 0 5 13" xml:space="preserve"> 6 | <g> 7 | <g> 8 | <path fill="#85BA54" d="M0,2.513C0.613,1.95,1.291,1.569,1.611,1.16C1.931,0.75,2.167,0.363,2.325,0h0.292 9 | c0.199,0.419,0.456,0.825,0.771,1.217C3.703,1.61,4.391,1.961,5,2.507v0.487H3V13H2V2.995H0V2.513z"/> 10 | </g> 11 | </g> 12 | <g display="none"> 13 | <g display="inline"> 14 | <path fill="#85BA54" d="M0,2.518c0.613-0.564,1.291-0.946,1.611-1.356C1.931,0.752,2.167,0.363,2.325,0h0.292 15 | c0.199,0.42,0.456,0.826,0.771,1.219C3.703,1.613,4.391,1.965,5,2.512V3H3v10H2V3H0V2.518z"/> 16 | </g> 17 | </g> 18 | </svg> 19 | -------------------------------------------------------------------------------- /src/assets/img/arrow-red-down.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | width="5px" height="13px" viewBox="0 0 5 13" enable-background="new 0 0 5 13" xml:space="preserve"> 6 | <g display="none"> 7 | <g display="inline"> 8 | <path fill="#9d498c" d="M0,10.005h2V0h1v10.005h2v0.487c-0.609,0.546-1.297,0.897-1.612,1.291C3.073,12.175,2.816,12.581,2.617,13 9 | H2.325c-0.158-0.363-0.395-0.75-0.714-1.16C1.291,11.431,0.613,11.05,0,10.487V10.005z"/> 10 | </g> 11 | </g> 12 | <g> 13 | <g> 14 | <path fill="#9d498c" d="M0,10h2V0h1v10h2v0.488c-0.609,0.547-1.297,0.899-1.611,1.293C3.073,12.174,2.816,12.58,2.617,13H2.325 15 | c-0.158-0.363-0.395-0.752-0.714-1.162C1.291,11.428,0.613,11.046,0,10.482V10z"/> 16 | </g> 17 | </g> 18 | </svg> 19 | -------------------------------------------------------------------------------- /src/assets/img/blue-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/blue-bg.jpg -------------------------------------------------------------------------------- /src/assets/img/blur-bg-blurred.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/blur-bg-blurred.jpg -------------------------------------------------------------------------------- /src/assets/img/blur-bg-mobile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/blur-bg-mobile.jpg -------------------------------------------------------------------------------- /src/assets/img/blur-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/blur-bg.jpg -------------------------------------------------------------------------------- /src/assets/img/chernika.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/chernika.png -------------------------------------------------------------------------------- /src/assets/img/face.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"> 2 | <path fill="#DDDDDD" d="M23.99 4C12.94 4 4 12.95 4 24s8.94 20 19.99 20C35.04 44 44 35.05 44 24S35.04 4 23.99 4zM24 40c-8.84 0-16-7.16-16-16S15.16 8 24 8s16 7.16 16 16-7.16 16-16 16zm7-18c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3zm-14 0c1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3 1.34 3 3 3zm7 13c4.66 0 8.61-2.91 10.21-7H13.79c1.6 4.09 5.55 7 10.21 7z"/> 3 | </svg> -------------------------------------------------------------------------------- /src/assets/img/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/favicon-16x16.png -------------------------------------------------------------------------------- /src/assets/img/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/favicon-32x32.png -------------------------------------------------------------------------------- /src/assets/img/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/favicon-96x96.png -------------------------------------------------------------------------------- /src/assets/img/green-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/green-bg.jpg -------------------------------------------------------------------------------- /src/assets/img/money.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"> 2 | <path fill="#DDDDDD" d="M23.6 21.8c-4.54-1.18-6-2.39-6-4.29 0-2.18 2.01-3.71 5.4-3.71 3.56 0 4.88 1.7 5 4.2h4.42c-.13-3.45-2.24-6.59-6.42-7.62V6h-6v4.32c-3.88.85-7 3.35-7 7.22 0 4.62 3.83 6.92 9.4 8.26 5.01 1.2 6 2.95 6 4.83 0 1.37-.97 3.57-5.4 3.57-4.12 0-5.75-1.85-5.96-4.2h-4.41c.25 4.38 3.52 6.83 7.37 7.66V42h6v-4.3c3.89-.75 7-3 7-7.11 0-5.66-4.86-7.6-9.4-8.79z"/> 3 | </svg> -------------------------------------------------------------------------------- /src/assets/img/peachy-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/peachy-bg.jpg -------------------------------------------------------------------------------- /src/assets/img/person.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"> 2 | <path fill="#DDDDDD" d="M24 24c4.42 0 8-3.59 8-8 0-4.42-3.58-8-8-8s-8 3.58-8 8c0 4.41 3.58 8 8 8zm0 4c-5.33 0-16 2.67-16 8v4h32v-4c0-5.33-10.67-8-16-8z"/> 3 | </svg> -------------------------------------------------------------------------------- /src/assets/img/refresh.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48"> 2 | <path fill="#DDDDDD" d="M35.3 12.7C32.41 9.8 28.42 8 24 8 15.16 8 8.02 15.16 8.02 24S15.16 40 24 40c7.45 0 13.69-5.1 15.46-12H35.3c-1.65 4.66-6.07 8-11.3 8-6.63 0-12-5.37-12-12s5.37-12 12-12c3.31 0 6.28 1.38 8.45 3.55L26 22h14V8l-4.7 4.7z"/> 3 | </svg> -------------------------------------------------------------------------------- /src/assets/img/shopping-cart.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="iso-8859-1"?> 2 | <!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 4 | viewBox="0 0 459.529 459.529" style="enable-background:new 0 0 459.529 459.529;" xml:space="preserve" fill="#348779"> 5 | <g> 6 | <g> 7 | <path d="M17,55.231h48.733l69.417,251.033c1.983,7.367,8.783,12.467,16.433,12.467h213.35c6.8,0,12.75-3.967,15.583-10.2 8 | l77.633-178.5c2.267-5.383,1.7-11.333-1.417-16.15c-3.117-4.817-8.5-7.65-14.167-7.65H206.833c-9.35,0-17,7.65-17,17 9 | s7.65,17,17,17H416.5l-62.9,144.5H164.333L94.917,33.698c-1.983-7.367-8.783-12.467-16.433-12.467H17c-9.35,0-17,7.65-17,17 10 | S7.65,55.231,17,55.231z"/> 11 | <path d="M135.433,438.298c21.25,0,38.533-17.283,38.533-38.533s-17.283-38.533-38.533-38.533S96.9,378.514,96.9,399.764 12 | S114.183,438.298,135.433,438.298z"/> 13 | <path d="M376.267,438.298c0.85,0,1.983,0,2.833,0c10.2-0.85,19.55-5.383,26.35-13.317c6.8-7.65,9.917-17.567,9.35-28.05 14 | c-1.417-20.967-19.833-37.117-41.083-35.7c-21.25,1.417-37.117,20.117-35.7,41.083 15 | C339.433,422.431,356.15,438.298,376.267,438.298z"/> 16 | </g> 17 | </g> 18 | <g> 19 | </g> 20 | <g> 21 | </g> 22 | <g> 23 | </g> 24 | <g> 25 | </g> 26 | <g> 27 | </g> 28 | <g> 29 | </g> 30 | <g> 31 | </g> 32 | <g> 33 | </g> 34 | <g> 35 | </g> 36 | <g> 37 | </g> 38 | <g> 39 | </g> 40 | <g> 41 | </g> 42 | <g> 43 | </g> 44 | <g> 45 | </g> 46 | <g> 47 | </g> 48 | </svg> 49 | -------------------------------------------------------------------------------- /src/assets/img/theme/icon/feed/feed-location.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="iso-8859-1"?> 2 | <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 3 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 4 | <svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 5 | width="395.71px" height="395.71px" viewBox="0 0 395.71 395.71" style="enable-background:new 0 0 395.71 395.71;" 6 | xml:space="preserve"> 7 | <g> 8 | <path fill="#FFFFFF" d="M197.849,0C122.131,0,60.531,61.609,60.531,137.329c0,72.887,124.591,243.177,129.896,250.388l4.951,6.738 9 | c0.579,0.792,1.501,1.255,2.471,1.255c0.985,0,1.901-0.463,2.486-1.255l4.948-6.738c5.308-7.211,129.896-177.501,129.896-250.388 10 | C335.179,61.609,273.569,0,197.849,0z M197.849,88.138c27.13,0,49.191,22.062,49.191,49.191c0,27.115-22.062,49.191-49.191,49.191 11 | c-27.114,0-49.191-22.076-49.191-49.191C148.658,110.2,170.734,88.138,197.849,88.138z"/> 12 | </g> 13 | </svg> 14 | -------------------------------------------------------------------------------- /src/assets/img/theme/icon/feed/feed-video.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8"?> 2 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 3 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="512" height="512" viewBox="0 0 512 512"> 4 | <path d="M 256.00,0.00C 114.615,0.00,0.00,114.615,0.00,256.00s 114.615,256.00, 256.00,256.00s 256.00-114.615, 256.00-256.00S 397.385,0.00, 256.00,0.00z M 256.00,464.00 c-114.875,0.00-208.00-93.125-208.00-208.00S 141.125,48.00, 256.00,48.00s 208.00,93.125, 208.00,208.00S 370.875,464.00, 256.00,464.00zM 192.00,144.00L 384.00,256.00L 192.00,368.00 z" fill="#FFFFFF"/> 5 | </svg> 6 | -------------------------------------------------------------------------------- /src/assets/img/theme/no-photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/theme/no-photo.png -------------------------------------------------------------------------------- /src/assets/img/theme/palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/theme/palette.png -------------------------------------------------------------------------------- /src/assets/img/transblue-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/img/transblue-bg.jpg -------------------------------------------------------------------------------- /src/assets/pictures/pic-andrey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/pictures/pic-andrey.png -------------------------------------------------------------------------------- /src/assets/pictures/pic-kostia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/pictures/pic-kostia.png -------------------------------------------------------------------------------- /src/assets/pictures/pic-nasta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/pictures/pic-nasta.png -------------------------------------------------------------------------------- /src/assets/pictures/pic-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/pictures/pic-profile.png -------------------------------------------------------------------------------- /src/assets/pictures/pic-vova.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/pictures/pic-vova.png -------------------------------------------------------------------------------- /src/assets/pictures/tinder-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/assets/pictures/tinder-logo.jpg -------------------------------------------------------------------------------- /src/sass/404.scss: -------------------------------------------------------------------------------- 1 | @import "common.scss"; 2 | 3 | html { 4 | position: relative; 5 | min-width: 320px; 6 | } 7 | 8 | html, body { 9 | min-height: 100%; 10 | height: 100%; 11 | } 12 | 13 | body { 14 | font: 12px/16px $font-family; 15 | color: $default-text; 16 | @include main-background(); 17 | display: flex; 18 | align-items: center; 19 | } 20 | 21 | .page-not-found-modal { 22 | width: 638px; 23 | margin: 0 auto; 24 | @include bg-translucent-dark(0.5); 25 | border-radius: 5px; 26 | font-weight: $font-light; 27 | color: #ffffff; 28 | padding: 32px; 29 | text-align: center; 30 | 31 | h1 { 32 | font-weight: $font-light; 33 | margin-bottom: 32px; 34 | } 35 | p { 36 | font-size: 16px; 37 | line-height: 24px; 38 | } 39 | a { 40 | text-decoration: none; 41 | outline: none; 42 | transition: all 0.2s ease; 43 | color: $primary; 44 | display: inline-block; 45 | &:hover { 46 | color: $primary-dark; 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /src/sass/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/sass/README.md -------------------------------------------------------------------------------- /src/sass/app/_alerts.scss: -------------------------------------------------------------------------------- 1 | .alert{ 2 | color: $label-text; 3 | font-size: 13px; 4 | font-weight: $font-light; 5 | strong{ 6 | font-weight: $font-normal; 7 | } 8 | .close{ 9 | margin-top: -3px; 10 | } 11 | .alert-link{ 12 | font-weight: $font-normal; 13 | } 14 | .control-alert{ 15 | padding-top:10px ; 16 | button{ 17 | margin-right: 10px; 18 | } 19 | } 20 | } 21 | 22 | .closeable{ 23 | button{ 24 | color: $input-border; 25 | } 26 | } 27 | 28 | .bg-success { 29 | background-color: rgba($success,0.85); 30 | color: $label-text; 31 | a{ 32 | color: $danger-dark; 33 | &:hover{ 34 | color: $danger; 35 | } 36 | } 37 | } 38 | .bg-info { 39 | background-color: rgba($info,0.85); 40 | color: $label-text; 41 | a{ 42 | color: $warning-light; 43 | &:hover{ 44 | color: $warning; 45 | } 46 | } 47 | } 48 | .bg-warning { 49 | background-color: rgba($warning,0.85); 50 | color: $label-text; 51 | a{ 52 | color: $danger-dark; 53 | &:hover{ 54 | color: $danger; 55 | } 56 | } 57 | } 58 | .bg-danger { 59 | background-color: rgba($danger,0.85); 60 | color: $label-text; 61 | a{ 62 | color: $warning-light; 63 | &:hover{ 64 | color: $warning; 65 | } 66 | } 67 | } -------------------------------------------------------------------------------- /src/sass/app/_dashboard.scss: -------------------------------------------------------------------------------- 1 | @media screen and (min-width: 1620px) { 2 | .row.shift-up { 3 | > div { 4 | margin-top: -573px; 5 | } 6 | } 7 | } 8 | 9 | @media screen and (max-width: 1620px) { 10 | .panel.feed-panel.large-panel { 11 | height: 824px; 12 | } 13 | } 14 | 15 | .user-stats-panel { 16 | .panel-title { 17 | padding: 0 0 15px; 18 | } 19 | } 20 | 21 | .blurCalendar{ 22 | height: 475px; 23 | } -------------------------------------------------------------------------------- /src/sass/app/_grid.scss: -------------------------------------------------------------------------------- 1 | .show-grid div[class^=col-]{ 2 | padding: 10px; 3 | box-sizing: border-box; 4 | div { 5 | color: $default-text; 6 | text-align: center; 7 | font-size: 18px; 8 | background-color: rgba($default-text, 0.3); 9 | padding: 12px 5px; 10 | } 11 | } 12 | 13 | .grid-h{ 14 | margin-top: 40px; 15 | margin-bottom: 0; 16 | &:first-child{ 17 | margin-top: 0; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/sass/app/_modalNotifications.scss: -------------------------------------------------------------------------------- 1 | .toast { 2 | background-color: $primary; 3 | } 4 | 5 | .toast-success { 6 | background-color: $success; 7 | } 8 | 9 | .toast-error { 10 | background-color: $danger; 11 | } 12 | 13 | .toast-info { 14 | background-color: $info; 15 | } 16 | 17 | .toast-warning { 18 | background-color: $warning; 19 | } 20 | 21 | #toast-container.toast-top-full-width > div, #toast-container.toast-bottom-full-width > div { 22 | margin: 5px auto; 23 | } 24 | -------------------------------------------------------------------------------- /src/sass/app/_notifications.scss: -------------------------------------------------------------------------------- 1 | .control { 2 | margin-bottom: 10px; 3 | .form-control { 4 | width: 75%; 5 | } 6 | span { 7 | white-space: pre-line; 8 | } 9 | } 10 | 11 | .notification-panel { 12 | .control, 13 | .radio, 14 | label, 15 | label.custom-checkbox > span, 16 | label.custom-radio > span { 17 | font-weight: $font-light; 18 | } 19 | } 20 | 21 | .radio-controls .custom-radio{ 22 | margin-top: 5px; 23 | } 24 | 25 | @media (max-width: 991px) { 26 | .toastr-radio-setup { 27 | margin-left: 22px; 28 | } 29 | } 30 | 31 | .radio-header { 32 | 33 | margin-bottom: 0; 34 | &.position-header { 35 | margin-top: 15px; 36 | } 37 | } 38 | 39 | .button-row { 40 | line-height: 37px; 41 | button { 42 | width: 125px; 43 | } 44 | } 45 | 46 | .result-toastr { 47 | border-radius: 5px; 48 | color: rgba(255, 255, 255, 0.9); 49 | background-color: rgba(0, 0, 0, 0.33); 50 | border: none; 51 | } 52 | 53 | .sub-label { 54 | margin-top: 5px; 55 | } 56 | 57 | .toast-title { 58 | font-weight: $font-normal; 59 | } 60 | 61 | .toast-message { 62 | font-weight: $font-light; 63 | } 64 | 65 | #toast-container.toast-top-center, #toast-container.toast-bottom-center{ 66 | .toast{ 67 | margin-bottom: 5px; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/sass/app/_slider.scss: -------------------------------------------------------------------------------- 1 | .slider-box{ 2 | min-height: 86px; 3 | } 4 | 5 | .irs-bar, 6 | .irs-bar-edge, 7 | .irs-line-left, 8 | .irs-line-mid, 9 | .irs-line-right, 10 | .irs-slider { 11 | background-image: url(../assets/img/theme/vendor/ionrangeslider/img/sprite-skin-flat.png); 12 | background-repeat: repeat-x; 13 | } -------------------------------------------------------------------------------- /src/sass/app/_table.scss: -------------------------------------------------------------------------------- 1 | .table-panel { 2 | height: 295px; 3 | } 4 | -------------------------------------------------------------------------------- /src/sass/app/_tabsPage.scss: -------------------------------------------------------------------------------- 1 | .tabset-group { 2 | > div + div { 3 | margin-top: 15px; 4 | } 5 | } 6 | 7 | 8 | .panel.tabs-panel{ 9 | .panel-body{ 10 | padding: 0; 11 | } 12 | .dropdown-menu{ 13 | min-width: 132px; 14 | top: auto; 15 | border: none; 16 | border-bottom-left-radius: 5px; 17 | border-bottom-right-radius: 5px; 18 | } 19 | &.with-scroll .panel-body{ 20 | height: 100%; 21 | } 22 | } 23 | 24 | .xsmall-panel { 25 | .nav-tabs, .tab-content{ 26 | height: 100%; 27 | } 28 | } 29 | .inline-icon{ 30 | display: inline-block; 31 | margin: 20px 5px; 32 | } 33 | .panel.horizontal-tabs { 34 | .tab-content{ 35 | height: calc(100% - 40px); 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /src/sass/app/_tplSkinPanel.scss: -------------------------------------------------------------------------------- 1 | .tpl-skin-panel { 2 | width: 300px; 3 | .tpl-skin-option { 4 | padding: 10px; 5 | line-height: 83px; 6 | color: $default-text; 7 | &:hover { 8 | cursor: pointer; 9 | background-color: $primary; 10 | } 11 | + .tpl-skin-option { 12 | border-top: 1px solid $border-light; 13 | } 14 | } 15 | .skin-thumbnail { 16 | width: 100%; 17 | } 18 | } -------------------------------------------------------------------------------- /src/sass/app/_tree.scss: -------------------------------------------------------------------------------- 1 | .tree-node{ 2 | line-height: 25px; 3 | cursor: pointer; 4 | &.selected{ 5 | background-color: $border-light ; 6 | } 7 | .control{ 8 | cursor: pointer; 9 | font-size: 16px; 10 | padding-left: 5px; 11 | } 12 | &:hover{ 13 | background-color: $input-border; 14 | } 15 | } 16 | 17 | .jstree-default a.jstree-clicked, .jstree-default a.jstree-hovered { 18 | background-color: rgba(0, 0, 0, 0.25); 19 | } 20 | 21 | .jstree-default a.jstree-anchor, .jstree-default a.jstree-wholerow{ 22 | &:hover{ 23 | background-color: rgba(0, 0, 0, 0.15); 24 | } 25 | } 26 | 27 | .control-side > div { 28 | margin-top: 5px; 29 | margin-bottom: 10px; 30 | 31 | .btn{ 32 | width: 100px; 33 | } 34 | } 35 | 36 | #tree-root{ 37 | border-left: 1px solid $border-light; 38 | padding-left: 10px; 39 | } 40 | 41 | .tree-panel{ 42 | height: 500px; 43 | } 44 | 45 | .search-container{ 46 | margin-top: 10px; 47 | } -------------------------------------------------------------------------------- /src/sass/app/maps/_google-maps.scss: -------------------------------------------------------------------------------- 1 | #google-maps { 2 | width: 100%; 3 | height: calc(100vh - 283px); 4 | } -------------------------------------------------------------------------------- /src/sass/app/maps/_map-bubbles.scss: -------------------------------------------------------------------------------- 1 | #map-bubbles { 2 | width: 100%; 3 | height: calc(100vh - 283px); 4 | font-size : 11px; 5 | } 6 | 7 | /* 8 | #chartdiv1 { 9 | background: #3f3f4f; 10 | color:#ffffff; 11 | width : 100%; 12 | height : 500px; 13 | font-size : 11px; 14 | }*/ 15 | -------------------------------------------------------------------------------- /src/sass/app/maps/_map-lines.scss: -------------------------------------------------------------------------------- 1 | #map-lines { 2 | width: 100%; 3 | height: calc(100vh - 283px); 4 | } -------------------------------------------------------------------------------- /src/sass/common.scss: -------------------------------------------------------------------------------- 1 | @import 'theme/conf/mixins'; 2 | @import 'theme/conf/colorScheme/mint'; 3 | @import 'theme/conf/variables'; 4 | -------------------------------------------------------------------------------- /src/sass/main.scss: -------------------------------------------------------------------------------- 1 | @import 'common'; 2 | 3 | // injector 4 | // endinjector -------------------------------------------------------------------------------- /src/sass/theme/_blur-admin-theme.scss: -------------------------------------------------------------------------------- 1 | .label { 2 | border-radius: 0; 3 | } 4 | 5 | .label-primary { 6 | background: $primary; 7 | } 8 | 9 | .label-info { 10 | background: $primary-light; 11 | } 12 | 13 | .label-success { 14 | background: $success; 15 | } 16 | 17 | .label-warning { 18 | background: $warning; 19 | } 20 | 21 | .label-danger { 22 | background: $danger; 23 | } -------------------------------------------------------------------------------- /src/sass/theme/_datePicker.scss: -------------------------------------------------------------------------------- 1 | .datepicker { 2 | .btn:hover { 3 | transform: scale(1); 4 | } 5 | 6 | button.btn.btn-default { 7 | background-color: transparent; 8 | } 9 | 10 | button.btn.btn-default.active { 11 | background-color: $info; 12 | color: white; 13 | } 14 | 15 | button.btn.active span.ng-binding.text-info { 16 | color: white; 17 | } 18 | } 19 | 20 | .uib-datepicker-wrap { 21 | min-height:270px; 22 | } 23 | 24 | .uib-datepicker span.ng-binding.text-muted { 25 | color: $default-text; 26 | } 27 | .uib-datepicker-popup { 28 | 29 | background-color: $bootstrap-panel-bg; 30 | border-width: 0; 31 | color: black; 32 | 33 | button.btn { 34 | color: black; 35 | 36 | .text-muted { 37 | color: black; 38 | } 39 | } 40 | 41 | .glyphicon { 42 | color: rgba($progress-background, 1); 43 | } 44 | } -------------------------------------------------------------------------------- /src/sass/theme/_icons.scss: -------------------------------------------------------------------------------- 1 | @mixin svg-icon($url, $width:'', $height:'') { 2 | display: inline-block; 3 | background: url($url) no-repeat center; 4 | background-size: contain; 5 | vertical-align: middle; 6 | @if ($width != '') { 7 | width: $width + px; 8 | } 9 | @if ($height != '') { 10 | height: $height + px; 11 | } 12 | } 13 | 14 | @mixin svg-icon-class($iconName, $width:'', $height:'') { 15 | .#{'i-' + $iconName} { 16 | @include svg-icon($images-root + $iconName + '.svg', $width, $height); 17 | } 18 | } 19 | 20 | @include svg-icon-class('face', 80, 80); 21 | @include svg-icon-class('money', 80, 80); 22 | @include svg-icon-class('person', 80, 80); 23 | @include svg-icon-class('refresh', 80, 80); 24 | 25 | 26 | @mixin png-icon($url, $width, $height) { 27 | display: inline-block; 28 | width: $width + px; 29 | height: $height + px; 30 | background: url($url) no-repeat center center; 31 | background-size: $width + px $height + px; 32 | } 33 | 34 | @mixin png-icon-class($iconName, $width, $height) { 35 | .#{'i-' + $iconName} { 36 | @include png-icon($images-root + $iconName + '.png', $width, $height); 37 | } 38 | } 39 | 40 | //@include icon-png-class('arrival-icon', 11, 11); -------------------------------------------------------------------------------- /src/sass/theme/_tree.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/akveo/blur-admin/7f2596f4abebe8ff05131c67d4bea3d63178e021/src/sass/theme/_tree.scss -------------------------------------------------------------------------------- /src/sass/theme/components/_accordion.scss: -------------------------------------------------------------------------------- 1 | /* 2 | .panel-group { 3 | > .panel { 4 | > .panel-heading { 5 | padding: 0; 6 | 7 | > h4.panel-title { 8 | height: 50px; 9 | width: 100%; 10 | padding: 0; 11 | 12 | > a { 13 | display: block; 14 | padding: 15px 22px; 15 | width: 100%; 16 | } 17 | } 18 | } 19 | } 20 | 21 | } 22 | 23 | .panel-collapse { 24 | transition: height $default-animation-duration $default-animation-style; 25 | .panel-body { 26 | padding: 15px; 27 | } 28 | }*/ 29 | -------------------------------------------------------------------------------- /src/sass/theme/components/_baWizard.scss: -------------------------------------------------------------------------------- 1 | .ba-wizard-progress { 2 | margin-top: 10px; 3 | height: 10px; 4 | } 5 | 6 | .ba-wizard-pager { 7 | .previous { 8 | float: left; 9 | } 10 | .next { 11 | float: right; 12 | } 13 | } 14 | 15 | .ba-wizard-navigation-container { 16 | display: table; 17 | table-layout: fixed; 18 | width: 100%; 19 | padding: 15px 0; 20 | .ba-wizard-navigation { 21 | cursor: pointer; 22 | display: table-cell; 23 | line-height: 1; 24 | text-align: center; 25 | font-weight: $font-light; 26 | font-size: 18px; 27 | opacity: 0.7; 28 | &.active { 29 | opacity: 0.95; 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /src/sass/theme/components/_backTop.scss: -------------------------------------------------------------------------------- 1 | $height: 52px; 2 | 3 | .back-top { 4 | width: $height; 5 | height: $height; 6 | cursor: pointer; 7 | z-index: 9999; 8 | display: none; 9 | text-decoration: none; 10 | right: (180px - $height) / 2; 11 | bottom: 40px !important; 12 | font-size: 45px; 13 | text-align: center; 14 | opacity: 0.4; 15 | color: $primary; 16 | background-color: rgba(0, 0, 0, 0.75); 17 | border-radius: 50%; 18 | line-height: 46px; 19 | &:hover { 20 | opacity: 0.8; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/sass/theme/components/_contentTop.scss: -------------------------------------------------------------------------------- 1 | .content-top { 2 | padding-top: 13px; 3 | padding-bottom: 27px; 4 | } 5 | 6 | h1.al-title { 7 | font-weight: $font-bold; 8 | color: $default-text; 9 | float: left; 10 | width: auto; 11 | margin: 0; 12 | padding: 0; 13 | font-size: 24px; 14 | text-transform: uppercase; 15 | opacity: 0.9; 16 | } 17 | 18 | .al-breadcrumb { 19 | background: none; 20 | color: $default-text; 21 | padding: 0; 22 | margin: 0; 23 | float: right; 24 | padding-top: 11px; 25 | li { 26 | font-size: 18px; 27 | font-weight: $font-normal; 28 | } 29 | } 30 | 31 | .al-look { 32 | float: right; 33 | margin-right: 10px; 34 | padding-top: 10px; 35 | > a { 36 | font-size: 19px; 37 | } 38 | } -------------------------------------------------------------------------------- /src/sass/theme/components/_progressRound.scss: -------------------------------------------------------------------------------- 1 | svg.progress-bar-round circle { 2 | transition: 0.5s; 3 | } 4 | .percentage { 5 | font-size: 46px; 6 | } 7 | .loading { 8 | font-size: 16px; 9 | } 10 | .progress-bar-round { 11 | margin-top: 15px; 12 | } -------------------------------------------------------------------------------- /src/sass/theme/components/_widgets.scss: -------------------------------------------------------------------------------- 1 | .widgets { 2 | transform: translate3d(0, 0, 0); 3 | backface-visibility: hidden; 4 | } 5 | 6 | .full-width { 7 | margin: 0 -22px -16px; 8 | } 9 | 10 | .horizontal-scroll { 11 | overflow-x: auto; 12 | overflow-y: visible; 13 | } 14 | 15 | .panel-subtitle { 16 | font-size: 15px; 17 | margin-bottom: 16px; 18 | } 19 | 20 | .panel-nav { 21 | position: absolute; 22 | top: 12px; 23 | right: 15px; 24 | z-index: 2; 25 | 26 | i { 27 | cursor: pointer; 28 | font-size: 14px; 29 | color: #bfbfbf; 30 | margin-left: 11px; 31 | display: inline-block; 32 | 33 | &.fa-minus { 34 | margin-bottom: -1px; 35 | vertical-align: bottom; 36 | } 37 | 38 | &:hover { 39 | color: $default-text; 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /src/sass/theme/conf/_variables.scss: -------------------------------------------------------------------------------- 1 | $font-family: 'Roboto', sans-serif; 2 | 3 | $activelink: $primary; 4 | $hoverlink: $primary-dark; 5 | 6 | $resXXL: 1280px; 7 | $resXL: 1170px; 8 | $resL: 991px; 9 | $resM: 768px; 10 | $resS: 660px; 11 | $resXS: 500px; 12 | $resXXS: 435px; 13 | $resMin: 320px; 14 | 15 | $top-height: 66px; 16 | 17 | $small-panel-height: 114px; 18 | $xsmall-panel-height: 187px; 19 | $medium-panel-height: 400px; 20 | $extra-medium-panel-height: 550px; 21 | $large-panel-height: 974px; 22 | 23 | $default-animation-duration: 0.2s; 24 | $default-animation-style: ease-out; 25 | 26 | $assets-root: '../assets/'; 27 | $images-root: $assets-root + 'img/'; 28 | $fonts-root: $assets-root + 'fonts/'; 29 | $font-thin: 100; 30 | $font-light: 300; 31 | $font-normal: 400; 32 | $font-bold: 700; 33 | $font-ultraBold: 900; 34 | 35 | $facebook-color: #3b5998; 36 | $twitter-color: #55acee; 37 | $google-color: #dd4b39; 38 | $linkedin-color: #0177B5; 39 | $github-color: #6b6b6b; 40 | $stackoverflow-color: #2F96E8; 41 | $dribble-color: #F26798; 42 | $behace-color: #0093FA; 43 | -------------------------------------------------------------------------------- /src/sass/theme/conf/colorScheme/_blur.scss: -------------------------------------------------------------------------------- 1 | $default: rgba(#000000, 0.2); 2 | $body-bg: #F0F3F4; 3 | $default-text: #ffffff; 4 | $help-text: #eeeeee; 5 | $label-text: #ffffff; 6 | 7 | $disabled: #dddddd; 8 | $disabled-bg: transparent; 9 | $border: #ffffff; 10 | $border-light: rgba(#ffffff, 0.2); 11 | $input-border: transparent; 12 | $input-background: rgba(#000000, 0.15); 13 | 14 | $sidebar: rgba(#000000, 0.5); 15 | $sidebar-text: #ffffff; 16 | $dropdown-text: #7d7d7d; 17 | $bootstrap-panel-text: #7d7d7d; 18 | $bootstrap-panel-bg: #ffffff; 19 | $mail-box: whitesmoke; 20 | $auth-panel-background: rgba(#000000, 0.55); 21 | $progress-background: rgba(#000000, 0.15); 22 | $progress-default: #ffffff; 23 | 24 | $primary: #209e91 !default; 25 | $info: #2dacd1 !default; 26 | $success: #90b900 !default; 27 | $warning: #dfb81c !default; 28 | $danger: #e85656 !default; 29 | 30 | $primary-light: tint($primary, 30%); 31 | $info-light: tint($info, 30%); 32 | $success-light: tint($success, 30%); 33 | $warning-light: tint($warning, 30%); 34 | $danger-light: tint($danger, 30%); 35 | 36 | $primary-dark: shade($primary, 15%); 37 | $info-dark: shade($info, 15%); 38 | $success-dark: shade($success, 15%); 39 | $warning-dark: shade($warning, 15%); 40 | $danger-dark: shade($danger, 15%); 41 | 42 | $primary-bg: tint($primary, 20%); 43 | $info-bg: tint($info, 20%); 44 | $success-bg: tint($success, 20%); 45 | $warning-bg: tint($warning, 20%); 46 | $danger-bg: tint($danger, 20%); 47 | -------------------------------------------------------------------------------- /src/sass/theme/conf/colorScheme/_mint.scss: -------------------------------------------------------------------------------- 1 | $default: #ffffff; 2 | $body-bg: #F0F3F4; 3 | $default-text: #666666; 4 | $help-text: #949494; 5 | $label-text: #ffffff; 6 | 7 | $disabled: #dddddd; 8 | $disabled-bg: tint($disabled, 15%); 9 | $border: #d6d6d6; 10 | $border-light: tint($border, 15%); 11 | $input-border: shade($border, 5%); 12 | $input-background: #ffffff; 13 | 14 | $sidebar: #1C2B36; 15 | $sidebar-text: #ffffff; 16 | $dropdown-text: #7d7d7d; 17 | $bootstrap-panel-text: #7d7d7d; 18 | $bootstrap-panel-bg: #ffffff; 19 | $mail-box: whitesmoke; 20 | $auth-panel-background: #ffffff; 21 | $progress-background: rgba(#000000, 0.07); 22 | $progress-default: rgba(#000000, 0.15); 23 | 24 | $primary: #209e91 !default; 25 | $info: #2dacd1 !default; 26 | $success: #90b900 !default; 27 | $warning: #dfb81c !default; 28 | $danger: #e85656 !default; 29 | 30 | $primary-light: tint($primary, 30%); 31 | $info-light: tint($info, 30%); 32 | $success-light: tint($success, 30%); 33 | $warning-light: tint($warning, 30%); 34 | $danger-light: tint($danger, 30%); 35 | 36 | $primary-dark: shade($primary, 15%); 37 | $info-dark: shade($info, 15%); 38 | $success-dark: shade($success, 15%); 39 | $warning-dark: shade($warning, 15%); 40 | $danger-dark: shade($danger, 15%); 41 | 42 | $primary-bg: tint($primary, 20%); 43 | $info-bg: tint($info, 20%); 44 | $success-bg: tint($success, 20%); 45 | $warning-bg: tint($warning, 20%); 46 | $danger-bg: tint($danger, 20%); 47 | -------------------------------------------------------------------------------- /src/sass/theme/dashboard/_amChart.scss: -------------------------------------------------------------------------------- 1 | #amchart { 2 | width: 100%; 3 | height: 350px; 4 | margin-top: -20px; 5 | } -------------------------------------------------------------------------------- /src/sass/theme/dashboard/_amChartMap.scss: -------------------------------------------------------------------------------- 1 | #amChartMap { 2 | width: 100%; 3 | height: 315px; 4 | } -------------------------------------------------------------------------------- /src/sass/theme/dashboard/_popularApp.scss: -------------------------------------------------------------------------------- 1 | .panel.popular-app { 2 | &>.panel-body { 3 | padding: 0; 4 | } 5 | 6 | .popular-app-img-container { 7 | position: relative; 8 | padding: 30px 0; 9 | height: 260px; 10 | border-top-right-radius: 5px; 11 | border-top-left-radius: 5px; 12 | .popular-app-img { 13 | width: 260px; 14 | position: absolute; 15 | transform: translateY(-50%) translate(-50%); 16 | top: 50%; 17 | left: 50%; 18 | 19 | .logo-text { 20 | display: inline-block; 21 | margin: 10px; 22 | font-size: 26px; 23 | color: $default-text; 24 | } 25 | } 26 | } 27 | .popular-app-cost { 28 | font-size: 20px; 29 | padding: 20px 22px; 30 | border-bottom: 1px solid $border-light; 31 | border-top: 1px solid $border-light; 32 | } 33 | .popular-app-info { 34 | padding: 20px 22px; 35 | font-size: 20px; 36 | text-align: center; 37 | .info-label { 38 | font-size: 12px; 39 | } 40 | } 41 | .row { 42 | margin: 0; 43 | > div { 44 | padding: 0; 45 | } 46 | } 47 | } 48 | 49 | .blur-theme .panel.popular-app .popular-app-img-container { 50 | background: rgba(0, 0, 0, 0.5); 51 | } -------------------------------------------------------------------------------- /src/sass/theme/dashboard/_weather.scss: -------------------------------------------------------------------------------- 1 | .weather-wrapper { 2 | 3 | height: 100%; 4 | 5 | .weather-main-info { 6 | min-height: 140px; 7 | 8 | div i { 9 | display: inline-block; 10 | width: 48px; 11 | text-align: center; 12 | } 13 | 14 | .city-date { 15 | display: flex; 16 | flex-wrap: wrap; 17 | justify-content: space-between; 18 | } 19 | } 20 | 21 | .temp-by-time { 22 | height: calc(100% - 210px); 23 | } 24 | 25 | .select-day { 26 | display: table; 27 | table-layout: fixed; 28 | width: 100%; 29 | height: 70px; 30 | 31 | .day { 32 | display: table-cell; 33 | line-height: 1; 34 | text-align: center; 35 | cursor: pointer; 36 | 37 | i.weatherIcon { 38 | transition: color 0.5s ease; 39 | } 40 | 41 | .select-day-info { 42 | vertical-align: super; 43 | } 44 | } 45 | 46 | .day:hover { 47 | i.weatherIcon { 48 | color: #40BDE8; 49 | } 50 | } 51 | } 52 | 53 | .rightHeading { 54 | display: block; 55 | float: right; 56 | } 57 | 58 | .weather-info { 59 | display: inline-block; 60 | vertical-align: super; 61 | } 62 | 63 | .font-x1dot25 { 64 | font-size: 1.5em; 65 | } 66 | 67 | .font-x1dot5 { 68 | font-size: 1.5em; 69 | } 70 | 71 | .font-x2 { 72 | font-size: 2em; 73 | } 74 | 75 | .font-x3 { 76 | font-size: 3em; 77 | } 78 | 79 | } 80 | 81 | 82 | --------------------------------------------------------------------------------