diff --git a/.gitignore b/.gitignore
index 0711527..96a6724 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,262 @@ testem.log
# System files
.DS_Store
Thumbs.db
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/usage.statistics.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# AWS User-specific
+.idea/**/aws.xml
+
+# Generated files
+.idea/**/contentModel.xml
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn. Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+cmake-build-*/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# SonarLint plugin
+.idea/sonarlint/
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+
+# Android studio 3.1+ serialized cache file
+.idea/caches/build_file_checksums.ser
+
+### Node template
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Snowpack dependency directory (https://snowpack.dev/)
+web_modules/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional stylelint cache
+.stylelintcache
+
+# Microbundle cache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variable files
+.env
+.env.development.local
+.env.test.local
+.env.production.local
+.env.local
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+.parcel-cache
+
+# Next.js build output
+.next
+out
+
+# Nuxt.js build / generate output
+.nuxt
+dist
+
+# Gatsby files
+.cache/
+# Comment in the public line in if your project uses Gatsby and not Next.js
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# public
+
+# vuepress build output
+.vuepress/dist
+
+# vuepress v2.x temp and cache directory
+.temp
+
+# Docusaurus cache and generated files
+.docusaurus
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TernJS port file
+.tern-port
+
+# Stores VSCode versions used for testing VSCode extensions
+.vscode-test
+
+# yarn v2
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.*
+
+### WebStorm template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+
+# AWS User-specific
+
+# Generated files
+
+# Sensitive or high-churn files
+
+# Gradle
+
+# Gradle and Maven with auto-import
+# When using Gradle or Maven with auto-import, you should exclude module files,
+# since they will be recreated, and may cause churn. Uncomment if using
+# auto-import.
+# .idea/artifacts
+# .idea/compiler.xml
+# .idea/jarRepositories.xml
+# .idea/modules.xml
+# .idea/*.iml
+# .idea/modules
+# *.iml
+# *.ipr
+
+# CMake
+
+# Mongo Explorer plugin
+
+# File-based project format
+
+# IntelliJ
+
+# mpeltonen/sbt-idea plugin
+
+# JIRA plugin
+
+# Cursive Clojure plugin
+
+# SonarLint plugin
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+
+# Editor-based Rest Client
+
+# Android studio 3.1+ serialized cache file
+
diff --git a/README.md b/README.md
index c92ea49..c2d211d 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,64 @@
-# SearchTest
+# Omni Search Dev Harness
-This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.6.
+![](/home/martin/dev/js/search-test/image.png)
-## Development server
-Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
+I have created a small test harness for a basic Omni Search box, it is not complete as it's a simple test harness to get the concept essentiall "down on paper".
-## Code scaffolding
+The options are specified in JSON contained within the `src/app/app.component.ts` file.
-Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
+The JSON is structured as an array of SearchFragments:
-## Build
+```json
-Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
+[
+ {
+ "mode" : {
+ "title" : "Project",
+ "accepted" : ".+",
+ "output" : "Project title {{$modifier}} {{$value}}",
+ "hint" : "Project title"
+ },
+ "modifiers" : [
+ {
+ "title" : "Is",
+ "accepted" : "is",
+ "output" : "IS",
+ "hint" : "Is Operator"
+ },
+ {
+ "title" : "Isn't",
+ "accepted" : "isn't",
+ "output" : "IS NOT",
+ "hint" : "Is Not Operator"
+ },
+ {
+ "title" : "Contains",
+ "accepted" : "contains",
+ "output" : "CONTAINS",
+ "hint" : "Contains Operator"
+ }
+ ]
-## Running unit tests
+ },
+]
-Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
-## Running end-to-end tests
+```
-Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
+Each fragment contains a single mode, which details what the mode should be. As for modifiers, that is an array so it can hold as many as required.
-## Further help
+If you look in `src/app/app.component.ts`, there is a commented out entry, if that is uncommented, it should add a fourth entry with four modifiers.
+
+Code wise, it is fairly simple, not much error checking or even testing as it's a simple harness to get a concept working.
+
+## Taking it forward
+
+If work were to continue with it, it would definitely need to be refined to look like the proper search bar.
+
+I would like to make the Omni Bar items be removable by clicking a cross button or something.
+
+The output for each item was planned to be a pseudo SQL like structure, but it really needs refinement, and probably multiple parts to make a coherent sql query.
+
+It also needs testing, which this has none of.
-To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
diff --git a/angular.json b/angular.json
index 168e81b..b8de5c5 100644
--- a/angular.json
+++ b/angular.json
@@ -35,7 +35,8 @@
"src/assets"
],
"styles": [
- "src/styles.css"
+ "src/styles.css",
+ "src/hammer.css"
],
"scripts": []
},
diff --git a/image.png b/image.png
new file mode 100644
index 0000000..0c6965a
Binary files /dev/null and b/image.png differ
diff --git a/notes.md b/notes.md
new file mode 100644
index 0000000..599a466
--- /dev/null
+++ b/notes.md
@@ -0,0 +1,37 @@
+# Development notes
+
+
+
+## Search Fragments
+
+| Item | Notes |
+|------|---------------------------------|
+| Mode | Project / Assignee / Status etc |
+ | Modifier | Is / is not etc |
+| Target | What to be searched for |
+| Operator? | And / or / Not ? Maybe to implement: Bob AND Stuart OR Status = Done |
+
+
+## Mode / Modifier Structure
+
+| Item | Notes |
+|---|---|
+| Title | Actual title of the mode: Project / Assignee etc |
+| Accepted | Regex to filter whats need. Datetime / Only allow certains words etc |
+| Output | The fragment builder text |
+| Hint | An alt text hint |
+
+> Output could be text, could be a string that can be formatted. Have to see which works
+> best
+
+
+## Modes
+
+- Project
+- Assignee
+- Creator
+- Status
+- Creation Date
+- Due Date
+- Tag
+- Contains matching text "*"
diff --git a/src/_models/mode.ts b/src/_models/mode.ts
new file mode 100644
index 0000000..e51f240
--- /dev/null
+++ b/src/_models/mode.ts
@@ -0,0 +1,9 @@
+export interface ModeItem {
+ title: string;
+ accepted: string;
+ output: string;
+ hint: string;
+
+}
+
+
diff --git a/src/_models/modifier.ts b/src/_models/modifier.ts
new file mode 100644
index 0000000..86ee96d
--- /dev/null
+++ b/src/_models/modifier.ts
@@ -0,0 +1,7 @@
+export interface ModifierItem {
+ title: string;
+ accepted: string;
+ output: string;
+ hint: string;
+
+}
diff --git a/src/_models/searchFragment.ts b/src/_models/searchFragment.ts
new file mode 100644
index 0000000..fe8dbb3
--- /dev/null
+++ b/src/_models/searchFragment.ts
@@ -0,0 +1,45 @@
+import { ModeItem} from "./mode";
+import {ModifierItem} from "./modifier";
+
+export interface SearchFragment {
+
+ mode: ModeItem;
+ modifiers: ModifierItem[];
+
+}
+
+export interface SolidSearchFragment {
+ mode: ModeItem;
+ modifier: ModifierItem;
+ searchTerm: string;
+}
+
+/*
+
+
+{
+ "mode" : {
+ "title" : "Project",
+ "accepted" : ".+",
+ "output" : "Project title {{$modifier}} {{$value}}",
+ "hint" : "Project title"
+ },
+ "modifiers" : [
+ {
+ "title" : "Is",
+ "accepted" : "is",
+ "output" : "IS",
+ "hint" : "Is Operator"
+ },
+ {
+ "title" : "Isn't",
+ "accepted" : "isn't",
+ "output" : "IS NOT",
+ "hint" : "Is Not Operator"
+ }
+ ]
+
+ }
+
+
+ */
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 36093e1..1c0d1d1 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -8,320 +8,12 @@
-
-