]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xsl/fm_IDL2js.xsl
LP2045292 Color contrast for AngularJS patron bills
[working/Evergreen.git] / Open-ILS / xsl / fm_IDL2js.xsl
1 <xsl:stylesheet
2     version='1.0'
3     xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
4     xmlns:idl="http://opensrf.org/spec/IDL/base/v1"
5     xmlns:oils_persist="http://open-ils.org/spec/opensrf/IDL/persistence/v1"
6     xmlns:oils_obj="http://open-ils.org/spec/opensrf/IDL/objects/v1"
7     xmlns:reporter="http://open-ils.org/spec/opensrf/IDL/reporter/v1"
8     xmlns:sr="http://open-ils.org/spec/opensrf/IDL/simple-reporter/v1"
9     xmlns:permacrud="http://open-ils.org/spec/opensrf/IDL/permacrud/v1"
10     xmlns:str="http://exslt.org/strings"
11     extension-element-prefixes="str"
12 >
13     <xsl:output method="text" />
14     <xsl:strip-space elements="xsl:*"/>
15     <xsl:param name="class_list"/>
16  
17  
18     <xsl:template match="/">
19 var _preload_fieldmapper_IDL = {<xsl:apply-templates select="idl:IDL"/>};
20 for (var c in _preload_fieldmapper_IDL) {
21     var x = _preload_fieldmapper_IDL[c]; x.field_map = {};
22     var p = x.fields.length;
23     for (var n in {isnew:1,ischanged:1,isdeleted:1}) {
24         x.fields[p] = {name:n,virtual:true};
25         p++;
26     }
27     for (var f in x.fields) x.field_map[x.fields[f].name] = x.fields[f];
28 }
29     </xsl:template>
30  
31     <xsl:template match="idl:IDL">
32         <xsl:choose>
33             <xsl:when test="$class_list = ''">
34                 <xsl:for-each select="idl:class"><xsl:sort select="@id"/><xsl:apply-templates select="."/><xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>
35             </xsl:when>
36             <xsl:otherwise>
37                 <xsl:variable name="doc" select="."/>
38                 <xsl:for-each select="str:split($class_list,',')"><xsl:sort select="./text()"/><xsl:variable name="current_class" select="./text()"/><xsl:apply-templates select="$doc/idl:class[@id=$current_class]"/><xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>
39             </xsl:otherwise>
40         </xsl:choose>
41     </xsl:template>
42  
43     <xsl:template match="idl:class">
44         <xsl:value-of select="@id"/><xsl:text>:</xsl:text>
45         <xsl:text>{name:"</xsl:text><xsl:value-of select="@id"/><xsl:text>",</xsl:text>
46         <xsl:if test="@reporter:label">label:"<xsl:value-of select="@reporter:label"/>",</xsl:if>
47         <xsl:if test="@oils_persist:restrict_primary">restrict_primary:"<xsl:value-of select="@oils_persist:restrict_primary"/>",</xsl:if>
48         <xsl:if test="@oils_persist:tablename">table:"<xsl:value-of select="@oils_persist:tablename"/>",</xsl:if>
49         <xsl:if test="@reporter:core = 'true'">core:true,</xsl:if><xsl:if test="@oils_persist:virtual = 'true'">virtual:true,</xsl:if>
50         <xsl:if test="oils_persist:source_definition">source:"(<xsl:value-of select="oils_persist:source_definition/text()"/>)",</xsl:if>
51         <xsl:if test="idl:fields/@oils_persist:primary">pkey:"<xsl:value-of select="idl:fields/@oils_persist:primary"/>",</xsl:if>
52         <xsl:if test="idl:fields/@oils_persist:sequence">pkey_sequence:"<xsl:value-of select="idl:fields/@oils_persist:sequence"/>",</xsl:if>
53         <xsl:apply-templates select="idl:fields"/>
54         <xsl:apply-templates select="idl:field_groups"/>
55     <xsl:apply-templates select="permacrud:permacrud"/>}</xsl:template>
56  
57     <xsl:template match="idl:fields">fields:[<xsl:for-each select="idl:field"><xsl:call-template name="printField"><xsl:with-param name='pos' select="position()"/></xsl:call-template><xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>]</xsl:template>
58
59     <xsl:template match="idl:field_groups">
60     <xsl:text>,field_groups:[</xsl:text>
61       <xsl:for-each select="idl:group">
62         <xsl:call-template name="printField"><xsl:with-param name='pos' select="position()"/></xsl:call-template>
63         <xsl:if test="not(position() = last())">,</xsl:if>
64       </xsl:for-each>
65     <xsl:text>]</xsl:text></xsl:template>
66
67     <xsl:template match="permacrud:permacrud">,permacrud:{<xsl:for-each select="permacrud:actions/*"><xsl:if test="name() = 'delete'">"</xsl:if><xsl:value-of select="name()"/><xsl:if test="name() = 'delete'">"</xsl:if>:{<xsl:call-template name='pcrudPerms'/>}<xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>}</xsl:template>
68  
69 <!-- to simplify the logic, the first and last field are assumed to
70      have values (and practically always will) -->
71 <xsl:template name='printField'>
72   <xsl:text>{</xsl:text>
73     <xsl:text>name:"</xsl:text><xsl:value-of select="@name"/><xsl:text>",</xsl:text>
74     <xsl:if test="@reporter:label != ''">label:"<xsl:value-of select="@reporter:label"/>",</xsl:if>
75     <xsl:if test="@oils_persist:primitive = 'true'">primitive:true,</xsl:if>
76     <xsl:if test="@reporter:selector != ''">selector:"<xsl:value-of select="@reporter:selector"/>",</xsl:if>
77     <xsl:if test="@sr:suggest_transform != ''">suggest_transform:"<xsl:value-of select="@sr:suggest_transform"/>",</xsl:if>
78     <xsl:if test="@sr:suggest_operator != ''">suggest_operator:"<xsl:value-of select="@sr:suggest_operator"/>",</xsl:if>
79     <xsl:if test="@sr:suggest_filter = 'true'">suggest_filter:true,</xsl:if>
80     <xsl:if test="@sr:force_transform != ''">force_transform:[<xsl:for-each select="str:split(@sr:force_transform, ',')">"<xsl:value-of select="./text()"/>"<xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>],</xsl:if>
81     <xsl:if test="@sr:force_operator != ''">force_operator:"<xsl:value-of select="@sr:force_operator"/>",</xsl:if>
82     <xsl:if test="@sr:force_filter = 'true'">force_filter:true,</xsl:if>
83     <xsl:if test="@sr:force_filtervalues != ''">force_filtervalues:[<xsl:for-each select="str:split(@sr:force_filtervalues, ',')">"<xsl:value-of select="./text()"/>"<xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>],</xsl:if>
84     <xsl:if test="@sr:hide_from != ''">hide_from:[<xsl:for-each select="str:split(@sr:hide_from, ',')">"<xsl:value-of select="./text()"/>"<xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>],</xsl:if>
85     <xsl:if test="@field_groups != ''">field_groups:[<xsl:for-each select="str:split(@field_groups, ',')">"<xsl:value-of select="./text()"/>"<xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>],</xsl:if>
86     <xsl:if test="@oils_persist:virtual = 'true'">virtual:true,</xsl:if><xsl:if test="@oils_obj:required = 'true'">required:true,</xsl:if>
87     <xsl:if test="@oils_persist:i18n = 'true'">i18n:true,</xsl:if><xsl:if test="@config_field = 'true'">config_field:true,</xsl:if>
88     <xsl:call-template name='fieldOrLink'><xsl:with-param name='f' select="."/></xsl:call-template>
89     <xsl:text>datatype:</xsl:text>
90     <xsl:text>"</xsl:text><xsl:call-template name='defaultValue'><xsl:with-param name='v' select="@reporter:datatype"/><xsl:with-param name='d' select="string('text')"/></xsl:call-template><xsl:text>"</xsl:text>
91   <xsl:text>}</xsl:text></xsl:template>
92  
93 <xsl:template name="pcrudPerms">
94     <xsl:if test="@permission">perms:[<xsl:for-each select="str:split(@permission,' ')">'<xsl:value-of select="./text()"/>'<xsl:if test="not(position() = last())">,</xsl:if></xsl:for-each>]</xsl:if>
95 </xsl:template>
96
97 <xsl:template name="fieldOrLink">
98     <xsl:param name="f"/>
99     <xsl:if test="$f/../../idl:links/idl:link[@field=$f/@name]">type:"link",<xsl:apply-templates select="$f/../../idl:links/idl:link[@field=$f/@name]"></xsl:apply-templates>,</xsl:if>
100 </xsl:template>
101
102 <xsl:template match="idl:link"><xsl:if test="@sr:org_filter_field != ''">org_filter_field:"<xsl:value-of select="@sr:org_filter_field"/>",</xsl:if><xsl:if test="@map != ''">map:"<xsl:value-of select="@map"/>",</xsl:if>key:"<xsl:value-of select="@key"/>","class":"<xsl:value-of select="@class"/>",reltype:"<xsl:value-of select="@reltype"/>"</xsl:template>
103
104 <xsl:template name="trueFalse">
105     <xsl:param name="tf"/>
106     <xsl:choose>
107         <xsl:when test="$tf='true'">true</xsl:when>
108         <xsl:otherwise>false</xsl:otherwise>
109     </xsl:choose>
110 </xsl:template>
111
112 <xsl:template name="defaultValue">
113     <xsl:param name="v"/>
114     <xsl:param name="d"/>
115     <xsl:choose>
116         <xsl:when test="string-length($v)=0"><xsl:value-of select="$d"/></xsl:when>
117         <xsl:otherwise><xsl:value-of select="$v"/></xsl:otherwise>
118     </xsl:choose>
119 </xsl:template>
120
121 </xsl:stylesheet>