ng2-completer
Advanced tools
Comparing version 0.2.3 to 0.3.0
107
package.json
{ | ||
"name": "ng2-completer", | ||
"version": "0.2.3", | ||
"description": "ng2 autocomplete/typeahead component", | ||
"main": "bundles/ng2-completer.js", | ||
"scripts": { | ||
"test": "echo \"Error: no test specified\" && exit 1", | ||
"clean": "./node_modules/.bin/del bundles \"src/**/*.+(js|d.ts|js.map)\" \"demo/**/*.+(js|js.map)\"", | ||
"build:dev": "webpack --progress --color", | ||
"build:prod": "NODE_ENV=production webpack --progress --color", | ||
"build:demo:dev": "NG2_COMPLETER_DEMO=y webpack --progress --color", | ||
"build:demo:prod": "NG2_COMPLETER_DEMO=y NODE_ENV=production webpack --progress --color", | ||
"start": "NG2_COMPLETER_DEMO=y webpack-dev-server --progress", | ||
"deploy:gh-pages": "npm run build:demo:prod && ./node_modules/.bin/gh-pages -d bundles", | ||
"prepublish": "npm run clean && npm run build:prod && npm run build:dev", | ||
"postpublish": "npm run deploy:gh-pages" | ||
}, | ||
"keywords": [ | ||
"angular2", | ||
"autcomplete", | ||
"typeahead", | ||
"word completion", | ||
"ng2" | ||
], | ||
"author": "Ofer Herman <oferhe@gmail.com>", | ||
"bugs": { | ||
"url": "https://github.com/oferh/ng2-completer/issues" | ||
}, | ||
"license": "Apache-2.0", | ||
"typings": "./bundles/src/index.d.ts", | ||
"repository": "oferh/ng2-completer", | ||
"peerDependencies": { | ||
"@angular/common": "^2.0.1", | ||
"@angular/core": "^2.0.1", | ||
"@angular/forms": "^2.0.1", | ||
"@angular/http": "^2.0.1", | ||
"rxjs": "^5.0.0-beta.6" | ||
}, | ||
"devDependencies": { | ||
"@angular/common": "^2.0.1", | ||
"@angular/compiler": "^2.0.1", | ||
"@angular/compiler-cli": "^0.6.2", | ||
"@angular/core": "^2.0.1", | ||
"@angular/forms": "^2.0.1", | ||
"@angular/http": "^2.0.1", | ||
"@angular/material": "^2.0.0-alpha.9-3", | ||
"@angular/platform-browser": "^2.0.1", | ||
"@angular/platform-browser-dynamic": "^2.0.1", | ||
"@angular/platform-server": "^2.0.1", | ||
"@angular/router": "^3.0.0-rc.2", | ||
"@types/core-js": "^0.9.33", | ||
"@types/es6-collections": "^0.5.29", | ||
"@types/node": "^6.0.41", | ||
"@types/webpack": "^1.12.34", | ||
"angular2-template-loader": "^0.5.0", | ||
"awesome-typescript-loader": "^2.2.4", | ||
"compression-webpack-plugin": "^0.3.1", | ||
"copy-webpack-plugin": "^3.0.1", | ||
"core-js": "^2.4.1", | ||
"del-cli": "^0.2.0", | ||
"ejs": "^2.5.2", | ||
"gh-pages": "^0.11.0", | ||
"html-webpack-plugin": "^2.19.0", | ||
"json-loader": "^0.5.4", | ||
"object.assign": "^4.0.3", | ||
"raw-loader": "^0.5.1", | ||
"reflect-metadata": "^0.1.3", | ||
"run-sequence": "^1.2.2", | ||
"rxjs": "^5.0.0-beta.6", | ||
"ts-loader": "^0.8.1", | ||
"tslint": "^3.13.0", | ||
"typescript": "^2.0.2", | ||
"uglify-js": "^2.6.2", | ||
"unminified-webpack-plugin": "^1.1.1", | ||
"webpack": "^2.1.0-beta.25", | ||
"webpack-dev-server": "^2.1.0-beta.8", | ||
"webpack-node-externals": "^1.2.0", | ||
"zone.js": "^0.6.12" | ||
} | ||
"name": "ng2-completer", | ||
"version": "0.3.0", | ||
"description": "ng2 autocomplete/typeahead component", | ||
"main": "ng2-completer.umd.js", | ||
"keywords": [ | ||
"angular2", | ||
"autcomplete", | ||
"typeahead", | ||
"word completion", | ||
"ng2" | ||
], | ||
"author": "Ofer Herman <oferhe@gmail.com>", | ||
"bugs": { | ||
"url": "https://github.com/oferh/ng2-completer/issues" | ||
}, | ||
"license": "Apache-2.0", | ||
"typings": "index.d.ts", | ||
"repository": "oferh/ng2-completer", | ||
"dependencies": {}, | ||
"peerDependencies": { | ||
"@angular/common": "^2.2.2", | ||
"@angular/compiler": "^2.2.2", | ||
"@angular/core": "^2.2.2", | ||
"@angular/forms": "^2.2.2", | ||
"@angular/platform-browser": "^2.2.2", | ||
"@angular/platform-browser-dynamic": "^2.2.2", | ||
"rxjs": "5.0.0-beta.12" | ||
}, | ||
"module": "index.js" | ||
} |
@@ -24,4 +24,78 @@ "use strict"; | ||
selector: "ng2-completer", | ||
templateUrl: "./completer-cmp.html", | ||
styleUrls: ["./completer-cmp.css"], | ||
template: ` | ||
<div class="completer-holder" ctrCompleter> | ||
<input class="completer-input" ctrInput [(ngModel)]="searchStr" [attr.name]="inputName" [placeholder]="placeholder" [attr.maxlength]="maxChars" | ||
[tabindex]="fieldTabindex" [disabled]="disableInput" [clearSelected]="clearSelected" [overrideSuggested]="overrideSuggested" (blur)="onBlur()" | ||
autocomplete="off" autocorrect="off" autocapitalize="off" /> | ||
<div class="completer-dropdown-holder" *ctrList="dataService; minSearchLength: minSearchLength; pause: pause; autoMatch: autoMatch; let items = results; let searchActive = searching; let isInitialized = searchInitialized;"> | ||
<div class="completer-dropdown" ctrDropdown *ngIf="isInitialized"> | ||
<div *ngIf="searchActive && displaySearching" class="completer-searching">{{textSearching}}</div> | ||
<div *ngIf="!searchActive && (!items || items.length === 0)" class="completer-no-results">{{textNoResults}}</div> | ||
<div class="completer-row-wrapper" *ngFor="let item of items; let rowIndex=index"> | ||
<div class="completer-row" [ctrRow]="rowIndex" [dataItem]="item"> | ||
<div *ngIf="item.image || item.image === ''" class="completer-image-holder"> | ||
<img *ngIf="item.image != ''" src="{{item.image}}" class="completer-image" /> | ||
<div *ngIf="item.image === ''" class="completer-image-default"></div> | ||
</div> | ||
<div class="completer-item-text" [ngClass]="{'completer-item-text-image': item.image || item.image === '' }"> | ||
<completer-list-item class="completer-title" [text]="item.title" [matchClass]="matchClass" [searchStr]="searchStr" [type]="'title'"></completer-list-item> | ||
<completer-list-item *ngIf="item.description && item.description != ''" class="completer-description" [text]="item.description" | ||
[matchClass]="matchClass" [searchStr]="searchStr" [type]="'description'"> | ||
</completer-list-item> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
</div> | ||
`, | ||
styles: [` | ||
.completer-dropdown { | ||
border-color: #ececec; | ||
border-width: 1px; | ||
border-style: solid; | ||
border-radius: 2px; | ||
width: 250px; | ||
padding: 6px; | ||
cursor: pointer; | ||
z-index: 9999; | ||
position: absolute; | ||
margin-top: -6px; | ||
background-color: #ffffff; | ||
} | ||
.completer-row { | ||
padding: 5px; | ||
color: #000000; | ||
margin-bottom: 4px; | ||
clear: both; | ||
display: inline-block; | ||
width: 103%; | ||
} | ||
.completer-selected-row { | ||
background-color: lightblue; | ||
color: #ffffff; | ||
} | ||
.completer-description { | ||
font-size: 14px; | ||
} | ||
.completer-image-default { | ||
width: 16px; | ||
height: 16px; | ||
background-image: url("demo/res/img/default.png"); | ||
} | ||
.completer-image-holder { | ||
float: left; | ||
width: 10%; | ||
} | ||
.completer-item-text-image { | ||
float: right; | ||
width: 90%; | ||
} | ||
`], | ||
providers: [COMPLETER_CONTROL_VALUE_ACCESSOR] | ||
@@ -48,6 +122,7 @@ }) | ||
@ViewChild(CtrCompleter) private completer: CtrCompleter; | ||
@ViewChild(CtrCompleter) public completer: CtrCompleter; | ||
public searchStr = ""; | ||
private displaySearching = true; | ||
private searchStr = ""; | ||
private _onTouchedCallback: () => void = noop; | ||
@@ -54,0 +129,0 @@ private _onChangeCallback: (_: any) => void = noop; |
@@ -11,3 +11,7 @@ "use strict"; | ||
selector: "completer-list-item", | ||
templateUrl: "./completer-list-item-cmp.html" | ||
template: ` | ||
<span class="completer-list-item-holder" [ngClass]="{'completer-title': type === 'title', 'completer-description': type === 'description'}" > | ||
<span class="completer-list-item" *ngFor="let part of parts" [ngClass]="part.isMatch ? matchClass : null">{{part.text}}</span> | ||
</span> | ||
` | ||
}) | ||
@@ -20,3 +24,3 @@ export class CompleterListItemCmp implements OnInit { | ||
private parts: MatchPart[] = []; | ||
public parts: MatchPart[] = []; | ||
public ngOnInit() { | ||
@@ -23,0 +27,0 @@ let matchStr = this.text.toLowerCase(); |
import { Directive, Host, Input, OnInit, TemplateRef, ViewContainerRef } from "@angular/core"; | ||
import { Observable } from "rxjs/Observable"; | ||
import { Observable, Subscription } from "rxjs/Rx"; | ||
@@ -31,3 +31,3 @@ | ||
// private searching = false; | ||
private searchTimer: NodeJS.Timer = null; | ||
private searchTimer: Subscription = null; | ||
private ctx = new CtrListContext([], false, false); | ||
@@ -58,3 +58,3 @@ | ||
this.ctx.results = results; | ||
if (this.ctrListAutoMatch && results.length === 1 && | ||
if (this.ctrListAutoMatch && results.length === 1 && results[0].title && this.term && | ||
results[0].title.toLocaleLowerCase() === this.term.toLocaleLowerCase()) { | ||
@@ -72,7 +72,8 @@ // Do automatch | ||
// Clear selected value | ||
this.completer.onSelected(null); | ||
this.completer.clear(); | ||
} | ||
if (term && term.length >= this.ctrListMinSearchLength && this.term !== term) { | ||
if (this.searchTimer) { | ||
clearTimeout(this.searchTimer); | ||
this.searchTimer.unsubscribe(); | ||
this.searchTimer = null; | ||
} | ||
@@ -86,10 +87,5 @@ if (!this.ctx.searching) { | ||
this.searchTimer = setTimeout( | ||
() => { | ||
this.searchTimerComplete(term); | ||
}, | ||
this.ctrListPause | ||
); | ||
this.searchTimer = Observable.timer(this.ctrListPause).subscribe(() => { | ||
this.searchTimerComplete(term); | ||
}); | ||
} | ||
@@ -100,3 +96,4 @@ } | ||
if (this.searchTimer) { | ||
clearTimeout(this.searchTimer); | ||
this.searchTimer.unsubscribe(); | ||
this.searchTimer = null; | ||
} | ||
@@ -103,0 +100,0 @@ if (this.dataService) { |
@@ -28,3 +28,3 @@ import { NgModule } from "@angular/core"; | ||
CtrRow, | ||
CompleterCmp, | ||
CompleterCmp | ||
], | ||
@@ -31,0 +31,0 @@ exports: [ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
Found 1 instance in 1 package
0
90
3
230740
7
2342
1
0
1