From 7f1e2e48467f80cc083d24b44f088620e4e7bcb6 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Mon, 6 Jun 2011 08:50:35 -0700 Subject: new batch of docs --- docs/content/guide/dev_guide.compiler.markup.ngdoc | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 docs/content/guide/dev_guide.compiler.markup.ngdoc (limited to 'docs/content/guide/dev_guide.compiler.markup.ngdoc') diff --git a/docs/content/guide/dev_guide.compiler.markup.ngdoc b/docs/content/guide/dev_guide.compiler.markup.ngdoc new file mode 100644 index 00000000..64a3940b --- /dev/null +++ b/docs/content/guide/dev_guide.compiler.markup.ngdoc @@ -0,0 +1,120 @@ +@workInProgress +@ngdoc overview +@name Developer Guide: Angular HTML Compiler: Understanding Angular Markup +@description + + +Markup in angular is a feature that you can use in templates to transform the content of DOM +elements prior to the compile phase (in which elements are compiled and link functions are +returned. See the {@link dev_guide.compiler compiler docs} for details on how the compiler +works.) The ability to make pre-compile changes to DOM elements lets you create shorthand for +{@link api/angular.widget widget} and {@link api/angular.directive directive} declarations. + + +Angular provides one built-in markup feature: the double curly-braces used to declare binding +points (between the model and view) for angular expressions. You can also create your own custom +markup. + + +# Using Double Curly-brace Markup (`{{ }}`) + + +The double curly-brace (`{{ }}`) markup translates an enclosed expression into an {@link +api/angular.directive.ng:bind ng:bind} directive: + + +
+{{expression}}
+
+ + +is transformed to: + + +
+
+
+ + +Markup is useful for the simple reason that `{{1+2}}` is easier to write and understand than ``. After markup shorthand is expanded into the DOM elements it represents, the +expanded elements are then {@link dev_guide.compiler compiled} normally. + + + + +# Creating Custom Markup + + +Let's say you want to define markup that transforms `---` into a horizontal rule (`
`): + + +
+header
+---
+footer
+
+ + +should translate to: +
+header
+
+footer +
+ + +Here is how you could extend the angular compiler to create the "---" markup: + + +
+angular.markup('---', function(text, textNode, parentElement) {
+    var compiler = this;
+    var index = text.indexOf('---');
+    if (index > -1) {
+        var before = compiler.text(text.substring(0, index));
+        var hr = compiler.element('hr');
+        var after = compiler.text(text.substring(index + 3));
+        textNode.after(after);
+        textNode.after(hr);
+        textNode.after(before);
+        textNode.remove();
+    }
+});
+
+ + +Unlike the way the compiler processes {@link api/angular.widget widgets} and {@link +api/angular.directive directives} (matching the name of the handler function to a DOM element or +attribute name), the compiler calls every markup handler for every text node, giving the handler a +chance to transform the text. The markup handler needs to find all the matches in the text. + + +## Attribute Markup + + +Attribute markup extends the angular compiler in a very similar way to markup, except that it +allows you to modify the state of attribute text rather then the content of a node. + + +
+angular.attrMarkup('extraClass', function(attrValue, attrName, element){
+ if (attrName == 'additional-class') {
+   element.addClass(attrValue);
+ }
+});
+
+ + + + +## Related Topics + + +* {@link dev_guide.compiler Angular HTML Compiler} + + +## Related API + + +* {@link api/angular.compile Compiler API Reference} -- cgit v1.2.3