Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
die_coolen_jungs
our_own_cloud_project
Commits
3f7643ef
Commit
3f7643ef
authored
Apr 15, 2013
by
Thomas Tanghus
Browse files
Merge pull request #2769 from owncloud/octemplate
Add octemplate jQuery plugin
parents
d484e140
155582ab
Changes
1
Hide whitespace changes
Inline
Side-by-side
core/js/octemplate.js
0 → 100644
View file @
3f7643ef
/**
* jQuery plugin for micro templates
*
* Strings are automatically escaped, but that can be disabled by setting escapeFunction to null.
*
* Usage examples:
*
* var htmlStr = '<p>Bake, uncovered, until the {greasystuff} is melted and the {pasta} is heated through, about {min} minutes.</p>'
* $(htmlStr).octemplate({greasystuff: 'cheese', pasta: 'macaroni', min: 10});
*
* var htmlStr = '<p>Welcome back {user}</p>';
* $(htmlStr).octemplate({user: 'John Q. Public'}, {escapeFunction: null});
*
* Be aware that the target string must be wrapped in an HTML element for the plugin to work. The following won't work:
*
* var textStr = 'Welcome back {user}';
* $(textStr).octemplate({user: 'John Q. Public'});
*
* For anything larger than one-liners, you can use a simple $.get() ajax request to get the template,
* or you can embed them it the page using the text/template type:
*
* <script id="contactListItemTemplate" type="text/template">
* <tr class="contact" data-id="{id}">
* <td class="name">
* <input type="checkbox" name="id" value="{id}" /><span class="nametext">{name}</span>
* </td>
* <td class="email">
* <a href="mailto:{email}">{email}</a>
* </td>
* <td class="phone">{phone}</td>
* </tr>
* </script>
*
* var $tmpl = $('#contactListItemTemplate');
* var contacts = // fetched in some ajax call
*
* $.each(contacts, function(idx, contact) {
* $contactList.append(
* $tmpl.octemplate({
* id: contact.getId(),
* name: contact.getDisplayName(),
* email: contact.getPreferredEmail(),
* phone: contact.getPreferredPhone(),
* });
* );
* });
*/
(
function
(
$
)
{
/**
* Object Template
* Inspired by micro templating done by e.g. underscore.js
*/
var
Template
=
{
init
:
function
(
vars
,
options
,
elem
)
{
// Mix in the passed in options with the default options
this
.
vars
=
vars
;
this
.
options
=
$
.
extend
({},
this
.
options
,
options
);
this
.
elem
=
elem
;
var
self
=
this
;
if
(
typeof
this
.
options
.
escapeFunction
===
'
function
'
)
{
$
.
each
(
this
.
vars
,
function
(
key
,
val
)
{
if
(
typeof
val
===
'
string
'
)
{
self
.
vars
[
key
]
=
self
.
options
.
escapeFunction
(
val
);
}
});
}
var
_html
=
this
.
_build
(
this
.
vars
);
return
$
(
_html
);
},
// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript
_build
:
function
(
o
){
var
data
=
this
.
elem
.
attr
(
'
type
'
)
===
'
text/template
'
?
this
.
elem
.
html
()
:
this
.
elem
.
get
(
0
).
outerHTML
;
try
{
return
data
.
replace
(
/{
([^
{}
]
*
)
}/g
,
function
(
a
,
b
)
{
var
r
=
o
[
b
];
return
typeof
r
===
'
string
'
||
typeof
r
===
'
number
'
?
r
:
a
;
}
);
}
catch
(
e
)
{
console
.
error
(
e
,
'
data:
'
,
data
)
}
},
options
:
{
escapeFunction
:
function
(
str
)
{
return
$
(
'
<i></i>
'
).
text
(
str
).
html
();}
}
};
$
.
fn
.
octemplate
=
function
(
vars
,
options
)
{
var
vars
=
vars
?
vars
:
{};
if
(
this
.
length
)
{
var
_template
=
Object
.
create
(
Template
);
return
_template
.
init
(
vars
,
options
,
this
);
}
};
})(
jQuery
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment