Directorio @salix eliminado
This commit is contained in:
parent
abf6a6c142
commit
bb4205ad12
|
@ -1,3 +1,4 @@
|
|||
node_modules
|
||||
spliting.js
|
||||
build
|
||||
build
|
||||
npm-debug.log
|
|
@ -1,7 +1,6 @@
|
|||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
|
||||
{
|
||||
"name": "Iniciar",
|
||||
"type": "node",
|
||||
|
@ -44,10 +43,10 @@
|
|||
"outFiles": []
|
||||
},
|
||||
{
|
||||
"name": "Iniciar node-server",
|
||||
"name": "Loopback",
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}\\@salix-services\\salix\\server\\server.js",
|
||||
"program": "${workspaceRoot}/services/client/server/server.js",
|
||||
"stopOnEntry": false,
|
||||
"args": [],
|
||||
"cwd": "${workspaceRoot}",
|
||||
|
@ -83,6 +82,5 @@
|
|||
"sourceMaps": false,
|
||||
"outFiles": []
|
||||
}
|
||||
|
||||
]
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
node_modules
|
|
@ -1 +0,0 @@
|
|||
export * from './src/app'
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"name": "@salix/app",
|
||||
"version": "0.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://git.verdnatura.es:/salix"
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
import './module';
|
||||
import './spliting';
|
||||
import './configroutes';
|
||||
import './config';
|
||||
import './run';
|
||||
import './components';
|
||||
|
||||
import './styles/title.css';
|
||||
import './styles/layout.css';
|
||||
import './styles/margin.scss';
|
||||
import './styles/padding.scss';
|
||||
import './styles/background.scss';
|
||||
import './styles/border.scss';
|
||||
import './styles/font-style.scss';
|
||||
import './styles/misc.scss';
|
||||
import './styles/display.css';
|
||||
|
||||
import {bootstrap} from './bootstrap';
|
||||
|
||||
bootstrap();
|
|
@ -1,17 +0,0 @@
|
|||
import {ng} from 'vendor';
|
||||
import {NAME as SALIX} from './module';
|
||||
|
||||
export const bootstrap = () => {
|
||||
const selector = 'selector'
|
||||
|
||||
let _script = document.currentScript || (() => {
|
||||
let scripts = document.getElementsByTagName('script');
|
||||
return scripts[scripts.length - 1];
|
||||
})();
|
||||
|
||||
let _element = _script && document.querySelector(_script.getAttribute(selector));
|
||||
if (!_element) {
|
||||
throw new Error("element is not defined");
|
||||
}
|
||||
ng.bootstrap(_element, [SALIX]);
|
||||
};
|
|
@ -1,7 +0,0 @@
|
|||
export {NAME as APP, COMPONENT as APP_COMPONENT} from './components/app/app';
|
||||
export {NAME as VN_MAINMENU, COMPONENT as VN_MAINMENU_COMPONENT} from './components/main-menu/main-menu';
|
||||
export {NAME as ACTIONS, COMPONENT as ACTIONS_COMPONENT} from './components/left-menu/actions';
|
||||
export {NAME as LEFT_MENU, COMPONENT as LEFTMENU_COMPONENT} from './components/left-menu/left-menu';
|
||||
export {NAME as MENU_ITEM, COMPONENT as MENU_ITEM_COMPONENT} from './components/left-menu/menu-item';
|
||||
export {NAME as TOPBAR, COMPONENT as TOPBAR_COMPONENT} from './components/topbar/topbar';
|
||||
export {NAME as SEARCHBAR, COMPONENT as SEARCHBAR_COMPONENT} from './components/searchbar/searchbar';
|
|
@ -1,8 +0,0 @@
|
|||
<vn-vertical full-height class="bg-content">
|
||||
<vn-topbar vn-empty>
|
||||
<vn-spinner enable="$root.loading"></vn-spinner>
|
||||
<vn-snackbar></vn-snackbar>
|
||||
<vn-main-menu></vn-main-menu>
|
||||
</vn-topbar>
|
||||
<vn-vertical vn-auto ui-view scrollable class="main-view"></vn-vertical>
|
||||
</vn-vertical>
|
|
@ -1,58 +0,0 @@
|
|||
require('./style.css');
|
||||
import {module} from '../../module';
|
||||
|
||||
export const NAME = 'vnApp';
|
||||
export const COMPONENT = {
|
||||
template: require('./app.html')
|
||||
};
|
||||
module.component(NAME, COMPONENT);
|
||||
|
||||
vnAppLogger.$inject = ['$document'];
|
||||
function vnAppLogger($document) {
|
||||
return {
|
||||
showMessage: function (message) {
|
||||
let snackbar = $document.find('vn-snackbar').controller('vnSnackbar');
|
||||
snackbar.show({message: message});
|
||||
},
|
||||
showError: function(message) {
|
||||
this.showMessage(`Error: ${message}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
module.provider('vnAppLogger', function() {this.$get = vnAppLogger;});
|
||||
|
||||
vnAppInterceptor.$inject = ['$q', '$rootScope', 'vnAppLogger'];
|
||||
function vnAppInterceptor($q, $rootScope, logger) {
|
||||
$rootScope.loading = false;
|
||||
return {
|
||||
request: function(config) {
|
||||
$rootScope.loading = true;
|
||||
return config;
|
||||
},
|
||||
requestError: function(rejection) {
|
||||
return $q.reject(rejection);
|
||||
},
|
||||
response: function(response) {
|
||||
switch (response.config.method) {
|
||||
case 'PUT':
|
||||
case 'POST':
|
||||
logger.showMessage('Data saved!');
|
||||
}
|
||||
$rootScope.loading = false;
|
||||
return response;
|
||||
},
|
||||
responseError: function(rejection) {
|
||||
$rootScope.loading = false;
|
||||
let message = rejection.data.error.message;
|
||||
logger.showError(message);
|
||||
return $q.reject(rejection);
|
||||
}
|
||||
};
|
||||
}
|
||||
module.factory('vnAppInterceptor', vnAppInterceptor);
|
||||
|
||||
interceptorConfig.$inject = ['$httpProvider'];
|
||||
function interceptorConfig($httpProvider) {
|
||||
$httpProvider.interceptors.push('vnAppInterceptor');
|
||||
}
|
||||
module.config(interceptorConfig);
|
|
@ -1,18 +0,0 @@
|
|||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
vn-app {
|
||||
display: block;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
vn-app vn-spinner {
|
||||
display: block;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.main-view > * {
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
<vn-horizontal>
|
||||
<ul style="list-style-type: none; margin: 0; padding: 0; width: 100%; color: #666;">
|
||||
<vn-menu-item ng-repeat="item in action.items" item = "item"></vn-menu-item>
|
||||
</ul>
|
||||
</vn-horizontal>
|
|
@ -1,12 +0,0 @@
|
|||
import template from './actions.html';
|
||||
import {module} from '../../module';
|
||||
|
||||
export const NAME = 'vnActions';
|
||||
export const COMPONENT = {
|
||||
template: template,
|
||||
controllerAs: "action",
|
||||
bindings: {
|
||||
items: '<'
|
||||
}
|
||||
};
|
||||
module.component(NAME, COMPONENT);
|
|
@ -1,5 +0,0 @@
|
|||
<vn-card >
|
||||
<vn-vertical pad-medium-top pad-medium-bottom>
|
||||
<vn-actions items = "menu.items"></vn-actions>
|
||||
</vn-vertical>
|
||||
</vn-card>
|
|
@ -1,13 +0,0 @@
|
|||
require('./style.css');
|
||||
import template from './left-menu.html';
|
||||
import {module} from '../../module';
|
||||
|
||||
export const NAME = "vnLeftMenu";
|
||||
export const COMPONENT = {
|
||||
template: template,
|
||||
controllerAs: "menu",
|
||||
bindings: {
|
||||
items: '<'
|
||||
}
|
||||
};
|
||||
module.component(NAME, COMPONENT);
|
|
@ -1,7 +0,0 @@
|
|||
<li>
|
||||
<a ui-sref="{{menu.item.href}}" style="display: block; text-decoration: none; color: inherit; padding: .5em 2em;">
|
||||
<i class="material-icons" style="float: right; margin-left: .4em;">keyboard_arrow_right</i>
|
||||
<i class="material-icons" style="vertical-align: middle; margin-right: .4em;">{{menu.item.icon}}</i>
|
||||
<span>{{menu.item.description}}</span>
|
||||
</a>
|
||||
</li>
|
|
@ -1,12 +0,0 @@
|
|||
import template from './menu-item.html';
|
||||
import {module} from '../../module';
|
||||
|
||||
export const NAME = 'vnMenuItem';
|
||||
export const COMPONENT = {
|
||||
template: template,
|
||||
controllerAs: "menu",
|
||||
bindings: {
|
||||
item: '<'
|
||||
}
|
||||
};
|
||||
module.component(NAME, COMPONENT);
|
|
@ -1,4 +0,0 @@
|
|||
vn-menu-item a:hover {
|
||||
color: white !important;
|
||||
background-color: #424242;
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
<div style="position: fixed; top: 0; right: 0; padding: .8em 1.5em; z-index: 10;">
|
||||
<vn-icon icon="apps" id="apps" translate-attr="{title: 'Applications'}"></vn-icon>
|
||||
<vn-icon icon="notifications" translate-attr="{title: 'Notifications'}"></vn-icon>
|
||||
<vn-icon icon="language" translate-attr="{title: 'Change language'}" ng-click="mainMenu.onChangeLanguage()"></vn-icon>
|
||||
<vn-icon icon="exit_to_app" translate-attr="{title: 'Logout'}" ng-click="mainMenu.onLogoutClick()"></vn-icon>
|
||||
<vn-icon icon="account_circle" translate-attr="{title: 'Profile'}" style="font-size: 35px;"></vn-icon>
|
||||
<!--
|
||||
<vn-popover pad-medium for="apps">
|
||||
<a ui-sref="clients"><vn-icon icon=""></vn-icon></a>
|
||||
</vn-popover>
|
||||
-->
|
||||
<ul class="mdl-menu mdl-js-menu mdl-menu--bottom-right user-menu" pad-medium for="apps">
|
||||
<a ui-sref="clients"><vn-icon icon="person"></vn-icon></a>
|
||||
</ul>
|
||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||
require('./style.css');
|
||||
import template from './main-menu.html';
|
||||
import {module} from '../../module';
|
||||
|
||||
export const NAME = 'vnMainMenu';
|
||||
export const COMPONENT = {
|
||||
template: template,
|
||||
controllerAs: "mainMenu",
|
||||
controller: controller
|
||||
};
|
||||
module.component(NAME, COMPONENT);
|
||||
|
||||
controller.$inject = ['$translate'];
|
||||
function controller($translate, $translatePartialLoader) {
|
||||
this.onLogoutClick = function() {
|
||||
let appName = 'salix';
|
||||
document.cookie = `${appName}-session=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
|
||||
window.location = `/account?api_key=${appName}`;
|
||||
};
|
||||
this.onChangeLanguage = function() {
|
||||
let lang = $translate.use() == 'en' ? 'es' : 'en';
|
||||
$translate.use(lang);
|
||||
console.log (`Locale changed: ${lang}`);
|
||||
};
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
vn-main-menu vn-icon {
|
||||
padding: .1em;
|
||||
border-radius: .1em;
|
||||
vertical-align: middle;
|
||||
font-size: 24px;
|
||||
}
|
||||
vn-main-menu vn-icon:hover {
|
||||
cursor: pointer;
|
||||
opacity: .85;
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
<form ng-submit="$ctrl.search()">
|
||||
<vn-horizontal>
|
||||
<vn-textfield vn-one label="Search" model="$ctrl.model.search"></vn-textfield>
|
||||
<vn-icon
|
||||
ng-if="$ctrl.advanced"
|
||||
ng-click="$ctrl.onClick($event)"
|
||||
icon="keyboard_arrow_down"
|
||||
style="cursor: pointer;">
|
||||
</vn-icon>
|
||||
<vn-icon-button icon="search"></vn-icon-button>
|
||||
</vn-horizontal>
|
||||
</form>
|
|
@ -1,34 +0,0 @@
|
|||
import {module} from '../../module';
|
||||
require('./style.css');
|
||||
|
||||
export const NAME = 'vnSearchbar'
|
||||
export const COMPONENT = {
|
||||
template: require('./searchbar.html'),
|
||||
bindings: {
|
||||
model: '<',
|
||||
search: '&',
|
||||
advanced: '=',
|
||||
popover: '@'
|
||||
},
|
||||
controller: controller
|
||||
};
|
||||
module.component(NAME, COMPONENT);
|
||||
|
||||
controller.$inject = ['$element', '$scope', '$document', '$compile', 'vnPopover'];
|
||||
function controller($element, $scope, $document, $compile, popover) {
|
||||
this.onClick = function(event) {
|
||||
var child = $document[0].createElement(this.popover);
|
||||
$compile(child)($scope);
|
||||
popover.show(child, $element[0]);
|
||||
|
||||
// XXX: ¿Existe una forma más adecuada de acceder al controlador de un componente?
|
||||
var childCtrl = angular.element(child).isolateScope().$ctrl;
|
||||
childCtrl.onSubmit = () => {
|
||||
popover.hide();
|
||||
this.model.params = childCtrl.filter;
|
||||
this.search();
|
||||
};
|
||||
|
||||
event.preventDefault();
|
||||
};
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
<header class="bg-dark-bar" style="height: 4.2em; color: white;" ng-transclude>
|
||||
</header>
|
|
@ -1,8 +0,0 @@
|
|||
import {module} from '../../module';
|
||||
|
||||
export const NAME = 'vnTopbar';
|
||||
export const COMPONENT = {
|
||||
template: require('./topbar.html'),
|
||||
transclude: true
|
||||
};
|
||||
module.component(NAME, COMPONENT);
|
|
@ -1,8 +0,0 @@
|
|||
import {module} from './module';
|
||||
|
||||
config.$inject = ['$translatePartialLoaderProvider'];
|
||||
export function config($translatePartialLoaderProvider) {
|
||||
$translatePartialLoaderProvider.addPart('app');
|
||||
$translatePartialLoaderProvider.addPart('crud');
|
||||
}
|
||||
module.config(config);
|
|
@ -1,52 +0,0 @@
|
|||
import * as core from 'core';
|
||||
import './spliting';
|
||||
import * as deps from './spliting/deps.json';
|
||||
|
||||
function loader(module) {
|
||||
load.$inject = ['$ocLazyLoad', '$q'];
|
||||
function load($ocLazyLoad, $q) {
|
||||
return $q((resolve) => {
|
||||
core.splitingRegister.execute(module).then(function (dependencies) {
|
||||
var array = dependencies.map((item) => { return { name: item } });
|
||||
resolve($ocLazyLoad.load(array));
|
||||
});
|
||||
});
|
||||
}
|
||||
return load;
|
||||
}
|
||||
|
||||
config.$inject = ['$stateProvider', '$urlRouterProvider'];
|
||||
function config($stateProvider, $urlRouterProvider) {
|
||||
core.splitingRegister.registerGraph(deps);
|
||||
$urlRouterProvider.otherwise('/clients');
|
||||
|
||||
function getParams(route) {
|
||||
let params = "",
|
||||
temporalParams = [];
|
||||
|
||||
if (!route.params) {
|
||||
return params;
|
||||
}
|
||||
|
||||
Object.keys(route.params).forEach(key => {
|
||||
temporalParams.push(key + `= "${route.params[key]}"`);
|
||||
});
|
||||
return temporalParams.join(" ");
|
||||
}
|
||||
|
||||
for (let file in routes) {
|
||||
let fileRoutes = routes[file].routes;
|
||||
let module = routes[file].module;
|
||||
|
||||
fileRoutes.forEach(function(route) {
|
||||
$stateProvider.state(route.state, {
|
||||
url: route.url,
|
||||
template: `<${route.component} ${getParams(route)}></${route.component}>`,
|
||||
resolve: {
|
||||
loader: loader(module)
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
core.module.config(config);
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"Applications": "Applications",
|
||||
"Notifications":"Notifications",
|
||||
"Logout": "Logout",
|
||||
"Change language": "Change language",
|
||||
"Profile": "Profile"
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"Applications": "Aplicaciones",
|
||||
"Notifications":"Notificaciones",
|
||||
"Logout": "Cerrar sesión",
|
||||
"Change language": "Cambiar idioma",
|
||||
"Profile": "Perfil"
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
import * as vendors from 'vendor';
|
||||
import * as core from 'core';
|
||||
import {NAME as CORE} from 'core';
|
||||
|
||||
export const NAME = 'salix';
|
||||
export const module = vendors.ng.module(NAME, [CORE]);
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"name": "@salix/core",
|
||||
"version": "0.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://git.verdnatura.es:/salix"
|
||||
}
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
import {module} from './module';
|
||||
|
||||
const HOOK_ABORTED_TRANSITION = 3;
|
||||
|
||||
run.$inject = ['$rootScope', '$state'];
|
||||
export function run ($rootScope, $state) {
|
||||
$rootScope.$on('$viewContentLoaded', () => {});
|
||||
window.myAppErrorLog = [];
|
||||
$state.defaultErrorHandler(function(error) {
|
||||
if (error.type === HOOK_ABORTED_TRANSITION)
|
||||
window.myAppErrorLog.push(error);
|
||||
});
|
||||
}
|
||||
module.run(run);
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
"app": ["crud"],
|
||||
"crud": []
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
import * as core from 'core';
|
|
@ -1,11 +0,0 @@
|
|||
|
||||
export const $module = () => {
|
||||
return new Promise(resolve => {
|
||||
require.ensure([], () => {
|
||||
require('$module');
|
||||
resolve('$module');
|
||||
}, '$module');
|
||||
});
|
||||
};
|
||||
|
||||
core.splitingRegister.register('$module', $module);
|
|
@ -1,36 +0,0 @@
|
|||
@import "colors";
|
||||
|
||||
$bg-main: $color-green;
|
||||
$bg-minor: $color-orange;
|
||||
$bg-content: $color-light-grey;
|
||||
$bg-panel: $color-white;
|
||||
$bg-dark-bar: $color-dark;
|
||||
$bg-dark-menu: $color-dark-grey;
|
||||
|
||||
html [bg-main], .bg-main {
|
||||
background-color: $bg-main;
|
||||
}
|
||||
html [bg-minor], .bg-minor {
|
||||
background-color: $bg-minor;
|
||||
}
|
||||
html [bg-content], .bg-content {
|
||||
background-color: $bg-content;
|
||||
}
|
||||
html [bg-panel], .bg-panel {
|
||||
background-color: $bg-panel;
|
||||
}
|
||||
html [bg-dark-bar], .bg-dark-bar {
|
||||
background-color: $bg-dark-bar;
|
||||
}
|
||||
html [bg-dark-menu], .bg-dark-menu {
|
||||
background-color: darken($bg-dark-menu, 35%);
|
||||
}
|
||||
/* Color para items seleccionados */
|
||||
.bg-dark-item{
|
||||
background-color: $bg-dark-bar;
|
||||
color: $color-white;
|
||||
}
|
||||
/* Color para items inactivos */
|
||||
.bg-opacity-item{
|
||||
opacity: 0.6;
|
||||
}
|
|
@ -1,45 +0,0 @@
|
|||
@import "colors";
|
||||
|
||||
$border-color: #AAA;
|
||||
$border-thin: 1px;
|
||||
$border-thick: 2px;
|
||||
|
||||
html [border-none], .border-none {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* Solid border */
|
||||
|
||||
html [border-solid], .border-solid {
|
||||
border: $border-thin solid $border-color;
|
||||
}
|
||||
html [border-solid-top], .border-solid-top {
|
||||
border-top: $border-thin solid $border-color;
|
||||
}
|
||||
html [border-solid-left], .border-solid-left {
|
||||
border-left: $border-thin solid $border-color;
|
||||
}
|
||||
html [border-solid-right], .border-solid-right {
|
||||
border-right: $border-thin solid $border-color;
|
||||
}
|
||||
html [border-solid-bottom], .border-solid-bottom {
|
||||
border-bottom: $border-thin solid $border-color;
|
||||
}
|
||||
|
||||
/* Dashed border */
|
||||
|
||||
html [border-dashed], .border-dashed {
|
||||
border: $border-thin dashed $border-color;
|
||||
}
|
||||
html [border-dashed-top], .border-dashed-top {
|
||||
border-top: $border-thin dashed $border-color;
|
||||
}
|
||||
html [border-dashed-left], .border-dashed-left {
|
||||
border-left: $border-thin dashed $border-color;
|
||||
}
|
||||
html [border-dashed-right], .border-dashed-right {
|
||||
border-right: $border-thin dashed $border-color;
|
||||
}
|
||||
html [border-dashed-bottom], .border-dashed-bottom {
|
||||
border-bottom: $border-thin dashed $border-color;
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
|
||||
$color-green: rgb(139,195,74);
|
||||
$color-orange: rgb(255,171,64);
|
||||
$color-white: white;
|
||||
$color-dark: #3c393b;
|
||||
$color-dark-grey: #424242;
|
||||
$color-light-grey: #e6e6e6;
|
|
@ -1,52 +0,0 @@
|
|||
.display-block{
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*angular-paging*/
|
||||
.well {
|
||||
min-height: 20px;
|
||||
padding: 19px;
|
||||
margin-bottom: 20px;
|
||||
background-color: #f5f5f5;
|
||||
border: 1px solid #e3e3e3;
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
|
||||
}
|
||||
.pagination {
|
||||
display: inline-block;
|
||||
padding-left: 0;
|
||||
margin: 20px 0;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.pagination > li {
|
||||
display: inline;
|
||||
}
|
||||
.pagination > li > a,
|
||||
.pagination > li > span {
|
||||
position: relative;
|
||||
float: left;
|
||||
padding: 6px 12px;
|
||||
margin-left: -1px;
|
||||
line-height: 1.42857143;
|
||||
color: #337ab7;
|
||||
text-decoration: none;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
.pagination > li:first-child > a,
|
||||
.pagination > li:first-child > span {
|
||||
margin-left: 0;
|
||||
border-top-left-radius: 4px;
|
||||
border-bottom-left-radius: 4px;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.pagination>li.active>a {
|
||||
background: #4f94ce;
|
||||
color: #fff;
|
||||
}
|
||||
ul.pagination li a:hover:not(.active) {background-color: #ddd;}
|
||||
/* fin angular-paging*/
|
|
@ -1,21 +0,0 @@
|
|||
@font-face {
|
||||
font-family: raleway-italic;
|
||||
src: url(./fonts/Raleway-Italic.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: raleway-thin;
|
||||
src: url(./fonts/Raleway-Thin.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: raleway-regular;
|
||||
src: url(./fonts/Raleway-Regular.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: raleway-bold;
|
||||
src: url(./fonts/Raleway-Bold.ttf);
|
||||
}
|
||||
@font-face {
|
||||
font-family: raleway-semi-bold;
|
||||
src: url(./fonts/Raleway-SemiBold.ttf);
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
@import "colors";
|
||||
@import "font-family";
|
||||
|
||||
$font-color: $color-dark-grey;
|
||||
|
||||
body {
|
||||
color: $font-color;
|
||||
font-family: raleway-regular;
|
||||
}
|
||||
html [uppercase], .uppercase {
|
||||
text-transform: uppercase;
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,110 +0,0 @@
|
|||
|
||||
html, body {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
html [full-height], .full-height {
|
||||
height: 100%;
|
||||
}
|
||||
html [self-scroll], .self-scroll {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* Horizontal & vertical */
|
||||
|
||||
html [vn-horizontal], vn-horizontal, .vn-horizontal,
|
||||
html [vn-vertical], vn-vertical, .vn-vertical {
|
||||
display: flex;
|
||||
}
|
||||
html [vn-horizontal], vn-horizontal, .vn-horizontal {
|
||||
flex-direction: row;
|
||||
}
|
||||
vn-horizontal[reverse] {
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
html [vn-vertical], vn-vertical, .vn-vertical {
|
||||
flex-direction: column;
|
||||
}
|
||||
vn-vertical[reverse] {
|
||||
flex-direction: column-reverse;
|
||||
}
|
||||
html [wrap] {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
html [wrap-reverse] {
|
||||
flex-wrap: wrap-reverse;
|
||||
}
|
||||
html [scrollable] {
|
||||
min-height: 1px;
|
||||
flex: 1;
|
||||
flex-basis: 0.000000001px;
|
||||
}
|
||||
|
||||
/* Horizontal & vertical childs */
|
||||
|
||||
html [vn-auto],
|
||||
html [vn-none],
|
||||
html [vn-one],
|
||||
html [vn-two],
|
||||
html [vn-three],
|
||||
html [vn-four],
|
||||
html [vn-five],
|
||||
html [vn-six],
|
||||
html [vn-seven],
|
||||
html [vn-eight],
|
||||
html [vn-nine],
|
||||
html [vn-ten],
|
||||
html [vn-eleven],
|
||||
html [vn-twelve]{
|
||||
flex-basis: 0.000000001px;
|
||||
}
|
||||
html [vn-auto], vn-auto, .vn-auto {
|
||||
flex: 1;
|
||||
flex-basis: auto;
|
||||
}
|
||||
html [vn-empty], vn-empty, .vn-empty {
|
||||
display: block;
|
||||
}
|
||||
html [vn-none], vn-none, .vn-none {
|
||||
flex: 1;
|
||||
flex: none;
|
||||
}
|
||||
html [vn-one], vn-one, .vn-one {
|
||||
flex: 1;
|
||||
}
|
||||
html [vn-two], vn-two, .vn-two {
|
||||
flex: 2;
|
||||
}
|
||||
html [vn-three], vn-three, .vn-three {
|
||||
flex: 3;
|
||||
}
|
||||
html [vn-four], vn-four, .vn-four {
|
||||
flex: 4;
|
||||
}
|
||||
html [vn-five], vn-five, .vn-five {
|
||||
flex: 5;
|
||||
}
|
||||
html [vn-six], vn-six, .vn-six {
|
||||
flex: 6;
|
||||
}
|
||||
html [vn-seven], vn-seven, .vn-seven {
|
||||
flex: 7;
|
||||
}
|
||||
html [vn-eight], vn-eight, .vn-eight {
|
||||
flex: 8;
|
||||
}
|
||||
html [vn-nine], vn-nine, .vn-nine {
|
||||
flex: 9;
|
||||
}
|
||||
html [vn-ten], vn-ten, .vn-ten {
|
||||
flex: 10;
|
||||
}
|
||||
html [vn-eleven], vn-eleven, .vn-eleven {
|
||||
flex: 11;
|
||||
}
|
||||
html [vn-twelve], vn-twelve, .vn-twelve {
|
||||
flex: 12;
|
||||
}
|
||||
|
|
@ -1,89 +0,0 @@
|
|||
|
||||
$margin-none: 0;
|
||||
$margin-small: 8px;
|
||||
$margin-medium: 16px;
|
||||
$margin-large: 32px;
|
||||
|
||||
/* None */
|
||||
|
||||
html [margin-none], .margin-none {
|
||||
margin: $margin-none;
|
||||
}
|
||||
|
||||
/* Small */
|
||||
|
||||
html [margin-small], .margin-small {
|
||||
margin: $margin-small;
|
||||
}
|
||||
html [margin-small-top], .margin-small-top {
|
||||
margin-top: $margin-small;
|
||||
}
|
||||
html [margin-small-left], .margin-small-left {
|
||||
margin-left: $margin-small;
|
||||
}
|
||||
html [margin-small-right], .margin-small-right {
|
||||
margin-right: $margin-small;
|
||||
}
|
||||
html [margin-small-bottom], .margin-small-bottom {
|
||||
margin-bottom: $margin-small;
|
||||
}
|
||||
html [margin-small-v], .margin-small-v {
|
||||
margin-top: $margin-small;
|
||||
margin-bottom: $margin-small;
|
||||
}
|
||||
html [margin-small-h], .margin-small-h {
|
||||
margin-left: $margin-small;
|
||||
margin-right: $margin-small;
|
||||
}
|
||||
|
||||
/* Medium */
|
||||
|
||||
html [margin-medium], .margin-medium {
|
||||
margin: $margin-medium;
|
||||
}
|
||||
html [margin-medium-top], .margin-medium-top {
|
||||
margin-top: $margin-medium;
|
||||
}
|
||||
html [margin-medium-left], .margin-medium-left {
|
||||
margin-left: $margin-medium;
|
||||
}
|
||||
html [margin-medium-right], .margin-medium-right {
|
||||
margin-right: $margin-medium;
|
||||
}
|
||||
html [margin-medium-bottom], .margin-medium-bottom {
|
||||
margin-bottom: $margin-medium;
|
||||
}
|
||||
html [margin-medium-v], .margin-medium-v {
|
||||
margin-top: $margin-medium;
|
||||
margin-bottom: $margin-medium;
|
||||
}
|
||||
html [margin-medium-h], .margin-medium-h {
|
||||
margin-left: $margin-medium;
|
||||
margin-right: $margin-medium;
|
||||
}
|
||||
|
||||
/* Large */
|
||||
|
||||
html [margin-large], .margin-large {
|
||||
margin: $margin-large;
|
||||
}
|
||||
html [margin-large-top], .margin-large-top {
|
||||
margin-top: $margin-large;
|
||||
}
|
||||
html [margin-large-left], .margin-large-left {
|
||||
margin-left: $margin-large;
|
||||
}
|
||||
html [margin-large-right], .margin-large-right {
|
||||
margin-right: $margin-large;
|
||||
}
|
||||
html [margin-large-bottom], .margin-large-bottom {
|
||||
margin-bottom: $margin-large;
|
||||
}
|
||||
html [margin-large-v], .margin-large-v {
|
||||
margin-top: $margin-large;
|
||||
margin-bottom: $margin-large;
|
||||
}
|
||||
html [margin-large-h], .margin-large-h {
|
||||
margin-left: $margin-large;
|
||||
margin-right: $margin-large;
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
@import "padding";
|
||||
@import "margin";
|
||||
|
||||
.form {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: $pad-large;
|
||||
max-width: 1000px;
|
||||
}
|
||||
form vn-horizontal > * {
|
||||
padding: 0 .4em;
|
||||
}
|
||||
form vn-horizontal > *:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
form vn-horizontal > *:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
html [fixed-bottom-right] {
|
||||
position: fixed;
|
||||
bottom: 2em;
|
||||
right: 2em;
|
||||
}
|
||||
|
||||
vn-button-bar {
|
||||
display: block;
|
||||
margin-top: $margin-small;
|
||||
}
|
|
@ -1,89 +0,0 @@
|
|||
|
||||
$pad-none: 0;
|
||||
$pad-small: 8px;
|
||||
$pad-medium: 16px;
|
||||
$pad-large: 32px;
|
||||
|
||||
/* None */
|
||||
|
||||
html [pad-none], .pad-none {
|
||||
padding: $pad-none;
|
||||
}
|
||||
|
||||
/* Small */
|
||||
|
||||
html [pad-small], .pad-small {
|
||||
padding: $pad-small;
|
||||
}
|
||||
html [pad-small-left], .pad-small-left {
|
||||
padding-left: $pad-small;
|
||||
}
|
||||
html [pad-small-right], .pad-small-right {
|
||||
padding-right: $pad-small;
|
||||
}
|
||||
html [pad-small-top], .pad-small-top {
|
||||
padding-top: $pad-small;
|
||||
}
|
||||
html [pad-small-bottom], .pad-small-bottom {
|
||||
padding-bottom: $pad-small;
|
||||
}
|
||||
html [pad-small-v], .pad-small-v {
|
||||
padding-top: $pad-small;
|
||||
padding-bottom: $pad-small;
|
||||
}
|
||||
html [pad-small-h], .pad-small-h {
|
||||
padding-left: $pad-small;
|
||||
padding-right: $pad-small;
|
||||
}
|
||||
|
||||
/* Medium */
|
||||
|
||||
html [pad-medium], .pad-medium {
|
||||
padding: $pad-medium;
|
||||
}
|
||||
html [pad-medium-left], .pad-medium-left {
|
||||
padding-left: $pad-medium;
|
||||
}
|
||||
html [pad-medium-right], .pad-medium-right {
|
||||
padding-right: $pad-medium;
|
||||
}
|
||||
html [pad-medium-top], .pad-medium-top {
|
||||
padding-top: $pad-medium;
|
||||
}
|
||||
html [pad-medium-bottom], .pad-medium-bottom {
|
||||
padding-bottom: $pad-medium;
|
||||
}
|
||||
html [pad-medium-v], .pad-medium-v {
|
||||
padding-top: $pad-medium;
|
||||
padding-bottom: $pad-medium;
|
||||
}
|
||||
html [pad-medium-h], .pad-medium-h {
|
||||
padding-left: $pad-medium;
|
||||
padding-right: $pad-medium;
|
||||
}
|
||||
|
||||
/* Large */
|
||||
|
||||
html [pad-large], .pad-large {
|
||||
padding: $pad-large;
|
||||
}
|
||||
html [pad-large-left], .pad-large-left {
|
||||
padding-left: $pad-large;
|
||||
}
|
||||
html [pad-large-right], .pad-large-right {
|
||||
padding-right: $pad-large;
|
||||
}
|
||||
html [pad-large-top], .pad-large-top {
|
||||
padding-top: $pad-large;
|
||||
}
|
||||
html [pad-large-bottom], .pad-large-bottom {
|
||||
padding-bottom: $pad-large;
|
||||
}
|
||||
html [pad-large-v], .pad-large-v {
|
||||
padding-top: $pad-large;
|
||||
padding-bottom: $pad-large;
|
||||
}
|
||||
html [pad-large-h], .pad-large-h {
|
||||
padding-left: $pad-large;
|
||||
padding-right: $pad-large;
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
|
||||
h1 {
|
||||
font-size: 32pt;
|
||||
font-family: raleway-semi-bold;
|
||||
}
|
||||
h2 {
|
||||
font-size: 28pt;
|
||||
font-family: raleway-semi-bold;
|
||||
}
|
||||
h3 {
|
||||
font-size: 24pt;
|
||||
font-family: raleway-semi-bold;
|
||||
}
|
||||
h4 {
|
||||
font-size: 20pt;
|
||||
font-family: raleway-semi-bold;
|
||||
}
|
||||
h5 {
|
||||
font-size: 16pt;
|
||||
font-family: raleway-semi-bold;
|
||||
}
|
||||
h6 {
|
||||
font-size: 12pt;
|
||||
font-family: raleway-semi-bold;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
padding: 0;
|
||||
margin: .4em 0;
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
export * from './src/core'
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
"name": "@salix/core",
|
||||
"version": "0.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "http://git.verdnatura.es:/salix"
|
||||
}
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
node_modules
|
|
@ -1,368 +0,0 @@
|
|||
import {module} from '../module';
|
||||
export {factory as mdlFactory} from './index.mdl';
|
||||
require('./style.scss');
|
||||
|
||||
export const component = {
|
||||
transclude: true,
|
||||
bindings: {
|
||||
url: '@',
|
||||
showField: '@',
|
||||
valueField: '@',
|
||||
model: '='
|
||||
},
|
||||
template: template,
|
||||
controller: controller
|
||||
};
|
||||
module.component('vnAutocomplete', component);
|
||||
|
||||
template.$inject = ['$element', '$attrs', 'vnInputAttrsNormalizer', 'vnResolveDefaultComponent'];
|
||||
function template($element, $attrs, normalizer, resolve) {
|
||||
normalizer.normalize($attrs);
|
||||
return resolve.getTemplate('autocomplete', $attrs);
|
||||
}
|
||||
|
||||
controller.$inject = ['$http', '$element', '$attrs', '$scope', '$parse', '$document', 'vnPopover'];
|
||||
function controller($http, $element, $attrs, $scope, $parse, $document, popoverProvider) {
|
||||
let locked = false;
|
||||
|
||||
$scope.$watch($attrs.model, (newValue) => {
|
||||
if(!locked) {
|
||||
locked = true;
|
||||
this.setValue(newValue);
|
||||
locked = false;
|
||||
}
|
||||
});
|
||||
|
||||
componentHandler.upgradeElement($element[0].firstChild);
|
||||
|
||||
function mdlUpdate() {
|
||||
let mdlField = $element[0].firstChild.MaterialTextfield;
|
||||
if (mdlField)
|
||||
mdlField.updateClasses_();
|
||||
}
|
||||
|
||||
Object.assign(this, {
|
||||
init: function() {
|
||||
this.input = $element[0].querySelector('input');
|
||||
this.item = null;
|
||||
this.data = null;
|
||||
this.popover = null;
|
||||
this.popoverData = null;
|
||||
this.timeoutId = null;
|
||||
this.lastSearch = null;
|
||||
this.lastRequest = null;
|
||||
this.currentRequest = null;
|
||||
this.moreData = false;
|
||||
this.activeOption = -1;
|
||||
this.maxRows = 10;
|
||||
this.requestDelay = 350;
|
||||
this.requestItem();
|
||||
},
|
||||
loadData: function(textFilter) {
|
||||
textFilter = textFilter ? textFilter : '';
|
||||
|
||||
if(this.lastSearch === textFilter) {
|
||||
this.popoverDataReady();
|
||||
return;
|
||||
}
|
||||
|
||||
this.lastSearch = textFilter;
|
||||
|
||||
let lastRequest = this.lastRequest;
|
||||
let requestWillSame = lastRequest !== null
|
||||
&& !this.moreData
|
||||
&& textFilter.substr(0, lastRequest.length) === lastRequest;
|
||||
|
||||
if(requestWillSame)
|
||||
this.localFilter(textFilter);
|
||||
else
|
||||
this.requestData(textFilter, false);
|
||||
},
|
||||
getRequestFields: function() {
|
||||
let fields = {};
|
||||
fields[this.valueField] = true;
|
||||
fields[this.showField] = true;
|
||||
return fields;
|
||||
},
|
||||
requestData: function(textFilter, append) {
|
||||
let where = {};
|
||||
let skip = 0;
|
||||
|
||||
if(textFilter)
|
||||
where[this.showField] = {ilike: textFilter};
|
||||
if(append && this.data)
|
||||
skip = this.data.length;
|
||||
|
||||
let filter = {
|
||||
fields: this.getRequestFields(),
|
||||
where: where,
|
||||
order: `${this.showField} ASC`,
|
||||
skip: skip,
|
||||
limit: this.maxRows
|
||||
};
|
||||
|
||||
this.lastRequest = textFilter ? textFilter : '';
|
||||
let json = JSON.stringify(filter);
|
||||
|
||||
if(this.currentRequest)
|
||||
this.currentRequest.resolve();
|
||||
|
||||
this.currentRequest = $http.get(`${this.url}?filter=${json}`);
|
||||
this.currentRequest.then(
|
||||
json => this.onRequest(json.data, append),
|
||||
json => this.onRequest([])
|
||||
);
|
||||
},
|
||||
onRequest: function(data, append) {
|
||||
this.currentRequest = null;
|
||||
this.moreData = data.length >= this.maxRows;
|
||||
|
||||
if(!append || !this.data)
|
||||
this.data = data;
|
||||
else
|
||||
this.data = this.data.concat(data);
|
||||
|
||||
this.setPopoverData(this.data);
|
||||
},
|
||||
localFilter: function(textFilter) {
|
||||
let regex = new RegExp(textFilter, 'i');
|
||||
let data = this.data.filter((item) => {
|
||||
return regex.test(item[this.showField]);
|
||||
});
|
||||
this.setPopoverData(data);
|
||||
},
|
||||
setPopoverData: function(data) {
|
||||
this.popoverData = data;
|
||||
this.popoverDataReady();
|
||||
},
|
||||
popoverDataReady: function() {
|
||||
if(this.hasFocus)
|
||||
this.showPopover();
|
||||
},
|
||||
showPopover: function() {
|
||||
if(!this.data) return;
|
||||
|
||||
let fragment = $document[0].createDocumentFragment();
|
||||
let data = this.popoverData;
|
||||
|
||||
for(let i = 0; i < data.length; i++) {
|
||||
let li = $document[0].createElement('li');
|
||||
li.appendChild($document[0].createTextNode(data[i][this.showField]));
|
||||
fragment.appendChild(li);
|
||||
}
|
||||
|
||||
if(this.moreData) {
|
||||
let li = $document[0].createElement('li');
|
||||
li.appendChild($document[0].createTextNode('Load more'));
|
||||
li.className = 'load-more';
|
||||
fragment.appendChild(li);
|
||||
}
|
||||
|
||||
if (!this.popover) {
|
||||
let popover = $document[0].createElement('ul');
|
||||
popover.addEventListener('click',
|
||||
(e) => this.onPopoverClick(e));
|
||||
popover.addEventListener('mousedown',
|
||||
(e) => this.onPopoverMousedown(e));
|
||||
popover.className = 'vn-autocomplete';
|
||||
popover.appendChild(fragment);
|
||||
popoverProvider.show(popover, this.input);
|
||||
this.popover = popover;
|
||||
}
|
||||
else {
|
||||
this.popover.innerHTML = '';
|
||||
this.popover.appendChild(fragment);
|
||||
}
|
||||
},
|
||||
hidePopover: function() {
|
||||
if(!this.popover) return;
|
||||
this.activeOption = -1;
|
||||
popoverProvider.hide();
|
||||
this.popover = null;
|
||||
},
|
||||
selectPopoverOption: function(index) {
|
||||
if(!this.popover || index == -1) return;
|
||||
if(index < this.popoverData.length) {
|
||||
this.selectOptionByDataIndex(this.popoverData, index);
|
||||
this.hidePopover();
|
||||
}
|
||||
else
|
||||
this.requestData(this.lastRequest, true);
|
||||
},
|
||||
onPopoverClick: function(event) {
|
||||
let childs = this.popover.childNodes;
|
||||
for(let i = 0; i < childs.length; i++)
|
||||
if(childs[i] === event.target) {
|
||||
this.selectPopoverOption(i);
|
||||
break;
|
||||
}
|
||||
},
|
||||
onPopoverMousedown: function(event) {
|
||||
// Prevents input from loosing focus
|
||||
event.preventDefault();
|
||||
},
|
||||
onClick: function(event) {
|
||||
if(!this.popover)
|
||||
this.showPopover();
|
||||
},
|
||||
onFocus: function() {
|
||||
this.hasFocus = true;
|
||||
this.input.select();
|
||||
|
||||
if(this.data)
|
||||
this.showPopover();
|
||||
else
|
||||
this.loadData();
|
||||
},
|
||||
onBlur: function() {
|
||||
this.hasFocus = false;
|
||||
this.restoreShowValue();
|
||||
this.hidePopover();
|
||||
},
|
||||
onKeydown: function(event) {
|
||||
switch(event.keyCode) {
|
||||
case 13: // Enter
|
||||
this.selectPopoverOption(this.activeOption);
|
||||
break;
|
||||
case 27: // Escape
|
||||
this.restoreShowValue();
|
||||
this.input.select();
|
||||
break;
|
||||
case 38: // Arrow up
|
||||
this.activateOption(this.activeOption-1);
|
||||
break;
|
||||
case 40: // Arrow down
|
||||
this.activateOption(this.activeOption+1);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
},
|
||||
onKeyup: function(event) {
|
||||
if(!this.isKeycodePrintable(event.keyCode)) return;
|
||||
if(this.timeoutId) clearTimeout(this.timeoutId);
|
||||
this.timeoutId = setTimeout(() => this.onTimeout(), this.requestDelay);
|
||||
},
|
||||
onTimeout: function() {
|
||||
this.loadData(this.input.value);
|
||||
this.timeoutId = null;
|
||||
},
|
||||
isKeycodePrintable: function(keyCode) {
|
||||
return keyCode == 32 // Spacebar
|
||||
|| keyCode == 8 // Backspace
|
||||
|| (keyCode > 47 && keyCode < 58) // Numbers
|
||||
|| (keyCode > 64 && keyCode < 91) // Letters
|
||||
|| (keyCode > 95 && keyCode < 112) // Numpad
|
||||
|| (keyCode > 185 && keyCode < 193) // ;=,-./`
|
||||
|| (keyCode > 218 && keyCode < 223); // [\]'
|
||||
},
|
||||
restoreShowValue: function() {
|
||||
this.putItem(this.item);
|
||||
},
|
||||
requestItem: function() {
|
||||
if(!this.model) return;
|
||||
|
||||
let where = {};
|
||||
where[this.valueField] = this.model;
|
||||
|
||||
let filter = {
|
||||
fields: this.getRequestFields(),
|
||||
where: where,
|
||||
};
|
||||
|
||||
let json = JSON.stringify(filter);
|
||||
|
||||
$http.get(`${this.url}?filter=${json}`).then(
|
||||
json => this.onItemRequest(json.data),
|
||||
json => this.onItemRequest(null)
|
||||
);
|
||||
},
|
||||
onItemRequest: function(data) {
|
||||
if(data && data.length > 0)
|
||||
this.showItem(data[0]);
|
||||
else
|
||||
this.showItem(null);
|
||||
},
|
||||
activateOption: function(index) {
|
||||
|
||||
if(!this.popover)
|
||||
this.showPopover();
|
||||
|
||||
let popover = this.popover;
|
||||
let childs = popover.childNodes;
|
||||
let len = this.popoverData.length;
|
||||
|
||||
if(this.activeOption >= 0)
|
||||
childs[this.activeOption].className = '';
|
||||
|
||||
if(index >= len)
|
||||
index = 0;
|
||||
else if(index < 0)
|
||||
index = len - 1;
|
||||
|
||||
if (index >= 0) {
|
||||
let opt = childs[index];
|
||||
let top = popover.scrollTop;
|
||||
let height = popover.clientHeight;
|
||||
|
||||
if(opt.offsetTop + opt.offsetHeight > top + height)
|
||||
top = opt.offsetTop + opt.offsetHeight - height;
|
||||
else if(opt.offsetTop < top)
|
||||
top = opt.offsetTop;
|
||||
|
||||
opt.className = 'active';
|
||||
popover.scrollTop = top;
|
||||
}
|
||||
|
||||
this.activeOption = index;
|
||||
},
|
||||
setValue: function(value) {
|
||||
if(value) {
|
||||
let data = this.data;
|
||||
|
||||
if(data)
|
||||
for(let i = 0; i < data.length; i++)
|
||||
if(data[i][this.valueField] == value) {
|
||||
this.putItem(data[i]);
|
||||
return;
|
||||
}
|
||||
|
||||
this.requestItem();
|
||||
}
|
||||
else
|
||||
this.putItem(null);
|
||||
},
|
||||
selectOptionByIndex: function(index) {
|
||||
this.selectOptionByDataIndex(this.data, index);
|
||||
},
|
||||
selectOptionByDataIndex: function(data, index) {
|
||||
if(data && index >= 0 && index < data.length)
|
||||
this.putItem(data[index]);
|
||||
else
|
||||
this.putItem(null);
|
||||
},
|
||||
putItem: function(item) {
|
||||
this.showItem(item);
|
||||
let value = item ? item[this.valueField] : undefined;
|
||||
|
||||
if(!locked) {
|
||||
setTimeout (() => {
|
||||
$scope.$apply(function () {
|
||||
locked = true;
|
||||
$parse($attrs.model).assign($scope, value);
|
||||
locked = false;
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
showItem: function(item) {
|
||||
this.input.value = item ? item[this.showField] : '';
|
||||
this.item = item;
|
||||
mdlUpdate();
|
||||
}
|
||||
});
|
||||
|
||||
this.init();
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
<div class="mdl-textfield mdl-js-textfield *[className]*">
|
||||
<input
|
||||
class="mdl-textfield__input"
|
||||
type="text"
|
||||
rule="*[rule]*"
|
||||
*[enabled]*
|
||||
*[focus]*
|
||||
ng-keydown="$ctrl.onKeydown($event)"
|
||||
ng-click="$ctrl.onClick($event)"
|
||||
ng-keyup="$ctrl.onKeyup($event)"
|
||||
ng-focus="$ctrl.onFocus($event)"
|
||||
ng-blur="$ctrl.onBlur($event)"/>
|
||||
<label class="mdl-textfield__label" translate>*[label]*</label>
|
||||
</div>
|
|
@ -1,11 +0,0 @@
|
|||
import {module} from '../module';
|
||||
|
||||
export function factory() {
|
||||
return {
|
||||
template: require('./index.mdl.html'),
|
||||
default: {
|
||||
className: 'mdl-textfield--floating-label'
|
||||
}
|
||||
}
|
||||
}
|
||||
module.factory('vnAutocompleteMdlFactory', factory);
|
|
@ -1,25 +0,0 @@
|
|||
ul.vn-autocomplete {
|
||||
list-style-type: none;
|
||||
padding: 1em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: auto;
|
||||
max-height: 300px;
|
||||
|
||||
li {
|
||||
display: block;
|
||||
padding: .8em;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
|
||||
&.active,
|
||||
&:hover {
|
||||
background-color: rgba(1,1,1,.1);
|
||||
}
|
||||
&.load-more {
|
||||
color: #ffa410;
|
||||
font-weight: bold;
|
||||
padding: .4em .8em;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
<!-- por definir -->
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as util from '../util';
|
||||
import * as constant from '../constants';
|
||||
import template from './button.bt.html';
|
||||
|
||||
const _NAME = 'button';
|
||||
const DEFAULT_CLASS = '';
|
||||
const DEFAULT_TEXT = 'Button';
|
||||
|
||||
export const NAME = util.getFactoryName(_NAME + constant.BOOTSTRAP_FRAMEWORK);
|
||||
|
||||
export function factory() {
|
||||
return {
|
||||
template: template,
|
||||
default: {
|
||||
text: DEFAULT_TEXT,
|
||||
className: DEFAULT_CLASS,
|
||||
enabled: 'true',
|
||||
typeName: 'button'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_module.factory(NAME, factory);
|
|
@ -1,18 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as resolveFactory from '../resolveDefaultComponents';
|
||||
import * as util from '../util';
|
||||
|
||||
const _NAME = 'button';
|
||||
export const NAME = util.getName(_NAME);
|
||||
|
||||
directive.$inject = [resolveFactory.NAME];
|
||||
export function directive(resolve) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: function(_, attr) {
|
||||
return resolve.getTemplate(_NAME, attr);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
_module.directive(NAME, directive);
|
|
@ -1,3 +0,0 @@
|
|||
<button type = "*[typeName]*" class="*[className]*" *[enabled]* translate>
|
||||
*[label]*
|
||||
</button>
|
|
@ -1,21 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as util from '../util';
|
||||
import * as constant from '../constants';
|
||||
import template from './button.mdl.html';
|
||||
|
||||
const _NAME = 'button';
|
||||
export const NAME = util.getFactoryName(_NAME + constant.MATERIAL_DESIGN_FRAMEWORK);
|
||||
|
||||
export function factory() {
|
||||
return {
|
||||
template: template,
|
||||
default: {
|
||||
label: 'Submit',
|
||||
className: 'mdl-button mdl-js-button mdl-button--raised mdl-button--colored',
|
||||
enabled: 'true',
|
||||
typeName: 'button'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_module.factory(NAME, factory);
|
|
@ -1,21 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as resolveFactory from '../resolveDefaultComponents';
|
||||
import * as util from '../util';
|
||||
require ('./style.css');
|
||||
|
||||
const _NAME = 'card';
|
||||
export const NAME = util.getName(_NAME);
|
||||
|
||||
directive.$inject = [resolveFactory.NAME];
|
||||
export function directive(resolve) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
transclude: true,
|
||||
template: function(_, attr) {
|
||||
return resolve.getTemplate(_NAME, attr);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
_module.directive(NAME, directive);
|
||||
|
|
@ -1 +0,0 @@
|
|||
<div class="demo-card-wide mdl-shadow--2dp bg-panel" *[foo]* ng-transclude></div>
|
|
@ -1,16 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as util from '../util';
|
||||
import * as constant from '../constants';
|
||||
import template from './card.mdl.html';
|
||||
|
||||
const _NAME = 'card';
|
||||
|
||||
export const NAME = util.getFactoryName(_NAME + constant.MATERIAL_DESIGN_FRAMEWORK);
|
||||
|
||||
export function factory() {
|
||||
return {
|
||||
template: template
|
||||
}
|
||||
}
|
||||
|
||||
_module.factory(NAME, factory);
|
|
@ -1,3 +0,0 @@
|
|||
vn-card {
|
||||
display: block;
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
<!-- por definir -->
|
||||
|
|
@ -1 +0,0 @@
|
|||
// por definir
|
|
@ -1,28 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as resolveFactory from '../resolveDefaultComponents';
|
||||
import * as normalizerFactory from '../inputAttrsNormalizer';
|
||||
import * as util from '../util';
|
||||
|
||||
const _NAME = 'check';
|
||||
export const NAME = util.getName(_NAME);
|
||||
|
||||
directive.$inject = [resolveFactory.NAME, normalizerFactory.NAME];
|
||||
export function directive(resolve, normalizer) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: function(_, attrs) {
|
||||
normalizer.normalize(attrs);
|
||||
return resolve.getTemplate(_NAME, attrs);
|
||||
},
|
||||
link: function(scope, element, attrs) {
|
||||
scope.$watch(attrs.model, () => {
|
||||
let mdlField = element[0].firstChild.MaterialCheckbox;
|
||||
if (mdlField)
|
||||
mdlField.updateClasses_();
|
||||
});
|
||||
componentHandler.upgradeElement(element[0].firstChild);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
_module.directive(NAME, directive);
|
|
@ -1,4 +0,0 @@
|
|||
<label class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect">
|
||||
<input type="checkbox" name="*[name]*" class="*[className]*" name="*[name]*" ng-model="*[model]*" rule="*[rule]*" *[enabled]* *[focus]*>
|
||||
<span class="mdl-checkbox__label" translate>*[label]*</span>
|
||||
</label>
|
|
@ -1,21 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as util from '../util';
|
||||
import * as constant from '../constants';
|
||||
import template from './check.mdl.html';
|
||||
|
||||
const _NAME = 'check';
|
||||
const DEFAULT_CLASS = 'mdl-checkbox__input';
|
||||
|
||||
export const NAME = util.getFactoryName(_NAME + constant.MATERIAL_DESIGN_FRAMEWORK);
|
||||
|
||||
export function factory() {
|
||||
return {
|
||||
template: template,
|
||||
default: {
|
||||
enabled: 'true',
|
||||
className: DEFAULT_CLASS
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
_module.factory(NAME, factory);
|
|
@ -1,28 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as resolveFactory from '../resolveDefaultComponents';
|
||||
import * as normalizerFactory from '../inputAttrsNormalizer';
|
||||
import * as util from '../util';
|
||||
|
||||
const _NAME = 'combo';
|
||||
export const NAME = util.getName(_NAME);
|
||||
|
||||
directive.$inject = [resolveFactory.NAME, normalizerFactory.NAME];
|
||||
export function directive(resolve, normalizer) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
transclude: true,
|
||||
template: function(_, attrs) {
|
||||
normalizer.normalize(attrs);
|
||||
return resolve.getTemplate(_NAME, attrs);
|
||||
},
|
||||
link: function(scope, element, attrs) {
|
||||
scope.$watch(attrs.model, () => {
|
||||
let mdlField = element[0].firstChild.MaterialTextfield;
|
||||
if (mdlField)
|
||||
mdlField.updateClasses_();
|
||||
});
|
||||
componentHandler.upgradeElement(element[0].firstChild);
|
||||
}
|
||||
};
|
||||
}
|
||||
_module.directive(NAME, directive);
|
|
@ -1,5 +0,0 @@
|
|||
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
|
||||
<select class="mdl-textfield__input" class="*[className]*" name="*[name]*" ng-model="*[model]*" rule="*[rule]*" *[enabled]* ng-transclude>
|
||||
</select>
|
||||
<label class="mdl-textfield__label" translate>*[label]*</label>
|
||||
</div>
|
|
@ -1,14 +0,0 @@
|
|||
import {module} from '../module';
|
||||
import template from './combo.mdl.html';
|
||||
|
||||
export const NAME = 'vnComboMdlFactory';
|
||||
export function factory() {
|
||||
return {
|
||||
template: template,
|
||||
default: {
|
||||
label: 'Label',
|
||||
enabled: 'enabled'
|
||||
}
|
||||
}
|
||||
}
|
||||
module.factory(NAME, factory);
|
|
@ -1,21 +0,0 @@
|
|||
import {module} from './module';
|
||||
|
||||
config.$inject = ['$translateProvider', '$translatePartialLoaderProvider'];
|
||||
export function config($translateProvider, $translatePartialLoaderProvider) {
|
||||
$translatePartialLoaderProvider.addPart('core');
|
||||
|
||||
let conf = {urlTemplate: '/static/locale/{part}/{lang}.json'};
|
||||
let langs = ['en', 'es'];
|
||||
let localLangs = {
|
||||
'en_US': 'en',
|
||||
'en_UK': 'en',
|
||||
'es_ES': 'es',
|
||||
'es_AR': 'es'
|
||||
};
|
||||
$translateProvider
|
||||
.useSanitizeValueStrategy('escape')
|
||||
.useLoader('$translatePartialLoader', conf)
|
||||
.registerAvailableLanguageKeys(langs, localLangs)
|
||||
.determinePreferredLanguage();
|
||||
}
|
||||
module.config(config);
|
|
@ -1,10 +0,0 @@
|
|||
|
||||
// Proyect prefix name
|
||||
export const PREFIX ='vn';
|
||||
|
||||
// CSS frameworks
|
||||
export const MATERIAL_DESIGN_FRAMEWORK = 'Mdl';
|
||||
export const BOOTSTRAP_FRAMEWORK = 'Bt';
|
||||
|
||||
// Module dependencies
|
||||
export const EMPTY_DEPENDECIES = [];
|
|
@ -1,5 +0,0 @@
|
|||
import {module} from './module';
|
||||
|
||||
export const NAME = 'copyObject';
|
||||
|
||||
module.value(NAME, angular.copy);
|
|
@ -1,62 +0,0 @@
|
|||
import './mdl-override.css';
|
||||
|
||||
export * from './module';
|
||||
export * from './util';
|
||||
|
||||
import './config';
|
||||
|
||||
export {SplitingRegister as splitingRegister} from './splitingregister';
|
||||
export {NAME as RESOLVEDEFAULTCOMPONENT, ResolveDefaultComponent} from './resolveDefaultComponents';
|
||||
export {NAME as INTERPOLATE, Interpolate} from './interpolate';
|
||||
export {NAME as ROUTES_LOADER, RoutesLoader} from './routesLoader';
|
||||
export {NAME as COPY_OBJECT} from './copy';
|
||||
export {NAME as EQUALS_OBJECT} from './equals';
|
||||
export {NAME as GET_DATA_MODIFIED, factory as Modified} from './modified';
|
||||
|
||||
export {NAME as FOCUS, directive as Focus} from './focus';
|
||||
export {NAME as RULE, directive as Rule} from './rule';
|
||||
|
||||
export {NAME as BUTTON, directive as ButtonDirective} from './button/button';
|
||||
export {NAME as BUTTON_MDL, factory as buttonMdl} from './button/button.mdl';
|
||||
export {NAME as BUTTON_BT, factory as buttonBt} from './button/button.bt';
|
||||
export {NAME as CHECK, directive as CheckDirective} from './check/check';
|
||||
export {NAME as CHECK_MDL, factory as checknMdl} from './check/check.mdl';
|
||||
export {NAME as CHECK_BT, factory as checkBt} from './check/check.bt';
|
||||
export {NAME as RADIO, directive as RadioDirective} from './radio/radio';
|
||||
export {NAME as RADIO_MDL, factory as radionMdl} from './radio/radio.mdl';
|
||||
export {NAME as RADIO_BT, factory as radioBt} from './radio/radio.bt';
|
||||
export {NAME as TEXTAREA, directive as TextareaDirective} from './textarea/textarea';
|
||||
export {NAME as TEXTAREA_MDL, factory as textareaMdl} from './textarea/textarea.mdl';
|
||||
export {NAME as TEXTFIELD, directive as TextfieldDirective} from './textfield/textfield';
|
||||
export {NAME as TEXTFIELD_MDL, factory as textfieldMdl} from './textfield/textfield.mdl';
|
||||
export {NAME as TEXTFIELD_BT, factory as textfieldBt} from './textfield/textfield.bt';
|
||||
export {NAME as LABEL, directive as LabelDirective} from './label/label';
|
||||
export {NAME as LABEL_MDL, factory as labelMdl} from './label/label.mdl';
|
||||
export {NAME as LABEL_BT, factory as labelBt} from './label/label.bt';
|
||||
export {NAME as ICON_BUTTON, directive as IconButtonDirective} from './icon-button/icon-button';
|
||||
export {NAME as ICON_BUTTON_MDL, factory as iconButtonMdl} from './icon-button/icon-button.mdl';
|
||||
export {NAME as PASSWORD, directive as PasswordDirective} from './password/password';
|
||||
export {NAME as PASSWORD_MDL, factory as passwordMdl} from './password/password.mdl';
|
||||
export {NAME as SUBMIT, directive as SubmitDirective} from './submit/submit';
|
||||
export {NAME as SUBMIT_MDL, factory as submitMdl} from './submit/submit.mdl';
|
||||
export {NAME as SNACKBAR, directive as SnackbarDirective} from './snackbar/snackbar';
|
||||
export {NAME as SNACKBAR_MDL, factory as snackbarMdl} from './snackbar/snackbar.mdl';
|
||||
export {NAME as SPINNER, directive as SpinnerDirective} from './spinner/spinner';
|
||||
export {NAME as SPINNER_MDL, factory as spinnerMdl} from './spinner/spinner.mdl';
|
||||
export {NAME as COMBO, directive as ComboDirective} from './combo/combo';
|
||||
export {NAME as COMBO_MDL, factory as comboMdl} from './combo/combo.mdl';
|
||||
export {NAME as DATE_PICKER, directive as DatePickerDirective} from './date-picker/date-picker';
|
||||
export {NAME as DATE_PICKER_MDL, factory as datePickerMdl} from './date-picker/date-picker.mdl';
|
||||
export {NAME as CARD, directive as CardDirective} from './card/card';
|
||||
export {NAME as CARD_MDL, factory as cardMdl} from './card/card.mdl';
|
||||
export {NAME as SWITCH, directive as SwitchDirective} from './switch/switch';
|
||||
export {NAME as SWITCH_MDL, factory as switchdMdl} from './switch/switch.mdl';
|
||||
export {NAME as FLOATBUTTON, directive as FloatButtonDirective} from './floatbutton/floatbutton';
|
||||
export {NAME as FLOATBUTTON_MDL, factory as floatButtondMdl} from './floatbutton/floatbutton.mdl';
|
||||
|
||||
export {directive as Icon} from './icon/index';
|
||||
export {directive as Autocomplete} from './autocomplete/index';
|
||||
export {directive as Popover} from './popover/index';
|
||||
export {directive as Dialog} from './dialog/index';
|
||||
export {component as Title} from './title/index';
|
||||
export {component as Subtitle} from './subtitle/index';
|
|
@ -1,27 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as resolveFactory from '../resolveDefaultComponents';
|
||||
import * as normalizerFactory from '../inputAttrsNormalizer';
|
||||
import * as util from '../util';
|
||||
|
||||
const _NAME = 'datePicker';
|
||||
export const NAME = util.getName(_NAME);
|
||||
|
||||
directive.$inject = [resolveFactory.NAME, normalizerFactory.NAME];
|
||||
export function directive(resolve, normalizer) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: function(_, attrs) {
|
||||
normalizer.normalize(attrs);
|
||||
return resolve.getTemplate(_NAME, attrs);
|
||||
},
|
||||
link: function(scope, element, attrs) {
|
||||
scope.$watch(attrs.model, () => {
|
||||
let mdlField = element[0].firstChild.MaterialTextfield;
|
||||
if (mdlField)
|
||||
mdlField.updateClasses_();
|
||||
});
|
||||
componentHandler.upgradeElement(element[0].firstChild);
|
||||
}
|
||||
};
|
||||
}
|
||||
_module.directive(NAME, directive);
|
|
@ -1,4 +0,0 @@
|
|||
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
|
||||
<input class="mdl-textfield__input *[className]*" type="text" name="*[name]*" ng-model="*[model]*" rule="*[rule]*" *[enabled]*/>
|
||||
<label class="mdl-textfield__label" translate>*[label]*</label>
|
||||
</div>
|
|
@ -1,14 +0,0 @@
|
|||
import {module} from '../module';
|
||||
import template from './date-picker.mdl.html';
|
||||
|
||||
export const NAME = 'vnDatePickerMdlFactory';
|
||||
export function factory() {
|
||||
return {
|
||||
template: template,
|
||||
default: {
|
||||
label: 'Label',
|
||||
enabled: 'enabled'
|
||||
}
|
||||
}
|
||||
}
|
||||
module.factory(NAME, factory);
|
|
@ -1,75 +0,0 @@
|
|||
import {module} from '../module';
|
||||
require('./style.css');
|
||||
|
||||
directive.$inject = ['vnDialog'];
|
||||
export function directive(dialog) {
|
||||
return {
|
||||
restrict: 'A',
|
||||
link: function($scope, $element, $attrs, $ctrl) {
|
||||
$element.on('click', function(event) {
|
||||
dialog.showComponent($attrs.vnDialog, $scope);
|
||||
event.preventDefault();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
module.directive('vnDialog', directive);
|
||||
|
||||
provider.$inject = ['$document', '$compile'];
|
||||
export function provider($document, $compile) {
|
||||
return {
|
||||
show: function(childElement) {
|
||||
let background = $document[0].createElement('div');
|
||||
background.className = 'vn-background';
|
||||
background.addEventListener('mousedown',
|
||||
this.onBackgroundMouseDown.bind(this));
|
||||
this.background = background;
|
||||
|
||||
let dialog = $document[0].createElement('div');
|
||||
dialog.className = 'vn-dialog';
|
||||
dialog.addEventListener('mousedown',
|
||||
this.onDialogMouseDown.bind(this));
|
||||
dialog.appendChild (childElement);
|
||||
background.appendChild (dialog);
|
||||
this.dialog = dialog;
|
||||
|
||||
let style = this.dialog.style;
|
||||
let screenMargin = 20;
|
||||
|
||||
let width = dialog.offsetWidth;
|
||||
let height = dialog.offsetHeight;
|
||||
let innerWidth = window.innerWidth;
|
||||
let innerHeight = window.innerHeight;
|
||||
|
||||
if(width + screenMargin > innerWidth) {
|
||||
width = innerWidth - dblMargin;
|
||||
style.width = width +'px';
|
||||
}
|
||||
if(height + screenMargin > innerHeight) {
|
||||
height = innerHeight - dblMargin;
|
||||
style.height = height +'px';
|
||||
}
|
||||
|
||||
$document[0].body.appendChild (background);
|
||||
},
|
||||
showComponent: function(childComponent, $scope) {
|
||||
let childElement = $document[0].createElement(childComponent);
|
||||
$compile(childElement)($scope);
|
||||
this.show(childElement);
|
||||
},
|
||||
hide: function() {
|
||||
$document[0].body.removeChild (this.background);
|
||||
this.background = null;
|
||||
this.dialog = null;
|
||||
this.lastEvent = null;
|
||||
},
|
||||
onDialogMouseDown: function(event) {
|
||||
this.lastEvent = event;
|
||||
},
|
||||
onBackgroundMouseDown: function(event) {
|
||||
if (event != this.lastEvent)
|
||||
this.hide();
|
||||
}
|
||||
};
|
||||
}
|
||||
module.provider('vnDialog', function() {this.$get = provider;});
|
|
@ -1,22 +0,0 @@
|
|||
.vn-dialog {
|
||||
position: relative;
|
||||
box-shadow: 0 0 .4em rgba(1,1,1,.4);
|
||||
background-color: white;
|
||||
border-radius: .2em;
|
||||
overflow: auto;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
|
||||
width: 400px;
|
||||
margin-top: -150px;
|
||||
margin-left: -200px;
|
||||
}
|
||||
.vn-background {
|
||||
z-index: 100;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background-color: rgba(1,1,1,.4);
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
import {module} from './module';
|
||||
|
||||
export const NAME = 'equalsObject';
|
||||
|
||||
module.value(NAME, angular.equals);
|
|
@ -1,19 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as resolveFactory from '../resolveDefaultComponents';
|
||||
import * as util from '../util';
|
||||
|
||||
const _NAME = 'floatButton';
|
||||
export const NAME = util.getName(_NAME);
|
||||
|
||||
directive.$inject = [resolveFactory.NAME];
|
||||
export function directive(resolve) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: function(_, attr) {
|
||||
return resolve.getTemplate(_NAME, attr);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
_module.directive(NAME, directive);
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
<button class="*[className]*">
|
||||
<vn-icon icon="*[icon]*"></vn-icon>
|
||||
</button>
|
|
@ -1,20 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as util from '../util';
|
||||
import * as constant from '../constants';
|
||||
import template from './floatbutton.mdl.html';
|
||||
|
||||
const _NAME = 'floatButton';
|
||||
const DEFAULT_CLASS = 'mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored';
|
||||
|
||||
export const NAME = util.getFactoryName(_NAME + constant.MATERIAL_DESIGN_FRAMEWORK);
|
||||
|
||||
export function factory() {
|
||||
return {
|
||||
template: template,
|
||||
default: {
|
||||
className: DEFAULT_CLASS
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
_module.factory(NAME, factory);
|
|
@ -1,14 +0,0 @@
|
|||
import {module} from './module';
|
||||
|
||||
export const NAME = 'vnFocus';
|
||||
export function directive() {
|
||||
return {
|
||||
restrict: 'A',
|
||||
link: function($scope, $element, $attrs) {
|
||||
var input = $element[0];
|
||||
input.focus();
|
||||
input.select();
|
||||
}
|
||||
};
|
||||
}
|
||||
module.directive(NAME, directive);
|
|
@ -1,17 +0,0 @@
|
|||
import {module as _module} from '../module';
|
||||
import * as resolveFactory from '../resolveDefaultComponents';
|
||||
import * as util from '../util';
|
||||
|
||||
const _NAME = 'iconButton';
|
||||
export const NAME = util.getName(_NAME);
|
||||
|
||||
directive.$inject = [resolveFactory.NAME];
|
||||
export function directive(resolve) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: function(_, attr) {
|
||||
return resolve.getTemplate(_NAME, attr);
|
||||
}
|
||||
};
|
||||
}
|
||||
_module.directive(NAME, directive);
|
|
@ -1,3 +0,0 @@
|
|||
<button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored *[className]*" *[enabled]*>
|
||||
<vn-icon icon="*[icon]*"></vn-icon>*[label]*
|
||||
</button>
|
|
@ -1,15 +0,0 @@
|
|||
import {module} from '../module';
|
||||
import template from './icon-button.mdl.html';
|
||||
|
||||
export const NAME = 'vnIconButtonMdlFactory';
|
||||
export function factory() {
|
||||
return {
|
||||
template: template,
|
||||
default: {
|
||||
enabled: 'enabled',
|
||||
icon: '',
|
||||
label: ''
|
||||
}
|
||||
};
|
||||
}
|
||||
module.factory(NAME, factory);
|
|
@ -1,19 +0,0 @@
|
|||
import {module} from '../module';
|
||||
export {factory as mdlFactory} from './index.mdl';
|
||||
import * as resolveFactory from '../resolveDefaultComponents';
|
||||
require('./style.css');
|
||||
|
||||
const _NAME = 'icon';
|
||||
export const NAME = 'vnIcon';
|
||||
|
||||
export function directive(resolver) {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: function(_, attrs) {
|
||||
return resolver.getTemplate(_NAME, attrs);
|
||||
}
|
||||
}
|
||||
}
|
||||
directive.$inject = [resolveFactory.NAME];
|
||||
|
||||
module.directive(NAME, directive);
|
|
@ -1 +0,0 @@
|
|||
<i display-block class="material-icons">*[icon]*</i>
|
|
@ -1,12 +0,0 @@
|
|||
import {module} from '../module';
|
||||
import template from './index.mdl.html';
|
||||
|
||||
export const NAME = 'vnIconMdlFactory';
|
||||
export function factory() {
|
||||
return {
|
||||
template: template,
|
||||
default: {}
|
||||
}
|
||||
}
|
||||
|
||||
module.factory(NAME, factory);
|
|
@ -1,7 +0,0 @@
|
|||
vn-icon {
|
||||
display: inline;
|
||||
font-size: 18pt;
|
||||
}
|
||||
vn-icon > i {
|
||||
font-size: inherit !important;
|
||||
}
|
|
@ -1,39 +0,0 @@
|
|||
import {module} from './module';
|
||||
|
||||
export const NAME = 'vnInputAttrsNormalizer';
|
||||
export class InputAttrsNormalizer {
|
||||
$get() {
|
||||
return {
|
||||
normalize: function(attrs) {
|
||||
if(attrs.field) {
|
||||
let split = attrs.field.split('.');
|
||||
let len = split.length;
|
||||
|
||||
if(len == 0)
|
||||
throw new Error (`Attribute 'field' can not be empty`);
|
||||
if(len > 3)
|
||||
throw new Error (`Attribute 'field' must have this syntax: [ctrl].[entity].[field]`);
|
||||
|
||||
let i = len - 1;
|
||||
let field = split[i--];
|
||||
let entity = i >= 0 ? split[i--] : 'model';
|
||||
let ctrl = i >= 0 ? split[i--] : '$ctrl';
|
||||
|
||||
if (attrs.model === undefined)
|
||||
attrs.model = `${ctrl}.${entity}.${field}`;
|
||||
if (attrs.rule === undefined && len >= 2)
|
||||
attrs.rule = `${entity}.${field}`;
|
||||
if (attrs.label === undefined && len >= 2)
|
||||
attrs.label = `${entity}.${field}`;
|
||||
if (attrs.name === undefined)
|
||||
attrs.name = field;
|
||||
}
|
||||
|
||||
if (attrs.focus !== undefined)
|
||||
attrs.focus = 'vn-focus';
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
module.provider(NAME, () => new InputAttrsNormalizer());
|
|
@ -1,202 +0,0 @@
|
|||
import {module} from './module';
|
||||
import {ng} from 'vendor';
|
||||
import * as util from './util';
|
||||
|
||||
export const NAME = util.getProviderName('interpolate');
|
||||
|
||||
function minErr() {}
|
||||
|
||||
function stringify(value) {
|
||||
if (value === null) { // null || undefined
|
||||
return '';
|
||||
}
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
break;
|
||||
case 'number':
|
||||
value = String(value);
|
||||
break;
|
||||
default:
|
||||
value = angular.toJson(value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
var $interpolateMinErr = ng.angular.$interpolateMinErr = ng.$$minErr('$interpolate');
|
||||
|
||||
$interpolateMinErr.throwNoconcat = function(text) {
|
||||
throw $interpolateMinErr('noconcat',
|
||||
'Error while interpolating: {0}\nStrict Contextual Escaping disallows ' +
|
||||
'interpolations that concatenate multiple expressions when a trusted value is ' +
|
||||
'required. See http://docs.angularjs.org/api/ng.$sce', text);
|
||||
};
|
||||
|
||||
$interpolateMinErr.interr = function(text, err) {
|
||||
return $interpolateMinErr('interr', 'Can\'t interpolate: {0}\n{1}', text, err.toString());
|
||||
};
|
||||
|
||||
function $get($parse, $exceptionHandler, $sce) {
|
||||
var startSymbolLength = this._startSymbol.length,
|
||||
endSymbolLength = this._endSymbol.length,
|
||||
escapedStartRegexp = new RegExp(this._startSymbol.replace(/./g, escape), 'g'),
|
||||
escapedEndRegexp = new RegExp(this._endSymbol.replace(/./g, escape), 'g'),
|
||||
self = this;
|
||||
|
||||
function escape(ch) {
|
||||
return '\\\\\\' + ch;
|
||||
}
|
||||
|
||||
function unescapeText(text) {
|
||||
return text.replace(escapedStartRegexp, self._startSymbol)
|
||||
.replace(escapedEndRegexp, self._endSymbol);
|
||||
}
|
||||
|
||||
// TODO: this is the same as the constantWatchDelegate in parse.js
|
||||
function constantWatchDelegate(scope, listener, objectEquality, constantInterp) {
|
||||
var unwatch = scope.$watch(function constantInterpolateWatch(scope) {
|
||||
unwatch();
|
||||
return constantInterp(scope);
|
||||
}, listener, objectEquality);
|
||||
return unwatch;
|
||||
}
|
||||
|
||||
function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
|
||||
// Provide a quick exit and simplified result function for text with no interpolation
|
||||
if (!text.length || text.indexOf(self._startSymbol) === -1) {
|
||||
var constantInterp;
|
||||
if (!mustHaveExpression) {
|
||||
var unescapedText = unescapeText(text);
|
||||
constantInterp = valueFn(unescapedText);
|
||||
constantInterp.exp = text;
|
||||
constantInterp.expressions = [];
|
||||
constantInterp.$$watchDelegate = constantWatchDelegate;
|
||||
}
|
||||
return constantInterp;
|
||||
}
|
||||
|
||||
allOrNothing = Boolean(allOrNothing);
|
||||
var startIndex,
|
||||
endIndex,
|
||||
index = 0,
|
||||
expressions = [],
|
||||
parseFns = [],
|
||||
textLength = text.length,
|
||||
exp,
|
||||
concat = [],
|
||||
expressionPositions = [];
|
||||
|
||||
while (index < textLength) {
|
||||
if (((startIndex = text.indexOf(self._startSymbol, index)) !== -1) &&
|
||||
((endIndex = text.indexOf(self._endSymbol, startIndex + startSymbolLength)) !== -1)) {
|
||||
if (index !== startIndex) {
|
||||
concat.push(unescapeText(text.substring(index, startIndex)));
|
||||
}
|
||||
exp = text.substring(startIndex + startSymbolLength, endIndex);
|
||||
expressions.push(exp);
|
||||
parseFns.push($parse(exp, parseStringifyInterceptor));
|
||||
index = endIndex + endSymbolLength;
|
||||
expressionPositions.push(concat.length);
|
||||
concat.push('');
|
||||
} else {
|
||||
// we did not find an interpolation, so we have to add the remainder to the separators array
|
||||
if (index !== textLength) {
|
||||
concat.push(unescapeText(text.substring(index)));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (trustedContext && concat.length > 1) {
|
||||
$interpolateMinErr.throwNoconcat(text);
|
||||
}
|
||||
|
||||
if (!mustHaveExpression || expressions.length) {
|
||||
var compute = function(values) {
|
||||
for (var i = 0, ii = expressions.length; i < ii; i++) {
|
||||
if (allOrNothing && isUndefined(values[i])) return;
|
||||
concat[expressionPositions[i]] = values[i];
|
||||
}
|
||||
return concat.join('');
|
||||
};
|
||||
|
||||
var getValue = function(value) {
|
||||
return trustedContext ?
|
||||
$sce.getTrusted(trustedContext, value) :
|
||||
$sce.valueOf(value);
|
||||
};
|
||||
|
||||
return angular.extend(function interpolationFn(context) {
|
||||
var i = 0;
|
||||
var ii = expressions.length;
|
||||
var values = new Array(ii);
|
||||
|
||||
try {
|
||||
for (; i < ii; i++) {
|
||||
values[i] = parseFns[i](context);
|
||||
}
|
||||
|
||||
return compute(values);
|
||||
} catch (err) {
|
||||
$exceptionHandler($interpolateMinErr.interr(text, err));
|
||||
}
|
||||
}, {
|
||||
// all of these properties are undocumented for now
|
||||
exp: text, // just for compatibility with regular watchers created via $watch
|
||||
expressions: expressions
|
||||
});
|
||||
}
|
||||
|
||||
function parseStringifyInterceptor(value) {
|
||||
try {
|
||||
value = getValue(value);
|
||||
return allOrNothing && !isDefined(value) ? value : stringify(value);
|
||||
} catch (err) {
|
||||
$exceptionHandler($interpolateMinErr.interr(text, err));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$interpolate.startSymbol = function() {
|
||||
return startSymbol;
|
||||
};
|
||||
|
||||
$interpolate.endSymbol = function() {
|
||||
return endSymbol;
|
||||
};
|
||||
|
||||
return $interpolate;
|
||||
}
|
||||
|
||||
$get.$inject = ['$parse', '$exceptionHandler', '$sce'];
|
||||
|
||||
export class Interpolate
|
||||
{
|
||||
constructor() {
|
||||
this._startSymbol = '*[';
|
||||
this._endSymbol = ']*';
|
||||
}
|
||||
|
||||
set startSymbol(value) {
|
||||
if (value) {
|
||||
this._startSymbol = value;
|
||||
return this;
|
||||
} else {
|
||||
return this._startSymbol;
|
||||
}
|
||||
}
|
||||
|
||||
set endSymbol(value) {
|
||||
if (value) {
|
||||
this._endSymbol = value;
|
||||
return this;
|
||||
} else {
|
||||
return this._endSymbol;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Interpolate.prototype.$get = $get;
|
||||
var interpolate = new Interpolate();
|
||||
module.provider(NAME, () => interpolate);
|
|
@ -1,2 +0,0 @@
|
|||
<!-- por definir -->
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue