1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-19 13:19:43 +02:00

Improve JS slugify process

To handle non-recognized charsets.
This commit is contained in:
sauls8t 2018-03-30 11:27:25 +01:00
parent 1944690540
commit 527b02e8b3
4 changed files with 48 additions and 4 deletions

View file

@ -16,6 +16,8 @@ import (
"unicode" "unicode"
) )
// TODO" replace with https://github.com/mcmatts/slug
// MakeSlug creates a slug, suitable for use in a URL, from a string // MakeSlug creates a slug, suitable for use in a URL, from a string
func MakeSlug(str string) string { func MakeSlug(str string) string {
slg := strings.Map( slg := strings.Map(

View file

@ -13,8 +13,12 @@ package stringutil
import "testing" import "testing"
// go test github.com/documize/community/core/stringutil -run TestSlug
func TestSlug(t *testing.T) { func TestSlug(t *testing.T) {
st(t, "Hello World", "hello-world")
st(t, " Zip--up ", "zip-up") st(t, " Zip--up ", "zip-up")
st(t, "Общее", "obshee")
st(t, "哈威", "哈威")
} }
func st(t *testing.T, in, out string) { func st(t *testing.T, in, out string) {

View file

@ -12,8 +12,13 @@
// Make url friendly slug from specified text. // Make url friendly slug from specified text.
// Has to handle non-english character text "Общее" text! // Has to handle non-english character text "Общее" text!
function makeSlug(text) { function makeSlug(text) {
return slug(text, { mode: 'rfc3986', lower: true}); let s = slug(text, { mode: 'rfc3986', lower: true});
//return text.toLowerCase().replace(/[^\w ]+/g, '').replace(/ +/g, '-');
// If slug does not recognise characters (e.g. chinese)
// send back original characters.
if (s === '') s = text;
return s;
} }
function makeId(len) { function makeId(len) {

View file

@ -0,0 +1,33 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import stringUtil from 'documize/utils/string';
module('Unit | Utility | Slug', function (hooks) {
setupTest(hooks);
test('english slug', function (assert) {
let result = stringUtil.makeSlug('Hello Slug');
assert.equal(result, 'hello-slug', 'slug: ' + result);
});
test('cyrillic slug', function (assert) {
let result = stringUtil.makeSlug('Общее');
assert.equal(result, 'obshee', 'slug: ' + result);
});
test('chinese slug', function (assert) {
let result = stringUtil.makeSlug('哈威');
assert.equal(result, '哈威', 'slug: ' + result);
});
});