in og/og.go [165:204]
func (p *Parser) FromValues(ctx context.Context, env *rellenv.Env, values url.Values) (*Object, error) {
object := &Object{
context: ctx,
env: env,
static: p.Static,
}
for key, values := range values {
if strings.Contains(key, ":") {
for _, value := range values {
object.AddPair(key, value)
}
}
}
if object.shouldGenerate("og:url") {
copiedValues := copyValues(values)
copiedValues.Del("og:type")
copiedValues.Del("og:title")
url := url.URL{
Scheme: env.Scheme,
Host: env.Host,
Path: "/og/" + object.Type() + "/" + object.Title(),
RawQuery: sortedEncode(copiedValues),
}
object.AddPair("og:url", url.String())
}
ogType := object.Type()
isGlobalOGType := !strings.Contains(ogType, ":")
isOwnedOGType := strings.HasPrefix(ogType, rellenv.FbApp(ctx).Namespace()+":")
if object.shouldGenerate("fb:app_id") && (isGlobalOGType || isOwnedOGType) {
object.AddPair("fb:app_id", strconv.FormatUint(rellenv.FbApp(ctx).ID(), 10))
}
err := object.generateDefaults()
if err != nil {
return nil, err
}
return object, nil
}