Skip to content

Commit

Permalink
Commit 88 (v0.9.88 - Beta)
Browse files Browse the repository at this point in the history
Sync with changes in v0.9.88 for JsViews

Minor bug fixes and improvements. No breaking changes.

Documentation:
- New documentation topics added for JsRender custom tags:
  http://www.jsviews.com/#tags
  http://www.jsviews.com/#tagsapi

- New documentation topics added for $.views object:
  http://www.jsviews.com/#viewsobject

- New documentation topics added for compiled template objects:
  http://www.jsviews.com/#templateobject

- New documentation topics and samples added for using {{props}}
  to iterate over a top-level dictionary/hash data-collection:
  http://www.jsviews.com/#samples/editable/hash
  http://www.jsviews.com/#jsvpropstag@load-hash

- Several improvements and bug fixes on www.jsviews.com site.
  • Loading branch information
BorisMoore committed Aug 26, 2017
1 parent 12399b1 commit 789044a
Show file tree
Hide file tree
Showing 12 changed files with 83 additions and 83 deletions.
6 changes: 3 additions & 3 deletions jsrender-node.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*! JsRender v0.9.87 (Beta): http://jsviews.com/#jsrender */
/*! JsRender v0.9.88 (Beta): http://jsviews.com/#jsrender */
/*! **VERSION FOR NODE.JS** (For WEB see http://jsviews.com/download/jsrender.js) */
/*
* Best-of-breed templating in browser or on Node.js.
Expand All @@ -19,7 +19,7 @@ if (typeof exports !== 'object' ) {

//========================== Top-level vars ==========================

var versionNumber = "v0.9.87",
var versionNumber = "v0.9.88",

// global var is the this object, which is window when running in the usual browser environment

Expand Down Expand Up @@ -1521,7 +1521,7 @@ function renderWithViews(tmpl, data, context, noIteration, view, key, onRender,
result += newView._.onRender ? newView._.onRender(itemResult, childView) : itemResult;
}
} else {
// Create a view for singleton data object. The type of the view will be the tag name, e.g. "if" or "myTag" except for
// Create a view for singleton data object. The type of the view will be the tag name, e.g. "if" or "mytag" except for
// "item", "array" and "data" views. A "data" view is from programmatic render(object) against a 'singleton'.
if (itemVar) {
setItemVar(data);
Expand Down
6 changes: 3 additions & 3 deletions jsrender.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*! JsRender v0.9.87 (Beta): http://jsviews.com/#jsrender */
/*! JsRender v0.9.88 (Beta): http://jsviews.com/#jsrender */
/*! **VERSION FOR WEB** (For NODE.JS see http://jsviews.com/download/jsrender-node.js) */
/*
* Best-of-breed templating in browser or on Node.js.
Expand Down Expand Up @@ -44,7 +44,7 @@ var setGlobals = $ === false; // Only set globals if script block in browser (no

$ = $ && $.fn ? $ : global.jQuery; // $ is jQuery passed in by CommonJS loader (Browserify), or global jQuery.

var versionNumber = "v0.9.87",
var versionNumber = "v0.9.88",
jsvStoreName, rTag, rTmplString, topView, $views, $expando,
_ocp = "_ocp", // Observable contextual parameter

Expand Down Expand Up @@ -1571,7 +1571,7 @@ function renderWithViews(tmpl, data, context, noIteration, view, key, onRender,
result += newView._.onRender ? newView._.onRender(itemResult, childView) : itemResult;
}
} else {
// Create a view for singleton data object. The type of the view will be the tag name, e.g. "if" or "myTag" except for
// Create a view for singleton data object. The type of the view will be the tag name, e.g. "if" or "mytag" except for
// "item", "array" and "data" views. A "data" view is from programmatic render(object) against a 'singleton'.
if (itemVar) {
setItemVar(data);
Expand Down
4 changes: 2 additions & 2 deletions jsrender.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion jsrender.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "jsrender",
"version": "v0.9.87",
"version": "v0.9.88",
"description": "Best-of-breed templating in browser or on Node.js (with Express 4, Hapi and Browserify integration)",
"main": "./jsrender-node.js",
"browser": "./jsrender.js",
Expand Down
8 changes: 4 additions & 4 deletions test/browserify/bundles/1-bundle.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions test/browserify/bundles/12-nested-bundle.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions test/browserify/bundles/2-bundle.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions test/browserify/bundles/3-bundle.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions test/browserify/bundles/htm-jsrender-tmpl-bundle.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*! JsRender v0.9.87 (Beta): http://jsviews.com/#jsrender */
/*! JsRender v0.9.88 (Beta): http://jsviews.com/#jsrender */
/*! **VERSION FOR WEB** (For NODE.JS see http://jsviews.com/download/jsrender-node.js) */
/*
* Best-of-breed templating in browser or on Node.js.
Expand Down Expand Up @@ -45,7 +45,7 @@ var setGlobals = $ === false; // Only set globals if script block in browser (no

$ = $ && $.fn ? $ : global.jQuery; // $ is jQuery passed in by CommonJS loader (Browserify), or global jQuery.

var versionNumber = "v0.9.87",
var versionNumber = "v0.9.88",
jsvStoreName, rTag, rTmplString, topView, $views, $expando,
_ocp = "_ocp", // Observable contextual parameter

Expand Down Expand Up @@ -1572,7 +1572,7 @@ function renderWithViews(tmpl, data, context, noIteration, view, key, onRender,
result += newView._.onRender ? newView._.onRender(itemResult, childView) : itemResult;
}
} else {
// Create a view for singleton data object. The type of the view will be the tag name, e.g. "if" or "myTag" except for
// Create a view for singleton data object. The type of the view will be the tag name, e.g. "if" or "mytag" except for
// "item", "array" and "data" views. A "data" view is from programmatic render(object) against a 'singleton'.
if (itemVar) {
setItemVar(data);
Expand Down
6 changes: 3 additions & 3 deletions test/browserify/bundles/html-jsr-tmpl-bundle.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*! JsRender v0.9.87 (Beta): http://jsviews.com/#jsrender */
/*! JsRender v0.9.88 (Beta): http://jsviews.com/#jsrender */
/*! **VERSION FOR WEB** (For NODE.JS see http://jsviews.com/download/jsrender-node.js) */
/*
* Best-of-breed templating in browser or on Node.js.
Expand Down Expand Up @@ -45,7 +45,7 @@ var setGlobals = $ === false; // Only set globals if script block in browser (no

$ = $ && $.fn ? $ : global.jQuery; // $ is jQuery passed in by CommonJS loader (Browserify), or global jQuery.

var versionNumber = "v0.9.87",
var versionNumber = "v0.9.88",
jsvStoreName, rTag, rTmplString, topView, $views, $expando,
_ocp = "_ocp", // Observable contextual parameter

Expand Down Expand Up @@ -1572,7 +1572,7 @@ function renderWithViews(tmpl, data, context, noIteration, view, key, onRender,
result += newView._.onRender ? newView._.onRender(itemResult, childView) : itemResult;
}
} else {
// Create a view for singleton data object. The type of the view will be the tag name, e.g. "if" or "myTag" except for
// Create a view for singleton data object. The type of the view will be the tag name, e.g. "if" or "mytag" except for
// "item", "array" and "data" views. A "data" view is from programmatic render(object) against a 'singleton'.
if (itemVar) {
setItemVar(data);
Expand Down
102 changes: 51 additions & 51 deletions test/unit-tests/tests-jsrender-no-jquery.js
Original file line number Diff line number Diff line change
Expand Up @@ -309,12 +309,12 @@ test("Fallbacks for missing or undefined paths:\nusing {{:some.path onError = 'f
'{{for ... ~foo=missing.willThrow.path onError="Missing Object"}} -> "Missing Object"');

equal($.templates({
markup: "{{myTag foo='a'/}} {{myTag foo=missing.willThrow.path onError='Missing Object'/}} {{myTag foo='c' bar=missing.willThrow.path onError='Missing Object'/}} {{myTag foo='c' missing.willThrow.path onError='Missing Object'/}} {{myTag foo='b'/}}",
markup: "{{mytag foo='a'/}} {{mytag foo=missing.willThrow.path onError='Missing Object'/}} {{mytag foo='c' bar=missing.willThrow.path onError='Missing Object'/}} {{mytag foo='c' missing.willThrow.path onError='Missing Object'/}} {{mytag foo='b'/}}",
tags: {
myTag: {template: "MyTag: {{:~tag.tagCtx.props.foo}} end"}
mytag: {template: "MyTag: {{:~tag.tagCtx.props.foo}} end"}
}
}).render({a:1}), "MyTag: a end Missing Object Missing Object Missing Object MyTag: b end",
'onError=... for custom tags: e.g. {{myTag foo=missing.willThrow.path onError="Missing Object"/}}');
'onError=... for custom tags: e.g. {{mytag foo=missing.willThrow.path onError="Missing Object"/}}');

equal($.templates({
markup: "1: {{for a.missing.willThrow.path onError=defaultVal}}yes{{/for}}" +
Expand All @@ -324,14 +324,14 @@ test("Fallbacks for missing or undefined paths:\nusing {{:some.path onError = 'f
" 5: {{for a.undefined onError='missing'}}yes{{/for}}" +
" 6: {{if a.missing.willThrow onError=myCb}}yes{{/if}}" +
" 7: {{withfallback:a.undefined fallback='undefined prop'}} end" +
" 8: {{myTag foo=missing.willThrow.path onError='Missing Object'/}}",
" 8: {{mytag foo=missing.willThrow.path onError='Missing Object'/}}",
converters: {
withfallback: function(val) {
return val || this.tagCtx.props.fallback;
}
},
tags: {
myTag: {template: "MyTag: {{:~tag.tagCtx.props.foo}} end"}
mytag: {template: "MyTag: {{:~tag.tagCtx.props.foo}} end"}
}
}).render(
{
Expand Down Expand Up @@ -1684,21 +1684,21 @@ test('{{include}} and wrapping content', function() {
}
}).render(people);

equal(result, "Before headerJofooter AfterBefore headerBillfooter After", 'Using {{include ... tmpl="wrapper"}}}wrapped{{/include}}');
equal(result, "Before headerJofooter AfterBefore headerBillfooter After", 'Using {{include ... tmpl="wrapper"}}wrapped{{/include}}');

result = $.templates({
markup:
'This (render method) replaces: {{myTag override="replacementText" tmpl="wrapper"}}'
'This (render method) replaces: {{mytag override="replacementText" tmpl="wrapper"}}'
+ '{{:name}}'
+ '{{/myTag}} | '
+ 'This (original template) adds: {{myTag}}'
+ '{{/mytag}} | '
+ 'This (original template) adds: {{mytag}}'
+ '{{:name}}'
+ '{{/myTag}} | '
+ 'This (new template) wraps: {{myTag setTmpl="wrapper"}}'
+ '{{/mytag}} | '
+ 'This (new template) wraps: {{mytag setTmpl="wrapper"}}'
+ '{{:name}}'
+ '{{/myTag}} | ',
+ '{{/mytag}} | ',
tags: {
myTag: {
mytag: {
template: "add{{include tmpl=#content/}}",
init: function() {
this.template = this.tagCtx.props.setTmpl || this.template;
Expand All @@ -1720,7 +1720,7 @@ test('{{include}} and wrapping content', function() {
+ " This (render method) replaces: replacementText |"
+ " This (original template) adds: addBill |"
+ " This (new template) wraps: headerBillfooter | ",
'Custom tag with wrapped content: {{myTag ... tmpl="wrapper"}}wrapped{{/myTmpl}}');
'Custom tag with wrapped content: {{mytag ... tmpl="wrapper"}}wrapped{{/myTmpl}}');

result = $.templates({
markup:
Expand All @@ -1732,18 +1732,18 @@ test('{{include}} and wrapping content', function() {
}
}).render({people: people});

equal(result, "Before headerJoBillfooter After", 'Using {{for ... tmpl="wrapper"}}}wrapped{{/for}}');
equal(result, "Before headerJoBillfooter After", 'Using {{for ... tmpl="wrapper"}}wrapped{{/for}}');

result = $.templates({
markup:
'This replaces:{{myTag override="replacementText"}}'
'This replaces:{{mytag override="replacementText"}}'
+ '{{:name}}'
+ '{{/myTag}}'
+ 'This wraps:{{myTag tmpl="wrapper"}}'
+ '{{/mytag}}'
+ 'This wraps:{{mytag tmpl="wrapper"}}'
+ '{{:name}}'
+ '{{/myTag}}',
+ '{{/mytag}}',
tags: {
myTag: function() {
mytag: function() {
return this.tagCtx.props.override;
}
},
Expand All @@ -1752,45 +1752,45 @@ test('{{include}} and wrapping content', function() {
}
}).render({people: people});

equal(result, "This replaces:replacementTextThis wraps:headerJoBillfooter", 'Using {{myTag ... tmpl="wrapper"}}wrapped{{/myTmpl}}');
equal(result, "This replaces:replacementTextThis wraps:headerJoBillfooter", 'Using {{mytag ... tmpl="wrapper"}}wrapped{{/myTmpl}}');

result = $.templates({
markup:
'{{myTag}}'
'{{mytag}}'
+ '{{:name}}'
+ '{{/myTag}} | '
+ '{{myTag tmpl="innerwrap"}}'
+ '{{/mytag}} | '
+ '{{mytag tmpl="innerwrap"}}'
+ '{{:name}}'
+ '{{/myTag}} | '
+ '{{myTag tmpl="middlewrap"}}'
+ '{{/mytag}} | '
+ '{{mytag tmpl="middlewrap"}}'
+ '{{:name}}'
+ '{{/myTag}} | '
+ '{{myTag tmpl="wrapper"}}'
+ '{{/mytag}} | '
+ '{{mytag tmpl="wrapper"}}'
+ '{{:name}}'
+ '{{/myTag}} | '
+ '{{/mytag}} | '

+ '{{myTag2}}'
+ '{{mytag2}}'
+ '{{:name}}'
+ '{{/myTag2}} | '
+ '{{myTag2 tmpl="innerwrap"}}'
+ '{{/mytag2}} | '
+ '{{mytag2 tmpl="innerwrap"}}'
+ '{{:name}}'
+ '{{/myTag2}} | '
+ '{{myTag2 tmpl="middlewrap"}}'
+ '{{/mytag2}} | '
+ '{{mytag2 tmpl="middlewrap"}}'
+ '{{:name}}'
+ '{{/myTag2}} | '
+ '{{myTag2 tmpl="wrapper"}}'
+ '{{/mytag2}} | '
+ '{{mytag2 tmpl="wrapper"}}'
+ '{{:name}}'
+ '{{/myTag2}} | ',
+ '{{/mytag2}} | ',
templates: {
wrapper: "middle {{include tmpl=#content/}} {{include tmpl='middlewrap'/}} {{include tmpl='innerwrap'/}}/middle",
middlewrap: "inner {{include tmpl=#content/}} and {{include tmpl='innerwrap'/}} /inner",
innerwrap: "innermost {{include tmpl=#content/}} /innermost"
},
tags: {
myTag: {
mytag: {
template: "outer {{include tmpl=#content/}} /outer"
},
myTag2: {
mytag2: {
}
}
}).render(people);
Expand Down Expand Up @@ -1828,20 +1828,20 @@ test('{{include}} and wrapping content', function() {

result = $.templates({
markup:
'{{myTag tmpl="phonelist"}}'
'{{mytag tmpl="phonelist"}}'
+ '{{:number}} '
+ '{{/myTag}} | '
+ '{{myTag2 tmpl="phonelist"}}'
+ '{{/mytag}} | '
+ '{{mytag2 tmpl="phonelist"}}'
+ '{{:number}} '
+ '{{/myTag2}}',
+ '{{/mytag2}}',
templates: {
phonelist: "{{for phones}}{{include tmpl=#content/}}{{/for}}"
},
tags: {
myTag: {
mytag: {
template: "outer {{include tmpl=#content/}} /outer"
},
myTag2: {
mytag2: {
}
}
}).render(data);
Expand All @@ -1853,31 +1853,31 @@ test('{{include}} and wrapping content', function() {

result = $.templates({
markup:
'{{myTag tmpl="phonelist"}}'
'{{mytag tmpl="phonelist"}}'
+ '{{:number}}'
+ '{{else tmpl="altlist"}}'
+ '{{:alt}}'
+ '{{else tmpl="altlist2"}}'
+ '{{:alt}}'
+ '{{/myTag}}'
+ '{{myTag2 tmpl="phonelist"}}'
+ '{{/mytag}}'
+ '{{mytag2 tmpl="phonelist"}}'
+ '{{:number}}'
+ '{{else tmpl="altlist"}}'
+ '{{:alt}}'
+ '{{else tmpl="altlist2"}}'
+ '{{:alt}}'
+ '{{/myTag2}}',
+ '{{/mytag2}}',
templates: {
phonelist: "A< {{for phones}}{{include tmpl=#content/}} {{/for}} > ",
altlist: "B< {{for phones tmpl='titlewrap'/}} > ",
altlist2: "C< {{for phones}}{{include tmpl='titlewrap'/}}{{/for}} > ",
titlewrap: "alternate: {{include tmpl=#content/}} "
},
tags: {
myTag: {
mytag: {
template: "outer {{include tmpl=#content/}} /outer | "
},
myTag2: {
mytag2: {
}
}
}).render(data);
Expand Down

0 comments on commit 789044a

Please sign in to comment.