Changeset 4910
- Timestamp:
- 12/01/08 09:08:53 (1 month ago)
- Files:
-
- ticketextplugin/0.11/setup.py (modified) (1 diff)
- ticketextplugin/0.11/ticketext/api.py (modified) (2 diffs)
- ticketextplugin/0.11/ticketext/htdocs/ticketext.js (modified) (7 diffs)
- ticketextplugin/0.11/ticketext/template_admin.py (modified) (1 diff)
- ticketextplugin/0.11/ticketext/template.py (modified) (2 diffs)
- ticketextplugin/0.11/ticketext/templates/template_admin.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
ticketextplugin/0.11/setup.py
r4672 r4910 6 6 setup( 7 7 name = 'TicketExtPlugin', 8 version = '0.2. 1',8 version = '0.2.2', 9 9 description = "Ticket extensions for Trac", 10 10 url = "http://trac-hacks.org/wiki/TicketExtPlugin", ticketextplugin/0.11/ticketext/api.py
r4454 r4910 3 3 import json 4 4 from os import environ 5 from trac.core import Component, implements5 from trac.core import * 6 6 7 7 class TicketExtUtil(Component): … … 29 29 template_field = self.get_template_field(ticket_type) 30 30 31 response = json.write({31 response_data = { 32 32 "template" : template_field['template'], 33 33 "enablefields" : template_field['enablefields'], 34 }); 34 } 35 36 if hasattr(json, 'dumps'): 37 # use simplejson(After python2.6 default) 38 response = json.dumps(response_data); 39 response = unicode(response, 'utf-8') 40 elif hasattr(json, 'write'): 41 # use json-py 42 response = json.write(response_data); 43 else: 44 raise TracError('JSON library import error.') 45 35 46 36 47 req.send_response(200) ticketextplugin/0.11/ticketext/htdocs/ticketext.js
r4618 r4910 62 62 * @param descIdValue The ticket description element id. 63 63 */ 64 var TicketTemplate = function(baseUrlValue , typeIdValue, descIdValue) {65 64 var TicketTemplate = function(baseUrlValue) { 65 66 66 this.STYLE_CLASS_EXCLUDE = "te_exclude"; 67 67 this.DELIM = ","; 68 68 69 this.baseUrl = "/"; 70 this.typeId = "type"; 71 this.descId = "template"; 72 this.enablefieldsId = "enablefields"; 69 // for TracWysiwygPlugin Parameter 70 this.WYSISYG_MAX_NUM = 10; 71 this.WYSISYG_EDITOR_PREFIX = "__EDITOR__"; 72 73 this.baseUrl = "/"; 74 this.typeId = "type"; 75 this.descId = "template"; 76 this.enablefieldsId = "enablefields"; 77 this.readyDescription = false; 78 this.readyCustomfields = true; 73 79 74 80 // trac default field name 75 // "__EDITOR__1" is for TracWysiwygPlugin76 81 this.defaultPropArray = ["field_summary", "field_reporter", "field_description", 77 82 "field_owner", "field_type", "field_priority", "field_milestone", 78 "field_component", "field_version", "field_keywords", "field_cc", 79 "__EDITOR__1"]; 83 "field_component", "field_version", "field_keywords", "field_cc"]; 80 84 81 85 if (baseUrlValue) { 82 86 this.baseUrl = baseUrlValue; 83 } 84 if (typeIdValue) { 85 this.typeId = typeIdValue; 86 } 87 if (descIdValue) { 88 this.descId = descIdValue; 89 } 90 87 } 88 }; 89 90 /** 91 * Initialize TicketTemplate. 92 */ 93 TicketTemplate.prototype.initialize = function() { 91 94 var typeElem = document.getElementById(this.typeId); 92 95 if (!typeElem) { … … 95 98 96 99 // Apply template at the first time. 97 // except preview 98 var previewFieldsElem = document.getElementById("preview"); 99 if (!previewFieldsElem || previewFieldsElem.tagName != "FIELDSET") { 100 this.selectTemplate(typeElem); 101 } 100 this.selectTemplate(typeElem); 102 101 103 102 $(typeElem).change(this.changeType(typeElem)); 104 } ;103 } 105 104 106 105 /** … … 168 167 } 169 168 170 this.applyDescription(templateData); 171 this.applyCustomfields(templateData); 169 // If not ready, not apply only at the first time. 170 // So ready to apply after first time. 171 if (this.readyDescription) { 172 this.applyDescription(templateData); 173 } else { 174 this.readyDescription = true; 175 } 176 if (this.readyCustomfields) { 177 this.applyCustomfields(templateData); 178 } else { 179 this.readyCustomfields = true; 180 } 172 181 } 173 182 … … 189 198 // it must be chnage edit mode before change the description value. 190 199 var enableWysiwyg = false; 191 var editorMode;192 var textareaModeElem;193 var wysiwygModeElem;194 195 200 if(typeof TracWysiwyg == "function") { 196 201 enableWysiwyg = true; 197 202 } 203 204 var editorMode; 205 var txtareaModeElemArray = new Array(); 206 var wysiwygModeElemArray = new Array(); 198 207 199 208 if (enableWysiwyg) { 209 for (var index = 0; index < this.WYSISYG_MAX_NUM; index++) { 210 var countStr = String(index + 1); 211 var txtareaModeElem = document.getElementById("editor-textarea-" + countStr); 212 var wysiwygModeElem = document.getElementById("editor-wysiwyg-" + countStr); 213 if (txtareaModeElem && wysiwygModeElem) { 214 txtareaModeElemArray.push(txtareaModeElem); 215 wysiwygModeElemArray.push(wysiwygModeElem); 216 } else { 217 break; 218 } 219 } 220 200 221 editorMode = TracWysiwyg.getEditorMode(); 201 textareaModeElem = document.getElementById("editor-textarea-1"); 202 wysiwygModeElem = document.getElementById("editor-wysiwyg-1"); 203 204 if (editorMode != "textarea" && textareaModeElem) { 205 textareaModeElem.click(); 206 } 207 } 208 222 223 if (editorMode != "textarea") { 224 for (var index = 0; index < txtareaModeElemArray.length; index++) { 225 var txtareaModeElem = txtareaModeElemArray[index]; 226 if (txtareaModeElem) { 227 txtareaModeElem.click(); 228 } 229 } 230 } 231 } 232 233 // apply template 209 234 descElem.value = templateValue; 210 235 … … 212 237 switch (editorMode) { 213 238 case "textarea": 214 if (textareaModeElem) { 215 textareaModeElem.click(); 239 for (var index = 0; index < txtareaModeElemArray.length; index++) { 240 var txtareaModeElem = txtareaModeElemArray[index]; 241 if (txtareaModeElem) { 242 txtareaModeElem.click(); 243 } 216 244 } 217 245 break; 218 246 case "wysiwyg": 219 if (wysiwygModeElem) { 220 wysiwygModeElem.click(); 247 for (var index = 0; index < wysiwygModeElemArray.length; index++) { 248 var wysiwygModeElem = wysiwygModeElemArray[index]; 249 if (wysiwygModeElem) { 250 wysiwygModeElem.click(); 251 } 221 252 } 222 253 break; … … 298 329 for (var index = 0; index < inputElemArray.length; index++) { 299 330 var inputType = inputElemArray[index].type; 300 if (inputType.match("(text)|(checkbox)|(radio)|(file)")) { 331 var elemName = inputElemArray[index].name; 332 333 // include input fields. 334 // exclude TracWysiwygPlugin fields. 335 if (inputType.match("(text)|(checkbox)|(radio)|(file)") 336 && elemName.indexOf(this.WYSISYG_EDITOR_PREFIX) != 0) { 301 337 propArray.push(inputElemArray[index]); 302 338 } … … 330 366 331 367 /** 332 * Initialize TicketTemplate.368 * Set element Id. 333 369 * 334 370 * @param typeId The ticket type element id. 335 371 * @param descId The ticket description element id. 336 372 */ 337 TicketTemplate.initialize = function(baseUrl, typeId, descId) { 338 var ticketTemplateObj = new TicketTemplate(baseUrl, typeId, descId); 373 TicketTemplate.prototype.setElementId = function(typeId, descId) { 374 this.typeId = typeId; 375 this.descId = descId; 376 } 377 378 /** 379 * Apply the description on load page. 380 * 381 * @param readyDescription if true, apply the description on load 382 */ 383 TicketTemplate.prototype.setReadyDescription = function(readyDescription) { 384 this.readyDescription = readyDescription; 385 } 386 387 /** 388 * Apply the custom fields on load page. 389 * 390 * @param readyCustomfields if true, apply the custom fields on load 391 */ 392 TicketTemplate.prototype.setReadyCustomfields = function(readyCustomfields) { 393 this.readyCustomfields = readyCustomfields; 394 } 395 396 /** 397 * Initialize TicketTemplate as static. 398 * 399 * @param baseUrl The base URL of the ajax request. 400 */ 401 TicketTemplate.setUp = function(baseUrl) { 402 var ticketTemplateObj = new TicketTemplate(baseUrl); 403 ticketTemplateObj.initialize(); 339 404 }; ticketextplugin/0.11/ticketext/template_admin.py
r4531 r4910 30 30 if req.perm.has_permission('TRAC_ADMIN') and filename.startswith('template_admin'): 31 31 script = '\n<script type="text/javascript">'\ 32 + 'TicketTemplate. initialize(\'' + req.base_path + '\');'\32 + 'TicketTemplate.setUp(\'' + req.base_path + '\');'\ 33 33 + '</script>\n' 34 34 return stream | Transformer('//div[@id="footer"]').before(MarkupTemplate(script).generate()) ticketextplugin/0.11/ticketext/template.py
r4457 r4910 32 32 # IRequestFilter method 33 33 def post_process_request(self, req, template, data, content_type): 34 if template == 'ticket.html' and req.path_info == '/newticket':34 if template == 'ticket.html': 35 35 add_script(req, 'ticketext/ticketext.js') 36 36 add_stylesheet(req, 'ticketext/ticketext.css') … … 41 41 # ITemplateStreamFilter method 42 42 def filter_stream(self, req, method, filename, stream, data): 43 if filename == 'ticket.html' and req.path_info == '/newticket': 44 script = '\n<script type="text/javascript">'\ 45 + 'TicketTemplate.initialize(\'' + req.base_path + '\', \'field-type\', \'field-description\');'\ 43 if filename == 'ticket.html': 44 readyDescription = False 45 46 if req.path_info == '/newticket' and 'preview' not in req.args: 47 readyDescription = True 48 49 script = '\n<script type="text/javascript">\n'\ 50 + 'var tikectTemplate = new TicketTemplate(\'' + req.base_path + '\');\n'\ 51 + 'tikectTemplate.setElementId(\'field-type\', \'field-description\');\n'\ 52 + 'tikectTemplate.setReadyDescription(' + str(readyDescription).lower() + ');\n'\ 53 + 'tikectTemplate.initialize();\n'\ 46 54 + '</script>\n' 55 47 56 return stream | Transformer('//div[@id="footer"]').before(MarkupTemplate(script).generate()) 48 57 ticketextplugin/0.11/ticketext/templates/template_admin.html
r4453 r4910 5 5 xmlns:xi="http://www.w3.org/2001/XInclude" 6 6 xmlns:py="http://genshi.edgewall.org/" 7 lang=" ja" xml:lang="ja">7 lang="en" xml:lang="en"> 8 8 <xi:include href="admin.html" /> 9 9
