Flatten threads: don't show reply button when appropriate

This CL also refactors the response interceptors to use the new
ThreadModel.

Fixed: twpowertools:160
Change-Id: I859e0fa1b8f5f4057bd66af3d167e4b21c6d12ed
diff --git a/src/models/StartupData.js b/src/models/StartupData.js
new file mode 100644
index 0000000..047c154
--- /dev/null
+++ b/src/models/StartupData.js
@@ -0,0 +1,41 @@
+import UserModel from './User.js';
+
+export default class StartupDataModel {
+  constructor(data) {
+    this.data = data ?? {};
+  }
+
+  static buildFromCCDOM() {
+    const startupData =
+        document.querySelector('html')?.getAttribute?.('data-startup');
+    if (!startupData) {
+      console.warn('Haven\'t found CC startup data.');
+      return null;
+    }
+
+    let startup;
+    try {
+      startup = JSON.parse(startupData);
+    } catch (error) {
+      console.warn('Haven\'t been able to parse CC startup data.');
+    }
+
+    return new StartupDataModel(startup);
+  }
+
+  getRawUser() {
+    return this.data[1]?.[1] ?? null;
+  }
+
+  getAuthUser() {
+    return this.data[2]?.[1] ?? '0';
+  }
+
+  getRawForumsInfo() {
+    return this.data[1]?.[2] ?? null;
+  }
+
+  getCurrentUserModel() {
+    return new UserModel(this.getRawUser(), this);
+  }
+}