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
+1
View File
@@ -14,3 +14,4 @@ yarn-debug.log*
yarn-error.log* yarn-error.log*
package-lock.json package-lock.json
.vscode
+1 -3
View File
@@ -1,5 +1,5 @@
$navbar-height: 40px; $navbar-height: 40px;
$main-color: #875A7B; $main-color: #875a7b;
html { html {
height: 100%; height: 100%;
@@ -50,7 +50,5 @@ body {
color: white; color: white;
text-decoration: none; text-decoration: none;
padding: 0 5px; padding: 0 5px;
} }
} }
+4 -4
View File
@@ -18,11 +18,11 @@ export function escape(str: string | number | undefined): string {
*/ */
export function htmlTrim(s: string): string { export function htmlTrim(s: string): string {
let result = s.replace(/(^\s+|\s+$)/g, ""); let result = s.replace(/(^\s+|\s+$)/g, "");
if (s[0] === ' ') { if (s[0] === " ") {
result = ' ' + result; result = " " + result;
} }
if (result !== ' ' && s[s.length - 1] === ' ') { if (result !== " " && s[s.length - 1] === " ") {
result = result + ' '; result = result + " ";
} }
return result; return result;
} }
-1
View File
@@ -26,4 +26,3 @@ export function makeEnvironment(): Env {
actions actions
}; };
} }
@@ -12,8 +12,6 @@ import { Action } from "./actions";
// { id: 2, title: "CRM", Widget: CRM } // { id: 2, title: "CRM", Widget: CRM }
// ]; // ];
export default class ActionManager { export default class ActionManager {
doAction(action: Action) { doAction(action: Action) {
console.log(action); console.log(action);
-1
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() { constructor() {
window.addEventListener("popstate", this.onUrlChange.bind(this)); window.addEventListener("popstate", this.onUrlChange.bind(this));
window.onhashchange = function () { console.log('aaaa'); debugger; } window.onhashchange = function() {
console.log("aaaa");
debugger;
};
} }
onUrlChange(event: PopStateEvent) { onUrlChange(event: PopStateEvent) {
debugger debugger;
event.preventDefault(); event.preventDefault();
const info = this.getRoute(); const info = this.getRoute();
for (let listener of this.listeners) { for (let listener of this.listeners) {
+17 -10
View File
@@ -551,13 +551,18 @@ describe("foreach", () => {
test("iterate, dict param", () => { test("iterate, dict param", () => {
const qweb = new QWeb(); const qweb = new QWeb();
qweb.addTemplate('test',` qweb.addTemplate(
"test",
`
<div> <div>
<t t-foreach="value" t-as="item"> <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 t-esc="item_index"/>: <t t-esc="item"/> <t t-esc="item_value"/> - <t t-esc="item_parity"/>]
</t> </t>
</div>`); </div>`
const result = trim(renderToString(qweb, "test", { value: { a: 1, b: 2, c: 3 } })); );
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>`; const expected = `<div>[0:a1-even][1:b2-odd][2:c3-even]</div>`;
expect(result).toBe(expected); expect(result).toBe(expected);
}); });
@@ -594,7 +599,7 @@ describe("misc", () => {
</div> </div>
` `
); );
const result = trim(renderToString(qweb, "caller")) const result = trim(renderToString(qweb, "caller"));
const expected = trim(` const expected = trim(`
<div> <div>
<span>4</span> <span>4</span>
@@ -655,26 +660,28 @@ describe("t-on", () => {
test("can bind handlers with loop variable as argument", () => { test("can bind handlers with loop variable as argument", () => {
expect.assertions(1); expect.assertions(1);
const qweb = new QWeb(); const qweb = new QWeb();
qweb.addTemplate("test", ` qweb.addTemplate(
"test",
`
<ul> <ul>
<li t-foreach="['someval']" t-as="action"><a t-on-click="activate(action)">link</a></li> <li t-foreach="['someval']" t-as="action"><a t-on-click="activate(action)">link</a></li>
</ul>`); </ul>`
);
const node = renderToDOM(qweb, "test", { const node = renderToDOM(qweb, "test", {
activate(action) { 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", () => { describe("t-ref", () => {
test("can get a ref on a node", () => { test("can get a ref on a node", () => {
const qweb = new QWeb(); const qweb = new QWeb();
qweb.addTemplate("test", `<div><span t-ref="myspan"/></div>`); qweb.addTemplate("test", `<div><span t-ref="myspan"/></div>`);
let refs: any = {}; let refs: any = {};
renderToDOM(qweb, "test", { refs }); renderToDOM(qweb, "test", { refs });
expect(refs.myspan.tagName).toBe('SPAN'); expect(refs.myspan.tagName).toBe("SPAN");
}); });
}); });
+2 -3
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"; import QWeb from "../src/ts/core/qweb_vdom";
interface Type<T> extends Function { interface Type<T> extends Function {
new (...args: any[]): T; new (...args: any[]): T;
} }
type TestEnv = WEnv; type TestEnv = WEnv;
type TestWidget = Widget<TestEnv> type TestWidget = Widget<TestEnv>;
function makeWidget(W: Type<TestWidget>): TestWidget { function makeWidget(W: Type<TestWidget>): TestWidget {
const env = { const env = {
qweb: new QWeb(), qweb: new QWeb()
}; };
const w = new W(env); const w = new W(env);
return w; return w;