package play.templates; public class GroovyInlineTags { public enum CALL { START, END } public static String _if(int index, CALL f) { StringBuilder s = new StringBuilder(); switch(f) { case START: s.append("if(attrs").append(index).append("['arg']) {"); break; case END: s.append("play.templates.TagContext.parent().data.put('_executeNextElse', false);"); s.append("} else {"); s.append("play.templates.TagContext.parent().data.put('_executeNextElse', true);"); s.append("}"); break; } return s.toString(); } public static String _ifnot(int index, CALL f) { StringBuilder s = new StringBuilder(); switch(f) { case START: s.append("if(!attrs").append(index).append("['arg']) {"); break; case END: s.append("play.templates.TagContext.parent().data.put('_executeNextElse', false);"); s.append("} else {"); s.append("play.templates.TagContext.parent().data.put('_executeNextElse', true);"); s.append("}"); break; } return s.toString(); } public static String _else(int index, CALL f) { StringBuilder s = new StringBuilder(); switch(f) { case START: s.append("if(play.templates.TagContext.parent().data.get('_executeNextElse')) {"); break; case END: s.append("};"); s.append("play.templates.TagContext.parent().data.remove('_executeNextElse');"); break; } return s.toString(); } public static String _elseif(int index, CALL f) { StringBuilder s = new StringBuilder(); switch(f) { case START: s.append("if(play.templates.TagContext.parent().data.get('_executeNextElse') && attrs").append(index).append("['arg']) {"); break; case END: s.append("play.templates.TagContext.parent().data.put('_executeNextElse', false);"); s.append("};"); break; } return s.toString(); } public static String _list(int index, CALL f) { StringBuilder s = new StringBuilder(); switch(f) { case START: s.append("if(!attrs").append(index).append("['as']) {attrs").append(index).append("['as'] = '';};"); s.append("if(!attrs").append(index).append("['items']) {attrs").append(index).append("['items'] = attrs").append(index).append("['arg'];};"); s.append("if(attrs").append(index).append("['items']) { play.templates.TagContext.parent().data.put('_executeNextElse', false);"); s.append("_iter").append(index).append(" = attrs").append(index).append("['items'].iterator();"); s.append("for (_").append(index).append("_i = 1; _iter").append(index).append(".hasNext(); _").append(index).append("_i++) {"); s.append("_item").append(index).append(" = _iter").append(index).append(".next();"); s.append("setProperty(attrs").append(index).append("['as'] ?: '_', _item").append(index).append(");"); s.append("setProperty(attrs").append(index).append("['as']+'_index', _").append(index).append("_i);"); s.append("setProperty(attrs").append(index).append("['as']+'_isLast', !_iter").append(index).append(".hasNext());"); s.append("setProperty(attrs").append(index).append("['as']+'_isFirst', _").append(index).append("_i == 1);"); s.append("setProperty(attrs").append(index).append("['as']+'_parity', _").append(index).append("_i%2==0?'even':'odd');"); break; case END: s.append("};"); s.append("} else { play.templates.TagContext.parent().data.put('_executeNextElse', true); }"); break; } return s.toString(); } }