Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 473787 | Differences between
and this patch

Collapse All | Expand All

(-)a/bundles/org.eclipse.orion.client.editor/web/orion/editor/contentAssist.js (-21 / +57 lines)
Lines 383-389 define("orion/editor/contentAssist", [ //$NON-NLS-0$ Link Here
383
			
421
			
384
			if (this.pageMessage){
422
			if (this.pageMessage){
385
				allPromises = Deferred.when(allPromises, function(proposals){
423
				allPromises = Deferred.when(allPromises, function(proposals){
386
					self.pageMessage.close();					
424
					_self.pageMessage.close();
387
					var foundProposal = false;
425
					var foundProposal = false;
388
					if (proposals && proposals.length > 0){
426
					if (proposals && proposals.length > 0){
389
						for (var i=0; i<proposals.length; i++) {
427
						for (var i=0; i<proposals.length; i++) {
Lines 348-377 define("orion/editor/contentAssist", [ //$NON-NLS-0$ Link Here
348
			var indentation = line.substring(0, index);
348
			var indentation = line.substring(0, index);
349
			var options = textView.getOptions("tabSize", "expandTab"); //$NON-NLS-1$ //$NON-NLS-0$
349
			var options = textView.getOptions("tabSize", "expandTab"); //$NON-NLS-1$ //$NON-NLS-0$
350
			var tab = options.expandTab ? new Array(options.tabSize + 1).join(" ") : "\t"; //$NON-NLS-1$ //$NON-NLS-0$
350
			var tab = options.expandTab ? new Array(options.tabSize + 1).join(" ") : "\t"; //$NON-NLS-1$ //$NON-NLS-0$
351
			var params = {
351
			var lineDelimiter = model.getLineDelimiter();
352
				line: line,
352
			var text = model.getText();
353
				offset: mapOffset,
353
			// model.getText(this.getPrefixStart(model, mapOffset), mapOffset)
354
				prefix: model.getText(this.getPrefixStart(model, mapOffset), mapOffset),
354
			var _self = this;
355
				selection: sel,
356
				delimiter: model.getLineDelimiter(),
357
				tab: tab,
358
				indentation: indentation
359
			};
360
			var self = this;
361
			var promises = providerInfoArray.map(function(providerInfo) {
355
			var promises = providerInfoArray.map(function(providerInfo) {
362
				var provider = providerInfo.provider;
356
				var provider = providerInfo.provider;
357
				var computePrefixFunc = provider.computePrefix;
358
				if (computePrefixFunc) {
359
					var result = computePrefixFunc.apply(provider, [text, mapOffset]);
360
					return result.then(function(prefix) {
361
						var params = {
362
							line: line,
363
							offset: mapOffset,
364
							prefix: prefix,
365
							selection: sel,
366
							delimiter: lineDelimiter,
367
							tab: tab,
368
							indentation: indentation
369
						};
370
						var proposals;
371
						try {
372
							var func, promise;
373
							if ((func = provider.computeContentAssist)) {
374
								var ecProvider = _self.editorContextProvider, editorContext = ecProvider.getEditorContext();
375
								params = objects.mixin(params, ecProvider.getOptions());
376
								promise = func.apply(provider, [editorContext, params]);
377
							} else if ((func = provider.getProposals || provider.computeProposals)) {
378
								// old API
379
								promise = func.apply(provider, [model.getText(), mapOffset, params]);
380
							}
381
							proposals = _self.progress ? _self.progress.progress(promise, "Generating content assist proposal") : promise; //$NON-NLS-0$
382
						} catch (e) {
383
							return new Deferred().reject(e);
384
						}
385
						return Deferred.when(proposals);
386
					},
387
					function(err) {
388
						return new Deferred().reject(err);
389
					});
390
				}
391
				// no computePrefix function is defined for the provider. Use the default prefix
392
				var params = {
393
					line: line,
394
					offset: mapOffset,
395
					prefix: model.getText(_self.getPrefixStart(model, mapOffset), mapOffset),
396
					selection: sel,
397
					delimiter: lineDelimiter,
398
					tab: tab,
399
					indentation: indentation
400
				};
363
				var proposals;
401
				var proposals;
364
				try {
402
				try {
365
					var func, promise;
403
					var func, promise;
366
					if ((func = provider.computeContentAssist)) {
404
					if ((func = provider.computeContentAssist)) {
367
						var ecProvider = self.editorContextProvider, editorContext = ecProvider.getEditorContext();
405
						var ecProvider = _self.editorContextProvider, editorContext = ecProvider.getEditorContext();
368
						params = objects.mixin(params, ecProvider.getOptions());
406
						params = objects.mixin(params, ecProvider.getOptions());
369
						promise = func.apply(provider, [editorContext, params]);
407
						promise = func.apply(provider, [editorContext, params]);
370
					} else if ((func = provider.getProposals || provider.computeProposals)) {
408
					} else if ((func = provider.getProposals || provider.computeProposals)) {
371
						// old API
409
						// old API
372
						promise = func.apply(provider, [model.getText(), mapOffset, params]);
410
						promise = func.apply(provider, [model.getText(), mapOffset, params]);
373
					}
411
					}
374
					proposals = self.progress ? self.progress.progress(promise, "Generating content assist proposal") : promise; //$NON-NLS-0$
412
					proposals = _self.progress ? _self.progress.progress(promise, "Generating content assist proposal") : promise; //$NON-NLS-0$
375
				} catch (e) {
413
				} catch (e) {
376
					return new Deferred().reject(e);
414
					return new Deferred().reject(e);
377
				}
415
				}
Lines 394-406 define("orion/editor/contentAssist", [ //$NON-NLS-0$ Link Here
394
						}
432
						}
395
					}
433
					}
396
					if (!foundProposal){
434
					if (!foundProposal){
397
						self.pageMessage.setErrorMessage(messages["noProposals"]);
435
						_self.pageMessage.setErrorMessage(messages["noProposals"]);
398
					}
436
					}
399
					return proposals;
437
					return proposals;
400
				});
438
				});
401
				self.pageMessage.showWhile(allPromises, messages["computingProposals"]);
439
				this.pageMessage.showWhile(allPromises, messages["computingProposals"]);
402
			}
440
			}
403
			
404
			return allPromises;
441
			return allPromises;
405
		},
442
		},
406
443
Lines 441-466 define("orion/editor/contentAssist", [ //$NON-NLS-0$ Link Here
441
									return false; // unknown format
478
									return false; // unknown format
442
								}
479
								}
443
			
480
			
444
								return (0 === proposalString.indexOf(prefixText + this._filterText));
481
								return 0 === proposalString.indexOf(prefixText + this._filterText);
445
								
482
								
446
							} else if (proposal.name || proposal.proposal) {
483
							} else if (proposal.name || proposal.proposal) {
447
								var activated = false;
484
								var activated = false;
448
								// try matching name
485
								// try matching name
449
								if (proposal.name) {
486
								if (proposal.name) {
450
									activated = (0 === proposal.name.indexOf(prefixText + this._filterText));	
487
									activated = 0 === proposal.name.indexOf(prefixText + this._filterText);	
451
								}
488
								}
452
								
489
								
453
								// try matching proposal text
490
								// try matching proposal text
454
								if (!activated && proposal.proposal) {
491
								if (!activated && proposal.proposal) {
455
									activated = (0 === proposal.proposal.indexOf(this._filterText));
492
									activated = 0 === proposal.proposal.indexOf(this._filterText);
456
								}
493
								}
457
								
494
								
458
								return activated;
495
								return activated;
459
							} else if (typeof proposal === "string") { //$NON-NLS-0$
496
							} else if (typeof proposal === "string") { //$NON-NLS-0$
460
								return 0 === proposal.indexOf(this._filterText);
497
								return 0 === proposal.indexOf(this._filterText);
461
							} else {
462
								return false;
463
							}
498
							}
499
							return false;
464
						}, this);
500
						}, this);
465
						
501
						
466
						if (includedProposals.length > 0) {
502
						if (includedProposals.length > 0) {
(-)a/bundles/org.eclipse.orion.client.webtools/web/webtools/htmlContentAssist.js (-17 / +22 lines)
Lines 153-158 define([ Link Here
153
	
153
	
154
	Objects.mixin(HTMLContentAssistProvider.prototype, {
154
	Objects.mixin(HTMLContentAssistProvider.prototype, {
155
		/**
155
		/**
156
		 * @private
157
		 */
158
		_getPrefixStart: function(text, end) {
159
			var index = end;
160
			while (index > 0) {
161
				var char = text.substring(index - 1, index);
162
				if (/[A-Za-z0-9_-]/.test(char)) {
163
					index--;
164
				} else {
165
					break;
166
				}
167
			}
168
			return index;
169
		},
170
		/**
171
		 * @callback 
172
		 */
173
		computePrefix(text, offset) {
174
			return text.substring(this._getPrefixStart(text, offset), offset);
175
		},
176
		/**
156
		 * @callback 
177
		 * @callback 
157
		 */
178
		 */
158
		computeContentAssist: function(editorContext, params) {
179
		computeContentAssist: function(editorContext, params) {
Lines 468-490 define([ Link Here
468
			var index = params.offset - prefix.length - 1;
489
			var index = params.offset - prefix.length - 1;
469
			if (index > 0 && index < source.length) {
490
			if (index > 0 && index < source.length) {
470
				var precedingChar = source.charAt(index);
491
				var precedingChar = source.charAt(index);
471
				if (precedingChar === '-') {
492
				if (precedingChar === '=' && prefix.length === 0 && (index - 1) > 0) {
472
					index--;
473
					if (index !== 0) {
474
						// rebuild a prefix based on what characters (letter only) are before the '-'
475
						precedingChar = source.charAt(index);
476
						var currentPrefix = "-" + prefix;
477
						loop: while (index > 0 && /[A-Za-z0-9_-]/.test(precedingChar)) {
478
							index--;
479
							currentPrefix = precedingChar + currentPrefix;
480
							if (index === 0) {
481
								break loop;
482
							}
483
							precedingChar = source.charAt(index);
484
						}
485
						params.prefix = currentPrefix;
486
					}
487
				} else if (precedingChar === '=' && prefix.length === 0 && (index - 1) > 0) {
488
					precedingChar = source.charAt(index - 1);
493
					precedingChar = source.charAt(index - 1);
489
					if (/[A-Za-z0-9_]/.test(precedingChar)) {
494
					if (/[A-Za-z0-9_]/.test(precedingChar)) {
490
						proposals.push(this.makeComputedProposal("\"\"",  Messages['addQuotesToAttributes'], " - \"\"", null, prefix)); //$NON-NLS-1$ //$NON-NLS-2$
495
						proposals.push(this.makeComputedProposal("\"\"",  Messages['addQuotesToAttributes'], " - \"\"", null, prefix)); //$NON-NLS-1$ //$NON-NLS-2$

Return to bug 473787