2016-06-30 13:21:47 +03:00
import RSVP from 'rsvp' ;
2017-10-30 12:38:01 +03:00
import Service , { inject as service } from '@ember/service' ;
2022-02-03 01:11:11 +03:00
import classic from 'ember-classic-decorator' ;
2022-11-10 16:43:15 +03:00
import { slugify } from '@tryghost/string' ;
2016-01-15 18:43:16 +03:00
2016-06-30 13:21:47 +03:00
const { resolve } = RSVP ;
2016-01-15 18:43:16 +03:00
2022-02-03 01:11:11 +03:00
@ classic
export default class SlugGeneratorService extends Service {
2022-02-03 22:04:43 +03:00
@ service ghostPaths ;
@ service ajax ;
2016-01-15 18:43:16 +03:00
generateSlug ( slugType , textToSlugify ) {
let url ;
if ( ! textToSlugify ) {
2016-01-19 16:03:27 +03:00
return resolve ( '' ) ;
2016-01-15 18:43:16 +03:00
}
2022-11-10 16:43:15 +03:00
// We already do a partial slugify at the client side to prevent issues with Pro returning a 404 page because of invalid (encoded) characters (a newline, %0A, for example)
url = this . get ( 'ghostPaths.url' ) . api ( 'slugs' , slugType , encodeURIComponent ( slugify ( textToSlugify ) ) ) ;
2016-01-15 18:43:16 +03:00
2019-03-06 16:53:54 +03:00
return this . ajax . request ( url ) . then ( ( response ) => {
2016-01-15 18:43:16 +03:00
let [ firstSlug ] = response . slugs ;
let { slug } = firstSlug ;
return slug ;
} ) ;
}
2022-02-03 01:11:11 +03:00
}