npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

faf-ionic

v1.0.22

Published

Flikk Application Framework for Ionic projects

Downloads

10

Readme

#dev notes

the master copy is at fafadmin/src/providers/faf/ including this readme

best guess at the package is at fafpackage2, including:

  • dependencies and files and in package.json
  • tsconfig.json

TODO:

  • build script. THis should
    • tsc
    • up-issue version number
    • npm publish
  • resolve outdated packages
    • npm outdated
    • what version can i safely update to?
    • npm install --save ts-md5

demo project using the package is at fafpackageuser1

#Flikk Application Framework for Ionic projects

Use this in your ionic project to store and retrieve data from a cloud source

#Latest changes get now returns a FafRequest (with .items, just the items you have sent) log on token is saved in localStorage so if you refresh the app you stay logged in

#How to register as a FAF user and create a schema for your data Use the FafAdmin app to register your email and password Get a single-use token to register your schema

#How to use FAF in your project

Create an ionic project

ionic start myproject

cd myproject

npm install faf-ionic ionic-native ionic-storage --save ionic cordova platform add android ionic cordova plugin add cordova-plugin-file cordova-plugin-camera

EDIT APP.MODULE.TS in 4 places import { FafService } from 'faf-ionic/faf-service'; import { FafCache } from 'faf-ionic/faf-cache'; import { FafInterceptor } from 'faf-ionic/faf-interceptor'; import { FafImageComponent } from 'faf-ionic/faf-image-component'; import { HttpClientModule,HTTP_INTERCEPTORS } from '@angular/common/http'; import { IonicStorageModule } from '@ionic/storage';

declarations: [ FafImageComponent....

imports: [ ... IonicStorageModule.forRoot(), //new HttpClientModule ] providers: [ ... FafService, //these are new FafCache, //File, //Storage {provide: HTTP_INTERCEPTORS, useClass:FafInterceptor, multi:true}, ]

export class AppModule { constructor(public fafService:FafService){ //fafService.APIURL = 'http://faf.co.uk/'; //if you don't do this you will use the default service at https://faf.azurewebsites.net fafService.defaultSchema = 'MySuperNewApp'; //if you don't do this you will be using the default 'demo' schema ...

##To list cats in a page

//new import { FafService } from 'faf-ionic/faf-service'; import { FafRequest } from 'faf-ionic/faf-objects';

@IonicPage() @Component({ selector: 'page-cats-list', templateUrl: 'cats-list.html', }) export class CatsListPage { cats = []; page = 1; page_count = null; lastNewCat = 0; nameFilter = null;

constructor(public navCtrl: NavController, private fafService:FafService //new ...

editCat(cat){
  this.navCtrl.push(CatsEditPage,{cat:cat});    
}
addCat(){
  this.navCtrl.push(CatsEditPage,{cat:null});
}

refresh(){
  let params = new FafRequest();   
  params.table = 'cats';
  params.page = this.page;
  params.page_items = 10;

  if(this.nameFilter){
    params.filters = 'row.name.match(/' + this.nameFilter + '/gi)';
  }
  this.fafService.get(params).subscribe(
    (data:FafRequest)=>{
          this.cats = data.rows;
          this.page = data.page;
          this.page_count = data.page_count;
    },
    (err)=>{
      this.fafService.presentToast(err);
    }
  );

    
}

goToPage(delta:number){
  this.page += delta;
  if(!this.page){
    this.page = 1;
  }
  this.refresh();
}

ionViewDidLoad() {
  this.fafService.defaultSchema = "demo";
  this.refresh();
  console.log('ionViewDidLoad CatsListPage');
}

}

##To edit a new or existing cat

@IonicPage() @Component({ selector: 'page-cats-edit', templateUrl: 'cats-edit.html', }) export class CatsEditPage {

cat = null; originalCat = null;

constructor(public navCtrl: NavController, public navParams: NavParams, public fafService:FafService) { this.originalCat = navParams.get('cat'); if(!this.originalCat){ this.cat = {name:null, color:null}; }else{ this.cat = FafService.cloneObject(this.originalCat); } }

onSave(){ this.fafService.post("cats",[this.cat]).subscribe(data=>{ FafService.cloneObject(data[0],this.originalCat); this.navCtrl.pop(); }); }

ionViewDidLoad() { console.log('ionViewDidLoad CatsEditPage'); }

}

#How to log on to FAF

public register = function(){ this.fafService.presentRegisterDialog().subscribe(res=>{ this.fafService.presentToast('Thank you for registering'); },err=>{ this.fafService.presentToast('Sorry, faf could not register that account: ' + err); }); } public login = function(){ this.fafService.promptForLogin(); )

#How to select a file or take a picture with FAF

##mypage.html:

##mypage.ts:

declare var cordova: any;

@Component({ selector: 'page-home', templateUrl: 'home.html' }) export class HomePage { public image1:string;

constructor(public navCtrl: NavController, public fafService: FafService, public fafFileService:FafFileService, private camera:Camera, public file: File) {

} public onSelectFile(e){ let el:any = document.getElementById('home-file-input'); let savedPath:string; let ffm:FafFileMetadata = new FafFileMetadata(); ffm.fafFileUrl = ${this.fafService.defaultSchema}/cats/${FafService.newGuid()}; this.fafFileService.saveFile(el.files[0], ffm).subscribe((progress:string)=>{ //if(progress.url) savedPath = progress.url; //url is the part AFTER APIURL //if(progress.progress) this.fafService.presentToast(progress.progress.toString() + '%' ); },err=>{ console.log(err); },()=>{ this.fafService.presentToast("complete"); this.image1 = ffm.fafFileUrl; }); }

onTakePicture() { let me = this; let savedPath:string; if(typeof cordova == "undefined"){ this.fafService.presentToast("camera not available"); return; } if(cordova && this.camera){ const options: CameraOptions = { quality: 25, destinationType: this.camera.DestinationType.FILE_URI, sourceType: this.camera.PictureSourceType.CAMERA, encodingType: this.camera.EncodingType.JPEG, mediaType: this.camera.MediaType.PICTURE }

    this.camera.getPicture(options).then((imageData) => {
      let ffm:FafFileMetadata = new FafFileMetadata();
      ffm.fafFileUrl = `${this.fafService.defaultSchema}/cats/${FafService.newGuid()}`;


      this.fafFileService.uploadFileFromCameraUrl(imageData, ffm).subscribe((progress:FafFileProgress)=>{
        if(progress.url) savedPath = progress.url; //url is the part AFTER APIURL
        if(progress.progress) this.fafService.presentToast(progress.progress.toString() + '%' );      
      },err=>{
        console.log(err);
      },()=>{
        this.fafService.presentToast("complete");
        // this.image2 = `${this.fafService.APIURL}faf/file/${ffm.fafFileUrl}`;// + ' | secure';
        // console.log(this.image2);
        this.image1 = ffm.fafFileUrl;

      });

    }, (err) => {
      // Handle error
      console.log(err);
      this.fafService.presentToast("Could not take photo. Please try again.");
    });

}else{
  this.fafService.presentToast("Camera not available");
}

}