+redef class MProperty
+ super Comparable
+ redef type OTHER: MProperty
+ redef fun <(other: OTHER): Bool do return self.name < other.name
+
+ var is_redef: Bool
+ var apropdef: nullable APropdef
+
+ redef init(intro_mclassdef: MClassDef, name: String, visibility: MVisibility)
+ do
+ super
+ is_redef = false
+ end
+
+ fun local_class: MClass do
+ var classdef = self.intro_mclassdef
+ return classdef.mclass
+ end
+
+ fun anchor: String do
+ return "PROP_{c_name}"
+ end
+
+ # Escape name for html output
+ redef fun name do return super.html_escape
+end
+
+redef class MType
+ fun link(mbuilder: ModelBuilder): String is abstract
+end
+
+redef class MClassType
+ redef fun link(mbuilder) do return mclass.link(mbuilder)
+end
+
+redef class MNullableType
+ redef fun link(mbuilder) do return "nullable {mtype.link(mbuilder)}"
+end
+
+redef class MClassDef
+ private fun namespace(mclass: MClass): String do
+
+ if mmodule.public_owner is null then
+ return "{mmodule.full_name}::{mclass.name}"
+ else if mclass is self.mclass then
+ return "{mmodule.public_owner.name}::{mclass.name}"
+ else
+ return "{mmodule.public_owner.name}::<a href=\"{mclass.name}.html\">{mclass.name}</a>"
+ end
+ end
+end
+
+redef class MPropDef
+ super Comparable
+ redef type OTHER: MPropDef
+ redef fun <(other: OTHER): Bool do return self.mproperty.name < other.mproperty.name
+
+ # Return a link (html a tag) to the nitdoc class page
+ fun link(mbuilder: ModelBuilder): String do
+ if mbuilder.mpropdef2npropdef.has_key(self) then
+ var nprop = mbuilder.mpropdef2npropdef[self]
+ return "<a href=\"{mclassdef.mclass.name}.html#{mproperty.anchor}\" title=\"{nprop.short_comment}\">{mproperty.name}</a>"
+ else
+ return "<a href=\"{mclassdef.mclass.name}.html#{mproperty.anchor}\">{mproperty.name}</a>"
+ end
+ end
+
+ # Return a list item for the mpropdef
+ fun html_list_item(mbuilder: ModelBuilder): String do
+ var res = new Buffer
+ if is_intro then
+ res.append("<li class='intro'>")
+ res.append("<span title='introduction'>I</span> {link(mbuilder)} ({mclassdef.mclass.name})")
+ res.append("</li>")
+ else
+ res.append("<li class='redef'>")
+ res.append("<span title='redefinition'>R</span> {link(mbuilder)} ({mclassdef.mclass.name})")
+ res.append("</li>")
+ end
+ return res.to_s
+ end
+
+ # Return a list item for the mpropdef
+ fun html_sidebar_item(page: NitdocClass): String do
+ var res = new Buffer
+ if is_intro and mclassdef.mclass == page.mclass then
+ res.append("<li class='intro'>")
+ res.append("<span title='Introduced'>I</span>")
+ else if is_intro and mclassdef.mclass != page.mclass then
+ res.append("<li class='inherit'>")
+ res.append("<span title='Inherited'>H</span>")
+ else
+ res.append("<li class='redef'>")
+ res.append("<span title='Redefined'>R</span>")
+ end
+ res.append(link(page.mbuilder))
+ res.append("</li>")
+ return res.to_s
+ end
+end
+
+#
+# Nodes redefs
+#
+
+redef class AModule