2022-10-04 19:32:49 +03:00
|
|
|
import Component from '@glimmer/component';
|
|
|
|
import {action} from '@ember/object';
|
|
|
|
|
|
|
|
export default class GhTwitterUrlInput extends Component {
|
|
|
|
get value() {
|
|
|
|
const {model, modelProperty, scratchValue} = this.args;
|
2022-10-07 16:23:21 +03:00
|
|
|
return scratchValue || model[modelProperty];
|
2022-10-04 19:32:49 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
@action
|
|
|
|
setScratchValue(event) {
|
|
|
|
this.args.setScratchValue?.(event.target.value);
|
|
|
|
}
|
|
|
|
|
|
|
|
@action
|
|
|
|
setTwitterUrl(event) {
|
|
|
|
const {model, modelProperty} = this.args;
|
|
|
|
|
|
|
|
const newUrl = event.target.value;
|
|
|
|
|
|
|
|
// reset errors and validation
|
|
|
|
model.errors.remove(modelProperty);
|
|
|
|
model.hasValidated.removeObject(modelProperty);
|
|
|
|
|
|
|
|
if (!newUrl) {
|
|
|
|
// Clear out the Twitter url
|
2022-10-07 16:23:21 +03:00
|
|
|
model[modelProperty] = '';
|
2022-10-04 19:32:49 +03:00
|
|
|
this.args.setScratchValue?.(null);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (newUrl.match(/(?:twitter\.com\/)(\S+)/) || newUrl.match(/([a-z\d.]+)/i)) {
|
|
|
|
let username = [];
|
|
|
|
|
|
|
|
if (newUrl.match(/(?:twitter\.com\/)(\S+)/)) {
|
|
|
|
[, username] = newUrl.match(/(?:twitter\.com\/)(\S+)/);
|
|
|
|
} else {
|
|
|
|
[username] = newUrl.match(/([^/]+)\/?$/mi);
|
|
|
|
}
|
|
|
|
|
|
|
|
// check if username starts with http or www and show error if so
|
|
|
|
if (username.match(/^(http|www)|(\/)/) || !username.match(/^[a-z\d._]{1,15}$/mi)) {
|
|
|
|
const message = !username.match(/^[a-z\d._]{1,15}$/mi)
|
|
|
|
? 'Your Username is not a valid Twitter Username'
|
|
|
|
: 'The URL must be in a format like https://twitter.com/yourUsername';
|
|
|
|
|
|
|
|
model.errors.add(modelProperty, message);
|
|
|
|
model.hasValidated.pushObject(modelProperty);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2022-10-07 16:23:21 +03:00
|
|
|
model[modelProperty] = `https://twitter.com/${username}`;
|
2022-10-04 19:32:49 +03:00
|
|
|
this.args.setScratchValue?.(null);
|
|
|
|
|
|
|
|
model.hasValidated.pushObject(modelProperty);
|
|
|
|
} else {
|
|
|
|
const message = 'The URL must be in a format like https://twitter.com/yourUsername';
|
|
|
|
model.errors.add(modelProperty, message);
|
|
|
|
model.hasValidated.pushObject(modelProperty);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|