diff src/nabble/view/naml/url_mapper.naml @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nabble/view/naml/url_mapper.naml	Thu Mar 21 19:15:52 2019 -0600
@@ -0,0 +1,126 @@
+
+<macro name="url mapper" requires="url_mapper">
+	<n.map_root/>
+	<n.map_app/>
+	<n.map_topic/>
+	<n.map_atom_feeds/>
+</macro>
+
+<macro name="set_parameter_if_found" parameters="name,group" requires="url_mapper,regex">
+	<n.if.did_find group="[n.group/]">
+		<then.set_parameter_to_found name="[n.name/]" group="[n.group/]" />
+	</n.if.did_find>
+</macro>
+
+<macro name="set_parameter_char_if_found" parameters="name,group,char,value" requires="url_mapper,regex">
+	<n.if.did_find group="[n.group/]">
+		<then>
+			<n.set_var. name='found'><n.found group="[n.group/]"/></n.set_var.>
+			<n.if.equal value1="[n.char/]" value2="[n.var name='found'/]">
+				<then.set_parameter. name="[n.name/]">
+					<n.value/>
+				</then.set_parameter.>
+			</n.if.equal>
+		</then>
+	</n.if.did_find>
+</macro>
+
+<macro name="set_parameter_to_found" parameters="name,group" requires="url_mapper,regex">
+	<n.set_parameter. name="[n.name/]">
+		<n.found group="[n.group/]"/>
+	</n.set_parameter.>
+</macro>
+
+
+individual mappings
+
+<macro name="map_root" requires="url_mapper">
+	<n.regex text="[n.path/]">
+		<pattern>
+			^/$
+		</pattern>
+		<do>
+			<n.if.find>
+				<then>
+					<n.set_parameter. name="node">
+						<n.root_node.id/>
+					</n.set_parameter.>
+					<n.set_parameter name="macro" value="view_app" />
+					<n.exit/>
+				</then>
+			</n.if.find>
+		</do>
+	</n.regex>
+</macro>
+
+<macro name="map_app" requires="url_mapper">
+	<n.regex text="[n.path/]">
+		<pattern>
+			-f(\d+)(?:p(\d+))?(?:a(\d+))?(?:i(\d+))?(?:d(\d+))?(?:ef\d+)?(?:\.([a-z]+))?\.html$
+		</pattern>
+		<do>
+			<n.if.find>
+				<then>
+					<n.set_parameter_to_found name="node" group="1" />
+					<n.set_parameter_if_found name="priority" group="2" />
+					<n.set_parameter_if_found name="assignee" group="3" />
+					<n.set_parameter_if_found name="index_record" group="4" />
+					<n.set_parameter_if_found name="date" group="5" />
+					<n.if.did_find group="6">
+						<then>
+							<n.set_parameter. name="macro">
+								view_<n.found group="6"/>
+							</n.set_parameter.>
+						</then>
+						<else>
+							<n.set_parameter name="macro" value="view_app" />
+						</else>
+					</n.if.did_find>
+					<n.exit/>
+				</then>
+			</n.if.find>
+		</do>
+	</n.regex>
+</macro>
+
+<macro name="map_topic" requires="url_mapper">
+	<n.regex text="[n.path/]">
+		<pattern>
+			-t(d|c|t)(\d+)(?:i(\d+))?(?:ef\d+)?\.html$
+		</pattern>
+		<do>
+			<n.if.find>
+				<then>
+					<n.set_parameter_char_if_found name="view" group="1" char="d" value="classic" />
+					<n.set_parameter_char_if_found name="view" group="1" char="c" value="list" />
+					<n.set_parameter_char_if_found name="view" group="1" char="t" value="threaded" />
+					<n.set_parameter_to_found name="node" group="2" />
+					<n.set_parameter_if_found name="index_record" group="3" />
+					<n.set_parameter name="macro" value="topic" />
+					<n.exit/>
+				</then>
+			</n.if.find>
+		</do>
+	</n.regex>
+</macro>
+
+<macro name="map_atom_feeds" requires="url_mapper">
+	<n.regex text="[n.path/]">
+		<pattern>
+			-f(t)?(\d+)(n(\d+))?.xml$
+		</pattern>
+		<do>
+			<n.if.find>
+				<then>
+					<n.if.did_find group="1">
+						<then.set_parameter name="macro" value="atom_topics_by_date" />
+						<else.set_parameter name="macro" value="atom_posts_by_date" />
+					</n.if.did_find>
+					<n.set_parameter_to_found name="node" group="2" />
+					<n.set_parameter_if_found name="length" group="4" />
+					<n.exit/>
+				</then>
+			</n.if.find>
+		</do>
+	</n.regex>
+</macro>
\ No newline at end of file