This commit is contained in:
Géry Debongnie
2019-01-23 22:52:50 +01:00
parent 76fedae5a9
commit 88c5c06468
12 changed files with 83 additions and 79 deletions
+2 -1
View File
@@ -13,4 +13,5 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
package-lock.json
.vscode
+38 -40
View File
@@ -1,56 +1,54 @@
$navbar-height: 40px;
$main-color: #875A7B;
$main-color: #875a7b;
html {
height: 100%;
height: 100%;
}
body {
height: 100%;
margin: 0;
height: 100%;
margin: 0;
}
/* Web Client */
.o_web_client {
font-family: sans-serif;
height: 100%;
display: grid;
grid-template-rows: $navbar-height auto;
font-family: sans-serif;
height: 100%;
display: grid;
grid-template-rows: $navbar-height auto;
}
/* Navbar */
.o_navbar {
background-color: $main-color;
background-color: $main-color;
color: white;
display: flex;
line-height: $navbar-height;
span.title {
font-size: 24px;
font-weight: bold;
padding: 0 16px;
}
ul {
list-style-type: none;
display: inline-flex;
height: 100%;
margin: 0;
}
li {
margin: 0 4px;
font-size: 20px;
&:hover {
background-color: darken($main-color, 10);
}
}
a {
color: white;
display: flex;
line-height: $navbar-height;
span.title {
font-size: 24px;
font-weight: bold;
padding: 0 16px;
}
ul {
list-style-type: none;
display: inline-flex;
height: 100%;
margin: 0;
}
li {
margin: 0 4px;
font-size: 20px;
&:hover {
background-color: darken($main-color, 10);
}
}
a {
color: white;
text-decoration: none;
padding: 0 5px;
}
text-decoration: none;
padding: 0 5px;
}
}
+1 -1
View File
@@ -649,7 +649,7 @@ const onDirective: Directive = {
});
ctx.addLine(
`p${nodeID}.on = {${eventName}: context['${handler}'].bind(context${
extraArgs ? ", " + qweb._formatExpression(extraArgs) : ""
extraArgs ? ", " + qweb._formatExpression(extraArgs) : ""
})}`
);
}
+4 -4
View File
@@ -18,11 +18,11 @@ export function escape(str: string | number | undefined): string {
*/
export function htmlTrim(s: string): string {
let result = s.replace(/(^\s+|\s+$)/g, "");
if (s[0] === ' ') {
result = ' ' + result;
if (s[0] === " ") {
result = " " + result;
}
if (result !== ' ' && s[s.length - 1] === ' ') {
result = result + ' ';
if (result !== " " && s[s.length - 1] === " ") {
result = result + " ";
}
return result;
}
-1
View File
@@ -26,4 +26,3 @@ export function makeEnvironment(): Env {
actions
};
}
+1 -1
View File
@@ -1,7 +1,7 @@
///<amd-module name="main" />
import RootWidget from "./widgets/root_widget";
import {makeEnvironment} from "./env";
import { makeEnvironment } from "./env";
document.addEventListener("DOMContentLoaded", async function() {
const env = makeEnvironment();
+7 -9
View File
@@ -12,13 +12,11 @@ import { Action } from "./actions";
// { id: 2, title: "CRM", Widget: CRM }
// ];
export default class ActionManager {
doAction(action: Action) {
console.log(action);
// load data (??)
// trigger action somewhere
// upload url with router
}
}
doAction(action: Action) {
console.log(action);
// load data (??)
// trigger action somewhere
// upload url with router
}
}
+1 -2
View File
@@ -1,2 +1 @@
export default class Ajax{}
export default class Ajax {}
+5 -2
View File
@@ -16,11 +16,14 @@ export default class Router {
constructor() {
window.addEventListener("popstate", this.onUrlChange.bind(this));
window.onhashchange = function () { console.log('aaaa'); debugger; }
window.onhashchange = function() {
console.log("aaaa");
debugger;
};
}
onUrlChange(event: PopStateEvent) {
debugger
debugger;
event.preventDefault();
const info = this.getRoute();
for (let listener of this.listeners) {
+1 -1
View File
@@ -16,7 +16,7 @@ export default class Counter extends Widget<Env> {
counter: 0
};
constructor(parent: Widget<Env>, props: {initialState?: number}) {
constructor(parent: Widget<Env>, props: { initialState?: number }) {
super(parent);
this.state.counter = props.initialState || 0;
}
+19 -12
View File
@@ -1,4 +1,4 @@
import QWeb, {EvalContext} from "../src/ts/core/qweb_vdom";
import QWeb, { EvalContext } from "../src/ts/core/qweb_vdom";
import { init } from "../libs/snabbdom/src/snabbdom";
import sdAttributes from "../libs/snabbdom/src/modules/attributes";
import sdListeners from "../libs/snabbdom/src/modules/eventlisteners";
@@ -551,13 +551,18 @@ describe("foreach", () => {
test("iterate, dict param", () => {
const qweb = new QWeb();
qweb.addTemplate('test',`
qweb.addTemplate(
"test",
`
<div>
<t t-foreach="value" t-as="item">
[<t t-esc="item_index"/>: <t t-esc="item"/> <t t-esc="item_value"/> - <t t-esc="item_parity"/>]
</t>
</div>`);
const result = trim(renderToString(qweb, "test", { value: { a: 1, b: 2, c: 3 } }));
</div>`
);
const result = trim(
renderToString(qweb, "test", { value: { a: 1, b: 2, c: 3 } })
);
const expected = `<div>[0:a1-even][1:b2-odd][2:c3-even]</div>`;
expect(result).toBe(expected);
});
@@ -594,7 +599,7 @@ describe("misc", () => {
</div>
`
);
const result = trim(renderToString(qweb, "caller"))
const result = trim(renderToString(qweb, "caller"));
const expected = trim(`
<div>
<span>4</span>
@@ -655,26 +660,28 @@ describe("t-on", () => {
test("can bind handlers with loop variable as argument", () => {
expect.assertions(1);
const qweb = new QWeb();
qweb.addTemplate("test", `
qweb.addTemplate(
"test",
`
<ul>
<li t-foreach="['someval']" t-as="action"><a t-on-click="activate(action)">link</a></li>
</ul>`);
</ul>`
);
const node = renderToDOM(qweb, "test", {
activate(action) {
expect(action).toBe('someval');
expect(action).toBe("someval");
}
});
(<HTMLElement>node).getElementsByTagName('a')[0].click();
(<HTMLElement>node).getElementsByTagName("a")[0].click();
});
});
describe("t-ref", () => {
test("can get a ref on a node", () => {
const qweb = new QWeb();
qweb.addTemplate("test", `<div><span t-ref="myspan"/></div>`);
let refs: any = {};
renderToDOM(qweb, "test", { refs});
expect(refs.myspan.tagName).toBe('SPAN');
renderToDOM(qweb, "test", { refs });
expect(refs.myspan.tagName).toBe("SPAN");
});
});
+4 -5
View File
@@ -1,17 +1,16 @@
import Widget, {WEnv} from "../src/ts/core/widget";
import Widget, { WEnv } from "../src/ts/core/widget";
import QWeb from "../src/ts/core/qweb_vdom";
interface Type<T> extends Function {
new (...args: any[]): T;
}
type TestEnv = WEnv;
type TestWidget = Widget<TestEnv>
type TestWidget = Widget<TestEnv>;
function makeWidget(W: Type<TestWidget>): TestWidget {
const env = {
qweb: new QWeb(),
qweb: new QWeb()
};
const w = new W(env);
return w;
@@ -120,7 +119,7 @@ describe("lifecycle hooks", () => {
let parentMounted = false;
let childMounted = false;
class ParentWidget extends Widget<TestEnv> {
name="a";
name = "a";
template = `<div>Hello<t t-widget="child"/></div>`;
widgets = { child: ChildWidget };
async mounted() {