summaryrefslogtreecommitdiff
path: root/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js
Unidiff
Diffstat (limited to 'frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js22
1 files changed, 10 insertions, 12 deletions
diff --git a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js
index 2066543..bb23e8d 100644
--- a/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js
+++ b/frontend/beta/js/Clipperz/PM/Components/RecordDetail/NotesComponent.js
@@ -1,214 +1,212 @@
1/* 1/*
2 2
3Copyright 2008-2011 Clipperz Srl 3Copyright 2008-2013 Clipperz Srl
4 4
5This file is part of Clipperz Community Edition. 5This file is part of Clipperz, the online password manager.
6Clipperz Community Edition is an online password manager.
7For further information about its features and functionalities please 6For further information about its features and functionalities please
8refer to http://www.clipperz.com. 7refer to http://www.clipperz.com.
9 8
10* Clipperz Community Edition is free software: you can redistribute 9* Clipperz is free software: you can redistribute it and/or modify it
11 it and/or modify it under the terms of the GNU Affero General Public 10 under the terms of the GNU Affero General Public License as published
12 License as published by the Free Software Foundation, either version 11 by the Free Software Foundation, either version 3 of the License, or
13 3 of the License, or (at your option) any later version. 12 (at your option) any later version.
14 13
15* Clipperz Community Edition is distributed in the hope that it will 14* Clipperz is distributed in the hope that it will be useful, but
16 be useful, but WITHOUT ANY WARRANTY; without even the implied 15 WITHOUT ANY WARRANTY; without even the implied warranty of
17 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU Affero General Public License for more details. 17 See the GNU Affero General Public License for more details.
19 18
20* You should have received a copy of the GNU Affero General Public 19* You should have received a copy of the GNU Affero General Public
21 License along with Clipperz Community Edition. If not, see 20 License along with Clipperz. If not, see http://www.gnu.org/licenses/.
22 <http://www.gnu.org/licenses/>.
23 21
24*/ 22*/
25 23
26if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } 24if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
27if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } 25if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
28if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; } 26if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
29if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; } 27if (typeof(Clipperz.PM.Components.RecordDetail) == 'undefined') { Clipperz.PM.Components.RecordDetail = {}; }
30 28
31//############################################################################# 29//#############################################################################
32 30
33 31
34 32
35Clipperz.PM.Components.RecordDetail.NotesComponent = function(anElement, args) { 33Clipperz.PM.Components.RecordDetail.NotesComponent = function(anElement, args) {
36//MochiKit.Logging.logDebug(">>> new NotesComponent"); 34//MochiKit.Logging.logDebug(">>> new NotesComponent");
37 args = args || {}; 35 args = args || {};
38 36
39 Clipperz.PM.Components.RecordDetail.NotesComponent.superclass.constructor.call(this, anElement, args); 37 Clipperz.PM.Components.RecordDetail.NotesComponent.superclass.constructor.call(this, anElement, args);
40 38
41 this.mainComponent().addEditComponent(this); 39 this.mainComponent().addEditComponent(this);
42 40
43 this._staticOffset = null; 41 this._staticOffset = null;
44 this._componentHeight = 50; 42 this._componentHeight = 50;
45 this._mouseMoveIdentifier = null; 43 this._mouseMoveIdentifier = null;
46 this._mouseUpIdentifier = null; 44 this._mouseUpIdentifier = null;
47 45
48 this.element().setVisibilityMode(YAHOO.ext.Element.DISPLAY); 46 this.element().setVisibilityMode(YAHOO.ext.Element.DISPLAY);
49 47
50 this.render(); 48 this.render();
51//MochiKit.Logging.logDebug("<<< new NotesComponent"); 49//MochiKit.Logging.logDebug("<<< new NotesComponent");
52 50
53 return this; 51 return this;
54} 52}
55 53
56//============================================================================= 54//=============================================================================
57 55
58YAHOO.extendX(Clipperz.PM.Components.RecordDetail.NotesComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, { 56YAHOO.extendX(Clipperz.PM.Components.RecordDetail.NotesComponent, Clipperz.PM.Components.RecordDetail.AbstractComponent, {
59 57
60 'toString': function() { 58 'toString': function() {
61 return "Clipperz.PM.Components.RecordDetail.NotesComponent component"; 59 return "Clipperz.PM.Components.RecordDetail.NotesComponent component";
62 }, 60 },
63 61
64 //------------------------------------------------------------------------- 62 //-------------------------------------------------------------------------
65 63
66 'value': function() { 64 'value': function() {
67 return this.record().notes(); 65 return this.record().notes();
68 }, 66 },
69 67
70 'setValue': function(aValue) { 68 'setValue': function(aValue) {
71 this.record().setNotes(aValue); 69 this.record().setNotes(aValue);
72 }, 70 },
73 71
74 //------------------------------------------------------------------------- 72 //-------------------------------------------------------------------------
75 73
76 'render': function() { 74 'render': function() {
77//MochiKit.Logging.logDebug(">>> NotesComponent.render"); 75//MochiKit.Logging.logDebug(">>> NotesComponent.render");
78/* 76/*
79 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', colspan:'5', children:[ 77 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'td', colspan:'5', children:[
80 {tag:'span', cls:'noteFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailNotesLabel']}, 78 {tag:'span', cls:'noteFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailNotesLabel']},
81 {tag:'div', cls:'noteFieldContent', id:this.getId('notes')} 79 {tag:'div', cls:'noteFieldContent', id:this.getId('notes')}
82 ]}); 80 ]});
83 */ 81 */
84 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', cls:'noteFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailNotesLabel']}); 82 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'span', cls:'noteFieldLabel', htmlString:Clipperz.PM.Strings['recordDetailNotesLabel']});
85 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'noteFieldContent', id:this.getId('notes'), children:[ 83 Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', cls:'noteFieldContent', id:this.getId('notes'), children:[
86 {tag:'div', id:this.getId('resizableDiv'), cls:'resizable-textarea', children:[ 84 {tag:'div', id:this.getId('resizableDiv'), cls:'resizable-textarea', children:[
87 {tag:'div', id:this.getId('contentView'), cls:'viewMode', html:""}, 85 {tag:'div', id:this.getId('contentView'), cls:'viewMode', html:""},
88 {tag:'div', id:this.getId('contentEdit'), children:[ 86 {tag:'div', id:this.getId('contentEdit'), children:[
89 {tag:'span', children:[ 87 {tag:'span', children:[
90 {tag:'textarea', id:this.getId('textarea'), html:""} 88 {tag:'textarea', id:this.getId('textarea'), html:""}
91 ]} 89 ]}
92 ]}, 90 ]},
93 {tag:'div', id:this.getId('grippie'), cls:'grippie'} 91 {tag:'div', id:this.getId('grippie'), cls:'grippie'}
94 ]} 92 ]}
95 ]}); 93 ]});
96 94
97 this.getElement('contentView').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 95 this.getElement('contentView').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
98 this.getElement('contentEdit').setVisibilityMode(YAHOO.ext.Element.DISPLAY); 96 this.getElement('contentEdit').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
99 97
100 MochiKit.Signal.connect(this.getId('grippie'), 'onmousedown', this, 'startResize'); 98 MochiKit.Signal.connect(this.getId('grippie'), 'onmousedown', this, 'startResize');
101 99
102 this.update(); 100 this.update();
103//MochiKit.Logging.logDebug("<<< NotesComponent.render"); 101//MochiKit.Logging.logDebug("<<< NotesComponent.render");
104 }, 102 },
105 103
106 //------------------------------------------------------------------------- 104 //-------------------------------------------------------------------------
107 105
108 'updateViewMode': function() { 106 'updateViewMode': function() {
109//MochiKit.Logging.logDebug(">>> NotesComponent.updateViewMode"); 107//MochiKit.Logging.logDebug(">>> NotesComponent.updateViewMode");
110 // this.getElement('notes').update(this.value().replace(/\n/g, '<br>')); 108 // this.getElement('notes').update(this.value().replace(/\n/g, '<br>'));
111 109
112 this.getElement('contentView').update(Clipperz.Base.sanitizeString(this.value()).replace(/\n/g, '<br>')); 110 this.getElement('contentView').update(Clipperz.Base.sanitizeString(this.value()).replace(/\n/g, '<br>'));
113 111
114 if (this.isNoteEmpty()) { 112 if (this.isNoteEmpty()) {
115 this.element().hide(); 113 this.element().hide();
116 } else { 114 } else {
117 this.getElement('contentView').show(); 115 this.getElement('contentView').show();
118 this.getElement('contentView').setHeight(this.componentHeight()); 116 this.getElement('contentView').setHeight(this.componentHeight());
119 } 117 }
120 this.getElement('contentEdit').hide(); 118 this.getElement('contentEdit').hide();
121 119
122//MochiKit.Logging.logDebug("<<< NotesComponent.updateViewMode"); 120//MochiKit.Logging.logDebug("<<< NotesComponent.updateViewMode");
123 }, 121 },
124 122
125 //------------------------------------------------------------------------- 123 //-------------------------------------------------------------------------
126 124
127 'updateEditMode': function() { 125 'updateEditMode': function() {
128//MochiKit.Logging.logDebug(">>> NotesComponent.updateEditMode"); 126//MochiKit.Logging.logDebug(">>> NotesComponent.updateEditMode");
129 this.getDom('textarea').value = this.value().replace(/\n/g, Clipperz_normalizedNewLine); 127 this.getDom('textarea').value = this.value().replace(/\n/g, Clipperz_normalizedNewLine);
130 128
131 this.getElement('contentView').hide(); 129 this.getElement('contentView').hide();
132 this.getElement('contentEdit').show(); 130 this.getElement('contentEdit').show();
133 131
134 this.getElement('textarea').setHeight(this.componentHeight()); 132 this.getElement('textarea').setHeight(this.componentHeight());
135//MochiKit.Logging.logDebug("<<< NotesComponent.updateEditMode"); 133//MochiKit.Logging.logDebug("<<< NotesComponent.updateEditMode");
136 }, 134 },
137 135
138 //------------------------------------------------------------------------- 136 //-------------------------------------------------------------------------
139 137
140 'synchronizeComponentValues': function() { 138 'synchronizeComponentValues': function() {
141//MochiKit.Logging.logDebug(">>> NotesComponent.synchronizeComponentValues"); 139//MochiKit.Logging.logDebug(">>> NotesComponent.synchronizeComponentValues");
142 if (this.getElement('textarea') != null) { 140 if (this.getElement('textarea') != null) {
143 this.setValue(this.getDom('textarea').value.replace(/(\x0a\x0d|\x0d\x0a)/g,'\n')); 141 this.setValue(this.getDom('textarea').value.replace(/(\x0a\x0d|\x0d\x0a)/g,'\n'));
144 } 142 }
145//MochiKit.Logging.logDebug("<<< NotesComponent.synchronizeComponentValues"); 143//MochiKit.Logging.logDebug("<<< NotesComponent.synchronizeComponentValues");
146 }, 144 },
147 145
148 //------------------------------------------------------------------------- 146 //-------------------------------------------------------------------------
149 147
150 'componentHeight': function() { 148 'componentHeight': function() {
151 return this._componentHeight; 149 return this._componentHeight;
152 }, 150 },
153 151
154 'setComponentHeight': function(aValue) { 152 'setComponentHeight': function(aValue) {
155 this._componentHeight = aValue; 153 this._componentHeight = aValue;
156 }, 154 },
157 155
158 //------------------------------------------------------------------------- 156 //-------------------------------------------------------------------------
159 157
160 'isNoteEmpty': function() { 158 'isNoteEmpty': function() {
161 return !/[^ \n]/.test(this.value()); 159 return !/[^ \n]/.test(this.value());
162 }, 160 },
163 161
164 //------------------------------------------------------------------------- 162 //-------------------------------------------------------------------------
165 163
166 'staticOffset': function() { 164 'staticOffset': function() {
167 return this._staticOffset; 165 return this._staticOffset;
168 }, 166 },
169 167
170 'setStaticOffset': function(aValue) { 168 'setStaticOffset': function(aValue) {
171 this._staticOffset = aValue; 169 this._staticOffset = aValue;
172 }, 170 },
173 171
174 //------------------------------------------------------------------------- 172 //-------------------------------------------------------------------------
175 173
176 'startResize': function(anEvent) { 174 'startResize': function(anEvent) {
177//MochiKit.Logging.logDebug(">>> startResize"); 175//MochiKit.Logging.logDebug(">>> startResize");
178 if (this.editMode() == 'VIEW') { 176 if (this.editMode() == 'VIEW') {
179 this.setStaticOffset(this.getElement('contentView').getHeight() - anEvent.mouse().page['y']) 177 this.setStaticOffset(this.getElement('contentView').getHeight() - anEvent.mouse().page['y'])
180 } else { 178 } else {
181 this.setStaticOffset(this.getElement('textarea').getHeight() - anEvent.mouse().page['y']) 179 this.setStaticOffset(this.getElement('textarea').getHeight() - anEvent.mouse().page['y'])
182 // this.getElement('textarea').setStyle('opacity', 0.25); 180 // this.getElement('textarea').setStyle('opacity', 0.25);
183 } 181 }
184 this.setMouseMoveIdentifier(MochiKit.Signal.connect(MochiKit.DOM.currentDocument(), 'onmousemove', this, 'whileResizing')); 182 this.setMouseMoveIdentifier(MochiKit.Signal.connect(MochiKit.DOM.currentDocument(), 'onmousemove', this, 'whileResizing'));
185 this.setMouseUpIdentifier(MochiKit.Signal.connect(MochiKit.DOM.currentDocument(), 'onmouseup', this, 'endResize')); 183 this.setMouseUpIdentifier(MochiKit.Signal.connect(MochiKit.DOM.currentDocument(), 'onmouseup', this, 'endResize'));
186 anEvent.stop(); 184 anEvent.stop();
187//MochiKit.Logging.logDebug("<<< startResize"); 185//MochiKit.Logging.logDebug("<<< startResize");
188 }, 186 },
189 187
190 //------------------------------------------------------------------------- 188 //-------------------------------------------------------------------------
191 189
192 'whileResizing': function(anEvent) { 190 'whileResizing': function(anEvent) {
193//MochiKit.Logging.logDebug(">>> whileResizing"); 191//MochiKit.Logging.logDebug(">>> whileResizing");
194 this.getElement('textarea').setHeight(Math.max(32, this.staticOffset() + anEvent.mouse().page['y']) + 'px'); 192 this.getElement('textarea').setHeight(Math.max(32, this.staticOffset() + anEvent.mouse().page['y']) + 'px');
195 this.getElement('contentView').setHeight(Math.max(32, this.staticOffset() + anEvent.mouse().page['y']) + 'px'); 193 this.getElement('contentView').setHeight(Math.max(32, this.staticOffset() + anEvent.mouse().page['y']) + 'px');
196 anEvent.stop(); 194 anEvent.stop();
197//MochiKit.Logging.logDebug("<<< whileResizing"); 195//MochiKit.Logging.logDebug("<<< whileResizing");
198 }, 196 },
199 197
200 //------------------------------------------------------------------------- 198 //-------------------------------------------------------------------------
201 199
202 'endResize': function(anEvent) { 200 'endResize': function(anEvent) {
203//MochiKit.Logging.logDebug(">>> endResize"); 201//MochiKit.Logging.logDebug(">>> endResize");
204 MochiKit.Signal.disconnect(this.mouseMoveIdentifier()); 202 MochiKit.Signal.disconnect(this.mouseMoveIdentifier());
205 this.setMouseMoveIdentifier(null); 203 this.setMouseMoveIdentifier(null);
206 MochiKit.Signal.disconnect(this.mouseUpIdentifier()); 204 MochiKit.Signal.disconnect(this.mouseUpIdentifier());
207 this.setMouseUpIdentifier(null); 205 this.setMouseUpIdentifier(null);
208 // this.getElement('textarea').setStyle('opacity', 1); 206 // this.getElement('textarea').setStyle('opacity', 1);
209 207
210 this.setComponentHeight(this.getElement('textarea').getHeight()); 208 this.setComponentHeight(this.getElement('textarea').getHeight());
211//MochiKit.Logging.logDebug("<<< endResize"); 209//MochiKit.Logging.logDebug("<<< endResize");
212 }, 210 },
213 211
214 //------------------------------------------------------------------------- 212 //-------------------------------------------------------------------------