code: func cleanAssetName(path, basePath, prependPath string) string {
  	var name string
  	path, basePath, prependPath = strings.TrimSpace(path), strings.TrimSpace(basePath), strings.TrimSpace(prependPath)
  	basePath, err := filepath.Abs(basePath)
  	if err != nil {
  		basePath = ""
  	}
  	apath, err := filepath.Abs(path)
  	if err == nil {
  		path = apath
  	}
  	if basePath == "" {
  		idx := strings.LastIndex(path, string(os.PathSeparator))
  		if idx != -1 {
  			idx = strings.LastIndex(path[:idx], string(os.PathSeparator))
  		}
  		name = path[idx+1:]
  	} else {
  		// Directory
  		name = strings.Replace(path, basePath, "", 1)
  		if name[0] == os.PathSeparator {
  			name = name[1:]
  		}
  	}
  	if prependPath != "" {
  		if prependPath[0] == os.PathSeparator {
  			prependPath = prependPath[1:]
  		}
  		prependPath = EnsureTrailingSlash(prependPath)
  	}
  	r := prependPath + name[:len(name)-len(filepath.Ext(name))]
  	return strings.Replace(r, string(os.PathSeparator), "/", -1)
  }
docs: // cleanAssetName returns an asset name from the parent dirname and
  // the file name without extension.
  // The combination
  //   path=/tmp/css/default.css
  //   basePath=/tmp/
  //   prependPath=new/
  // will return
  //   new/css/default