anchor.diff:    void render(VContext context) {
       if ((flags & (elementFlag | componentFlag | rootFlag)) != 0) {
         final html.Element r = ref;
  -      var c;
  -
  -      if (type != null) {
  -        if (c == null) {
  -          c = r.classes;
  -        }
  -        c.add(type);
  -      }
   
         if (attrs != null) {
           attrs.forEach((k, v) {
  
positive.code:         });
        }
  
        if (classes != null) {
          if (c == null) {
            c = r.classes;
          }
          c.addAll(classes);
        }
  
        if ((flags & componentFlag) != 0) {
  
negative.code:   }
  }
  
  /// Find changes between Lists [a] and [b] and apply this changes to Set [classList].
  // TODO: https://code.google.com/p/dart/issues/detail?id=23012
  //void updateClasses(List<String> a, List<String> b, html.DomTokenList classList) {
  void updateClasses(List<String> a, List<String> b, html.CssClassSet classList) {
    if (a != null && a.length != 0) {
      if (b == null || b.length == 0) {
        for (int i = 0; i < a.length; i++) {
          classList.remove(a[i]);
        }
      } else {
        if (a.length == 1 && b.length == 1) {
          final String aItem = a[0];
          final String bItem = b[0];
          if (aItem != bItem) {
            classList.remove(aItem);
            classList.add(bItem);
          }
        } else if (a.length == 1) {
          final String aItem = a[0];
          int unchangedPosition = -1;
          for (int i = 0; i < b.length; i++) {
            final String bItem = b[i];
            if (aItem != bItem) {
              unchangedPosition = i;
              break;
            } else {
              classList.add(bItem);
            }
          }
          if (unchangedPosition != -1) {
            for (int i = unchangedPosition + 1; i < b.length; i++) {
              classList.add(b[i]);
            }
          } else {
            classList.remove(aItem);
          }
        } else if (b.length == 1) {
          final String bItem = b[0];
          int unchangedPosition = -1;
          for (int i = 0; i < a.length; i++) {
            final String aItem = a[i];
            if (aItem != bItem) {
              unchangedPosition = i;
              break;
            } else {
              classList.remove(aItem);
            }
          }
          if (unchangedPosition != -1) {
            for (int i = unchangedPosition + 1; i < a.length; i++) {
              classList.remove(a[i]);
            }
          } else {
            classList.add(bItem);
          }
        } else {
          int aStart = 0;
          int bStart = 0;
          int aEnd = a.length - 1;
          int bEnd = b.length - 1;
  
          while (aStart <= aEnd && bStart <= bEnd) {
            if (a[aStart] != b[bStart]) {
              break;
            }
            aStart++;
            bStart++;
          }
          while (aStart <= aEnd && bStart <= bEnd) {
            if (a[aEnd] != b[bEnd]) {
              break;
            }
            aEnd--;
            bEnd--;
          }
  
          final int aLength = aEnd - aStart + 1;
          final int bLength = bEnd - bStart + 1;
  
          if (aLength * bLength <= 16) {
            final List<bool> visited = new List<bool>(bLength);
  
            for (int i = aStart; i <= aEnd; i++) {
              final String aItem = a[i];
              bool removed = true;
  
              for (int j = bStart; j <= bEnd; j++) {
                final String bItem = b[j];
  
                if (aItem == bItem) {
                  removed = false;
                  visited[j - bStart] = true;
                  break;
                }
              }
              if (removed) {
                classList.remove(aItem);
              }
            }
            for (int i = bStart; i <= bEnd; i++) {
              if (visited[i - bStart] != true) {
                classList.add(b[i]);
              }
            }
          } else {
            final HashMap<String, bool> bIndex = new HashMap<String, bool>();
  
            for (int i = bStart; i <= bEnd; i++) {
              bIndex[b[i]] = false;
            }
  
            for (int i = aStart; i <= aEnd; i++) {
              final String aItem = a[i];
  
              if (!bIndex.containsKey(aItem)) {
                classList.remove(aItem);
              } else {
                bIndex[aItem] = true;
              }
            }
  
            bIndex.forEach((k, v) {
              if (v == false) {
                classList.add(k);
              }
            });
          }
        }
      }
    } else if (b != null && b.length > 0) {
      for (int i = 0; i < b.length; i++) {
        classList.add(b[i]);
      }
    }
  }
  
  void writeAttrsToHtmlString(StringBuffer b, Map<String, String> attrs) {
  