summaryrefslogtreecommitdiffstats
path: root/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/template.js
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/template.js')
-rw-r--r--third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/template.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/template.js b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/template.js
new file mode 100644
index 0000000000..60c4f6fc84
--- /dev/null
+++ b/third_party/webkit/PerformanceTests/Speedometer/resources/todomvc/vanilla-examples/es2015-babel-webpack/src/template.js
@@ -0,0 +1,110 @@
+export default Template
+
+var htmlEscapes = {
+ '&': '&',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ '\'': '&#x27;',
+ '`': '&#x60;'
+}
+
+var escapeHtmlChar = function(chr) {
+ return htmlEscapes[chr]
+}
+
+var reUnescapedHtml = /[&<>"'`]/g
+var reHasUnescapedHtml = new RegExp(reUnescapedHtml.source)
+
+var escape = function(string) {
+ if (string && reHasUnescapedHtml.test(string)) {
+ return string.replace(reUnescapedHtml, escapeHtmlChar)
+ } else {
+ return string
+ }
+}
+
+/**
+* Sets up defaults for all the Template methods such as a default template
+*
+* @constructor
+*/
+function Template() {
+ this.defaultTemplate = `
+ <li data-id="{{id}}" class="{{completed}}">
+ <div class="view">
+ <input class="toggle" type="checkbox" {{checked}} />
+ <label>{{title}}</label>
+ <button class="destroy"></button>
+ </div>
+ </li>
+ `
+}
+
+/**
+ * Creates an <li> HTML string and returns it for placement in your app.
+ *
+ * NOTE: In real life you should be using a templating engine such as Mustache
+ * or Handlebars, however, this is a vanilla JS example.
+ *
+ * @param {object} data The object containing keys you want to find in the
+ * template to replace.
+ * @returns {string} HTML String of an <li> element
+ *
+ * @example
+ * view.show({
+ * id: 1,
+ * title: "Hello World",
+ * completed: 0,
+ * });
+ */
+Template.prototype.show = function(data) {
+ var i, l
+ var view = ''
+
+ for (i = 0, l = data.length; i < l; i++) {
+ var template = this.defaultTemplate
+ var completed = ''
+ var checked = ''
+
+ if (data[i].completed) {
+ completed = 'completed'
+ checked = 'checked'
+ }
+
+ template = template.replace('{{id}}', data[i].id)
+ template = template.replace('{{title}}', escape(data[i].title))
+ template = template.replace('{{completed}}', completed)
+ template = template.replace('{{checked}}', checked)
+
+ view = view + template
+ }
+
+ return view
+}
+
+/**
+ * Displays a counter of how many to dos are left to complete
+ *
+ * @param {number} activeTodos The number of active todos.
+ * @returns {string} String containing the count
+ */
+Template.prototype.itemCounter = function(activeTodos) {
+ var plural = activeTodos === 1 ? '' : 's'
+
+ return '<strong>' + activeTodos + '</strong> item' + plural + ' left'
+}
+
+/**
+ * Updates the text within the "Clear completed" button
+ *
+ * @param {[type]} completedTodos The number of completed todos.
+ * @returns {string} String containing the count
+ */
+Template.prototype.clearCompletedButton = function(completedTodos) {
+ if (completedTodos > 0) {
+ return 'Clear completed'
+ } else {
+ return ''
+ }
+}