forked from verdnatura/hedera-web
Alpha 2, informes
This commit is contained in:
parent
a5f55b45a3
commit
f4a2473428
|
@ -1,42 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
session_start ();
|
|
||||||
|
|
||||||
$params = array
|
|
||||||
(
|
|
||||||
'name'
|
|
||||||
,'surname'
|
|
||||||
,'email'
|
|
||||||
,'message'
|
|
||||||
,'address'
|
|
||||||
,'pc'
|
|
||||||
,'city'
|
|
||||||
,'phone'
|
|
||||||
,'captcha'
|
|
||||||
);
|
|
||||||
|
|
||||||
$paramsOk = TRUE;
|
|
||||||
|
|
||||||
foreach ($params as $param)
|
|
||||||
if (!isset ($_POST[$param]) || $_POST[$param] == '')
|
|
||||||
{
|
|
||||||
$paramsOk = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
header ('Content-Type: application/json');
|
|
||||||
|
|
||||||
if ($paramsOk && isset ($_SESSION['captcha'])
|
|
||||||
&& $_POST['captcha'] == $_SESSION['captcha'])
|
|
||||||
{
|
|
||||||
mail ('nuria@verdnatura.es', 'Verdnatura', print_r ($_POST, TRUE),
|
|
||||||
'From: Verdnatura <www-data@verdnatura.es>');
|
|
||||||
|
|
||||||
echo json_encode (TRUE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
echo json_encode (FALSE);
|
|
||||||
|
|
||||||
unset ($_SESSION['captcha']);
|
|
||||||
|
|
||||||
?>
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
Vn.Shelves = new Class
|
||||||
|
({
|
||||||
|
Extends: Vn.Module
|
||||||
|
|
||||||
|
,activate: function ()
|
||||||
|
{
|
||||||
|
this.$('report-title').value = 'Anthuriums';
|
||||||
|
this.$('warehouse').value = 1;
|
||||||
|
this.$('date').value = new Date ();
|
||||||
|
this.$('shelf').value = 1;
|
||||||
|
this.$('reign').value = 1;
|
||||||
|
this.$('family').value = 2;
|
||||||
|
this.$('filter').value = 'Ant %';
|
||||||
|
this.$('max-amount').value = 50;
|
||||||
|
}
|
||||||
|
|
||||||
|
,onPreviewClick: function ()
|
||||||
|
{
|
||||||
|
var report = new ShelvesReport ();
|
||||||
|
report.showWindow ();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
|
||||||
|
.shelves
|
||||||
|
{
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
.shelves .box
|
||||||
|
{
|
||||||
|
max-width: 40em;
|
||||||
|
padding: 2em;
|
||||||
|
}
|
||||||
|
.shelves .body
|
||||||
|
{
|
||||||
|
max-width: 20em;
|
||||||
|
margin: auto;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
.shelves .form-group
|
||||||
|
{
|
||||||
|
padding: 0.4em;
|
||||||
|
}
|
||||||
|
.shelves form label
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
}
|
||||||
|
.shelves input,
|
||||||
|
.shelves select
|
||||||
|
{
|
||||||
|
margin: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Footer */
|
||||||
|
|
||||||
|
.shelves .footer
|
||||||
|
{
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 1.5em;
|
||||||
|
}
|
||||||
|
.shelves .footer > button
|
||||||
|
{
|
||||||
|
margin: 0 .2em;
|
||||||
|
width: 5em;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
<vn>
|
||||||
|
<div id="title">
|
||||||
|
<h1><t>Shelves</t></h1>
|
||||||
|
</div>
|
||||||
|
<div id="form" class="shelves">
|
||||||
|
<div class="box">
|
||||||
|
<div class="body">
|
||||||
|
<div class="form-group">
|
||||||
|
<label><t>Title</t></label>
|
||||||
|
<htk-entry id="report-title"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label><t>Store</t></label>
|
||||||
|
<htk-combo id="warehouse">
|
||||||
|
<db-model property="model" id="warehouses">
|
||||||
|
SELECT id, name FROM vn2008.warehouse
|
||||||
|
WHERE reserve ORDER BY name
|
||||||
|
</db-model>
|
||||||
|
</htk-combo>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label><t>Date</t></label>
|
||||||
|
<htk-date-chooser id="date"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label><t>Shelf</t></label>
|
||||||
|
<htk-combo id="shelf">
|
||||||
|
<db-model property="model" id="shelves">
|
||||||
|
SELECT id, name FROM vn2008.shelf
|
||||||
|
</db-model>
|
||||||
|
</htk-combo>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label><t>Reign</t></label>
|
||||||
|
<htk-combo id="reign">
|
||||||
|
<db-model property="model" id="reigns">
|
||||||
|
SELECT id, reino FROM vn2008.reinos
|
||||||
|
WHERE display != FALSE ORDER BY reino
|
||||||
|
</db-model>
|
||||||
|
</htk-combo>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label><t>Family</t></label>
|
||||||
|
<htk-combo id="family">
|
||||||
|
<db-model property="model">
|
||||||
|
SELECT tipo_id, Tipo FROM vn2008.Tipos
|
||||||
|
WHERE reino_id = #reign ORDER BY Tipo
|
||||||
|
<sql-batch property="batch">
|
||||||
|
<item name="reign" param="reign"/>
|
||||||
|
</sql-batch>
|
||||||
|
</db-model>
|
||||||
|
</htk-combo>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label><t>Name filter</t></label>
|
||||||
|
<input type="text" id="filter"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label><t>Max amount</t></label>
|
||||||
|
<htk-entry id="max-amount"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<button class="flat">
|
||||||
|
<t>Save</t>
|
||||||
|
</button>
|
||||||
|
<button class="flat" on-click="onPreviewClick">
|
||||||
|
<t>Preview</t>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</vn>
|
|
@ -24,6 +24,17 @@ Vn.Catalog = new Class
|
||||||
this.conn.execQuery (query, this.onBasketForGuest.bind (this));
|
this.conn.execQuery (query, this.onBasketForGuest.bind (this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
,close: function ()
|
||||||
|
{
|
||||||
|
if (this.node)
|
||||||
|
{
|
||||||
|
this.gui.$('top-bar').style.backgroundColor = '';
|
||||||
|
Vn.Node.remove (this.$('right-panel'));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.parent ();
|
||||||
|
}
|
||||||
|
|
||||||
,onBasketForGuest: function ()
|
,onBasketForGuest: function ()
|
||||||
{
|
{
|
||||||
|
@ -42,13 +53,38 @@ Vn.Catalog = new Class
|
||||||
|
|
||||||
this.popup = new Htk.Popup ();
|
this.popup = new Htk.Popup ();
|
||||||
this.popup.setChildNode (this.$('lots-popup'));
|
this.popup.setChildNode (this.$('lots-popup'));
|
||||||
|
|
||||||
|
this.setView ('GRID');
|
||||||
}
|
}
|
||||||
|
|
||||||
,deactivate: function ()
|
,onSwitchViewClick: function ()
|
||||||
{
|
{
|
||||||
this.parent ();
|
this.setView (this.view == 'LIST' ? 'GRID' : 'LIST');
|
||||||
this.gui.$('top-bar').style.backgroundColor = '';
|
}
|
||||||
Vn.Node.remove (this.$('right-panel'));
|
|
||||||
|
,setView: function (view)
|
||||||
|
{
|
||||||
|
if (this.viewNode)
|
||||||
|
{
|
||||||
|
Vn.Node.remove (this.viewNode);
|
||||||
|
this.viewHolder.model = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (view == 'GRID')
|
||||||
|
{
|
||||||
|
this.view = 'GRID';
|
||||||
|
this.viewNode = this.$('grid-view').getNode ();
|
||||||
|
this.viewHolder = this.$('grid-view');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.view = 'LIST';
|
||||||
|
this.viewNode = this.$('list-view');
|
||||||
|
this.viewHolder = this.$('items-grid');
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$('main').appendChild (this.viewNode);
|
||||||
|
this.viewHolder.model = this.$('items-model');
|
||||||
}
|
}
|
||||||
|
|
||||||
,typeRenderer: function (builder, form)
|
,typeRenderer: function (builder, form)
|
||||||
|
|
|
@ -180,18 +180,18 @@ button.confirm > img
|
||||||
}
|
}
|
||||||
.items > tbody > tr
|
.items > tbody > tr
|
||||||
{
|
{
|
||||||
height: 6em;
|
height: 4em;
|
||||||
}
|
}
|
||||||
.items .icon
|
.items .icon
|
||||||
{
|
{
|
||||||
width: 6em;
|
width: 4em;
|
||||||
padding: .2em;
|
padding: 0;
|
||||||
padding-right: .5em;
|
|
||||||
}
|
}
|
||||||
.items .icon > img
|
.items .icon > img
|
||||||
{
|
{
|
||||||
max-height: 6em;
|
max-height: 2.5em;
|
||||||
max-width: 6em;
|
max-width: 2.5em;
|
||||||
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
td.second-category
|
td.second-category
|
||||||
{
|
{
|
||||||
|
|
|
@ -70,9 +70,10 @@
|
||||||
<htk-button
|
<htk-button
|
||||||
image="image/dark/view.svg"
|
image="image/dark/view.svg"
|
||||||
tip="_Switch view"
|
tip="_Switch view"
|
||||||
on-click="onBasketClick"
|
on-click="onSwitchViewClick"
|
||||||
showText="true"/>
|
showText="true"/>
|
||||||
<htk-button
|
<htk-button
|
||||||
|
id="a"
|
||||||
image="image/dark/basket.svg"
|
image="image/dark/basket.svg"
|
||||||
tip="_ShoppingBasket"
|
tip="_ShoppingBasket"
|
||||||
on-click="onBasketClick"
|
on-click="onBasketClick"
|
||||||
|
@ -83,82 +84,81 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="form" class="catalog">
|
<div id="form" class="catalog">
|
||||||
<div class="center">
|
<div class="center">
|
||||||
<div class="main">
|
<div id="main" class="main"/>
|
||||||
<!-- <div class="box list-view">
|
|
||||||
<htk-grid empty-message="_SelectSubtype" show-header="false" id="items-grid" class="items" model="items-model">
|
|
||||||
<htk-column-image
|
|
||||||
title="*"
|
|
||||||
class="icon"
|
|
||||||
column="Foto"
|
|
||||||
directory="catalog"
|
|
||||||
subdir="200x200"
|
|
||||||
show-full="true"
|
|
||||||
full-dir="900x900"
|
|
||||||
editable="true"/>
|
|
||||||
<vn-column-item title="_Name" column="Article" renderer="nameRenderer"/>
|
|
||||||
<htk-column-text title="_Cat" renderer="featuresRender"/>
|
|
||||||
<htk-column-spin title="_Aval" column="available"/>
|
|
||||||
<htk-column-text
|
|
||||||
title="_Price"
|
|
||||||
column="price"
|
|
||||||
format="_from %.2d€"
|
|
||||||
class="price"/>
|
|
||||||
<htk-column-button
|
|
||||||
column="id"
|
|
||||||
image="image/add.svg"
|
|
||||||
tip="_AddToBasket"
|
|
||||||
on-clicked="onAddItemClick"/>
|
|
||||||
</htk-grid>
|
|
||||||
<p class="footer-message">
|
|
||||||
<t>IndicativePhotos</t>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
--> <htk-repeater id="grid-view" empty-message="_SelectSubtype" class="grid-view" form-id="item" model="items-model">
|
|
||||||
<template>
|
|
||||||
<div class="box item-box">
|
|
||||||
<div class="image">
|
|
||||||
<htk-image
|
|
||||||
directory="catalog"
|
|
||||||
subdir="200x200"
|
|
||||||
form="item"
|
|
||||||
column="Foto"
|
|
||||||
show-full="true"
|
|
||||||
full-dir="900x900"/>
|
|
||||||
</div>
|
|
||||||
<h2>
|
|
||||||
<htk-text form="item" column="Article"/>
|
|
||||||
</h2>
|
|
||||||
<p>
|
|
||||||
<htk-text form="item" column="producer"/>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<htk-text form="item" column="Medida"/>
|
|
||||||
<htk-text form="item" column="Categoria"/>
|
|
||||||
<htk-text form="item" column="Color"/>
|
|
||||||
<htk-text form="item" column="Tallos"/>
|
|
||||||
<htk-text form="item" column="Abreviatura"/>
|
|
||||||
</p>
|
|
||||||
<div class="aval-price">
|
|
||||||
<htk-text form="item" column="available"/>
|
|
||||||
<t>from</t>
|
|
||||||
<span class="price">
|
|
||||||
<htk-text form="item" column="price" format="%.2d€"/>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<htk-button
|
|
||||||
form="item"
|
|
||||||
column="id"
|
|
||||||
tip="_AddToBasket"
|
|
||||||
image="image/add.svg"
|
|
||||||
on-click="onGridAddItemClick"
|
|
||||||
class="add-button"/>
|
|
||||||
<div class="clear"/>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</htk-repeater>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="list-view" class="box list-view">
|
||||||
|
<htk-grid id="items-grid" class="items" empty-message="_SelectSubtype" show-header="false">
|
||||||
|
<htk-column-image
|
||||||
|
title="*"
|
||||||
|
class="icon"
|
||||||
|
column="Foto"
|
||||||
|
directory="catalog"
|
||||||
|
subdir="200x200"
|
||||||
|
show-full="true"
|
||||||
|
full-dir="900x900"
|
||||||
|
editable="true"/>
|
||||||
|
<vn-column-item title="_Name" column="Article" renderer="nameRenderer"/>
|
||||||
|
<htk-column-text title="_Cat" renderer="featuresRender"/>
|
||||||
|
<htk-column-spin title="_Aval" column="available"/>
|
||||||
|
<htk-column-text
|
||||||
|
title="_Price"
|
||||||
|
column="price"
|
||||||
|
format="_from %.2d€"
|
||||||
|
class="price"/>
|
||||||
|
<htk-column-button
|
||||||
|
column="id"
|
||||||
|
image="image/add.svg"
|
||||||
|
tip="_AddToBasket"
|
||||||
|
on-clicked="onAddItemClick"/>
|
||||||
|
</htk-grid>
|
||||||
|
<p class="footer-message">
|
||||||
|
<t>IndicativePhotos</t>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<htk-repeater id="grid-view" class="grid-view" empty-message="_SelectSubtype" form-id="item">
|
||||||
|
<template>
|
||||||
|
<div class="box item-box">
|
||||||
|
<div class="image">
|
||||||
|
<htk-image
|
||||||
|
directory="catalog"
|
||||||
|
subdir="200x200"
|
||||||
|
form="item"
|
||||||
|
column="Foto"
|
||||||
|
show-full="true"
|
||||||
|
full-dir="900x900"/>
|
||||||
|
</div>
|
||||||
|
<h2>
|
||||||
|
<htk-text form="item" column="Article"/>
|
||||||
|
</h2>
|
||||||
|
<p>
|
||||||
|
<htk-text form="item" column="producer"/>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<htk-text form="item" column="Medida"/>
|
||||||
|
<htk-text form="item" column="Categoria"/>
|
||||||
|
<htk-text form="item" column="Color"/>
|
||||||
|
<htk-text form="item" column="Tallos"/>
|
||||||
|
<htk-text form="item" column="Abreviatura"/>
|
||||||
|
</p>
|
||||||
|
<div class="aval-price">
|
||||||
|
<htk-text form="item" column="available"/>
|
||||||
|
<t>from</t>
|
||||||
|
<span class="price">
|
||||||
|
<htk-text form="item" column="price" format="%.2d€"/>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<htk-button
|
||||||
|
form="item"
|
||||||
|
column="id"
|
||||||
|
tip="_AddToBasket"
|
||||||
|
image="image/add.svg"
|
||||||
|
on-click="onGridAddItemClick"
|
||||||
|
class="add-button"/>
|
||||||
|
<div class="clear"/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</htk-repeater>
|
||||||
<div id="right-panel" class="right-panel" on-click="onRightPanelClick">
|
<div id="right-panel" class="right-panel" on-click="onRightPanelClick">
|
||||||
<htk-repeater
|
<htk-repeater
|
||||||
model="realms-model"
|
model="realms-model"
|
||||||
|
|
|
@ -104,7 +104,7 @@ Db.Conn.implement
|
||||||
this.signalEmit ('loading-changed', true);
|
this.signalEmit ('loading-changed', true);
|
||||||
|
|
||||||
var request = new Vn.HttpRequest ();
|
var request = new Vn.HttpRequest ();
|
||||||
request.add ({'action': 'close'});
|
request.add ({'action': 'logout'});
|
||||||
request.send ('rest.php',
|
request.send ('rest.php',
|
||||||
this.closed.bind (this, closeCallback));
|
this.closed.bind (this, closeCallback));
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ Vn.includeLib ('hedera',
|
||||||
,'login'
|
,'login'
|
||||||
,'gui'
|
,'gui'
|
||||||
,'module'
|
,'module'
|
||||||
|
,'report'
|
||||||
,'app'
|
,'app'
|
||||||
,'tpv'
|
,'tpv'
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
@font-face
|
||||||
|
{
|
||||||
|
font-family: 'Open Sans';
|
||||||
|
src: url('opensans.ttf') format('truetype');
|
||||||
|
}
|
||||||
|
|
||||||
|
body
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
margin: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
z-index: -2;
|
||||||
|
background-color: #EEE;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="user-scalable=no"/>
|
||||||
|
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"/>
|
||||||
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="image/favicon.ico"/>
|
||||||
|
<link rel="stylesheet" type="text/css" href="js/hedera/report.css"/>
|
||||||
|
<title>Report</title>
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
|
@ -1,18 +1,29 @@
|
||||||
|
|
||||||
Vn.Module = new Class
|
Vn.Report = new Class
|
||||||
({
|
({
|
||||||
Extends: Vn.Object
|
Extends: Vn.Object
|
||||||
|
|
||||||
,initialize: function (gui, formInfo)
|
,initialize: function (props)
|
||||||
{
|
{
|
||||||
this.gui = gui;
|
this.parent (props);
|
||||||
this.conn = gui.conn;
|
this.open ();
|
||||||
this.hash = gui.hash;
|
}
|
||||||
this.formInfo = formInfo;
|
|
||||||
|
,showWindow: function ()
|
||||||
|
{
|
||||||
|
var reportWindow = window.open ('js/hedera/report.html', reportPath,
|
||||||
|
'resizable=yes,height=600,width=750,scrollbars=yes,menubar=no');
|
||||||
|
//report.print ();
|
||||||
|
|
||||||
|
Vn.includeCss ('reports/'+ reportPath +'/style.css');
|
||||||
|
window.document.body.appendChild (this.node);
|
||||||
|
|
||||||
|
var report = new Vn.Report (reportWindow.document.body);
|
||||||
|
return reportWindow;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an object from the builder associated to this form.
|
* Gets an object from the builder associated to this report.
|
||||||
*
|
*
|
||||||
* @param {string} objectId The object identifier
|
* @param {string} objectId The object identifier
|
||||||
* @return {Object} The object, or %null if not found
|
* @return {Object} The object, or %null if not found
|
||||||
|
@ -29,12 +40,10 @@ Vn.Module = new Class
|
||||||
* Called when the form is opened.
|
* Called when the form is opened.
|
||||||
**/
|
**/
|
||||||
,open: function ()
|
,open: function ()
|
||||||
{
|
{
|
||||||
this.close ();
|
|
||||||
|
|
||||||
this.builder = new Vn.Builder ();
|
this.builder = new Vn.Builder ();
|
||||||
this.builder.signalData = this;
|
this.builder.signalData = this;
|
||||||
this.builder.loadXml (Vn.getXml ('forms/'+ this.formInfo.path +'/ui.xml'));
|
this.builder.loadXml (Vn.getXml ('reports/'+ this.reportPath +'/report.xml'));
|
||||||
this.node = this.builder.get ('form');
|
this.node = this.builder.get ('form');
|
||||||
|
|
||||||
var models = this.builder.getObjects ('db-model');
|
var models = this.builder.getObjects ('db-model');
|
||||||
|
@ -46,30 +55,25 @@ Vn.Module = new Class
|
||||||
|
|
||||||
for (var i = 0; i < queries.length; i++)
|
for (var i = 0; i < queries.length; i++)
|
||||||
queries[i].conn = this.conn;
|
queries[i].conn = this.conn;
|
||||||
|
|
||||||
this.gui.formHolder.appendChild (this.node);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the form is activated.
|
* Called when the form is activated.
|
||||||
**/
|
**/
|
||||||
,activate: function () {}
|
,activate: function () {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the form is deactivated.
|
||||||
|
**/
|
||||||
|
,deactivate: function () {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the form is closed.
|
* Called when the form is closed.
|
||||||
**/
|
**/
|
||||||
,close: function ()
|
,close: function ()
|
||||||
{
|
{
|
||||||
if (this.node)
|
this.builder.unref ();
|
||||||
{
|
this.builder = null;
|
||||||
Vn.Node.remove (this.node);
|
|
||||||
this.node = null;
|
|
||||||
}
|
|
||||||
if (this.builder)
|
|
||||||
{
|
|
||||||
this.builder.unref ();
|
|
||||||
this.builder = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
,_destroy: function ()
|
,_destroy: function ()
|
|
@ -45,7 +45,10 @@ Htk.FullImage = new Class
|
||||||
,show: function (src)
|
,show: function (src)
|
||||||
{
|
{
|
||||||
if (this.closed && this.src == src)
|
if (this.closed && this.src == src)
|
||||||
|
{
|
||||||
|
this.closed = false;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.cancelHide ();
|
this.cancelHide ();
|
||||||
this.loadingBox.style.left = this.getLeft (40);
|
this.loadingBox.style.left = this.getLeft (40);
|
||||||
|
|
|
@ -151,7 +151,7 @@ Htk.Grid = new Class
|
||||||
|
|
||||||
,onUpdatableChange: function ()
|
,onUpdatableChange: function ()
|
||||||
{
|
{
|
||||||
if (this._model.updatable)
|
if (this._model && this._model.updatable)
|
||||||
{
|
{
|
||||||
if (!this.internalColumn)
|
if (!this.internalColumn)
|
||||||
{
|
{
|
||||||
|
|
|
@ -55,10 +55,7 @@ Vn.Node =
|
||||||
|
|
||||||
,show: function (node)
|
,show: function (node)
|
||||||
{
|
{
|
||||||
var style = window.getComputedStyle (node);
|
node.style.display = 'block';
|
||||||
|
|
||||||
if (style.display === 'none')
|
|
||||||
node.style.display = 'initial';
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"User": "Usuari"
|
|
||||||
,"Password": "Contrasenya"
|
|
||||||
,"NotCloseSession": "No tancar sessió"
|
|
||||||
,"IWantToKnowMore": "Vull saber-ne més!"
|
|
||||||
,"Enter": "Entrar"
|
|
||||||
,"LoginMail": "clientes@verdnatura.es"
|
|
||||||
,"LoginPhone": "+34 607 562 391"
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"Welcome": "Benvingut/da"
|
|
||||||
,"Exit": "Eixir"
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"User": "Usuario"
|
|
||||||
,"Password": "Contraseña"
|
|
||||||
,"NotCloseSession": "No cerrar sesión"
|
|
||||||
,"IWantToKnowMore": "¡Quiero saber más!"
|
|
||||||
,"Enter": "Entrar"
|
|
||||||
,"LoginMail": "clientes@verdnatura.es"
|
|
||||||
,"LoginPhone": "+34 963 242 100"
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"Welcome": "Bienvenido/a"
|
|
||||||
,"Exit": "Salir"
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"User": "Utilisateur"
|
|
||||||
,"Password": "Mot de passe"
|
|
||||||
,"NotCloseSession": "Garder ma session active"
|
|
||||||
,"IWantToKnowMore": "En savoir plus!"
|
|
||||||
,"Enter": "Entrer"
|
|
||||||
,"LoginMail": "ruben@verdnatura.es"
|
|
||||||
,"LoginPhone": "+33 781 533 900"
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"Welcome": "Bienvenue"
|
|
||||||
,"Exit": "Sortir"
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
require_once ('global/metatags.php');
|
|
||||||
require_once ('js/vn/main.php');
|
|
||||||
|
|
||||||
use Vn\Hedera\Js;
|
|
||||||
|
|
||||||
Js::includeFile ('pages/login/login.js');
|
|
||||||
|
|
||||||
Js::includeCss ('global/style.css');
|
|
||||||
Js::includeCss ('pages/login/style.css');
|
|
||||||
|
|
||||||
if (Js::isMobile ())
|
|
||||||
{
|
|
||||||
Js::includeCss ('global/mobile.css');
|
|
||||||
Js::includeCss ('pages/login/mobile.css');
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
|
@ -1,67 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
||||||
<meta name="viewport" content="user-scalable=no"/>
|
|
||||||
<?php include ('pages/login/head.php') ?>
|
|
||||||
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="image/favicon.ico"/>
|
|
||||||
<title>Login - Verdnatura</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="header">
|
|
||||||
<div>
|
|
||||||
<a href="?page=web&guest=true#!form=cms/about"><?=s('IWantToKnowMore')?></a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="body">
|
|
||||||
<div id="column">
|
|
||||||
<div id="login">
|
|
||||||
<form id="form" action="?page=login&login" method="post">
|
|
||||||
<div id="logo">
|
|
||||||
<img src="image/logo.svg" alt=""/>
|
|
||||||
</div>
|
|
||||||
<div id="version-code">
|
|
||||||
</div>
|
|
||||||
<div id="form-inputs">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="user"><?=s('User')?></label>
|
|
||||||
<input type="text" id="user" name="user"/>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="pass"><?=s('Password')?></label>
|
|
||||||
<input type="password" id="pass" name="password"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="bottom">
|
|
||||||
<input type="checkbox" id="remember" name="remember"/>
|
|
||||||
<label for="remember"><?=s("NotCloseSession")?></label>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<input type="submit" value="<?=s('Enter')?>"/>
|
|
||||||
</div>
|
|
||||||
<div id="info">
|
|
||||||
<p><?=s("LoginMail")?></p>
|
|
||||||
<p><?=s("LoginPhone")?></p>
|
|
||||||
</div>
|
|
||||||
<div id="links">
|
|
||||||
<a target="_blank" href="http://verdnaturacomunicacion.blogspot.com.es/">
|
|
||||||
<img alt="Blogger" src="image/blogger.svg" title="Blogger"/>
|
|
||||||
</a>
|
|
||||||
<a target="_blank" href="https://plus.google.com/u/0/107516577801959283883/posts">
|
|
||||||
<img alt="Google+" src="image/google-plus.svg" title="Google+"/>
|
|
||||||
</a>
|
|
||||||
<a target="_blank" href="http://www.facebook.com/verdnatura">
|
|
||||||
<img alt="Facebook" src="image/facebook.svg" title="Facebook"/>
|
|
||||||
</a>
|
|
||||||
<a target="_blank" href="http://www.youtube.com/user/verdnatura">
|
|
||||||
<img alt="YouTube" src="image/youtube.svg" title="YouTube"/>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,33 +0,0 @@
|
||||||
|
|
||||||
window.addEventListener ('load', function () {
|
|
||||||
var web = new Vn.Login ();
|
|
||||||
});
|
|
||||||
|
|
||||||
Vn.Login = new Class
|
|
||||||
({
|
|
||||||
Extends: Vn.Object
|
|
||||||
|
|
||||||
,initialize: function ()
|
|
||||||
{
|
|
||||||
Vn.Hash.initialize ();
|
|
||||||
|
|
||||||
switch (Vn.Hash.get ('error'))
|
|
||||||
{
|
|
||||||
case 'badLogin':
|
|
||||||
alert (_('InvalidLogin'));
|
|
||||||
break;
|
|
||||||
case 'sessionExpired':
|
|
||||||
alert (_('SessionExpired'));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
var userEntry = document.getElementById ('user');
|
|
||||||
|
|
||||||
if (Vn.Cookie.check ('vn_user'))
|
|
||||||
userEntry.value = Vn.Cookie.get ('vn_user');
|
|
||||||
|
|
||||||
userEntry.focus ();
|
|
||||||
userEntry.select ();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Vn\Hedera\Web;
|
|
||||||
|
|
||||||
if (isset ($_GET['logout']))
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Web::login ();
|
|
||||||
Web::logout ();
|
|
||||||
}
|
|
||||||
catch (Exception $e) {}
|
|
||||||
|
|
||||||
if (Web::login ())
|
|
||||||
{
|
|
||||||
header ('Location: ?page=web');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
elseif (isset ($_GET['login']))
|
|
||||||
{
|
|
||||||
header ('Location: ?page=login#!error=badLogin');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
|
@ -1,166 +0,0 @@
|
||||||
body
|
|
||||||
{
|
|
||||||
position: absolute;
|
|
||||||
margin: 0;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
z-index: -2;
|
|
||||||
background-color: #EEE;
|
|
||||||
}
|
|
||||||
body,
|
|
||||||
label,
|
|
||||||
button,
|
|
||||||
input,
|
|
||||||
textarea,
|
|
||||||
p,
|
|
||||||
a
|
|
||||||
{
|
|
||||||
font-size: 1.2em;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #333;
|
|
||||||
/* text-shadow: 0 0.2em 0.2em #AAA; */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Header */
|
|
||||||
|
|
||||||
#header
|
|
||||||
{
|
|
||||||
z-index: 10;
|
|
||||||
position: absolute;
|
|
||||||
background-color: #333;
|
|
||||||
width: 100%;
|
|
||||||
height: 3.5em;
|
|
||||||
|
|
||||||
}
|
|
||||||
#header div
|
|
||||||
{
|
|
||||||
margin-top: 1em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#header a
|
|
||||||
{
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Body */
|
|
||||||
|
|
||||||
#body
|
|
||||||
{
|
|
||||||
position: absolute;
|
|
||||||
top: 3.5em;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
/* background-image: url("background.png");
|
|
||||||
background-repeat: repeat;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
#column
|
|
||||||
{
|
|
||||||
position: relative;
|
|
||||||
margin: 0 auto;
|
|
||||||
overflow: auto;
|
|
||||||
max-width: 40em;
|
|
||||||
height: 100%;
|
|
||||||
background-color: white;
|
|
||||||
box-shadow: 0 0.2em 0.2em #DDD;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Login */
|
|
||||||
|
|
||||||
#login
|
|
||||||
{
|
|
||||||
position: absolute;
|
|
||||||
margin-top: -17em;
|
|
||||||
padding: 1em;
|
|
||||||
max-width: 45em;
|
|
||||||
top: 50%;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
#logo img
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
margin: 0.5em auto;
|
|
||||||
min-width: 24em;
|
|
||||||
width: 75%;
|
|
||||||
}
|
|
||||||
#version-code
|
|
||||||
{
|
|
||||||
color: red;
|
|
||||||
text-align: right;
|
|
||||||
margin: 0.2em auto;
|
|
||||||
font-weight: bold;
|
|
||||||
height: 2em;
|
|
||||||
}
|
|
||||||
#form-inputs
|
|
||||||
{
|
|
||||||
margin: 0 auto;
|
|
||||||
max-width: 16em;
|
|
||||||
}
|
|
||||||
div.form-group label
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
input
|
|
||||||
{
|
|
||||||
border-radius: 0.1em;
|
|
||||||
box-shadow: 0 0.1em 0.1em #AAA;
|
|
||||||
margin: 0.3em;
|
|
||||||
}
|
|
||||||
input[type=text],
|
|
||||||
input[type=password]
|
|
||||||
{
|
|
||||||
margin: 0.5em 0;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
padding: 0.5em;
|
|
||||||
width: 100%;
|
|
||||||
border: 1px solid #AAA;
|
|
||||||
}
|
|
||||||
td.entry
|
|
||||||
{
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
input[type=submit]
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
margin: 0 auto;
|
|
||||||
background-color: #AD4;
|
|
||||||
border: 1px solid #8B2;
|
|
||||||
height: 2.4em;
|
|
||||||
width: 8em;
|
|
||||||
color: #250;
|
|
||||||
}
|
|
||||||
input[type=submit]:hover
|
|
||||||
{
|
|
||||||
background-color: #9C3;
|
|
||||||
}
|
|
||||||
#bottom
|
|
||||||
{
|
|
||||||
text-align: center;
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Info */
|
|
||||||
|
|
||||||
#info
|
|
||||||
{
|
|
||||||
margin-top: 2.5em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#info p
|
|
||||||
{
|
|
||||||
margin: 0.5em;
|
|
||||||
}
|
|
||||||
#links
|
|
||||||
{
|
|
||||||
margin: 0 auto;
|
|
||||||
margin-top: 2em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#links img
|
|
||||||
{
|
|
||||||
height: 1.8em;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Vn\Hedera\Js;
|
|
||||||
|
|
||||||
require_once ('global/metatags.php');
|
|
||||||
require_once ('js/htk/main.php');
|
|
||||||
|
|
||||||
Js::includeFile ('pages/web/web.js');
|
|
||||||
Js::includeFile ('pages/web/module.js');
|
|
||||||
Js::includeFile ('pages/web/tpv.js');
|
|
||||||
|
|
||||||
Js::includeCss ('global/style.css');
|
|
||||||
Js::includeCss ('pages/web/style.css');
|
|
||||||
|
|
||||||
if (Js::isMobile ())
|
|
||||||
{
|
|
||||||
Js::includeCss ('global/mobile.css');
|
|
||||||
Js::includeCss ('pages/web/mobile.css');
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
|
@ -1,59 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="user-scalable=no"/>
|
|
||||||
<!--<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"/>-->
|
|
||||||
<meta name="mobile-web-app-capable" content="yes">
|
|
||||||
<link rel="shortcut icon" type="image/x-icon" href="image/favicon.ico"/>
|
|
||||||
<title>Verdnatura</title>
|
|
||||||
|
|
||||||
<?php include ('pages/web/head.php') ?>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="header">
|
|
||||||
<div id="header-bar">
|
|
||||||
<button id="menu-button">
|
|
||||||
<img src="image/dark/menu.svg" alt="<?=s('Menu')?>"/>
|
|
||||||
</button>
|
|
||||||
<a id="exit" href="?page=login&logout">
|
|
||||||
<span id="exit-text"><?=s('Exit')?></span>
|
|
||||||
</a>
|
|
||||||
<img id="logo" src="image/dark/logo.svg" alt="Verdnatura"/>
|
|
||||||
<img id="loader" src="image/loader.gif" alt="Loading"/>
|
|
||||||
<div id="welcome">
|
|
||||||
<?=s('Welcome')?><span id="user-name"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="body">
|
|
||||||
<div id="content">
|
|
||||||
<div id="menu-box">
|
|
||||||
<div id="menu-overflow">
|
|
||||||
<a id="test-link" href="#"></a>
|
|
||||||
<ul id="menu"></ul>
|
|
||||||
</div>
|
|
||||||
<div id="links">
|
|
||||||
<a target="_blank" href="http://verdnaturacomunicacion.blogspot.com.es/">
|
|
||||||
<img alt="Blogger" src="image/blogger.svg" title="Blogger"/>
|
|
||||||
</a>
|
|
||||||
<a target="_blank" href="https://plus.google.com/u/0/107516577801959283883/posts">
|
|
||||||
<img alt="Google+" src="image/google-plus.svg" title="Google+"/>
|
|
||||||
</a>
|
|
||||||
<a target="_blank" href="http://www.facebook.com/verdnatura">
|
|
||||||
<img alt="Facebook" src="image/facebook.svg" title="Facebook"/>
|
|
||||||
</a>
|
|
||||||
<a target="_blank" href="http://www.youtube.com/user/verdnatura">
|
|
||||||
<img alt="YouTube" src="image/youtube.svg" title="YouTube"/>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="background">
|
|
||||||
</div>
|
|
||||||
<div id="form-holder">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,26 +0,0 @@
|
||||||
|
|
||||||
#menu-button
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
#menu-box
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#form-holder
|
|
||||||
{
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
ul.submenu
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
position: relative;
|
|
||||||
border: none;
|
|
||||||
border-radius: 0;
|
|
||||||
background-color: white;
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
.htk-toast
|
|
||||||
{
|
|
||||||
margin-left: -11em;
|
|
||||||
}
|
|
|
@ -1,282 +0,0 @@
|
||||||
|
|
||||||
body
|
|
||||||
{
|
|
||||||
position: absolute;
|
|
||||||
margin: 0;
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
background-color: #EEE;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Font */
|
|
||||||
|
|
||||||
#welcome,
|
|
||||||
#exit span,
|
|
||||||
#menu-title,
|
|
||||||
#menu a
|
|
||||||
{
|
|
||||||
font-size: 1.1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Header */
|
|
||||||
|
|
||||||
#header,
|
|
||||||
#exit
|
|
||||||
{
|
|
||||||
height: 4.2em;
|
|
||||||
}
|
|
||||||
#header
|
|
||||||
{
|
|
||||||
position: relative;
|
|
||||||
background-color: #333;
|
|
||||||
width: 100%;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
#header *
|
|
||||||
{
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
#header-bar
|
|
||||||
{
|
|
||||||
position: relative;
|
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
#logo
|
|
||||||
{
|
|
||||||
width: 16em;
|
|
||||||
float: left;
|
|
||||||
padding: 1em;
|
|
||||||
padding-top: 1.2em;
|
|
||||||
}
|
|
||||||
#loader
|
|
||||||
{
|
|
||||||
float: left;
|
|
||||||
margin-left: 0.4em;
|
|
||||||
margin-top: 1.4em;
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
#welcome
|
|
||||||
{
|
|
||||||
float: right;
|
|
||||||
padding: 0 1.5em;
|
|
||||||
}
|
|
||||||
#welcome span
|
|
||||||
{
|
|
||||||
font-size: 1em;
|
|
||||||
}
|
|
||||||
#welcome,
|
|
||||||
#exit span
|
|
||||||
{
|
|
||||||
margin-top: 2em;
|
|
||||||
}
|
|
||||||
#exit
|
|
||||||
{
|
|
||||||
float: right;
|
|
||||||
background-color: #FC9900;
|
|
||||||
width: 4em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#exit:hover
|
|
||||||
{
|
|
||||||
background-color: #FCA910;
|
|
||||||
}
|
|
||||||
#exit span
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
#header,
|
|
||||||
#content
|
|
||||||
{
|
|
||||||
margin: auto;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Body */
|
|
||||||
|
|
||||||
#body
|
|
||||||
{
|
|
||||||
position: absolute;
|
|
||||||
top: 4.2em;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
#content
|
|
||||||
{
|
|
||||||
position: relative;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Top bar */
|
|
||||||
|
|
||||||
#top-bar
|
|
||||||
{
|
|
||||||
height: 3em;
|
|
||||||
overflow: hidden;
|
|
||||||
background-color: #CE8;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Left panel */
|
|
||||||
|
|
||||||
#menu-button
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
float: left;
|
|
||||||
border: none;
|
|
||||||
background-color: transparent;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
margin-left: 0.6em;
|
|
||||||
height: 4.2em;
|
|
||||||
}
|
|
||||||
#menu-button img
|
|
||||||
{
|
|
||||||
height: 2em;
|
|
||||||
}
|
|
||||||
#background
|
|
||||||
{
|
|
||||||
z-index: 10;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
background-color: rgba(10, 10, 10, 0.6);
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#menu-box,
|
|
||||||
#menu > li,
|
|
||||||
ul.submenu
|
|
||||||
{
|
|
||||||
width: 15em;
|
|
||||||
}
|
|
||||||
#menu-box
|
|
||||||
{
|
|
||||||
z-index: 20;
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
top: 0;
|
|
||||||
background-color: white;
|
|
||||||
z-index: 20;
|
|
||||||
box-shadow: 0 0.2em 0.2em #AAA;
|
|
||||||
}
|
|
||||||
#menu-overflow
|
|
||||||
{
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 4em;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Test link */
|
|
||||||
|
|
||||||
#test-link
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
margin: 1em auto;
|
|
||||||
max-width: 70%;
|
|
||||||
background-color: #3f51b5;
|
|
||||||
color: white;
|
|
||||||
padding: 0 1em;
|
|
||||||
line-height: 2em;
|
|
||||||
border-radius: 0.1em;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
#test-link:hover
|
|
||||||
{
|
|
||||||
background-color: #4f61c5;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Menu */
|
|
||||||
|
|
||||||
#menu
|
|
||||||
{
|
|
||||||
list-style-type: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
#menu > li
|
|
||||||
{
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
clear: both;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
#menu > li > a
|
|
||||||
{
|
|
||||||
line-height: 2.8em;
|
|
||||||
width: 70%;
|
|
||||||
padding: 0 15%;
|
|
||||||
}
|
|
||||||
#menu a
|
|
||||||
{
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
#menu a:hover
|
|
||||||
{
|
|
||||||
background-color: #DDD /* #AC6 */;
|
|
||||||
}
|
|
||||||
#menu a.selected
|
|
||||||
{
|
|
||||||
background-color: #EEE;
|
|
||||||
}
|
|
||||||
ul.submenu
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
position: fixed;
|
|
||||||
border: none;
|
|
||||||
border-radius: 1px;
|
|
||||||
background-color: white;
|
|
||||||
box-shadow: 0 0.2em 0.2em #CCC;
|
|
||||||
z-index: 50;
|
|
||||||
list-style-type: none;
|
|
||||||
padding-left: 0;
|
|
||||||
}
|
|
||||||
ul.submenu a
|
|
||||||
{
|
|
||||||
width: 60%;
|
|
||||||
padding: 0.7em 20%;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Links */
|
|
||||||
|
|
||||||
#links
|
|
||||||
{
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
padding: 0.8em;
|
|
||||||
}
|
|
||||||
#links a
|
|
||||||
{
|
|
||||||
padding: 0.1em;
|
|
||||||
display: block;
|
|
||||||
float: left;
|
|
||||||
max-width: 2.2em;
|
|
||||||
}
|
|
||||||
#links img
|
|
||||||
{
|
|
||||||
height: 1.8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Form holder */
|
|
||||||
|
|
||||||
#form-holder
|
|
||||||
{
|
|
||||||
position: absolute;
|
|
||||||
top: 0em;
|
|
||||||
bottom: 0;
|
|
||||||
right: 0;
|
|
||||||
left: 15em;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
.htk-toast
|
|
||||||
{
|
|
||||||
margin-left: -3em;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,124 +0,0 @@
|
||||||
|
|
||||||
Vn.Tpv =
|
|
||||||
{
|
|
||||||
check: function (conn)
|
|
||||||
{
|
|
||||||
var tpvStatus = Vn.Hash.get ('tpv_status');
|
|
||||||
|
|
||||||
if (tpvStatus)
|
|
||||||
{
|
|
||||||
var batch = new Sql.Batch ();
|
|
||||||
batch.addValue ('transaction', Vn.Hash.get ('tpv_order'));
|
|
||||||
batch.addValue ('status', tpvStatus);
|
|
||||||
|
|
||||||
var query = 'CALL transaction_end (#transaction, #status)';
|
|
||||||
|
|
||||||
conn.execQuery (query, null, batch);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
,pay: function (conn, amount, company)
|
|
||||||
{
|
|
||||||
if (amount > 0)
|
|
||||||
{
|
|
||||||
var query = 'CALL transaction_start (#company, #amount)';
|
|
||||||
|
|
||||||
var batch = new Sql.Batch ();
|
|
||||||
batch.addValue ('company', company);
|
|
||||||
batch.addValue ('amount', parseInt (amount * 100));
|
|
||||||
|
|
||||||
conn.execQuery (query,
|
|
||||||
this._onTransactionStart.bind (this), batch);
|
|
||||||
}
|
|
||||||
else if (!isNaN (amount))
|
|
||||||
Htk.Toast.showError (_('AmountError'));
|
|
||||||
}
|
|
||||||
|
|
||||||
,_onTransactionStart: function (resultSet)
|
|
||||||
{
|
|
||||||
var res = resultSet.fetchResult ();
|
|
||||||
|
|
||||||
if (res && res.next ())
|
|
||||||
{
|
|
||||||
var form = document.createElement ('form');
|
|
||||||
form.method = 'post';
|
|
||||||
form.action = res.get ('url');
|
|
||||||
document.body.appendChild (form);
|
|
||||||
|
|
||||||
var fieldsMap =
|
|
||||||
{
|
|
||||||
'Ds_Merchant_Amount': 'amount'
|
|
||||||
,'Ds_Merchant_Order': 'ds_order'
|
|
||||||
,'Ds_Merchant_MerchantCode': 'id'
|
|
||||||
,'Ds_Merchant_Currency': 'currency'
|
|
||||||
,'Ds_Merchant_TransactionType': 'transaction_type'
|
|
||||||
,'Ds_Merchant_Terminal': 'terminal'
|
|
||||||
,'Ds_Merchant_MerchantURL': 'merchant_url'
|
|
||||||
,'Ds_Merchant_MerchantSignature': 'signature'
|
|
||||||
,'Ds_Merchant_UrlOK': null
|
|
||||||
,'Ds_Merchant_UrlKO': null
|
|
||||||
};
|
|
||||||
|
|
||||||
for (var field in fieldsMap)
|
|
||||||
{
|
|
||||||
var input = document.createElement ('input');
|
|
||||||
input.type = 'hidden';
|
|
||||||
input.name = field;
|
|
||||||
form.appendChild (input);
|
|
||||||
|
|
||||||
if (fieldsMap[field])
|
|
||||||
input.value = res.get (fieldsMap[field]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var transactionId = res.get ('ds_order');
|
|
||||||
form['Ds_Merchant_UrlOK'].value = this._makeUrl ('ok', transactionId);
|
|
||||||
form['Ds_Merchant_UrlKO'].value = this._makeUrl ('ko', transactionId);
|
|
||||||
|
|
||||||
form.submit ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Htk.Toast.showWarning (_('PayError'));
|
|
||||||
}
|
|
||||||
|
|
||||||
,_makeUrl: function (status, order)
|
|
||||||
{
|
|
||||||
var path = location.protocol +'//'+ location.host;
|
|
||||||
path += location.port ? ':'+ location.port : '';
|
|
||||||
path += location.pathname;
|
|
||||||
path += location.search ? location.search : '';
|
|
||||||
path += Vn.Hash.make ({
|
|
||||||
'form': 'ecomerce/orders',
|
|
||||||
'tpv_status': status,
|
|
||||||
'tpv_order': order
|
|
||||||
}, true);
|
|
||||||
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Vn.BasketChecker =
|
|
||||||
{
|
|
||||||
check: function (conn, callback)
|
|
||||||
{
|
|
||||||
conn.execQuery ('CALL basket_check ()',
|
|
||||||
this._onBasketCheck.bind (this, callback));
|
|
||||||
}
|
|
||||||
|
|
||||||
,_onBasketCheck: function (callback, resultSet)
|
|
||||||
{
|
|
||||||
var status = resultSet.fetchValue ();
|
|
||||||
|
|
||||||
if (!status)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var isOk = status == 'UPDATED' || status == 'OK';
|
|
||||||
|
|
||||||
if (status == 'UPDATED')
|
|
||||||
Htk.Toast.showWarning (_('OrderItemsUpdated'));
|
|
||||||
if (callback)
|
|
||||||
callback (isOk);
|
|
||||||
if (!isOk)
|
|
||||||
Vn.Hash.set ({'form': 'ecomerce/checkout'});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
|
@ -1,496 +0,0 @@
|
||||||
|
|
||||||
window.addEventListener ('load', function () {
|
|
||||||
var web = new Vn.Web ();
|
|
||||||
});
|
|
||||||
|
|
||||||
Vn.Web = new Class
|
|
||||||
({
|
|
||||||
Extends: Htk.Widget
|
|
||||||
|
|
||||||
,forms: {}
|
|
||||||
,activeForm: null
|
|
||||||
,activeCss: null
|
|
||||||
,requestedForm: null
|
|
||||||
,menuShown: false
|
|
||||||
,menuOptions: {}
|
|
||||||
,choosedOption: null
|
|
||||||
|
|
||||||
,initialize: function ()
|
|
||||||
{
|
|
||||||
window.onerror = function (message, file, line)
|
|
||||||
{
|
|
||||||
var error = new Error (message);
|
|
||||||
error.fileName = file;
|
|
||||||
error.lineNumber = line;
|
|
||||||
|
|
||||||
Htk.Toast.showError (_('InternalError'));
|
|
||||||
this.notifyError (error);
|
|
||||||
}.bind (this);
|
|
||||||
|
|
||||||
this.loadingCount = 0;
|
|
||||||
this.loader = $('loader');
|
|
||||||
this.formHolder = $('form-holder');
|
|
||||||
|
|
||||||
Vn.Hash.initialize ();
|
|
||||||
this.hash = Vn.Hash;
|
|
||||||
|
|
||||||
this.hashParam = new Vn.HashParam ({key: 'form'});
|
|
||||||
this.hashParam.on ('changed', this.onFormChange, this);
|
|
||||||
|
|
||||||
$('background').onclick = function () {};
|
|
||||||
|
|
||||||
$('menu-button').addEventListener ('click', function (event)
|
|
||||||
{
|
|
||||||
event.stopPropagation ();
|
|
||||||
|
|
||||||
if (!this.menuShown)
|
|
||||||
this.showMenu ();
|
|
||||||
else
|
|
||||||
this.hideMenu ();
|
|
||||||
}.bind (this));
|
|
||||||
|
|
||||||
$('menu-box').addEventListener ('click', function (event)
|
|
||||||
{
|
|
||||||
event.stopPropagation ();
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!Vn.Cookie.check ('hedera_cookies'))
|
|
||||||
{
|
|
||||||
Vn.Cookie.set ('hedera_cookies', true);
|
|
||||||
Htk.Toast.showWarning (_('CookiesNotification'));
|
|
||||||
}
|
|
||||||
|
|
||||||
this.conn = new Db.Conn ();
|
|
||||||
this.conn.on ('error', this.onConnError, this);
|
|
||||||
this.conn.on ('loading-changed', this.onConnLoading, this);
|
|
||||||
// this.conn.open (null, null, null, this.connOpened.bind (this));
|
|
||||||
|
|
||||||
var sql = 'SELECT default_form, image_dir FROM config;'
|
|
||||||
+'SELECT production_domain, test_domain FROM config;'
|
|
||||||
+'SELECT name FROM customer_view;'
|
|
||||||
+'CALL form_list ();';
|
|
||||||
this.conn.execQuery (sql, this.onMainQueryDone.bind (this));
|
|
||||||
}
|
|
||||||
|
|
||||||
,showBackground: function ()
|
|
||||||
{
|
|
||||||
Vn.Node.show ($('background'));
|
|
||||||
}
|
|
||||||
|
|
||||||
,hideBackground: function ()
|
|
||||||
{
|
|
||||||
Vn.Node.hide ($('background'));
|
|
||||||
}
|
|
||||||
|
|
||||||
,showMenu: function ()
|
|
||||||
{
|
|
||||||
this.showBackground ();
|
|
||||||
Vn.Node.show ($('menu-box'));
|
|
||||||
this.menuShown = true;
|
|
||||||
|
|
||||||
this.hideMenuCallback = this.hideMenu.bind (this);
|
|
||||||
document.addEventListener ('click', this.hideMenuCallback);
|
|
||||||
}
|
|
||||||
|
|
||||||
,hideMenu: function ()
|
|
||||||
{
|
|
||||||
this.hideBackground ();
|
|
||||||
Vn.Node.hide ($('menu-box'));
|
|
||||||
$('menu-button').style.display = 'initial';
|
|
||||||
this.menuShown = false;
|
|
||||||
|
|
||||||
document.removeEventListener ('click', this.hideMenuCallback);
|
|
||||||
this.hideMenuCallback = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
,onMainQueryDone: function (resultSet)
|
|
||||||
{
|
|
||||||
// Retrieving configuration parameters
|
|
||||||
|
|
||||||
var res = resultSet.fetchResult ();
|
|
||||||
var columns = res.columns;
|
|
||||||
|
|
||||||
if (res.next ())
|
|
||||||
for (var i = 0; i < res.columns.length; i++)
|
|
||||||
Vn.Config[columns[i].name] = res.get (columns[i].name);
|
|
||||||
|
|
||||||
// Retrieving configuration parameters
|
|
||||||
|
|
||||||
var res = resultSet.fetchResult ();
|
|
||||||
|
|
||||||
if (res.next () && res.get ('test_domain'))
|
|
||||||
{
|
|
||||||
if (location.host != res.get ('production_domain'))
|
|
||||||
{
|
|
||||||
var linkText = 'ReturnToOldWebsite';
|
|
||||||
var linkField = 'production_domain';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var linkText = 'TestTheNewWebsite';
|
|
||||||
var linkField = 'test_domain';
|
|
||||||
}
|
|
||||||
|
|
||||||
Vn.Node.setText ($('test-link'), _(linkText));
|
|
||||||
$('test-link').href = '//'+ res.get (linkField);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Vn.Node.hide ($('test-link'));
|
|
||||||
|
|
||||||
// Retrieving the user name
|
|
||||||
|
|
||||||
var userName = resultSet.fetchValue ();
|
|
||||||
|
|
||||||
if (userName)
|
|
||||||
{
|
|
||||||
var span = $('user-name');
|
|
||||||
span.appendChild (document.createTextNode (', '+ userName));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Retrieving menu sections
|
|
||||||
|
|
||||||
var res = resultSet.fetchResult ();
|
|
||||||
var sectionMap = {};
|
|
||||||
|
|
||||||
if (res)
|
|
||||||
for (var i = 0; res.next (); i++)
|
|
||||||
{
|
|
||||||
var parent = res.get ('parent');
|
|
||||||
|
|
||||||
if (!sectionMap[parent])
|
|
||||||
sectionMap[parent] = [];
|
|
||||||
|
|
||||||
sectionMap[parent].push (i);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.createMenu (res, sectionMap, null, $('menu'));
|
|
||||||
|
|
||||||
// Loading the default form
|
|
||||||
|
|
||||||
this.onFormChange ();
|
|
||||||
}
|
|
||||||
|
|
||||||
,notifyError: function (error)
|
|
||||||
{
|
|
||||||
if (error instanceof Error)
|
|
||||||
{
|
|
||||||
var httpRequest = new Vn.HttpRequest ()
|
|
||||||
httpRequest.add
|
|
||||||
({
|
|
||||||
'file': error.fileName
|
|
||||||
,'line': error.lineNumber
|
|
||||||
,'message': error.message
|
|
||||||
,'stack': error.stack
|
|
||||||
});
|
|
||||||
httpRequest.send ('log.php');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
,errorHandler: function (error)
|
|
||||||
{
|
|
||||||
if (error instanceof Vn.Error)
|
|
||||||
switch (error.domain)
|
|
||||||
{
|
|
||||||
case 'Auth':
|
|
||||||
this.unload ();
|
|
||||||
location.assign ('?page=login#!error='+ error.code);
|
|
||||||
break;
|
|
||||||
case 'Version':
|
|
||||||
this.newVersion (error);
|
|
||||||
break;
|
|
||||||
case 'User':
|
|
||||||
Htk.Toast.showError (error.message);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
console.error (error.message);
|
|
||||||
Htk.Toast.showError (_('InternalError'));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
console.error (error);
|
|
||||||
Htk.Toast.showError (_('InternalError'));
|
|
||||||
this.notifyError (error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
,onConnError: function (conn, error)
|
|
||||||
{
|
|
||||||
this.errorHandler (error);
|
|
||||||
}
|
|
||||||
|
|
||||||
,onConnLoading: function (conn, isLoading)
|
|
||||||
{
|
|
||||||
if (isLoading)
|
|
||||||
this.loaderPush ();
|
|
||||||
else
|
|
||||||
this.loaderPop ();
|
|
||||||
}
|
|
||||||
|
|
||||||
,loaderPush: function ()
|
|
||||||
{
|
|
||||||
this.loadingCount++;
|
|
||||||
|
|
||||||
if (this.loadingCount == 1)
|
|
||||||
this.loader.style.visibility = 'visible';
|
|
||||||
}
|
|
||||||
|
|
||||||
,loaderPop: function ()
|
|
||||||
{
|
|
||||||
if (this.loadingCount == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.loadingCount--;
|
|
||||||
|
|
||||||
if (this.loadingCount == 0)
|
|
||||||
this.loader.style.visibility = 'hidden';
|
|
||||||
}
|
|
||||||
|
|
||||||
,newVersion: function (error)
|
|
||||||
{
|
|
||||||
if (this.newVersionBlock || this.skipVersion)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.newVersionBlock = true;
|
|
||||||
|
|
||||||
var reload;
|
|
||||||
var message = _('NewVersionAvailable') +"\n\n"+ error.message;
|
|
||||||
|
|
||||||
if (error.code == 'criticalVersion')
|
|
||||||
{
|
|
||||||
alert (message)
|
|
||||||
reload = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
reload = confirm (message);
|
|
||||||
this.skipVersion = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reload)
|
|
||||||
{
|
|
||||||
this.unload ();
|
|
||||||
location.reload ();
|
|
||||||
}
|
|
||||||
|
|
||||||
this.newVersionBlock = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
,createMenu: function (res, sectionMap, parent, ul)
|
|
||||||
{
|
|
||||||
var sections = sectionMap[parent];
|
|
||||||
|
|
||||||
for (var i = 0; i < sections.length; i++)
|
|
||||||
{
|
|
||||||
res.row = sections[i];
|
|
||||||
|
|
||||||
var li = document.createElement ('li');
|
|
||||||
ul.appendChild (li);
|
|
||||||
|
|
||||||
var a = document.createElement ('a');
|
|
||||||
a.href = Vn.Hash.make ({'form': res.get ('path')});
|
|
||||||
this.menuOptions[res.get ('path')] = a;
|
|
||||||
li.appendChild (a);
|
|
||||||
|
|
||||||
var text = document.createTextNode (_(res.get ('description')));
|
|
||||||
a.appendChild (text);
|
|
||||||
|
|
||||||
var formId = res.get ('id');
|
|
||||||
|
|
||||||
if (sectionMap[formId])
|
|
||||||
{
|
|
||||||
var submenu = document.createElement ('ul');
|
|
||||||
submenu.className = 'submenu';
|
|
||||||
li.appendChild (submenu);
|
|
||||||
|
|
||||||
li.addEventListener ('mouseover',
|
|
||||||
this.onLiMouseHover.bind (this, submenu, a));
|
|
||||||
li.addEventListener ('mouseout',
|
|
||||||
this.onLiMouseOut.bind (this));
|
|
||||||
|
|
||||||
this.createMenu (res, sectionMap, formId, submenu);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
,onLiMouseHover: function (submenu, parent)
|
|
||||||
{
|
|
||||||
if (Vn.isMobile ())
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.hideSubmenu ();
|
|
||||||
this.activeSubmenu = submenu;
|
|
||||||
|
|
||||||
var rect = parent.getBoundingClientRect ();
|
|
||||||
submenu.style.display = 'inline';
|
|
||||||
submenu.style.left = rect.right +'px';
|
|
||||||
submenu.style.top = rect.top +'px';
|
|
||||||
}
|
|
||||||
|
|
||||||
,onLiMouseOut: function ()
|
|
||||||
{
|
|
||||||
this.timeout = setTimeout (this.hideSubmenu.bind (this), 160);
|
|
||||||
}
|
|
||||||
|
|
||||||
,hideSubmenu: function ()
|
|
||||||
{
|
|
||||||
var submenu = this.activeSubmenu;
|
|
||||||
|
|
||||||
if (submenu)
|
|
||||||
{
|
|
||||||
submenu.style.display = 'none';
|
|
||||||
clearTimeout (this.timeout);
|
|
||||||
this.activeSubmenu = null;
|
|
||||||
this.timeout = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
,onFormChange: function ()
|
|
||||||
{
|
|
||||||
var formPath = this.hashParam.value;
|
|
||||||
this.openForm (formPath ? formPath : Vn.Config['default_form'], null);
|
|
||||||
}
|
|
||||||
|
|
||||||
,openForm: function (formPath, callback)
|
|
||||||
{
|
|
||||||
if (Vn.isMobile ())
|
|
||||||
this.hideMenu ();
|
|
||||||
|
|
||||||
this.loaderPush ();
|
|
||||||
|
|
||||||
this.requestedForm = formPath;
|
|
||||||
|
|
||||||
var formInfo = this.forms[formPath];
|
|
||||||
var path = 'forms/'+ formPath;
|
|
||||||
|
|
||||||
if (this.activeForm)
|
|
||||||
{
|
|
||||||
this.activeForm.close ();
|
|
||||||
this.activeForm.unref ();
|
|
||||||
this.activeForm = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.activeCss)
|
|
||||||
{
|
|
||||||
Vn.excludeCss (this.activeCss +'/style.css');
|
|
||||||
|
|
||||||
if (Vn.isMobile ())
|
|
||||||
Vn.excludeCss (this.activeCss +'/mobile.css');
|
|
||||||
}
|
|
||||||
|
|
||||||
this.activeCss = path;
|
|
||||||
|
|
||||||
Vn.includeCss (this.activeCss +'/style.css');
|
|
||||||
|
|
||||||
if (Vn.isMobile ())
|
|
||||||
Vn.includeCss (this.activeCss +'/mobile.css');
|
|
||||||
|
|
||||||
if (!formInfo)
|
|
||||||
{
|
|
||||||
var aux = formPath.split ('/');
|
|
||||||
var formName = aux[aux.length - 1];
|
|
||||||
|
|
||||||
var klass = 'Vn.'+ formName.charAt (0).toUpperCase ();
|
|
||||||
klass += formName.substr (1).replace (/\w\-\w/g, function (token)
|
|
||||||
{
|
|
||||||
return token.charAt (0) + token.charAt (2).toUpperCase ();
|
|
||||||
});
|
|
||||||
|
|
||||||
formInfo = {
|
|
||||||
path: formPath
|
|
||||||
,klass: klass
|
|
||||||
,localeReady: false
|
|
||||||
,jsReady: false
|
|
||||||
,uiReady: false
|
|
||||||
,error: false
|
|
||||||
,ready: false
|
|
||||||
,callbacks: []
|
|
||||||
};
|
|
||||||
|
|
||||||
Vn.Locale.load (path,
|
|
||||||
this.onFormLocaleReady.bind (this, formInfo));
|
|
||||||
Vn.includeJs (path +'/'+ formName +'.js',
|
|
||||||
this.onFormJsReady.bind (this, formInfo));
|
|
||||||
Vn.loadXml ('forms/'+ formPath +'/ui.xml',
|
|
||||||
this.onFormUiReady.bind (this, formInfo));
|
|
||||||
|
|
||||||
this.forms[formPath] = formInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
var newChoosedOption = this.menuOptions[formInfo.path];
|
|
||||||
|
|
||||||
if (newChoosedOption)
|
|
||||||
{
|
|
||||||
if (this.choosedOption)
|
|
||||||
this.choosedOption.className = null;
|
|
||||||
|
|
||||||
newChoosedOption.className = 'selected';
|
|
||||||
this.choosedOption = newChoosedOption;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callback)
|
|
||||||
formInfo.callbacks.push (callback);
|
|
||||||
if (formInfo.ready)
|
|
||||||
this.onFormReady (formInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
,onFormLocaleReady: function (formInfo, success)
|
|
||||||
{
|
|
||||||
formInfo.localeReady = true;
|
|
||||||
this.onFormReady (formInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
,onFormJsReady: function (formInfo, success)
|
|
||||||
{
|
|
||||||
formInfo.jsReady = true;
|
|
||||||
formInfo.error = !success;
|
|
||||||
this.onFormReady (formInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
,onFormUiReady: function (formInfo, success)
|
|
||||||
{
|
|
||||||
formInfo.uiReady = true;
|
|
||||||
formInfo.error = !success;
|
|
||||||
this.onFormReady (formInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
,onFormReady: function (formInfo)
|
|
||||||
{
|
|
||||||
if (!(formInfo.localeReady && formInfo.jsReady && formInfo.uiReady))
|
|
||||||
return;
|
|
||||||
|
|
||||||
formInfo.ready = true;
|
|
||||||
|
|
||||||
if (!formInfo.error)
|
|
||||||
{
|
|
||||||
if (formInfo.path == this.requestedForm)
|
|
||||||
try {
|
|
||||||
var klass = eval (formInfo.klass);
|
|
||||||
this.activeForm = new klass (this, formInfo);
|
|
||||||
this.activeForm.open ();
|
|
||||||
this.activeForm.activate ();
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
formInfo.error = true;
|
|
||||||
this.errorHandler (error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
Htk.Toast.showError (_('ErrorLoadingForm'));
|
|
||||||
|
|
||||||
var callbacks = formInfo.callbacks;
|
|
||||||
formInfo.callbacks = [];
|
|
||||||
|
|
||||||
for (var i = 0; i < callbacks.length; i++)
|
|
||||||
callbacks[i] (this.activeForm);
|
|
||||||
|
|
||||||
this.loaderPop ();
|
|
||||||
}
|
|
||||||
|
|
||||||
,unload: function ()
|
|
||||||
{
|
|
||||||
this.hashParam.unref ();
|
|
||||||
this.conn.disconnect ('error', this.onConnError, this);
|
|
||||||
this.conn.disconnect ('loading-changed', this.onConnLoading, this);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Vn\Hedera\Web;
|
|
||||||
|
|
||||||
if (!Web::login ())
|
|
||||||
{
|
|
||||||
header ('Location: ?page=login#!error=sessionExpired');
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
<vn>
|
||||||
|
<div id="report" class="shelves">
|
||||||
|
<h1>
|
||||||
|
<htk-text id="title"/>
|
||||||
|
</h1>
|
||||||
|
<div>
|
||||||
|
<htk-text id="page-number"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</vn>
|
|
@ -0,0 +1,11 @@
|
||||||
|
|
||||||
|
Vn.ShelvesReport = new Class
|
||||||
|
({
|
||||||
|
Extends: Vn.Report
|
||||||
|
|
||||||
|
,open: function ()
|
||||||
|
{
|
||||||
|
this.parent ();
|
||||||
|
Vn.Node.setText (this.$('title'), this.title);
|
||||||
|
}
|
||||||
|
});
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
.shelves
|
||||||
|
{
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue