Merge branch 'dev' of https://git.verdnatura.es/salix into dev
This commit is contained in:
commit
e79beaa13f
|
@ -5,3 +5,4 @@ import './validation';
|
||||||
import './acl';
|
import './acl';
|
||||||
import './on-error-src';
|
import './on-error-src';
|
||||||
import './zoom-image';
|
import './zoom-image';
|
||||||
|
import './visible-by';
|
||||||
|
|
|
@ -55,17 +55,17 @@ describe('Directive zoomImage', () => {
|
||||||
let image = getCompiledImage(`<img src="${srcDefault}" zoom-image>`);
|
let image = getCompiledImage(`<img src="${srcDefault}" zoom-image>`);
|
||||||
image[0].click();
|
image[0].click();
|
||||||
findContainer = document.getElementById(idContainer);
|
findContainer = document.getElementById(idContainer);
|
||||||
let findNewImage = findContainer.querySelector('img');
|
let findNewImage = findContainer.querySelector('.zoomImage-background');
|
||||||
|
|
||||||
expect(findNewImage.src).toEqual(srcDefault);
|
expect(findNewImage.style.backgroundImage).toEqual(`url("${srcDefault}")`);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should create new image, into zoom container, with src likes zoomImage value', () => {
|
it('should create new image, into zoom container, with src likes zoomImage value', () => {
|
||||||
let image = getCompiledImage(`<img src="${srcDefault}" zoom-image="${srcZoom}">`);
|
let image = getCompiledImage(`<img src="${srcDefault}" zoom-image="${srcZoom}">`);
|
||||||
image[0].click();
|
image[0].click();
|
||||||
findContainer = document.getElementById(idContainer);
|
findContainer = document.getElementById(idContainer);
|
||||||
let findNewImage = findContainer.querySelector('img');
|
let findNewImage = findContainer.querySelector('.zoomImage-background');
|
||||||
|
|
||||||
expect(findNewImage.src).toEqual(srcZoom);
|
expect(findNewImage.style.backgroundImage).toEqual(`url("${srcZoom}")`);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
import ngModule from '../module';
|
||||||
|
|
||||||
|
function vnVisibleBy(aclService) {
|
||||||
|
return {
|
||||||
|
restrict: 'A',
|
||||||
|
priority: -1,
|
||||||
|
link: function($scope, $element, $attrs) {
|
||||||
|
let acls = $attrs.vnVisibleBy.split(',');
|
||||||
|
if (!aclService.aclPermission(acls)) {
|
||||||
|
$element[0].style.visibility = 'hidden';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
vnVisibleBy.$inject = ['aclService'];
|
||||||
|
|
||||||
|
ngModule.directive('vnVisibleBy', vnVisibleBy);
|
|
@ -4,7 +4,6 @@ export function directive($timeout) {
|
||||||
let idContainer = 'zoomImage';
|
let idContainer = 'zoomImage';
|
||||||
let container;
|
let container;
|
||||||
let background;
|
let background;
|
||||||
let image;
|
|
||||||
|
|
||||||
function createContainers(src) {
|
function createContainers(src) {
|
||||||
if (document.getElementById(idContainer)) {
|
if (document.getElementById(idContainer)) {
|
||||||
|
@ -15,31 +14,21 @@ export function directive($timeout) {
|
||||||
|
|
||||||
background = document.createElement('div');
|
background = document.createElement('div');
|
||||||
background.className = 'zoomImage-background';
|
background.className = 'zoomImage-background';
|
||||||
|
background.style.backgroundImage = `url(${src})`;
|
||||||
container.appendChild(background);
|
container.appendChild(background);
|
||||||
|
|
||||||
image = document.createElement('img');
|
|
||||||
image.src = src;
|
|
||||||
container.appendChild(image);
|
|
||||||
|
|
||||||
document.body.appendChild(container);
|
document.body.appendChild(container);
|
||||||
|
|
||||||
$timeout(() => {
|
|
||||||
resizeImage();
|
|
||||||
container.className = 'open';
|
|
||||||
}, 250);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function addListeners() {
|
function addListeners() {
|
||||||
background.addEventListener('click', destroyContainers);
|
background.addEventListener('click', destroyContainers);
|
||||||
document.addEventListener('keydown', e => keyDownHandler(e));
|
document.addEventListener('keydown', e => keyDownHandler(e));
|
||||||
window.addEventListener('resize', resizeImage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function removeListeners() {
|
function removeListeners() {
|
||||||
if (container) {
|
if (container) {
|
||||||
background.removeEventListener('click', destroyContainers);
|
background.removeEventListener('click', destroyContainers);
|
||||||
document.removeEventListener('keydown', e => keyDownHandler(e));
|
document.removeEventListener('keydown', e => keyDownHandler(e));
|
||||||
window.removeEventListener('resize', resizeImage);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,14 +46,6 @@ export function directive($timeout) {
|
||||||
|
|
||||||
container = undefined;
|
container = undefined;
|
||||||
background = undefined;
|
background = undefined;
|
||||||
image = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
function resizeImage() {
|
|
||||||
if (image) {
|
|
||||||
image.style.marginLeft = `-${Math.floor(image.clientWidth / 2)}px`;
|
|
||||||
image.style.marginTop = `-${Math.floor(image.clientHeight / 2)}px`;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -9,32 +9,11 @@ div#zoomImage, div#zoomImage .zoomImage-background {
|
||||||
top: 0;
|
top: 0;
|
||||||
z-index: 11;
|
z-index: 11;
|
||||||
}
|
}
|
||||||
div#zoomImage{
|
|
||||||
opacity: 0;
|
|
||||||
transition: visibility 0s, opacity 0.5s linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#zoomImage .zoomImage-background{
|
div#zoomImage .zoomImage-background{
|
||||||
background: rgba(0, 0, 0, 0.7);
|
background-color: rgba(0, 0, 0, 0.7);
|
||||||
cursor: zoom-out;
|
cursor: zoom-out;
|
||||||
}
|
background-repeat: no-repeat;
|
||||||
div#zoomImage img{
|
background-position: center center;
|
||||||
z-index: 12;
|
background-size: auto 98%;
|
||||||
position: fixed;
|
|
||||||
max-height: 98%;
|
|
||||||
max-width: 98%;
|
|
||||||
left: 50%;
|
|
||||||
top: 50%;
|
|
||||||
opacity: 0;
|
|
||||||
transition: visibility 0s, opacity 1s linear;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#zoomImage.open {
|
|
||||||
visibility: visible;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
div#zoomImage.open img{
|
|
||||||
visibility: visible;
|
|
||||||
opacity: 1;
|
|
||||||
}
|
}
|
|
@ -79,17 +79,6 @@
|
||||||
"description": "Botanical",
|
"description": "Botanical",
|
||||||
"icon": "folder"
|
"icon": "folder"
|
||||||
}
|
}
|
||||||
},{
|
|
||||||
"url" : "/picture",
|
|
||||||
"state": "item.card.picture",
|
|
||||||
"component": "vn-item-picture",
|
|
||||||
"params": {
|
|
||||||
"item": "$ctrl.item"
|
|
||||||
},
|
|
||||||
"menu": {
|
|
||||||
"description": "Picture",
|
|
||||||
"icon": "folder"
|
|
||||||
}
|
|
||||||
},{
|
},{
|
||||||
"url" : "/barcode",
|
"url" : "/barcode",
|
||||||
"state": "item.card.barcode",
|
"state": "item.card.barcode",
|
||||||
|
|
|
@ -3,10 +3,14 @@
|
||||||
<vn-auto class="descriptor-header pointer" ui-sref="item.index">
|
<vn-auto class="descriptor-header pointer" ui-sref="item.index">
|
||||||
<img ng-src="/static/images/icon_item.png"/>
|
<img ng-src="/static/images/icon_item.png"/>
|
||||||
</vn-auto>
|
</vn-auto>
|
||||||
<vn-auto pad-medium text-center>
|
<vn-auto style="position: relative" pad-medium text-center>
|
||||||
<img
|
<img
|
||||||
ng-src="http://verdnatura.es/vn-image-data/catalog/200x200/{{$ctrl.item.image}}"
|
ng-src="http://verdnatura.es/vn-image-data/catalog/200x200/{{::$ctrl.item.image}}"
|
||||||
zoom-image="http://verdnatura.es/vn-image-data/catalog/900x900/{{$ctrl.item.image}}" on-error-src/>
|
zoom-image="http://verdnatura.es/vn-image-data/catalog/900x900/{{::$ctrl.item.image}}" on-error-src/>
|
||||||
|
<a href="https://www.verdnatura.es/#!form=admin/items&filter={{::$ctrl.item.id}}" target="_blank"><vn-float-button icon="edit"
|
||||||
|
style="position: absolute; bottom: 1em; right: 1em;"
|
||||||
|
vn-visible-by="administrative"></vn-float-button>
|
||||||
|
</a>
|
||||||
</vn-auto>
|
</vn-auto>
|
||||||
<vn-auto pad-medium>
|
<vn-auto pad-medium>
|
||||||
<div><span translate>Id</span>: <b>{{$ctrl.item.id}}</b></div>
|
<div><span translate>Id</span>: <b>{{$ctrl.item.id}}</b></div>
|
||||||
|
|
|
@ -11,6 +11,5 @@ import './tags/item-tags';
|
||||||
import './history/item-history';
|
import './history/item-history';
|
||||||
import './niche/item-niche';
|
import './niche/item-niche';
|
||||||
import './botanical/item-botanical';
|
import './botanical/item-botanical';
|
||||||
import './picture/item-picture';
|
|
||||||
import './barcode/item-barcode';
|
import './barcode/item-barcode';
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,7 @@
|
||||||
on-search="$ctrl.search(index)"
|
on-search="$ctrl.search(index)"
|
||||||
advanced="true"
|
advanced="true"
|
||||||
popover="vn-item-filter-panel"
|
popover="vn-item-filter-panel"
|
||||||
ignore-keys = "['page', 'size', 'search']"
|
ignore-keys = "['page', 'size', 'search']">
|
||||||
>
|
|
||||||
</vn-searchbar>
|
</vn-searchbar>
|
||||||
</vn-horizontal>
|
</vn-horizontal>
|
||||||
</vn-card>
|
</vn-card>
|
||||||
|
|
|
@ -13,7 +13,6 @@ Item history: Historial del artículo
|
||||||
Item tags: Tags del artículo
|
Item tags: Tags del artículo
|
||||||
Niche: Nicho
|
Niche: Nicho
|
||||||
Picture: Foto
|
Picture: Foto
|
||||||
Item pictures: Fotos del artículo
|
|
||||||
Barcode: Código barras
|
Barcode: Código barras
|
||||||
Item barcode: Código de barras del artículo
|
Item barcode: Código de barras del artículo
|
||||||
Changed by: Cambiado por
|
Changed by: Cambiado por
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
<vn-card>
|
|
||||||
<vn-vertical pad-large>
|
|
||||||
<vn-title>Item pictures</vn-title>
|
|
||||||
</vn-vertical>
|
|
||||||
</vn-card>
|
|
|
@ -1,5 +0,0 @@
|
||||||
import ngModule from '../module';
|
|
||||||
|
|
||||||
ngModule.component('vnItemPicture', {
|
|
||||||
template: require('./item-picture.html')
|
|
||||||
});
|
|
|
@ -1,14 +1,5 @@
|
||||||
<div style="position: fixed; top: 0; right: 0; padding: .8em 1.5em; z-index: 10;">
|
<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="apps" id="apps" translate-attr="{title: 'Applications'}"></vn-icon>
|
||||||
<ul for="langs" class="mdl-menu mdl-js-menu mdl-menu--bottom-right" pad-small>
|
|
||||||
<li
|
|
||||||
ng-repeat="lang in ::$ctrl.langs"
|
|
||||||
class="mdl-menu__item"
|
|
||||||
ng-click="$ctrl.onChangeLangClick(lang)">
|
|
||||||
<span>{{::lang}}</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<vn-icon icon="language" id="langs" translate-attr="{title: 'Change language'}"></vn-icon>
|
|
||||||
<ul for="apps" class="mdl-menu mdl-js-menu mdl-menu--bottom-right" pad-small>
|
<ul for="apps" class="mdl-menu mdl-js-menu mdl-menu--bottom-right" pad-small>
|
||||||
<li ng-repeat="mod in ::$ctrl.modules" class="mdl-menu__item" ui-sref="{{::mod.route.state}}">
|
<li ng-repeat="mod in ::$ctrl.modules" class="mdl-menu__item" ui-sref="{{::mod.route.state}}">
|
||||||
<vn-icon ng-if="::mod.icon && !mod.icon.startsWith('/')" icon="{{::mod.icon}}"></vn-icon>
|
<vn-icon ng-if="::mod.icon && !mod.icon.startsWith('/')" icon="{{::mod.icon}}"></vn-icon>
|
||||||
|
@ -16,6 +7,16 @@
|
||||||
<span translate="{{::mod.name}}"></span>
|
<span translate="{{::mod.name}}"></span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
<vn-icon id="lang-button" icon="language" translate-attr="{title: 'Change language'}"></vn-icon>
|
||||||
|
<ul id="langs" for="lang-button" class="mdl-menu mdl-js-menu mdl-menu--bottom-right" pad-small>
|
||||||
|
<li
|
||||||
|
ng-repeat="lang in ::$ctrl.langs"
|
||||||
|
name="{{::lang}}"
|
||||||
|
class="mdl-menu__item"
|
||||||
|
ng-click="$ctrl.onChangeLangClick(lang)">
|
||||||
|
<span>{{::lang}}</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<vn-icon icon="exit_to_app" translate-attr="{title: 'Logout'}" ng-click="$ctrl.onLogoutClick()"></vn-icon>
|
<vn-icon icon="exit_to_app" translate-attr="{title: 'Logout'}" ng-click="$ctrl.onLogoutClick()"></vn-icon>
|
||||||
<!--
|
<!--
|
||||||
TODO: Keep it commented until they are functional
|
TODO: Keep it commented until they are functional
|
||||||
|
|
|
@ -128,17 +128,17 @@ Nightmare.action('waitForTextInElement', function(selector, name, done) {
|
||||||
});
|
});
|
||||||
|
|
||||||
Nightmare.action('changeLanguageToEnglish', function(done) {
|
Nightmare.action('changeLanguageToEnglish', function(done) {
|
||||||
this.wait(selectors.globalItems.languageButton)
|
this.wait('#lang-button')
|
||||||
.evaluate(selector => {
|
.evaluate(selector => {
|
||||||
return document.querySelector(selector).title;
|
return document.querySelector(selector).title;
|
||||||
}, selectors.globalItems.languageButton)
|
}, '#lang-button')
|
||||||
.then(result => {
|
.then(title => {
|
||||||
if (result === 'Cambiar idioma') {
|
if (title === 'Change language') {
|
||||||
this.click(selectors.globalItems.languageButton)
|
|
||||||
.then(done);
|
|
||||||
}
|
|
||||||
if (result === 'Change language') {
|
|
||||||
this.then(done);
|
this.then(done);
|
||||||
|
} else {
|
||||||
|
this.click('#lang-button')
|
||||||
|
.click('#langs > li[name="en"]')
|
||||||
|
.then(done);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,7 +10,6 @@ export default {
|
||||||
globalItems: {
|
globalItems: {
|
||||||
topBar: `${components.vnTopbar}`,
|
topBar: `${components.vnTopbar}`,
|
||||||
logOutButton: `${components.vnIcon}[icon="exit_to_app"]`,
|
logOutButton: `${components.vnIcon}[icon="exit_to_app"]`,
|
||||||
languageButton: `${components.vnIcon}[icon="language"]`,
|
|
||||||
snackbarIsActive: '.mdl-snackbar--active > .mdl-snackbar__text',
|
snackbarIsActive: '.mdl-snackbar--active > .mdl-snackbar__text',
|
||||||
applicationsMenuButton: `${components.vnIcon}[icon="apps"]`,
|
applicationsMenuButton: `${components.vnIcon}[icon="apps"]`,
|
||||||
applicationsMenuVisible: `${components.vnMainMenu} .is-visible > div`,
|
applicationsMenuVisible: `${components.vnMainMenu} .is-visible > div`,
|
||||||
|
@ -54,7 +53,7 @@ export default {
|
||||||
socialNameInput: `${components.vnTextfield}[name="socialName"]`,
|
socialNameInput: `${components.vnTextfield}[name="socialName"]`,
|
||||||
fiscalIdInput: `${components.vnTextfield}[name="fi"]`,
|
fiscalIdInput: `${components.vnTextfield}[name="fi"]`,
|
||||||
equalizationTaxCheckboxLabel: `${components.vnCheck}[label='Is equalizated'] > label > input`,
|
equalizationTaxCheckboxLabel: `${components.vnCheck}[label='Is equalizated'] > label > input`,
|
||||||
acceptPropagationButton: `body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > vn-client-fiscal-data > vn-dialog > div > form > div.button-bar > tpl-buttons > button:nth-child(2)`,
|
acceptPropagationButton: `vn-client-fiscal-data vn-confirm button[response="ACCEPT"]`,
|
||||||
addressInput: `${components.vnTextfield}[name="street"]`,
|
addressInput: `${components.vnTextfield}[name="street"]`,
|
||||||
cityInput: `${components.vnTextfield}[name="city"]`,
|
cityInput: `${components.vnTextfield}[name="city"]`,
|
||||||
postcodeInput: `${components.vnTextfield}[name="postcode"]`,
|
postcodeInput: `${components.vnTextfield}[name="postcode"]`,
|
||||||
|
@ -77,7 +76,7 @@ export default {
|
||||||
payMethodOptionOne: `${components.vnAutocomplete}[field="$ctrl.client.payMethodFk"] > vn-vertical > vn-drop-down > vn-vertical:not(.ng-hide) > vn-auto:nth-child(2) > ul > li:nth-child(2)`,
|
payMethodOptionOne: `${components.vnAutocomplete}[field="$ctrl.client.payMethodFk"] > vn-vertical > vn-drop-down > vn-vertical:not(.ng-hide) > vn-auto:nth-child(2) > ul > li:nth-child(2)`,
|
||||||
IBANInput: `${components.vnTextfield}[name="iban"]`,
|
IBANInput: `${components.vnTextfield}[name="iban"]`,
|
||||||
dueDayInput: `${components.vnTextfield}[name="dueDay"]`,
|
dueDayInput: `${components.vnTextfield}[name="dueDay"]`,
|
||||||
cancelNotificationButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > vn-client-billing-data > vn-dialog > div > form > div.button-bar > tpl-buttons > button:nth-child(1)',
|
cancelNotificationButton: 'vn-client-billing-data > vn-dialog tpl-buttons > button:nth-child(1)',
|
||||||
receivedCoreVNHCheckbox: `${components.vnCheck}[label='Received core VNH'] > label > input`,
|
receivedCoreVNHCheckbox: `${components.vnCheck}[label='Received core VNH'] > label > input`,
|
||||||
receivedCoreVNLCheckbox: `${components.vnCheck}[label='Received core VNL'] > label > input`,
|
receivedCoreVNLCheckbox: `${components.vnCheck}[label='Received core VNL'] > label > input`,
|
||||||
receivedB2BVNLCheckbox: `${components.vnCheck}[label='Received B2B VNL'] > label > input`,
|
receivedB2BVNLCheckbox: `${components.vnCheck}[label='Received B2B VNL'] > label > input`,
|
||||||
|
|
|
@ -52,7 +52,7 @@ gulp.task('services', async () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts all backend services.
|
* Starts backend services.
|
||||||
*/
|
*/
|
||||||
gulp.task('services-only', async () => {
|
gulp.task('services-only', async () => {
|
||||||
const services = await getServices();
|
const services = await getServices();
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -4,5 +4,6 @@
|
||||||
"Unable to mark the equivalence surcharge": "Unable to mark the equivalence surcharge",
|
"Unable to mark the equivalence surcharge": "Unable to mark the equivalence surcharge",
|
||||||
"The default consignee can not be unchecked": "The default consignee can not be unchecked",
|
"The default consignee can not be unchecked": "The default consignee can not be unchecked",
|
||||||
"Unable to default a disabled consignee": "Unable to default a disabled consignee",
|
"Unable to default a disabled consignee": "Unable to default a disabled consignee",
|
||||||
"El método de pago seleccionado requiere que se especifique el IBAN": "El método de pago seleccionado requiere que se especifique el IBAN"
|
"El método de pago seleccionado requiere que se especifique el IBAN": "El método de pago seleccionado requiere que se especifique el IBAN",
|
||||||
|
"Ya existe un usuario con ese nombre": "Ya existe un usuario con ese nombre"
|
||||||
}
|
}
|
Loading…
Reference in New Issue