1+ /*==============================================================================================================================
2+ | Author Ignia, LLC
3+ | Client Ignia, LLC
4+ | Project Topics Library
5+ \=============================================================================================================================*/
6+ Ext . namespace ( 'OnTopic' ) ;
7+
8+ /*==============================================================================================================================
9+ | CLASS: SELECTABLE TREE VIEW
10+ \-----------------------------------------------------------------------------------------------------------------------------*/
11+ /**
12+ * @class OnTopic.SelectableTreeView
13+ * @extends Ext.tree.TreePanel
14+ * Provides an implementation of a {@link Ext.tree.TreePanel} which exposes checkboxes and is backed by a hidden field for
15+ * collecting the topic identifiers of any nodes checked. For use with e.g. the relationships view component.
16+ * @constructor
17+ * Create new SelectableTreeView object directly.
18+ * @param {object } options (optional) Options to overwrite either the {@link OnTopic.SelectableTreeView} or the underlying
19+ * {@link Ext.tree.TreePanel}.
20+ */
21+ OnTopic . SelectableTreeView = Ext . extend ( Ext . tree . TreePanel , {
22+
23+ /*============================================================================================================================
24+ | DEFINE LOCAL FIELDS
25+ \---------------------------------------------------------------------------------------------------------------------------*/
26+ checkAscendants : false ,
27+ selectedTopics : null ,
28+ backingField : null ,
29+
30+ /*============================================================================================================================
31+ | METHOD: SELECT TOPIC
32+ \---------------------------------------------------------------------------------------------------------------------------*/
33+ selectTopic : function ( node ) {
34+ node . checked = true ;
35+ node . select ( ) ;
36+ return true ;
37+ } ,
38+
39+ /*============================================================================================================================
40+ | METHOD: UPDATE BACKING FIELD
41+ \---------------------------------------------------------------------------------------------------------------------------*/
42+ updateBackingField : function ( node , checked ) {
43+ if ( checked ) {
44+ this . selectedTopics . push ( node . attributes . id . toString ( ) ) ;
45+ }
46+ else {
47+ this . selectedTopics . remove ( node . attributes . id . toString ( ) ) ;
48+ }
49+ this . backingField . dom . value = this . selectedTopics . concat ( "," ) ;
50+ if ( ! this . checkAscendants ) return true ;
51+ if ( checked && node . parentNode ) node . parentNode . getUI ( ) . toggleCheck ( true ) ;
52+ } ,
53+
54+ /*============================================================================================================================
55+ | CONSTRUCTOR
56+ \---------------------------------------------------------------------------------------------------------------------------*/
57+ constructor : function ( options ) {
58+
59+ /*--------------------------------------------------------------------------------------------------------------------------
60+ | Set default options based on parameters
61+ \-------------------------------------------------------------------------------------------------------------------------*/
62+ Ext . apply ( this , options , OnTopic . SelectableTreeView . defaults ) ;
63+
64+ /*--------------------------------------------------------------------------------------------------------------------------
65+ | Initialize variables
66+ \-------------------------------------------------------------------------------------------------------------------------*/
67+ this . backingField = Ext . get ( options . backingField ) ;
68+ this . selectedTopics = this . backingField . dom . value . split ( "," ) ;
69+
70+ /*--------------------------------------------------------------------------------------------------------------------------
71+ | Call parent constructor
72+ \-------------------------------------------------------------------------------------------------------------------------*/
73+ OnTopic . SelectableTreeView . superclass . constructor . call ( this ) ;
74+
75+ } ,
76+
77+ /*============================================================================================================================
78+ | INITIALIZE COMPONENT
79+ \---------------------------------------------------------------------------------------------------------------------------*/
80+ initComponent : function ( ) {
81+
82+ /*--------------------------------------------------------------------------------------------------------------------------
83+ | Call parent initializer
84+ \-------------------------------------------------------------------------------------------------------------------------*/
85+ OnTopic . SelectableTreeView . superclass . initComponent . call ( this ) ;
86+
87+ /*--------------------------------------------------------------------------------------------------------------------------
88+ | Set default listeners
89+ \-------------------------------------------------------------------------------------------------------------------------*/
90+ var me = this ;
91+
92+ me . on ( 'click' , me . selectTopic , this ) ;
93+ me . on ( 'checkchange' , me . updateBackingField , this ) ;
94+
95+ }
96+
97+ } ) ;
98+
99+ /*==============================================================================================================================
100+ | DEFAULTS
101+ \-----------------------------------------------------------------------------------------------------------------------------*/
102+ OnTopic . SelectableTreeView . defaults = {
103+ id : 'relatedTree' ,
104+ useArrows : true ,
105+ autoScroll : true ,
106+ animate : true ,
107+ enableDD : false ,
108+ containerScroll : true ,
109+ border : false ,
110+ baseCls : 'RelationshipsTreeView' ,
111+ root : new Ext . tree . AsyncTreeNode ( {
112+ checked : true ,
113+ text : 'Web' ,
114+ draggable : false ,
115+ id : 'related' ,
116+ leaf : false
117+ } ) ,
118+ rootVisible : false
119+ } ;
0 commit comments