diff --git a/app.py b/app.py
index 8d076f7..5296396 100644
--- a/app.py
+++ b/app.py
@@ -22,6 +22,7 @@ from controllers.dog.command_category import routes_dog_command_category
from controllers.dog.dog import routes_dog
from controllers.dog.dog_command_link import routes_dog_dog_command_link
from controllers.dog.home import routes_dog_home
+from controllers.dog.location import routes_dog_location
from controllers.core.home import routes_core_home
from controllers.legal.legal import routes_legal
from controllers.user.user import routes_user
diff --git a/business_objects/dog/location.py b/business_objects/dog/location.py
new file mode 100644
index 0000000..0a3a836
--- /dev/null
+++ b/business_objects/dog/location.py
@@ -0,0 +1,274 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: Business Objects
+Feature: Location Business Object
+"""
+
+# internal
+from business_objects.base import Base
+from business_objects.dog.location_category import Location_Category
+from business_objects.db_base import SQLAlchemy_ABC, Get_Many_Parameters_Base
+import lib.argument_validation as av
+from extensions import db
+from forms.dog.location import Filters_Location
+from forms.dog.location_category import Filters_Location_Category
+from helpers.helper_app import Helper_App
+# external
+from dataclasses import dataclass
+from typing import ClassVar
+
+
+class Location(SQLAlchemy_ABC, Base):
+ ATTR_ID_LOCATION: ClassVar[str] = 'id_location'
+ FLAG_LOCATION: ClassVar[str] = 'location'
+ FLAG_LOCATION_PARENT: ClassVar[str] = 'location_parent'
+ NAME_ATTR_OPTION_VALUE: ClassVar[str] = ATTR_ID_LOCATION
+ NAME_ATTR_OPTION_TEXT: ClassVar[str] = Base.FLAG_NAME
+
+ __tablename__ = 'DOG_Location'
+ __table_args__ = { 'extend_existing': True }
+
+ id_location = db.Column(db.Integer, primary_key=True)
+ id_location_category = db.Column(db.Integer)
+ name = db.Column(db.String(250))
+ hand_signal_default_description = db.Column(db.Text)
+ can_have_button = db.Column(db.Boolean)
+ notes = db.Column(db.Text)
+ active = db.Column(db.Boolean)
+ created_on = db.Column(db.DateTime)
+
+ def __init__(self):
+ self.id_location = 0
+ self.location_category = None
+ self.is_new = False
+ self.has_button = False
+ super().__init__()
+
+ @classmethod
+ def from_db_location(cls, query_row):
+ _m = f'{cls.__qualname__}.from_db_location'
+ location = cls()
+ location.id_location = query_row[0]
+ location.id_location_category = query_row[1]
+ location.name = query_row[2]
+ location.hand_signal_default_description = query_row[3]
+ location.can_have_button = av.input_bool(query_row[4], 'can_have_button', _m)
+ # location.has_button = av.input_bool(query_row[7], 'has_button', _m)
+ location.notes = query_row[5]
+ location.active = av.input_bool(query_row[6], 'active', _m)
+ # location.created_on = query_row[7]
+ # location.location_category = Location_Category.from_db_location(query_row)
+ return location
+
+ @classmethod
+ def from_db_dog_location_link(cls, query_row):
+ _m = f'{cls.__qualname__}.from_db_dog_location_link'
+ location = cls()
+ location.id_location = query_row[5]
+ location.id_location_category = query_row[3]
+ location.name = query_row[6]
+ # location.hand_signal_default_description = query_row[2]
+ location.can_have_button = av.input_bool(query_row[8], 'can_have_button', _m)
+ # location.has_button = av.input_bool(query_row[7], 'has_button', _m)
+ # location.notes = query_row[4]
+ location.active = True # av.input_bool(True, 'active', _m)
+ # location.created_on = query_row[7]
+ location.location_category = Location_Category.from_db_dog_location_link(query_row) # this is done in datastore get many method using category dictionary
+ return location
+
+ @classmethod
+ def from_json(cls, json):
+ _m = f'{cls.__qualname__}.from_json'
+ location = cls()
+ if json is None: return location
+ # Helper_App.console_log(f'{_m}\njson: {json}')
+ location.id_location = -1
+ location.id_location_category = json[Location_Category.ATTR_ID_LOCATION_CATEGORY]
+ location.name = json[cls.FLAG_NAME]
+ location.hand_signal_default_description = json[cls.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION]
+ location.can_have_button = json[cls.FLAG_CAN_HAVE_BUTTON]
+ location.notes = json[cls.FLAG_NOTES]
+ location.active = json[cls.FLAG_ACTIVE]
+ location.created_on = json.get(cls.FLAG_CREATED_ON, None)
+ # Helper_App.console_log(f'Location: {location}')
+ return location
+
+ def to_json(self):
+ as_json = {
+ **self.get_shared_json_attributes(self)
+ , self.ATTR_ID_LOCATION: self.id_location
+ , Location_Category.ATTR_ID_LOCATION_CATEGORY: self.id_location_category
+ , self.FLAG_NAME: self.name
+ , self.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION: self.hand_signal_default_description
+ , self.FLAG_CAN_HAVE_BUTTON: self.can_have_button
+ , self.FLAG_NOTES: self.notes
+ , self.FLAG_ACTIVE: self.active
+ , self.FLAG_CREATED_ON: self.created_on
+ }
+ # Helper_App.console_log(f'as_json: {as_json}')
+ return as_json
+
+ def __repr__(self):
+ return f'''
+{self.__class__.__name__}(
+ {self.FLAG_LOCATION}: {self.id_location}
+ {Location_Category.FLAG_LOCATION_CATEGORY}: {self.id_location_category}
+ {self.FLAG_NAME}: {self.name}
+ {self.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION}: {self.hand_signal_default_description}
+ {self.FLAG_CAN_HAVE_BUTTON}: {self.can_have_button}
+ {self.FLAG_NOTES}: {self.notes}
+ {self.FLAG_ACTIVE}: {self.active}
+ {self.FLAG_CREATED_ON}: {self.created_on}
+)
+ '''
+
+class Location_Temp(db.Model, Base):
+ __tablename__ = 'DOG_Location_Temp'
+ __table_args__ = { 'extend_existing': True }
+ id_temp = db.Column(db.Integer, primary_key=True)
+ id_location = db.Column(db.Integer)
+ id_location_category = db.Column(db.Integer)
+ name = db.Column(db.String(250))
+ hand_signal_default_description = db.Column(db.Text)
+ can_have_button = db.Column(db.Boolean)
+ notes = db.Column(db.Text)
+ active = db.Column(db.Boolean)
+ created_on = db.Column(db.DateTime)
+ guid: str = db.Column(db.String(36))
+
+ def __init__(self):
+ super().__init__()
+
+ @classmethod
+ def from_location(cls, location):
+ _m = 'Location_Temp.from_location'
+ temp = cls()
+ temp.id_location = location.id_location
+ temp.id_location_category = location.id_location_category
+ temp.name = location.name
+ temp.hand_signal_default_description = location.hand_signal_default_description
+ temp.can_have_button = location.can_have_button
+ temp.notes = location.notes
+ temp.active = location.active
+ temp.created_on = location.created_on
+ return temp
+
+
+class Parameters_Location(Get_Many_Parameters_Base):
+ get_all_location_category: bool
+ get_inactive_location_category: bool
+ ids_location_category: str
+ names_location_category: str
+ get_all_location: bool
+ get_inactive_location: bool
+ ids_location: str
+ names_location: str
+ hand_signal_default_descriptions_location: str
+ notes_location: str
+ require_all_id_search_filters_met: bool
+ require_any_id_search_filters_met: bool
+ require_all_non_id_search_filters_met: bool
+ require_any_non_id_search_filters_met: bool
+ output_location_categories: bool
+ output_locations: bool
+
+ @classmethod
+ def get_default(cls):
+ return cls(
+ get_all_location_category = True
+ , get_inactive_location_category = False
+ , ids_location_category = ''
+ , names_location_category = ''
+ , get_all_location = True
+ , get_inactive_location = False
+ , ids_location = ''
+ , names_location = ''
+ , hand_signal_default_descriptions_location = ''
+ , notes_location = ''
+ , require_all_id_search_filters_met = True
+ , require_any_id_search_filters_met = True
+ , require_all_non_id_search_filters_met = False
+ , require_any_non_id_search_filters_met = True
+ , output_location_categories = True
+ , output_locations = True
+ )
+
+ @classmethod
+ def from_json(cls, json):
+ return cls(
+ get_all_location_category = json.get('a_get_all_location_category', False)
+ , get_inactive_location_category = json.get('a_get_inactive_location_category', False)
+ , ids_location_category = json.get('a_ids_location_category', '')
+ , names_location_category = json.get('a_names_location_category', '')
+ , get_all_location = json.get('a_get_all_location', False)
+ , get_inactive_location = json.get('a_get_inactive_location', False)
+ , ids_location = json.get('a_ids_location', '')
+ , names_location = json.get('a_names_location', '')
+ , hand_signal_default_descriptions_location = json.get('a_hand_signal_default_descriptions_location', '')
+ , notes_location = json.get('a_notes_location', '')
+ , require_all_id_search_filters_met = json.get('a_require_all_id_search_filters_met', True)
+ , require_any_id_search_filters_met = json.get('a_require_any_id_search_filters_met', True)
+ , require_all_non_id_search_filters_met = json.get('a_require_all_non_id_search_filters_met', False)
+ , require_any_non_id_search_filters_met = json.get('a_require_any_non_id_search_filters_met', True)
+ , output_location_categories = json.get('a_output_location_categories', False)
+ , output_locations = json.get('a_output_locations', False)
+ )
+
+ @classmethod
+ def from_form_filters_location(cls, form):
+ av.val_instance(form, 'form', 'Parameters_Location.from_form_filters_location', Filters_Location)
+ has_filter_search_text = not (form.search.data == '' or form.search.data is None)
+ has_filter_location_category = not (has_filter_search_text or form.id_location_category.data == '0' or form.id_location_category.data == '' or form.id_location_category.data is None)
+ active_only = av.input_bool(form.active_only.data, "active", "Parameters_Location.from_form_filters_location")
+ filters = cls.get_default()
+ filters.get_all_location_category = not has_filter_location_category
+ filters.get_inactive_location_category = not active_only
+ filters.ids_location_category = form.id_location_category.data if has_filter_location_category else ''
+ filters.names_location_category = form.search.data if has_filter_search_text else ''
+ filters.get_all_location = True
+ filters.get_inactive_location = not active_only
+ filters.ids_location = ''
+ filters.names_location = form.search.data if has_filter_search_text else ''
+ return filters
+
+ @classmethod
+ def from_form_filters_location_category(cls, form):
+ av.val_instance(form, 'form', 'Parameters_Location.from_form_filters_location_category', Filters_Location_Category)
+ has_filter_search_text = not (form.search.data == '' or form.search.data is None)
+ active_only = av.input_bool(form.active_only.data, "active", "Parameters_Location.from_form_filters_location")
+ filters = cls.get_default()
+ filters.get_all_location_category = True
+ filters.get_inactive_location_category = not active_only
+ filters.ids_location_category = ''
+ filters.names_location_category = form.search.data if has_filter_search_text else ''
+ filters.get_all_location = False
+ filters.get_inactive_location = False
+ filters.ids_location = ''
+ filters.names_location = ''
+ filters.require_all_id_search_filters_met = False
+ filters.output_locations = False
+ return filters
+
+ def to_json(self):
+ return {
+ 'a_get_all_location_category': self.get_all_location_category
+ , 'a_get_inactive_location_category': self.get_inactive_location_category
+ , 'a_ids_location_category': self.ids_location_category
+ , 'a_names_location_category': self.names_location_category
+ , 'a_get_all_location': self.get_all_location
+ , 'a_get_inactive_location': self.get_inactive_location
+ , 'a_ids_location': self.ids_location
+ , 'a_names_location': self.names_location
+ , 'a_hand_signal_default_descriptions_location': self.hand_signal_default_descriptions_location
+ , 'a_notes_location': self.notes_location
+ , 'a_require_all_id_search_filters_met': self.require_all_id_search_filters_met
+ , 'a_require_any_id_search_filters_met': self.require_any_id_search_filters_met
+ , 'a_require_all_non_id_search_filters_met': self.require_all_non_id_search_filters_met
+ , 'a_require_any_non_id_search_filters_met': self.require_any_non_id_search_filters_met
+ , 'a_output_location_categories': self.output_location_categories
+ , 'a_output_locations': self.output_locations
+ }
+
diff --git a/controllers/dog/location.py b/controllers/dog/location.py
new file mode 100644
index 0000000..4e77f2d
--- /dev/null
+++ b/controllers/dog/location.py
@@ -0,0 +1,98 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: App Routing
+Feature: Dog - Command Routes
+
+Description:
+Contact Page Controller.
+"""
+
+# IMPORTS
+# internal
+from business_objects.api import API
+from business_objects.dog.command import Command
+from business_objects.dog.dog_command_link import Dog_Command_Link
+from datastores.datastore_dog import DataStore_Dog
+from forms.dog.command import Filters_Command
+from helpers.helper_app import Helper_App
+from models.model_view_dog_command import Model_View_Dog_Command
+from models.model_view_home import Model_View_Home
+import lib.argument_validation as av
+# external
+from flask import Flask, render_template, jsonify, request, render_template_string, send_from_directory, redirect, url_for, session, Blueprint, current_app, flash
+from flask_mail import Mail, Message
+from extensions import db, oauth, mail
+from urllib.parse import quote_plus, urlencode
+from authlib.integrations.flask_client import OAuth
+from authlib.integrations.base_client import OAuthError
+from urllib.parse import quote, urlparse, parse_qs
+import json
+import base64
+import hmac
+import hashlib
+import datetime
+from altcha import ChallengeOptions, create_challenge, verify_solution
+
+
+routes_dog_command = Blueprint('routes_dog_command', __name__)
+
+
+@routes_dog_command.route(Model_View_Dog_Command.HASH_PAGE_DOG_COMMANDS, methods=['GET'])
+def commands():
+ Helper_App.console_log('commands')
+ Helper_App.console_log(f'request_args: {request.args}')
+ try:
+ form_filters = Filters_Command.from_json(request.args)
+ except Exception as e:
+ Helper_App.console_log(f'Error: {e}')
+ form_filters = Filters_Command()
+ Helper_App.console_log(f'form_filters={form_filters}')
+ model = Model_View_Dog_Command(form_filters_old = form_filters)
+ if not model.is_user_logged_in:
+ return redirect(url_for('routes_core_home.home'))
+ Helper_App.console_log(f'form_filters={form_filters}')
+ return render_template('pages/dog/_commands.html', model = model)
+
+@routes_dog_command.route(Model_View_Dog_Command.HASH_SAVE_DOG_COMMAND, methods=['POST'])
+def save_command():
+ data = Helper_App.get_request_data(request)
+ try:
+ form_filters = Filters_Command.from_json(data[Model_View_Dog_Command.FLAG_FORM_FILTERS])
+ if not form_filters.validate_on_submit():
+ return jsonify({
+ Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE,
+ Model_View_Dog_Command.FLAG_MESSAGE: f'Filters form invalid.\n{form_filters.errors}'
+ })
+ model_return = Model_View_Dog_Command(form_filters_old=form_filters)
+ if not model_return.is_user_logged_in:
+ raise Exception('User not logged in')
+
+ commands = data[Model_View_Dog_Command.FLAG_COMMAND]
+ if len(commands) == 0:
+ return jsonify({
+ Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE,
+ Model_View_Dog_Command.FLAG_MESSAGE: f'No commands.'
+ })
+ objs_command = []
+ for command in commands:
+ objs_command.append(Command.from_json(command))
+ Helper_App.console_log(f'objs_command={objs_command}')
+ errors = DataStore_Dog.save_commands(data.get('comment', 'No comment'), objs_command)
+
+ if (len(errors) > 0):
+ return jsonify({
+ Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE,
+ Model_View_Dog_Command.FLAG_MESSAGE: f'Error saving commands.\n{model_return.convert_list_objects_to_json(errors)}'
+ })
+ return jsonify({
+ Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_SUCCESS,
+ Model_View_Dog_Command.FLAG_DATA: Model_View_Dog_Command.convert_list_objects_to_json(model_return.commands)
+ })
+ except Exception as e:
+ return jsonify({
+ Model_View_Dog_Command.FLAG_STATUS: Model_View_Dog_Command.FLAG_FAILURE,
+ Model_View_Dog_Command.FLAG_MESSAGE: f'Bad data received by controller.\n{e}'
+ })
\ No newline at end of file
diff --git a/datastores/datastore_dog.py b/datastores/datastore_dog.py
index 0423d47..b8146c3 100644
--- a/datastores/datastore_dog.py
+++ b/datastores/datastore_dog.py
@@ -17,6 +17,7 @@ from business_objects.dog.command import Command, Command_Temp
from business_objects.dog.command_category import Command_Category, Command_Category_Temp
from business_objects.dog.dog import Dog
from business_objects.dog.dog_command_link import Dog_Command_Link, Dog_Command_Link_Temp
+from business_objects.dog.location import Location
from business_objects.sql_error import SQL_Error
from datastores.datastore_base import DataStore_Base
from helpers.helper_app import Helper_App
@@ -72,6 +73,7 @@ class DataStore_Dog(DataStore_Base):
return dogs, errors
+
@classmethod
def get_many_command(cls, filters_command):
_m = f'{cls.__qualname__}.get_many_command'
@@ -124,6 +126,95 @@ class DataStore_Dog(DataStore_Base):
return command_categories, commands, errors
+ @classmethod
+ def save_command_categories(cls, comment, command_categories):
+ _m = f'{cls}.save_command_categories'
+ av.val_str(comment, 'comment', _m)
+
+ guid = Helper_DB_MySQL.create_guid_str()
+ now = datetime.now()
+ user = cls.get_user_session()
+
+ Helper_App.console_log(f'saving command categories: {command_categories}')
+
+ rows = []
+ for command_category in command_categories:
+ row = Command_Category_Temp.from_command_category(command_category)
+ row.guid = guid
+ rows.append(row)
+
+ cls.upload_bulk(Command_Category_Temp.__tablename__, rows, 1000)
+
+ Helper_App.console_log('Commands uploaded')
+
+ argument_dict_list = {
+ 'a_comment': comment,
+ 'a_guid': guid,
+ 'a_id_user': user.id_user,
+ 'a_debug': 0
+ }
+ result = cls.db_procedure_execute('p_dog_save_command_category', argument_dict_list)
+
+ Helper_App.console_log('Commands saved')
+
+ # Errors
+ cursor = result.cursor
+ cursor.nextset()
+ result_set_e = cursor.fetchall()
+ errors = []
+ if len(result_set_e) > 0:
+ errors = [SQL_Error.from_db_record(row) for row in result_set_e]
+ for error in errors:
+ Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
+
+ cls.db_cursor_clear(cursor)
+ return errors
+
+ @classmethod
+ def save_commands(cls, comment, commands):
+ _m = f'{cls}.save_commands'
+ av.val_str(comment, 'comment', _m)
+
+ guid = Helper_DB_MySQL.create_guid_str()
+ now = datetime.now()
+ user = cls.get_user_session()
+
+ Helper_App.console_log(f'saving commands: {commands}')
+
+ rows = []
+ for command in commands:
+ row = Command_Temp.from_command(command)
+ row.guid = guid
+ rows.append(row)
+
+ cls.upload_bulk(Command_Temp.__tablename__, rows, 1000)
+
+ Helper_App.console_log('Commands uploaded')
+
+ argument_dict_list = {
+ 'a_comment': comment,
+ 'a_guid': guid,
+ 'a_id_user': user.id_user,
+ 'a_debug': 0
+ }
+ result = cls.db_procedure_execute('p_dog_save_command', argument_dict_list)
+
+ Helper_App.console_log('Commands saved')
+
+ # Errors
+ cursor = result.cursor
+ cursor.nextset()
+ result_set_e = cursor.fetchall()
+ errors = []
+ if len(result_set_e) > 0:
+ errors = [SQL_Error.from_db_record(row) for row in result_set_e]
+ for error in errors:
+ Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
+
+ cls.db_cursor_clear(cursor)
+ return errors
+
+
@classmethod
def get_many_dog_command_link(cls, filters_dog_command_link):
_m = f'{cls.__qualname__}.get_many_dog_command_link'
@@ -205,94 +296,41 @@ class DataStore_Dog(DataStore_Base):
cls.db_cursor_clear(cursor)
return errors
+
@classmethod
- def save_commands(cls, comment, commands):
- _m = f'{cls}.save_commands'
- av.val_str(comment, 'comment', _m)
-
- guid = Helper_DB_MySQL.create_guid_str()
- now = datetime.now()
+ def get_many_location(cls, filters_location):
+ _m = f'{cls.__qualname__}.get_many_location'
user = cls.get_user_session()
-
- Helper_App.console_log(f'saving commands: {commands}')
-
- rows = []
- for command in commands:
- row = Command_Temp.from_command(command)
- row.guid = guid
- rows.append(row)
-
- cls.upload_bulk(Command_Temp.__tablename__, rows, 1000)
-
- Helper_App.console_log('Commands uploaded')
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0
+ argument_dict = {
+ 'a_id_user': user.id_user
+ , **filters_location.to_json()
+ , 'a_debug': 0
}
- result = cls.db_procedure_execute('p_dog_save_command', argument_dict_list)
-
- Helper_App.console_log('Commands saved')
-
- # Errors
+ Helper_App.console_log(f'argument_dict: {argument_dict}')
+ result = cls.db_procedure_execute('p_dog_get_many_location', argument_dict)
cursor = result.cursor
+
+ # Locations
+ result_set_1 = cursor.fetchall()
+ Helper_App.console_log(f'raw locations: {result_set_1}')
+ locations = []
+ location_indexes = {}
+ for row in result_set_1:
+ new_location = Location.from_db_location(row)
+ location_indexes[new_location.id_location] = len(locations)
+ locations.append(new_location)
+
+ # Errors
cursor.nextset()
result_set_e = cursor.fetchall()
+ Helper_App.console_log(f'raw errors: {result_set_e}')
errors = []
if len(result_set_e) > 0:
errors = [SQL_Error.from_db_record(row) for row in result_set_e]
for error in errors:
Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
- cls.db_cursor_clear(cursor)
- return errors
-
- @classmethod
- def save_command_categories(cls, comment, command_categories):
- _m = f'{cls}.save_command_categories'
- av.val_str(comment, 'comment', _m)
-
- guid = Helper_DB_MySQL.create_guid_str()
- now = datetime.now()
- user = cls.get_user_session()
-
- Helper_App.console_log(f'saving command categories: {command_categories}')
-
- rows = []
- for command_category in command_categories:
- row = Command_Category_Temp.from_command_category(command_category)
- row.guid = guid
- rows.append(row)
- cls.upload_bulk(Command_Category_Temp.__tablename__, rows, 1000)
-
- Helper_App.console_log('Commands uploaded')
-
- argument_dict_list = {
- 'a_comment': comment,
- 'a_guid': guid,
- 'a_id_user': user.id_user,
- 'a_debug': 0
- }
- result = cls.db_procedure_execute('p_dog_save_command_category', argument_dict_list)
-
- Helper_App.console_log('Commands saved')
-
- # Errors
- cursor = result.cursor
- cursor.nextset()
- result_set_e = cursor.fetchall()
- errors = []
- if len(result_set_e) > 0:
- errors = [SQL_Error.from_db_record(row) for row in result_set_e]
- for error in errors:
- Helper_App.console_log(f"Error [{error.code}]: {error.msg}")
-
cls.db_cursor_clear(cursor)
- return errors
-
-
+ return locations, errors
diff --git a/forms/dog/location.py b/forms/dog/location.py
new file mode 100644
index 0000000..d82ea5d
--- /dev/null
+++ b/forms/dog/location.py
@@ -0,0 +1,54 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: Backend
+Feature: Location Form
+
+Description:
+Defines Flask-WTF form for handling user input on Locations page.
+"""
+
+# IMPORTS
+# internal
+from business_objects.base import Base
+# from business_objects.dog.location import Location # Circular
+from helpers.helper_app import Helper_App
+# from models.model_view_store import Model_View_Store # circular
+# from models.model_view_base import Model_View_Base
+from forms.base import Form_Base
+import lib.argument_validation as av
+# external
+from flask import Flask, render_template, request, flash, redirect, url_for, current_app
+from flask_wtf import FlaskForm
+from wtforms import SelectField, BooleanField, StringField, SubmitField
+from wtforms.validators import DataRequired, Email, ValidationError
+import markupsafe
+from flask_wtf.recaptcha import RecaptchaField
+from abc import ABCMeta, abstractmethod
+import json
+
+class Filters_Location(Form_Base):
+ search = StringField(
+ 'Search'
+ )
+ active_only = BooleanField(
+ 'Active'
+ , default = True
+ )
+
+ @classmethod
+ def from_json(cls, json):
+ _m = f'{cls.__qualname__}.from_json'
+ Helper_App.console_log(f'{_m}\njson: {json}')
+ filters = cls()
+ filters.search.data = json[Base.FLAG_SEARCH]
+ filters.active_only.data = av.input_bool(json[Base.FLAG_ACTIVE_ONLY], Base.FLAG_ACTIVE_ONLY, f'{cls.__name__}.from_json')
+ return filters
+
+ def to_json(self):
+ return {
+ Base.FLAG_SEARCH: self.search.data
+ , Base.FLAG_ACTIVE_ONLY: self.active_only.data
+ }
diff --git a/models/model_view_base.py b/models/model_view_base.py
index f023c11..069feac 100644
--- a/models/model_view_base.py
+++ b/models/model_view_base.py
@@ -23,6 +23,7 @@ from business_objects.dog.command import Command
from business_objects.dog.command_category import Command_Category
from business_objects.dog.dog import Dog
from business_objects.dog.dog_command_link import Dog_Command_Link
+from business_objects.dog.location import Location
from datastores.datastore_base import DataStore_Base
from datastores.datastore_dog import DataStore_Dog
from datastores.datastore_user import DataStore_User
@@ -41,6 +42,7 @@ class Model_View_Base(BaseModel, ABC):
ATTR_ID_COMMAND_CATEGORY: ClassVar[str] = Command_Category.ATTR_ID_COMMAND_CATEGORY
ATTR_ID_DOG: ClassVar[str] = Dog.ATTR_ID_DOG
ATTR_ID_DOG_COMMAND_LINK: ClassVar[str] = Dog_Command_Link.ATTR_ID_DOG_COMMAND_LINK
+ ATTR_ID_LOCATION: ClassVar[str] = Location.ATTR_ID_LOCATION
ATTR_TEXT_COLLAPSED: ClassVar[str] = 'textCollapsed'
ATTR_TEXT_EXPANDED: ClassVar[str] = 'textExpanded'
ATTR_VALUE_CURRENT: ClassVar[str] = 'current-value'
@@ -121,6 +123,8 @@ class Model_View_Base(BaseModel, ABC):
FLAG_IS_CHECKED: ClassVar[str] = 'is_checked'
FLAG_IS_COLLAPSED: ClassVar[str] = 'is_collapsed'
FLAG_LEFT_HAND_STUB: ClassVar[str] = 'lhs'
+ FLAG_LOCATION: ClassVar[str] = Location.FLAG_LOCATION
+ FLAG_LOCATION_PARENT: ClassVar[str] = Location.FLAG_LOCATION_PARENT
FLAG_LOGO: ClassVar[str] = 'logo'
FLAG_MESSAGE: ClassVar[str] = Command.FLAG_MESSAGE
FLAG_MODAL: ClassVar[str] = 'modal'
@@ -171,6 +175,7 @@ class Model_View_Base(BaseModel, ABC):
HASH_PAGE_DOG_DOG_COMMAND_LINKS: ClassVar[str] = '/dog/dog-command-links'
HASH_PAGE_DOG_DOGS: ClassVar[str] = '/dog/dogs'
HASH_PAGE_DOG_HOME: ClassVar[str] = '/dog/home'
+ HASH_PAGE_DOG_LOCATIONS: ClassVar[str] = '/dog/locations'
HASH_PAGE_ERROR_NO_PERMISSION: ClassVar[str] = '/error'
HASH_PAGE_HOME: ClassVar[str] = '/'
HASH_PAGE_LICENSE: ClassVar[str] = '/license'
@@ -181,6 +186,7 @@ class Model_View_Base(BaseModel, ABC):
HASH_SAVE_DOG_COMMAND: ClassVar[str] = '/dog/save-command'
HASH_SAVE_DOG_COMMAND_CATEGORY: ClassVar[str] = '/dog/save-command-category'
HASH_SAVE_DOG_DOG_COMMAND_LINK: ClassVar[str] = '/dog/save-dog-command-link'
+ HASH_SAVE_DOG_LOCATION: ClassVar[str] = '/dog/save-location'
ID_BUTTON_ADD: ClassVar[str] = 'buttonAdd'
ID_BUTTON_APPLY_FILTERS: ClassVar[str] = 'buttonApplyFilters'
ID_BUTTON_CANCEL: ClassVar[str] = 'buttonCancel'
diff --git a/models/model_view_dog_base.py b/models/model_view_dog_base.py
index e9c60b4..9d86732 100644
--- a/models/model_view_dog_base.py
+++ b/models/model_view_dog_base.py
@@ -4,10 +4,10 @@ Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: View Models
-Feature: Store Parent View Model
+Feature: Dog Parent View Model
Description:
-Parent data model for store views
+Parent data model for dog views
"""
diff --git a/models/model_view_dog_command.py b/models/model_view_dog_command.py
index f03465f..bef10b9 100644
--- a/models/model_view_dog_command.py
+++ b/models/model_view_dog_command.py
@@ -4,10 +4,10 @@ Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: View Models
-Feature: Store Permutations View Model
+Feature: Dog Command View Model
Description:
-Data model for store permutations view
+Data model for dog commands view
"""
# internal
diff --git a/models/model_view_dog_command_category.py b/models/model_view_dog_command_category.py
index 3ad6b6a..0165d97 100644
--- a/models/model_view_dog_command_category.py
+++ b/models/model_view_dog_command_category.py
@@ -4,10 +4,10 @@ Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: View Models
-Feature: Store Permutations View Model
+Feature: Dog Command Category View Model
Description:
-Data model for store permutations view
+Data model for dog command categories view
"""
# internal
diff --git a/models/model_view_dog_dog_command_link.py b/models/model_view_dog_dog_command_link.py
index b44c01e..a0ed19f 100644
--- a/models/model_view_dog_dog_command_link.py
+++ b/models/model_view_dog_dog_command_link.py
@@ -4,10 +4,10 @@ Author: Edward Middleton-Smith
Precision And Research Technology Systems Limited
Technology: View Models
-Feature: Store Permutations View Model
+Feature: Dog Dog Command Link View Model
Description:
-Data model for store permutations view
+Data model for dog dog command links view
"""
# internal
diff --git a/models/model_view_dog_location.py b/models/model_view_dog_location.py
new file mode 100644
index 0000000..31328cf
--- /dev/null
+++ b/models/model_view_dog_location.py
@@ -0,0 +1,60 @@
+"""
+Project: PARTS Website
+Author: Edward Middleton-Smith
+ Precision And Research Technology Systems Limited
+
+Technology: View Models
+Feature: Dog Locations View Model
+
+Description:
+Data model for dog locations view
+"""
+
+# internal
+from business_objects.dog.location import Location, Parameters_Location
+from datastores.datastore_dog import DataStore_Dog
+from models.model_view_dog_base import Model_View_Dog_Base
+from forms.dog.location import Filters_Location
+# from routes import bp_home
+from helpers.helper_app import Helper_App
+import lib.argument_validation as av
+
+# external
+from pydantic import BaseModel
+from typing import ClassVar
+
+class Model_View_Dog_Location(Model_View_Dog_Base):
+ FLAG_CAN_HAVE_BUTTON: ClassVar[str] = Location.FLAG_CAN_HAVE_BUTTON
+ FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION: ClassVar[str] = Location.FLAG_HAND_SIGNAL_DEFAULT_DESCRIPTION
+ filter_location_categories: list = None
+ locations: list = None
+ form_filters: Filters_Location = None
+ form_filters_old: Filters_Location
+
+ @property
+ def title(self):
+ return 'Location'
+
+ def __init__(self, form_filters_old, hash_page_current=Model_View_Dog_Base.HASH_PAGE_DOG_LOCATIONS):
+ _m = 'Model_View_Dog_Location.__init__'
+ Helper_App.console_log(f'{_m}\nstarting...')
+ super().__init__(hash_page_current=hash_page_current, form_filters_old=form_filters_old)
+ self.form_filters = form_filters_old
+ datastore = DataStore_Dog()
+
+ parameters_filter_location = Parameters_Location.get_default()
+ self.filter_location_categories, filter_locations, errors = datastore.get_many_location(parameters_filter_location)
+ self.form_filters.id_location_category.choices += [(str(location_category.id_location_category), location_category.name) for location_category in self.filter_location_categories]
+
+ Helper_App.console_log(f'Form filters: {self.form_filters}')
+ parameters_filter_location = Parameters_Location.from_form_filters_location(self.form_filters)
+ Helper_App.console_log(f'Query args: {parameters_filter_location}')
+ location_categories, self.locations, errors = datastore.get_many_location(parameters_filter_location)
+
+
+ """
+ @classmethod
+ def save_categories(cls, comment, list_categories):
+ _m = f'{cls.__name__}.save_categories'
+ return DataStore_Store_Product_Category().save_categories(comment, list_categories)
+ """
\ No newline at end of file
diff --git a/static/MySQL/00000_combined.sql b/static/MySQL/00000_combined.sql
index 2109f1c..88a46d6 100644
--- a/static/MySQL/00000_combined.sql
+++ b/static/MySQL/00000_combined.sql
@@ -1,25 +1,33 @@
-
+
USE demo;
-DROP PROCEDURE IF EXISTS demo.p_dog_save_command;
+DROP PROCEDURE IF EXISTS demo.p_dog_get_many_location;
DELIMITER //
-CREATE PROCEDURE demo.p_dog_save_command (
- IN a_comment VARCHAR(500),
- IN a_guid BINARY(36),
- IN a_id_user INT,
- IN a_debug BIT
+CREATE PROCEDURE demo.p_dog_get_many_location (
+ IN a_id_user INT
+ , IN a_get_all_location BIT
+ , IN a_get_inactive_location BIT
+ , IN a_ids_location TEXT
+ , IN a_names_location TEXT
+ , IN a_require_all_id_search_filters_met BIT
+ , IN a_require_any_id_search_filters_met BIT
+ , IN a_require_all_non_id_search_filters_met BIT
+ , IN a_require_any_non_id_search_filters_met BIT
+ , IN a_output_LOCATIONS BIT
+ , IN a_output_LOCATION_links BIT
+ , IN a_debug BIT
)
BEGIN
- DECLARE v_can_admin BIT;
- DECLARE v_can_create BIT;
- DECLARE v_code_type_error_bad_data VARCHAR(100);
- DECLARE v_id_access_level_admin INT;
- DECLARE v_id_access_level_edit INT;
- DECLARE v_id_change_set INT;
- DECLARE v_id_permission_dog_admin INT;
- DECLARE v_id_permission_dog_new INT;
+ DECLARE v_can_view BIT;
+ DECLARE v_code_type_error_bad_data VARCHAR(100);
+ DECLARE v_code_type_error_no_permission VARCHAR(100);
+ DECLARE v_guid BINARY(36);
+ DECLARE v_id_access_level_view INT;
+ DECLARE v_id_minimum INT;
+ DECLARE v_id_permission_dog_view INT;
DECLARE v_id_type_error_bad_data INT;
+ DECLARE v_id_type_error_no_permission INT;
DECLARE v_time_start TIMESTAMP(6);
DECLARE exit handler for SQLEXCEPTION
@@ -35,13 +43,13 @@ BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
, id_type INT NULL
- , code VARCHAR(100)
+ , code VARCHAR(100) NOT NULL
, msg TEXT NOT NULL
);
INSERT INTO tmp_Msg_Error (
id_type
- , code
+ , code
, msg
)
SELECT
@@ -51,7 +59,7 @@ BEGIN
FROM demo.CORE_Msg_Error_Type MET
WHERE MET.code = 'MYSQL_ERROR'
;
-
+
SELECT
t_ERROR.id_error
, t_ERROR.id_type
@@ -65,417 +73,96 @@ BEGIN
FROM tmp_Msg_Error t_ERROR
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
-
+
DROP TABLE IF EXISTS tmp_Msg_Error;
END;
-
+
SET v_time_start := CURRENT_TIMESTAMP(6);
+ SET v_guid := UUID();
SET v_code_type_error_bad_data := 'BAD_DATA';
+ SET v_code_type_error_no_permission := 'NO_PERMISSION';
SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
- SET v_id_permission_dog_admin := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_ADMIN' LIMIT 1);
- SET v_id_permission_dog_new := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_CREATE' LIMIT 1);
- SET v_id_access_level_admin := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'ADMIN' LIMIT 1);
- SET v_id_access_level_edit := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'EDIT' LIMIT 1);
+ SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM demo.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
+ SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM demo.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
+ SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM demo.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
- CALL demo.p_core_validate_guid ( a_guid );
-
- DROP TABLE IF EXISTS tmp_Command_Copy;
- DROP TABLE IF EXISTS tmp_Command;
-
- CREATE TEMPORARY TABLE tmp_Command (
- id_temp INT
- , id_command INT
- , id_command_category INT
- , name VARCHAR(250)
- , hand_signal_default_description TEXT
- , can_have_button BIT
- , notes TEXT
- , active BIT
- , is_new BIT
- , name_error VARCHAR(250)
-
- , name_command_category VARCHAR(250)
- );
-
- CREATE TEMPORARY TABLE tmp_Command_Copy (
- id_temp INT
- , id_command INT
- , id_command_category INT
- , name VARCHAR(250)
- , hand_signal_default_description TEXT
- , can_have_button BIT
- , notes TEXT
- , active BIT
- , is_new BIT
- , name_error VARCHAR(250)
-
- , name_command_category VARCHAR(250)
- );
-
- CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
- id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
- , id_type INT NULL
- , code VARCHAR(100)
- , msg TEXT NOT NULL
- );
-
-
- -- Get data from Temp table
- INSERT INTO tmp_Command (
- id_temp
- , id_command
- , id_command_category
- , name
- , hand_signal_default_description
- , can_have_button
- , notes
- , active
- , is_new
-
- , name_command_category
- )
- SELECT
- COMMAND_T.id_temp AS id_temp
- , COALESCE(
- COMMAND.id_command
- , COMMAND_T.id_command
- ) AS id_command
- , COALESCE(
- COMMAND_T.id_command_category
- , COMMAND_CATEGORY_NAME.id_command_category
- , COMMAND.id_command_category
- ) AS id_command_category
- , COALESCE(
- COMMAND_T.name
- , COMMAND.name
- ) AS name
- , COALESCE(
- COMMAND_T.hand_signal_default_description
- , COMMAND.hand_signal_default_description
- ) AS hand_signal_default_description
- , COALESCE(
- COMMAND_T.can_have_button
- , COMMAND.can_have_button
- ) AS can_have_button
- , COALESCE(
- COMMAND_T.notes
- , COMMAND.notes
- ) AS notes
- , COALESCE(
- COMMAND_T.active
- , COMMAND.active
- , 1
- ) AS active
- , CASE WHEN IFNULL(COMMAND_T.id_command, 0) < 1 THEN 1 ELSE 0 END AS is_new
- -- , CASE WHEN NOT ISNULL(COMMAND_T.id_command) THEN 1 ELSE 0 END AS does_have_valid_command_id
-
- , COMMAND_T.name_command_category AS name_command_category
- FROM demo.DOG_Command_Temp COMMAND_T
- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY_NAME
- ON COMMAND_T.name_command_category = COMMAND_CATEGORY_NAME.name
- LEFT JOIN demo.DOG_Command COMMAND
- ON COMMAND_T.id_command = COMMAND.id_command
- OR (
- (
- COMMAND_T.id_command_category = COMMAND.id_command_category
- OR COMMAND_CATEGORY_NAME.id_command_category = COMMAND.id_command_category
- )
- AND COMMAND_T.name = COMMAND.name
- AND (
- COMMAND.hand_signal_default_description IS NULL
- OR COMMAND_T.hand_signal_default_description <=> COMMAND.hand_signal_default_description
- )
- AND (
- COMMAND.notes IS NULL
- OR COMMAND_T.notes <=> COMMAND.notes
- )
- )
- WHERE COMMAND_T.guid = a_guid
- ;
-
- IF a_debug = 1 THEN
- SELECT 'Command_Temp records';
- SELECT * FROM tmp_Command;
- SELECT COUNT(*) FROM tmp_Command;
- END IF;
-
- -- Error names
- UPDATE tmp_Command t_COMMAND
- LEFT JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category
- LEFT JOIN demo.DOG_Command COMMAND ON t_COMMAND.id_command = COMMAND.id_command
- SET t_COMMAND.name_error = CONCAT(
- COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)')
- , ' - '
- , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)')
- )
- ;
-
- IF a_debug = 1 THEN
- SELECT 'After set name_error';
- SELECT * FROM tmp_Command;
- SELECT COUNT(*) FROM tmp_Command;
- END IF;
-
+ SET a_id_user := IFNULL(a_id_user, 0);
/*
- -- Find missing id_command_category by name_command_category
- UPDATE tmp_Command t_COMMAND
- INNER JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON t_COMMAND.name_command_category = COMMAND_CATEGORY.name
- SET t_COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category
- WHERE
- t_COMMAND.id_command_category IS NULL
- AND COMMAND_CATEGORY.id_command_category IS NOT NULL
- ;
-
- IF a_debug = 1 THEN
- SELECT 'After set missing id_command_category from name';
- SELECT * FROM tmp_Command;
- SELECT COUNT(*) FROM tmp_Command;
- END IF;
-
- -- Missing Command Ids
- UPDATE tmp_Command t_COMMAND
- LEFT JOIN demo.DOG_Command COMMAND
- ON t_COMMAND.id_command_category = COMMAND.id_command_category
- AND t_COMMAND.name = COMMAND.name
- SET
- t_COMMAND.id_command = COMMAND.id_command
- , t_COMMAND.is_new = 0
- WHERE
- IFNULL(t_COMMAND.id_command, 0) < 1
- AND NOT ISNULL(COMMAND.id_command)
- ;
-
- IF a_debug = 1 THEN
- SELECT 'After set missing id_command';
- SELECT * FROM tmp_Command;
- SELECT COUNT(*) FROM tmp_Command;
- END IF;
+ SET a_get_all_location := IFNULL(a_get_all_location, 0);
+ SET a_get_inactive_location := IFNULL(a_get_inactive_location, 0);
+ SET a_ids_location := TRIM(IFNULL(a_ids_location, ''));
+ SET a_names_location := TRIM(IFNULL(a_names_location, ''));
+ SET a_hand_signal_default_descriptions_location := TRIM(IFNULL(a_hand_signal_default_descriptions_location, ''));
+ SET a_notes_location := TRIM(IFNULL(a_notes_location, ''));
+ SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
+ SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
+ SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
+ SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
*/
+ SET a_output_LOCATIONS := IFNULL(a_output_LOCATIONS, 0);
+ SET a_output_LOCATION_links := IFNULL(a_output_LOCATION_links, 0);
+ SET a_debug := IFNULL(a_debug, 0);
- -- Validation
- -- Missing mandatory fields
- -- id_command_category
- IF EXISTS (SELECT * FROM tmp_Command t_COMMAND WHERE ISNULL(t_COMMAND.id_command_category) LIMIT 1) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('The following Command(s) do not have a Category: ', GROUP_CONCAT(t_COMMAND.name_error SEPARATOR ', ')) AS msg
- FROM tmp_Command t_COMMAND
- WHERE ISNULL(t_COMMAND.id_command_category)
- ;
- END IF;
- -- name
- IF EXISTS (SELECT * FROM tmp_Command t_COMMAND WHERE ISNULL(t_COMMAND.name) LIMIT 1) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('The following Command(s) do not have a Name: ', GROUP_CONCAT(t_COMMAND.name_error SEPARATOR ', ')) AS msg
- FROM tmp_Command t_COMMAND
- WHERE ISNULL(t_COMMAND.name)
- ;
- END IF;
- -- can_have_button
- IF EXISTS (SELECT * FROM tmp_Command t_COMMAND WHERE ISNULL(t_COMMAND.can_have_button) LIMIT 1) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('The following Command(s) do not have a Can-Have-Button: ', GROUP_CONCAT(t_COMMAND.name_error SEPARATOR ', ')) AS msg
- FROM tmp_Command t_COMMAND
- WHERE ISNULL(t_COMMAND.can_have_button)
- ;
- END IF;
-
- -- Duplicates
- INSERT INTO tmp_Command_Copy (
- id_temp
- , id_command
- , id_command_category
- , name
- , hand_signal_default_description
- , notes
- , active
- , is_new
- , name_error
-
- , name_command_category
- )
- SELECT
- t_COMMAND.id_temp
- , t_COMMAND.id_command
- , t_COMMAND.id_command_category
- , t_COMMAND.name
- , t_COMMAND.hand_signal_default_description
- , t_COMMAND.notes
- , t_COMMAND.active
- , t_COMMAND.is_new
- , t_COMMAND.name_error
-
- , t_COMMAND.name_command_category
- FROM tmp_Command t_COMMAND
- ;
-
- IF a_debug = 1 THEN
- SELECT COUNT(*) AS Count_Temp_Link FROM tmp_Command;
- SELECT COUNT(*) AS Count_Temp_Link_Copy FROM tmp_Command_Copy;
-
- WITH
- Combined_Commands AS (
- SELECT
- COMMAND.id_command
- , COMMAND.id_command_category
- , COMMAND.name
- , IFNULL(
- t_COMMAND_COPY.name_error
- , CONCAT(
- COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)')
- , ' - '
- , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)')
- )
- ) AS name_error
- FROM demo.DOG_Command COMMAND
- LEFT JOIN tmp_Command_Copy t_COMMAND_COPY
- ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category
- AND COMMAND.name = t_COMMAND_COPY.name
- INNER JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category
- WHERE t_COMMAND_COPY.is_new = 1
- UNION
- SELECT
- t_COMMAND.id_command
- , t_COMMAND.id_command_category
- , t_COMMAND.name
- , t_COMMAND.name_error
- FROM tmp_Command t_COMMAND
- )
- , Duplicate_Command_Row_Numbers AS (
- SELECT
- COMBINED_COMMAND.id_command
- , COMBINED_COMMAND.id_command_category
- , COMBINED_COMMAND.name
- , COMBINED_COMMAND.name_error
- , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_link_as_duplicate
- FROM Combined_Commands COMBINED_COMMAND
- )
- SELECT *
- FROM Duplicate_Command_Row_Numbers;
- END IF;
-
- IF EXISTS (
- WITH
- Combined_Commands AS (
- SELECT
- COMMAND.id_command
- , COMMAND.id_command_category
- , COMMAND.name
- , IFNULL(
- t_COMMAND_COPY.name_error
- , CONCAT(
- COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)')
- , ' - '
- , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)')
- )
- ) AS name_error
- FROM demo.DOG_Command COMMAND
- LEFT JOIN tmp_Command_Copy t_COMMAND_COPY
- ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category
- AND COMMAND.name = t_COMMAND_COPY.name
- INNER JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category
- WHERE t_COMMAND_COPY.is_new = 1
- UNION
- SELECT
- t_COMMAND.id_command
- , t_COMMAND.id_command_category
- , t_COMMAND.name
- , t_COMMAND.name_error
- FROM tmp_Command t_COMMAND
- )
- , Duplicate_Command_Row_Numbers AS (
- SELECT
- COMBINED_COMMAND.id_command
- , COMBINED_COMMAND.id_command_category
- , COMBINED_COMMAND.name
- , COMBINED_COMMAND.name_error
- , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_link_as_duplicate
- FROM Combined_Commands COMBINED_COMMAND
- )
- SELECT *
- FROM Duplicate_Link_Row_Numbers DUPLICATE_LINK
- WHERE DUPLICATE_LINK.index_link_as_duplicate > 1
- GROUP BY DUPLICATE_LINK.id_dog, DUPLICATE_LINK.id_command
- ) THEN
- INSERT INTO tmp_Msg_Error (
- id_type
- , code
- , msg
- )
- WITH
- Combined_Commands AS (
- SELECT
- COMMAND.id_command
- , COMMAND.id_command_category
- , COMMAND.name
- , IFNULL(
- t_COMMAND_COPY.name_error
- , CONCAT(
- COALESCE(COMMAND_CATEGORY.name, t_COMMAND.id_command_category, '(No Command Category)')
- , ' - '
- , COALESCE(COMMAND.name, t_COMMAND.id_command, '(No Command)')
- )
- ) AS name_error
- FROM demo.DOG_Command COMMAND
- LEFT JOIN tmp_Command_Copy t_COMMAND_COPY
- ON COMMAND.id_command_category = t_COMMAND_COPY.id_command_category
- AND COMMAND.name = t_COMMAND_COPY.name
- INNER JOIN demo.DOG_Command_Category COMMAND_CATEGORY ON COMMAND.id_command_category = COMMAND_CATEGORY.id_command_category
- WHERE t_COMMAND_COPY.is_new = 1
- UNION
- SELECT
- t_COMMAND.id_command
- , t_COMMAND.id_command_category
- , t_COMMAND.name
- , t_COMMAND.name_error
- FROM tmp_Command t_COMMAND
- )
- , Duplicate_Command_Row_Numbers AS (
- SELECT
- COMBINED_COMMAND.id_command
- , COMBINED_COMMAND.id_command_category
- , COMBINED_COMMAND.name
- , COMBINED_COMMAND.name_error
- , ROW_NUMBER() OVER (PARTITION BY COMBINED_COMMAND.id_command_category, COMBINED_COMMAND.name ORDER BY COMBINED_COMMAND.name_error ASC) AS index_link_as_duplicate
- FROM Combined_Commands COMBINED_COMMAND
- )
- SELECT
- v_id_type_error_bad_data
- , v_code_type_error_bad_data
- , CONCAT('Attempt to create duplicate or overwrite existing Commands on: ', GROUP_CONCAT(DUPLICATE_COMMAND.name_error SEPARATOR ', ')) AS msg
- FROM Duplicate_Command_Row_Numbers DUPLICATE_COMMAND
- WHERE DUPLICATE_COMMAND.index_link_as_duplicate > 1
- GROUP BY
- DUPLICATE_COMMAND.id_command_category
- , DUPLICATE_COMMAND.name
- ;
- END IF;
-
- -- Permissions
- -- Can Create
IF a_debug = 1 THEN
SELECT
- a_guid
+ a_id_user
+ , a_get_all_location
+ , a_get_inactive_location
+ , a_ids_location
+ , a_names_location
+ , a_require_all_id_search_filters_met
+ , a_require_any_id_search_filters_met
+ , a_require_all_non_id_search_filters_met
+ , a_require_any_non_id_search_filters_met
+ , a_output_LOCATIONS
+ , a_output_LOCATION_links
+ , a_debug
+ ;
+
+ SELECT
+ v_id_type_error_bad_data
+ , v_id_type_error_no_permission
+ , v_guid
+ , v_id_permission_dog_view
+ , v_time_start
+ ;
+ END IF;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location_Link;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location;
+
+ CREATE TEMPORARY TABLE tmp_Location (
+ id_location INT NOT NULL
+ , code VARCHAR(100)
+ , name VARCHAR(250)
+ , active BIT
+
+ , does_meet_id_filters BIT
+ , does_meet_non_id_filters BIT
+ );
+
+ CREATE TEMPORARY TABLE tmp_Location_Link (
+ id_link INT NOT NULL
+ , id_location_parent INT
+ , id_location_child INT
+ , active BIT
+
+ , does_meet_id_filters BIT
+ , does_meet_non_id_filters BIT
+ );
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
+ id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NULL
+ , code VARCHAR(100) NOT NULL
+ , msg TEXT NOT NULL
+ );
+
+ -- Permissions
+ IF a_debug = 1 THEN
+ SELECT
+ v_guid
, 0 -- get_all_user
, 0 -- get_inactive_user
, a_id_user -- ids_user
@@ -486,15 +173,15 @@ BEGIN
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
- , v_id_permission_dog_new -- ids_permission
- , v_id_access_level_edit -- ids_access_level
+ , v_id_permission_dog_view -- ids_permission
+ , v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
;
END IF;
CALL demo.p_dog_calc_user(
- a_guid
+ v_guid
, 0 -- get_all_user
, 0 -- get_inactive_user
, a_id_user -- ids_user
@@ -505,119 +192,186 @@ BEGIN
, 1 -- a_require_any_id_search_filters_met
, 0 -- a_require_all_non_id_search_filters_met
, 0 -- a_require_any_non_id_search_filters_met
- , v_id_permission_dog_new -- ids_permission
- , v_id_access_level_edit -- ids_access_level
+ , v_id_permission_dog_view -- ids_permission
+ , v_id_access_level_view -- ids_access_level
, 0 -- a_show_errors
, 0 -- a_debug
);
SELECT
- IFNULL(CU_T.has_access, 0)
+ IFNULL(CALC_USER_T.has_access, 0)
INTO
- v_can_create
- FROM demo.DOG_Calc_User_Temp CU_T
- WHERE CU_T.GUID = a_guid
+ v_can_view
+ FROM demo.DOG_Calc_User_Temp CALC_USER_T
+ WHERE CALC_USER_T.GUID = v_guid
LIMIT 1
;
-
- CALL demo.p_dog_clear_calc_user(
- a_guid
- , 0 -- a_debug
- );
- IF (v_can_create = 0) THEN
+ IF a_debug = 1 THEN
+ SELECT v_can_view;
+ SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
+ SELECT * FROM tmp_Msg_Error t_ERROR;
+ END IF;
+
+ IF (v_can_view = 0) THEN
DELETE t_ME
FROM tmp_Msg_Error t_ME
WHERE t_ME.id_type <> v_id_type_error_no_permission
;
INSERT INTO tmp_Msg_Error (
id_type
- , code
- , msg
+ , code
+ , msg
)
VALUES (
v_id_type_error_no_permission
, v_code_type_error_no_permission
- , 'You do not have permission to edit new Commands.'
+ , 'You do not have permission to view Locations.'
)
;
END IF;
-
- IF EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
- IF a_debug = 1 THEN
- SELECT * from tmp_Command;
- END IF;
-
- DELETE FROM tmp_Command;
- END IF;
-
- IF NOT EXISTS (SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
- START TRANSACTION;
-
- INSERT INTO demo.DOG_Dog_Change_Set (
- comment
- , id_user_updated_last_by
- , updated_last_on
- )
- VALUES (
- a_comment
- , a_id_user
- , v_time_start
- )
- ;
-
- SET v_id_change_set := LAST_INSERT_ID();
-
- UPDATE demo.DOG_Command COMMAND
- INNER JOIN tmp_Command t_COMMAND
- ON COMMAND.id_command = t_COMMAND.id_command
- AND t_COMMAND.is_new = 0
- SET
- COMMAND.id_command_category = t_COMMAND.id_command_category
- , COMMAND.name = t_COMMAND.name
- , COMMAND.hand_signal_default_description = t_COMMAND.hand_signal_default_description
- , COMMAND.can_have_button = t_COMMAND.can_have_button
- , COMMAND.notes = t_COMMAND.notes
- , COMMAND.active = t_COMMAND.active
- , COMMAND.id_change_set = v_id_change_set
- ;
-
- INSERT INTO demo.DOG_Command (
- id_command_category
- , name
- , hand_signal_default_description
- , can_have_button
- , notes
- , active
- , id_user_created_by
- , created_on
- )
- SELECT
- t_COMMAND.id_command_category AS id_command_category
- , t_COMMAND.name AS name
- , t_COMMAND.hand_signal_default_description AS hand_signal_default_description
- , t_COMMAND.can_have_button AS can_have_button
- , t_COMMAND.notes AS notes
- , t_COMMAND.active AS active
- , a_id_user AS created_by
- , v_time_start AS created_on
- FROM tmp_Command t_COMMAND
- WHERE
- t_COMMAND.is_new = 1
- AND t_COMMAND.active = 1
- ;
-
- COMMIT;
- END IF;
- START TRANSACTION;
+ CALL demo.p_dog_clear_calc_user(
+ v_guid
+ , 0 -- a_debug
+ );
- DELETE FROM demo.DOG_Command_Temp
- WHERE GUID = a_guid
- ;
-
- COMMIT;
+ -- Call Location Calc
+ IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
+ IF a_debug = 1 THEN
+ SELECT
+ v_guid -- a_guid
+ , a_id_user -- a_id_user
+ , a_get_all_location -- a_get_all_location
+ , a_get_inactive_location -- a_get_inactive_location
+ , a_ids_location -- a_ids_location
+ , a_names_location -- a_names_location
+ , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
+ , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
+ , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
+ , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+ ;
+ END IF;
+
+ CALL demo.p_dog_calc_location (
+ v_guid -- a_guid
+ , a_id_user -- a_id_user
+ , a_get_all_location -- a_get_all_location
+ , a_get_inactive_location -- a_get_inactive_location
+ , a_ids_location -- a_ids_location
+ , a_names_location -- a_names_location
+ , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
+ , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
+ , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
+ , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+ );
+
+ IF a_debug = 1 THEN
+ SELECT COUNT(*) FROM demo.DOG_Location_Temp;
+ SELECT * FROM demo.DOG_Location_Temp;
+ SELECT COUNT(*) FROM demo.DOG_Location_Link_Temp;
+ SELECT * FROM demo.DOG_Location_Link_Temp;
+ END IF;
+
+ INSERT INTO tmp_Location (
+ id_location
+ , code
+ , name
+ , active
+
+ , does_meet_id_filters
+ , does_meet_non_id_filters
+ )
+ SELECT
+ LOCATION_T.id_location
+ , LOCATION_T.code
+ , LOCATION_T.name
+ , LOCATION_T.active
+
+ , LOCATION_T.does_meet_id_filters
+ , LOCATION_T.does_meet_non_id_filters
+ FROM demo.DOG_Location_Temp LOCATION_T
+ WHERE LOCATION_T.GUID = v_guid
+ ;
+
+ INSERT INTO tmp_Location_Link (
+ id_link
+ , id_location_parent
+ , id_location_child
+ , active
+
+ , does_meet_id_filters
+ , does_meet_non_id_filters
+ )
+ SELECT
+ LOCATION_LINK_T.id_link
+ , LOCATION_LINK_T.id_location_parent
+ , LOCATION_LINK_T.id_location_child
+ , LOCATION_LINK_T.active
+
+ , NULL AS does_meet_id_filters
+ , NULL AS does_meet_non_id_filters
+ FROM demo.DOG_Location_Link_Temp LOCATION_LINK_T
+ WHERE LOCATION_LINK_T.GUID = v_guid
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT COUNT(*) FROM tmp_Location;
+ SELECT * FROM tmp_Location;
+ SELECT COUNT(*) FROM tmp_Location_Link;
+ SELECT * FROM tmp_Location_Link;
+ END IF;
+ END IF;
+
+ -- Filter outputs
+ IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
+ IF a_debug = 1 THEN
+ SELECT * FROM tmp_Location;
+ SELECT * FROM tmp_Location_Link;
+ END IF;
+
+ DELETE FROM tmp_Location_Link;
+ DELETE FROM tmp_Location;
+ END IF;
+
+
+ -- Outputs
+ -- Locations
+ IF a_output_LOCATIONS = 1 THEN
+ SELECT
+ t_LOCATIONS.id_location
+ , t_LOCATIONS.code
+ , t_LOCATIONS.name
+ , t_LOCATIONS.active
+
+ , t_LOCATIONS.does_meet_id_filters
+ , t_LOCATIONS.does_meet_non_id_filters
+ FROM tmp_Location t_LOCATIONS
+ ORDER BY t_LOCATIONS.name
+ ;
+ END IF;
+
+ -- Location Links
+ IF a_output_LOCATION_links = 1 THEN
+ SELECT
+ t_LOCATION_LINK.id_link
+ , t_LOCATION_LINK.id_location_parent
+ , t_LOCATION_LINK.id_location_child
+ , t_LOCATION_LINK.active
+
+ , t_LOCATION_LINK.does_meet_id_filters
+ , t_LOCATION_LINK.does_meet_non_id_filters
+ FROM tmp_Location_Link t_LOCATION_LINK
+ INNER JOIN tmp_Location t_LOCATIONS ON t_LOCATION_LINK.id_location_child = t_LOCATIONS.id_location
+ ORDER BY t_LOCATIONS.name
+ ;
+ END IF;
+
-- Errors
SELECT
t_ERROR.id_error
@@ -633,102 +387,57 @@ BEGIN
INNER JOIN demo.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
;
- IF a_debug = 1 THEN
- SELECT * from tmp_Command;
- END IF;
-
- DROP TEMPORARY TABLE tmp_Msg_Error;
- DROP TEMPORARY TABLE tmp_Command_Copy;
- DROP TEMPORARY TABLE tmp_Command;
+ IF a_debug = 1 AND v_can_view = 1 THEN
+ SELECT * FROM tmp_Location;
+ END IF;
+
+ CALL demo.p_dog_clear_calc_location(
+ v_guid -- a_guid
+ , 0 -- a_debug
+ );
- IF a_debug = 1 THEN
+ DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location_Link;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location;
+
+ IF a_debug = 1 THEN
CALL demo.p_core_debug_timing_reporting ( v_time_start );
- END IF;
+ END IF;
END //
DELIMITER ;
+CALL demo.p_dog_get_many_location (
+ 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
+ , 1 -- a_get_all_location
+ , 0 -- a_get_inactive_location
+ , '' -- a_ids_location
+ , '' -- a_names_location
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 1 -- a_require_any_non_id_search_filters_met
+ , 1 -- a_output_LOCATIONS
+ , 1 -- a_output_LOCATION_links
+ , 0 -- a_debug
+);
+
/*
-select
- *
- -- COUNT(*)
--- delete
-from demo.DOG_Command_Temp
-;
-select COUNT(*)
-from demo.DOG_Command_Temp
-;
-
-*/
-
-
-
-
-DELETE FROM demo.DOG_Command_Temp;
-SELECT *
- /*
- CC.name
- , C.name
- */
-FROM demo.DOG_Command C
-INNER JOIN demo.DOG_Command_Category CC ON C.id_command_category = CC.id_command_category
-ORDER BY CC.name, C.name
-;
-select COUNT(*)
-from demo.DOG_Command
-;
-
-INSERT INTO demo.DOG_Command_Temp (
- id_command
- , id_command_category
- , name
- , hand_signal_default_description
- , can_have_button
- , notes
- , active
- , guid
-)
-VALUES (
- -1 -- id_command
- , 1 -- id_command_category
- , 'Bath' -- name
- , 'Burp and juice' -- hand_signal_default_description
- , 1 -- can_have_category
- , 'Sweet' -- notes
- , 1 -- active
- , 'ripplesipplenippletippledipplekipple'
+CALL demo.p_dog_get_many_location (
+ 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
+ , 1 -- a_get_all_location
+ , 0 -- a_get_inactive_location
+ , '' -- a_ids_location
+ , 'pat,point' -- a_names_location
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 1 -- a_require_any_non_id_search_filters_met
+ , 1 -- a_output_LOCATIONS
+ , 1 -- a_output_LOCATION_links
+ , 1 -- a_debug
);
-
-
-CALL demo.p_dog_save_command (
- 'ripplesipplenippletippledipplekipple'
- , (SELECT GUID FROM demo.DOG_Command_Temp COMMAND_TEMP ORDER BY id_temp DESC LIMIT 1)
- , 1
- , 1
-);
-
-
-select
- *
- -- COUNT(*)
--- delete
-from demo.DOG_Command_Temp
-;
-select COUNT(*)
-from demo.DOG_Command_Temp
-;
-SELECT *
- /*
- CC.name
- , C.name
- */
-FROM demo.DOG_Command C
-INNER JOIN demo.DOG_Command_Category CC ON C.id_command_category = CC.id_command_category
-ORDER BY CC.name, C.name
-;
-select COUNT(*)
-from demo.DOG_Command
-;
+*/
\ No newline at end of file
diff --git a/static/MySQL/11202_tbl_DOG_Location_Temp.sql b/static/MySQL/11202_tbl_DOG_Location_Temp.sql
index 07bd7b8..f3760bb 100644
--- a/static/MySQL/11202_tbl_DOG_Location_Temp.sql
+++ b/static/MySQL/11202_tbl_DOG_Location_Temp.sql
@@ -14,5 +14,10 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Location_Temp (
, code VARCHAR(100)
, name VARCHAR(250)
, active BIT
+
+ , does_meet_id_filters BIT
+ , does_meet_non_id_filters BIT
+ , csv_id_locations_parent TEXT
+
, guid BINARY(36)
);
diff --git a/static/MySQL/11206_tbl_DOG_Location_Link_Temp.sql b/static/MySQL/11206_tbl_DOG_Location_Link_Temp.sql
index b659c54..54906b9 100644
--- a/static/MySQL/11206_tbl_DOG_Location_Link_Temp.sql
+++ b/static/MySQL/11206_tbl_DOG_Location_Link_Temp.sql
@@ -14,5 +14,9 @@ CREATE TABLE IF NOT EXISTS parts.DOG_Location_Link_Temp (
, id_location_parent INT
, id_location_child INT
, active BIT
+
+ , does_meet_id_filters BIT
+ , does_meet_non_id_filters BIT
+
, guid BINARY(36)
);
diff --git a/static/MySQL/71104_p_dog_clear_calc_command.sql b/static/MySQL/71104_p_dog_clear_calc_command.sql
index b58f9e0..7e85aad 100644
--- a/static/MySQL/71104_p_dog_clear_calc_command.sql
+++ b/static/MySQL/71104_p_dog_clear_calc_command.sql
@@ -17,15 +17,15 @@ BEGIN
START TRANSACTION;
- DELETE COMMAND_CATEGORY_T
- FROM parts.DOG_Command_Category_Temp COMMAND_CATEGORY_T
- WHERE COMMAND_CATEGORY_T.GUID = a_guid
- ;
-
DELETE COMMAND_T
FROM parts.DOG_Command_Temp COMMAND_T
WHERE COMMAND_T.GUID = a_guid
;
+
+ DELETE COMMAND_CATEGORY_T
+ FROM parts.DOG_Command_Category_Temp COMMAND_CATEGORY_T
+ WHERE COMMAND_CATEGORY_T.GUID = a_guid
+ ;
COMMIT;
diff --git a/static/MySQL/71200_p_dog_calc_location.sql b/static/MySQL/71200_p_dog_calc_location.sql
new file mode 100644
index 0000000..201b75d
--- /dev/null
+++ b/static/MySQL/71200_p_dog_calc_location.sql
@@ -0,0 +1,723 @@
+
+USE parts;
+
+DROP PROCEDURE IF EXISTS parts.p_dog_calc_location;
+
+DELIMITER //
+CREATE PROCEDURE parts.p_dog_calc_location (
+ IN a_guid BINARY(36)
+ , IN a_id_user INT
+ , IN a_get_all_location BIT
+ , IN a_get_inactive_location BIT
+ , IN a_ids_location TEXT
+ , IN a_names_location TEXT
+ , IN a_require_all_id_search_filters_met BIT
+ , IN a_require_any_id_search_filters_met BIT
+ , IN a_require_all_non_id_search_filters_met BIT
+ , IN a_require_any_non_id_search_filters_met BIT
+ , IN a_show_errors BIT
+ , IN a_debug BIT
+)
+BEGIN
+ DECLARE v_can_view BIT;
+ DECLARE v_code_type_error_bad_data VARCHAR(100);
+ DECLARE v_code_type_error_no_permission VARCHAR(100);
+ DECLARE v_has_filter_location_id BIT;
+ DECLARE v_has_filter_location_name BIT;
+ DECLARE v_id_access_level_view INT;
+ DECLARE v_id_minimum INT;
+ DECLARE v_id_permission_dog_view INT;
+ DECLARE v_id_type_error_bad_data INT;
+ DECLARE v_id_type_error_no_permission INT;
+ DECLARE v_time_start TIMESTAMP(6);
+
+ DECLARE exit handler for SQLEXCEPTION
+ BEGIN
+ GET DIAGNOSTICS CONDITION 1
+ @sqlstate = RETURNED_SQLSTATE
+ , @errno = MYSQL_ERRNO
+ , @text = MESSAGE_TEXT
+ ;
+
+ ROLLBACK;
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Location (
+ id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NULL
+ , code VARCHAR(100) NOT NULL
+ , msg TEXT NOT NULL
+ );
+
+ INSERT INTO tmp_Msg_Error_Calc_Location (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ MET.id_type
+ , @errno
+ , @text
+ FROM parts.CORE_Msg_Error_Type MET
+ WHERE MET.code = 'MYSQL_ERROR'
+ ;
+
+ SELECT
+ t_ERROR.id_error
+ , t_ERROR.id_type
+ , t_ERROR.code
+ , ERROR_TYPE.name
+ , ERROR_TYPE.description
+ , ERROR_TYPE.is_breaking_error
+ , ERROR_TYPE.background_colour
+ , ERROR_TYPE.text_colour
+ , t_ERROR.msg
+ FROM tmp_Msg_Error_Calc_Location t_ERROR
+ INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
+ ;
+
+ DROP TABLE IF EXISTS tmp_Msg_Error_Calc_Location;
+ END;
+
+ SET v_time_start := CURRENT_TIMESTAMP(6);
+ SET v_code_type_error_bad_data := 'BAD_DATA';
+ SET v_code_type_error_no_permission := 'NO_PERMISSION';
+ SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
+ SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
+ SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
+ SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
+
+
+ CALL parts.p_core_validate_guid ( a_guid );
+
+ SET a_id_user := IFNULL(a_id_user, 0);
+ SET a_get_all_location := IFNULL(a_get_all_location, 0);
+ SET a_get_inactive_location := IFNULL(a_get_inactive_location, 0);
+ SET a_ids_location := TRIM(IFNULL(a_ids_location, ''));
+ SET a_names_location := TRIM(IFNULL(a_names_location, ''));
+ SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
+ SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
+ SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
+ SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
+ SET a_show_errors := IFNULL(a_show_errors, 0);
+ SET a_debug := IFNULL(a_debug, 0);
+
+ IF a_debug = 1 THEN
+ SELECT
+ a_guid
+ , a_id_user
+ , a_get_all_location
+ , a_get_inactive_location
+ , a_ids_location
+ , a_names_location
+ , a_require_all_id_search_filters_met
+ , a_require_any_id_search_filters_met
+ , a_require_all_non_id_search_filters_met
+ , a_require_any_non_id_search_filters_met
+ , a_show_errors
+ , a_debug
+ ;
+
+ SELECT
+ v_id_type_error_bad_data
+ , v_id_type_error_no_permission
+ , v_id_permission_dog_view
+ , v_time_start
+ ;
+ END IF;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Location;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Location;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Location;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location_Link_Calc_Location;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location_Calc_Location;
+
+ CREATE TEMPORARY TABLE tmp_Location_Calc_Location (
+ id_location INT NOT NULL
+ , does_meet_id_filters BIT NOT NULL
+ , does_meet_non_id_filters BIT NOT NULL
+ , csv_id_locations_parent TEXT
+ );
+
+ CREATE TEMPORARY TABLE tmp_Location_Link_Calc_Location (
+ id_link INT NOT NULL
+ , id_location_parent INT
+ , id_location_child INT
+ , does_meet_id_filters BIT
+ , does_meet_non_id_filters BIT
+ );
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error_Calc_Location (
+ id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NULL
+ , code VARCHAR(100) NOT NULL
+ , msg TEXT NOT NULL
+ );
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Id_Calc_Location (
+ substring VARCHAR(4000) NOT NULL
+ , as_int INT NULL
+ );
+ DELETE FROM tmp_Split_Id_Calc_Location;
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Split_Name_Calc_Location (
+ substring VARCHAR(4000) NOT NULL
+ , as_int INT NULL
+ );
+ DELETE FROM tmp_Split_Name_Calc_Location;
+
+ SET v_has_filter_location_id = CASE WHEN a_ids_location <> '' THEN 1 ELSE 0 END;
+ SET v_has_filter_location_name = CASE WHEN a_names_location <> '' THEN 1 ELSE 0 END;
+
+ -- Locations
+ IF v_has_filter_location_id = 1 THEN
+ CALL parts.p_core_split(a_guid, a_ids_location, ',', a_debug);
+
+ SET sql_mode = '';
+
+ INSERT INTO tmp_Split_Id_Calc_Location (
+ substring
+ , as_int
+ )
+ SELECT
+ SPLIT_T.substring
+ , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
+ FROM parts.CORE_Split_Temp SPLIT_T
+ WHERE
+ SPLIT_T.GUID = a_guid
+ AND IFNULL(SPLIT_T.substring, '') <> ''
+ ;
+
+ CALL parts.p_core_clear_split( a_guid );
+ END IF;
+
+ IF v_has_filter_location_name = 1 THEN
+ CALL parts.p_core_split(a_guid, a_names_location, ',', a_debug);
+
+ SET sql_mode = '';
+
+ INSERT INTO tmp_Split_Name_Calc_Location (
+ substring
+ , as_int
+ )
+ SELECT
+ SPLIT_T.substring
+ , CAST(SPLIT_T.substring AS DECIMAL(10,0)) AS as_int
+ FROM parts.CORE_Split_Temp SPLIT_T
+ WHERE
+ SPLIT_T.GUID = a_guid
+ AND IFNULL(SPLIT_T.substring, '') <> ''
+ ;
+
+ CALL parts.p_core_clear_split( a_guid );
+ END IF;
+
+ IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Location t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
+ IF EXISTS (
+ SELECT *
+ FROM tmp_Split_Id_Calc_Location t_SPLIT_ID
+ LEFT JOIN parts.DOG_Location LOCATIONS ON t_SPLIT_ID.as_int = LOCATIONS.id_location
+ WHERE
+ ISNULL(t_SPLIT_ID.as_int)
+ OR ISNULL(LOCATIONS.id_location)
+ OR (
+ LOCATIONS.active = 0
+ AND a_get_inactive_location = 0
+ )
+ ) THEN
+ INSERT INTO tmp_Msg_Error_Calc_Location (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ v_id_type_error_bad_data
+ , v_code_type_error_bad_data
+ , CONCAT('Invalid or inactive Location IDs: ', IFNULL(GROUP_CONCAT(t_SPLIT_ID.substring SEPARATOR ', '), 'NULL'))
+ FROM tmp_Split_Id_Calc_Location t_SPLIT_ID
+ LEFT JOIN parts.DOG_Location LOCATIONS ON t_SPLIT_ID.as_int = LOCATIONS.id_location
+ WHERE
+ ISNULL(t_SPLIT_ID.as_int)
+ OR ISNULL(LOCATIONS.id_location)
+ OR (
+ LOCATIONS.active = 0
+ AND a_get_inactive_location = 0
+ )
+ ;
+ /* Don't error on names, hand signals, or notes not found
+ ELSEIF EXISTS ()
+ */
+ ELSE
+ IF a_debug = 1 THEN
+ SELECT 'Location Filters';
+ WITH
+ Location_Id_Filter AS (
+ SELECT LOCATIONS.id_location
+ FROM tmp_Split_Id_Calc_Location t_SPLIT_ID
+ INNER JOIN parts.DOG_Location LOCATIONS ON t_SPLIT_ID.as_int = LOCATIONS.id_location
+ )
+ , Location_Name_Filter AS (
+ SELECT LOCATIONS.id_location
+ FROM tmp_Split_Name_Calc_Location t_SPLIT_NAME
+ INNER JOIN parts.DOG_Location LOCATIONS ON LOCATIONS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
+ WHERE NULLIF(t_SPLIT_NAME.substring, '') IS NOT NULL
+ )
+ , Location_Filters AS (
+ SELECT
+ LOCATIONS_COMBINED.id_location
+ , MAX(LOCATIONS_COMBINED.does_meet_id_filter) AS does_meet_id_filter
+ , MAX(LOCATIONS_COMBINED.does_meet_name_filter) AS does_meet_name_filter
+ FROM (
+ SELECT
+ LOCATIONS_ID_FILTER.id_location
+ , 1 AS does_meet_id_filter
+ , 0 AS does_meet_name_filter
+ FROM Location_Id_Filter LOCATIONS_ID_FILTER
+ UNION
+ SELECT
+ LOCATIONS_NAME_FILTER.id_location
+ , 0 AS does_meet_id_filter
+ , 1 AS does_meet_name_filter
+ FROM Location_Name_Filter LOCATIONS_NAME_FILTER
+ ) LOCATIONS_COMBINED
+ GROUP BY LOCATIONS_COMBINED.id_location
+ )
+ SELECT
+ LOCATIONS.id_location
+ , CASE WHEN
+ v_has_filter_location_id = 0
+ OR LOCATIONS_FILTERS.does_meet_id_filter = 1
+ THEN 1 ELSE 0 END AS does_meet_non_id_filters
+ , CASE WHEN
+ (
+ v_has_filter_location_name = 0
+ )
+ OR LOCATIONS_FILTERS.does_meet_name_filter = 1
+ THEN 1 ELSE 0 END AS does_meet_id_filters
+ FROM parts.DOG_Location LOCATIONS
+ LEFT JOIN Location_Filters LOCATIONS_FILTERS ON LOCATIONS.id_location = LOCATIONS_FILTERS.id_location
+ WHERE
+ (
+ a_get_all_location = 1
+ OR (
+ v_has_filter_location_id = 1
+ AND LOCATIONS_FILTERS.does_meet_id_filter = 1
+ )
+ OR (
+ v_has_filter_location_name = 1
+ AND LOCATIONS_FILTERS.does_meet_name_filter = 1
+ )
+ )
+ AND (
+ a_get_inactive_location = 1
+ OR LOCATIONS.active = 1
+ )
+ ;
+ END IF;
+ INSERT INTO tmp_Location_Calc_Location (
+ id_location
+ , does_meet_id_filters
+ , does_meet_non_id_filters
+ )
+ WITH
+ Location_Id_Filter AS (
+ SELECT LOCATIONS.id_location
+ FROM tmp_Split_Id_Calc_Location t_SPLIT_ID
+ INNER JOIN parts.DOG_Location LOCATIONS ON t_SPLIT_ID.as_int = LOCATIONS.id_location
+ )
+ , Location_Name_Filter AS (
+ SELECT LOCATIONS.id_location
+ FROM tmp_Split_Name_Calc_Location t_SPLIT_NAME
+ INNER JOIN parts.DOG_Location LOCATIONS ON LOCATIONS.name LIKE CONCAT('%', t_SPLIT_NAME.substring, '%')
+ WHERE
+ t_SPLIT_NAME.substring IS NOT NULL
+ AND t_SPLIT_NAME.substring <> ''
+ )
+ , Location_Filters AS (
+ SELECT
+ LOCATIONS_COMBINED.id_location
+ , MAX(LOCATIONS_COMBINED.does_meet_id_filter) AS does_meet_id_filter
+ , MAX(LOCATIONS_COMBINED.does_meet_name_filter) AS does_meet_name_filter
+ FROM (
+ SELECT
+ LOCATIONS_ID_FILTER.id_location
+ , 1 AS does_meet_id_filter
+ , 0 AS does_meet_name_filter
+ FROM Location_Id_Filter LOCATIONS_ID_FILTER
+ UNION
+ SELECT
+ LOCATIONS_NAME_FILTER.id_location
+ , 0 AS does_meet_id_filter
+ , 1 AS does_meet_name_filter
+ FROM Location_Name_Filter LOCATIONS_NAME_FILTER
+ ) LOCATIONS_COMBINED
+ GROUP BY LOCATIONS_COMBINED.id_location
+ )
+ SELECT
+ LOCATIONS.id_location
+ , CASE WHEN
+ v_has_filter_location_id = 0
+ OR IFNULL(LOCATIONS_FILTERS.does_meet_id_filter, 0) = 1
+ THEN 1 ELSE 0 END AS does_meet_id_filters
+ , CASE WHEN
+ (
+ v_has_filter_location_name = 0
+ )
+ OR IFNULL(LOCATIONS_FILTERS.does_meet_name_filter, 0) = 1
+ THEN 1 ELSE 0 END AS does_meet_non_id_filters
+ FROM parts.DOG_Location LOCATIONS
+ LEFT JOIN Location_Filters LOCATIONS_FILTERS ON LOCATIONS.id_location = LOCATIONS_FILTERS.id_location
+ WHERE
+ (
+ a_get_all_location = 1
+ OR (
+ v_has_filter_location_id = 1
+ AND LOCATIONS_FILTERS.does_meet_id_filter = 1
+ )
+ OR (
+ v_has_filter_location_name = 1
+ AND LOCATIONS_FILTERS.does_meet_name_filter = 1
+ )
+ )
+ AND (
+ a_get_inactive_location = 1
+ OR LOCATIONS.active = 1
+ )
+ ;
+ END IF;
+ END IF;
+
+ DELETE FROM tmp_Split_Id_Calc_Location;
+ DELETE FROM tmp_Split_Name_Calc_Location;
+
+ IF a_debug = 1 THEN
+ SELECT 'After get Locations ';
+ SELECT * FROM tmp_Location_Calc_Location;
+ END IF;
+
+ -- Filter records
+ IF NOT EXISTS (SELECT * FROM tmp_Msg_Error_Calc_Location t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
+ DELETE t_LOCATIONS
+ FROM tmp_Location_Calc_Location t_LOCATIONS
+ WHERE
+ (
+ a_require_all_id_search_filters_met = 1
+ AND (
+ t_LOCATIONS.does_meet_id_filters = 0
+ )
+ )
+ OR (
+ a_require_all_non_id_search_filters_met = 1
+ AND (
+ t_LOCATIONS.does_meet_non_id_filters = 0
+ )
+ )
+ OR (
+ a_require_any_id_search_filters_met = 1
+ AND t_LOCATIONS.does_meet_id_filters = 0
+ )
+ OR (
+ a_require_any_non_id_search_filters_met = 1
+ AND t_LOCATIONS.does_meet_non_id_filters = 0
+ )
+ ;
+ END IF;
+
+ IF a_debug = 1 THEN
+ SELECT 'After filter Locations';
+ SELECT * FROM tmp_Location_Calc_Location;
+ END IF;
+
+ -- Calculated fields
+ -- Parent Location Ids
+ WITH Location_Parent AS (
+ SELECT
+ LOCATIONS.id_location
+ , GROUP_CONCAT(LOCATION_LINK.id_location_parent, ',') AS csv_id_locations_parent
+ FROM parts.DOG_Location LOCATIONS
+ INNER JOIN DOG_Location_Link LOCATION_LINK ON LOCATIONS.id_location = LOCATION_LINK.id_location_child
+ WHERE
+ a_get_inactive_location = 1
+ OR LOCATION_LINK.active = 1
+ GROUP BY LOCATIONS.id_location
+ )
+ UPDATE tmp_Location_Calc_Location t_LOCATIONS
+ INNER JOIN Location_Parent LOCATIONS_PARENT ON t_LOCATIONS.id_location = LOCATIONS_PARENT.id_location
+ SET
+ t_LOCATIONS.csv_id_locations_parent = LOCATIONS_PARENT.csv_id_locations_parent
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT 'After generate calculated fields Locations';
+ SELECT * FROM tmp_Location_Calc_Location;
+ END IF;
+
+
+ -- Location Links
+ INSERT INTO tmp_Location_Link_Calc_Location (
+ id_link
+ , id_location_parent
+ , id_location_child
+
+ , does_meet_id_filters
+ , does_meet_non_id_filters
+ )
+ SELECT
+ LOCATION_LINK.id_link
+ , LOCATION_LINK.id_location_parent
+ , LOCATION_LINK.id_location_child
+
+ , NULL AS does_meet_id_filters
+ , NULL AS does_meet_non_id_filters
+ FROM parts.DOG_Location_Link LOCATION_LINK
+ INNER JOIN tmp_Location_Calc_Location t_LOCATIONS
+ ON LOCATION_LINK.id_location_parent = t_LOCATIONS.id_location
+ OR LOCATION_LINK.id_location_child = t_LOCATIONS.id_location
+ WHERE
+ a_get_inactive_location = 1
+ OR LOCATION_LINK.active = 1
+ ;
+
+ -- Permissions
+ IF a_debug = 1 THEN
+ SELECT
+ a_guid -- a_guid
+ , 0 -- get_all_user
+ , 0 -- get_inactive_user
+ , a_id_user -- ids_user
+ , '' -- a_auth0_ids_user
+ , '' -- a_names_user
+ , '' -- a_emails_user
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 0 -- a_require_any_non_id_search_filters_met
+ , v_id_permission_dog_view -- ids_permission
+ , v_id_access_level_view -- ids_access_level
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+ ;
+ END IF;
+
+ CALL parts.p_dog_calc_user(
+ a_guid -- a_guid
+ , 0 -- get_all_user
+ , 0 -- get_inactive_user
+ , a_id_user -- ids_user
+ , '' -- a_auth0_ids_user
+ , '' -- a_names_user
+ , '' -- a_emails_user
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 0 -- a_require_any_non_id_search_filters_met
+ , v_id_permission_dog_view -- ids_permission
+ , v_id_access_level_view -- ids_access_level
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+ );
+
+ SELECT
+ IFNULL(CALC_USER_T.has_access, 0)
+ INTO
+ v_can_view
+ FROM parts.DOG_Calc_User_Temp CALC_USER_T
+ WHERE CALC_USER_T.GUID = a_guid
+ LIMIT 1
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT v_can_view;
+ END IF;
+
+ IF (v_can_view = 0) THEN
+ DELETE t_ME
+ FROM tmp_Msg_Error_Calc_Location t_ME
+ WHERE t_ME.id_type <> v_id_type_error_no_permission
+ ;
+ INSERT INTO tmp_Msg_Error_Calc_Location (
+ id_type
+ , code
+ , msg
+ )
+ VALUES (
+ v_id_type_error_no_permission
+ , v_code_type_error_no_permission
+ , 'You do not have permission to view Dogs and Locations.'
+ )
+ ;
+ END IF;
+
+ CALL parts.p_dog_clear_calc_user(
+ a_guid
+ , 0 -- a_debug
+ );
+
+ IF a_debug = 1 THEN
+ SELECT 'Before non-permitted data deletion';
+ SELECT * FROM tmp_Location_Calc_Location;
+ SELECT * FROM tmp_Msg_Error_Calc_Location;
+ END IF;
+
+ IF EXISTS(SELECT * FROM tmp_Msg_Error_Calc_Location t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
+ IF a_debug = 1 THEN
+ SELECT * FROM tmp_Location_Calc_Location;
+ END IF;
+
+ DELETE FROM tmp_Location_Calc_Location;
+ END IF;
+
+ IF a_debug = 1 THEN
+ SELECT 'After non-permitted data deletion';
+ END IF;
+
+ -- Outputs
+ START TRANSACTION;
+ -- Locations
+ INSERT INTO parts.DOG_Location_Temp (
+ guid
+ , id_location
+ , code
+ , name
+ , active
+
+ , csv_id_locations_parent
+
+ , does_meet_id_filters
+ , does_meet_non_id_filters
+ )
+ SELECT
+ a_guid
+ , t_LOCATIONS.id_location
+ , LOCATIONS.code
+ , LOCATIONS.name
+ , LOCATIONS.active
+
+ , t_LOCATIONS.csv_id_locations_parent
+
+ , t_LOCATIONS.does_meet_id_filters
+ , t_LOCATIONS.does_meet_non_id_filters
+ FROM parts.DOG_Location LOCATIONS
+ INNER JOIN tmp_Location_Calc_Location t_LOCATIONS ON LOCATIONS.id_location = t_LOCATIONS.id_location
+ ORDER BY LOCATIONS.name
+ ;
+
+ INSERT INTO parts.DOG_Location_Link_Temp (
+ guid
+ , id_link
+ , id_location_parent
+ , id_location_child
+ , active
+
+ , does_meet_id_filters
+ , does_meet_non_id_filters
+ )
+ SELECT
+ a_guid
+ , t_LOCATION_LINK.id_link
+ , LOCATION_LINK.id_location_parent
+ , LOCATION_LINK.id_location_child
+ , LOCATION_LINK.active
+
+ , NULL AS does_meet_id_filters
+ , NULL AS does_meet_non_id_filters
+ FROM parts.DOG_Location_Link LOCATION_LINK
+ INNER JOIN tmp_Location_Link_Calc_Location t_LOCATION_LINK ON LOCATION_LINK.id_link = t_LOCATION_LINK.id_link
+ INNER JOIN parts.DOG_Location LOCATIONS ON LOCATION_LINK.id_location_child = LOCATIONS.id_location
+ ORDER BY LOCATIONS.name
+ ;
+ COMMIT;
+
+ -- Errors
+ IF a_show_errors = 1 THEN
+ SELECT
+ t_ERROR.id_error
+ , t_ERROR.id_type
+ , t_ERROR.code
+ , ERROR_TYPE.name
+ , ERROR_TYPE.description
+ , ERROR_TYPE.is_breaking_error
+ , ERROR_TYPE.background_colour
+ , ERROR_TYPE.text_colour
+ , t_ERROR.msg
+ FROM tmp_Msg_Error_Calc_Location t_ERROR
+ INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
+ ;
+ END IF;
+
+ IF a_debug = 1 AND v_can_view = 1 THEN
+ SELECT * FROM tmp_Location_Calc_Location;
+ END IF;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp_Split_Name_Calc_Location;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Split_Id_Calc_Location;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error_Calc_Location;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location_Link_Calc_Location;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location_Calc_Location;
+
+ IF a_debug = 1 THEN
+ CALL parts.p_core_debug_timing_reporting ( v_time_start );
+ END IF;
+END //
+DELIMITER ;
+
+
+/*
+
+
+CALL parts.p_dog_calc_location (
+ 'slops ' -- a_guid
+ , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
+ , 1 -- a_get_all_location
+ , 0 -- a_get_inactive_location
+ , '' -- a_ids_location
+ , '' -- a_names_location
+ , 0 -- a_require_all_id_search_filters_met
+ , 0 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 0 -- a_require_any_non_id_search_filters_met
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+);
+
+CALL parts.p_dog_calc_location (
+ 'slops ' -- a_guid
+ , 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
+ , 1 -- a_get_all_location
+ , 0 -- a_get_inactive_location
+ , '' -- a_ids_location
+ , 'pat,point' -- a_names_location
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 1 -- a_require_any_non_id_search_filters_met
+ , 1 -- a_show_errors
+ , 0 -- a_debug
+);
+SELECT *
+FROM parts.DOG_Location_Temp
+;
+SELECT *
+FROM parts.DOG_Location_Link_Temp
+;
+/*
+SELECT *
+FROM parts.DOG_Location_Temp C
+WHERE
+ C.does_meet_id_filters
+ AND C.does_meet_non_id_filters
+;
+*/
+CALL parts.p_dog_clear_calc_location (
+ 'slips ' -- a_guid
+ , 1 -- debug
+);
+
+
+DELETE
+FROM parts.DOG_Location_Temp
+;
+DELETE
+FROM parts.DOG_Location_Link_Temp
+;
+
+*/
diff --git a/static/MySQL/71200_p_dog_clear_calc_location.sql b/static/MySQL/71200_p_dog_clear_calc_location.sql
new file mode 100644
index 0000000..bcfb5e3
--- /dev/null
+++ b/static/MySQL/71200_p_dog_clear_calc_location.sql
@@ -0,0 +1,50 @@
+
+USE parts;
+
+DROP PROCEDURE IF EXISTS parts.p_dog_clear_calc_location;
+DROP PROCEDURE IF EXISTS parts.p_location_clear_calc_location;
+
+DELIMITER //
+CREATE PROCEDURE parts.p_dog_clear_calc_location (
+ IN a_guid BINARY(36)
+ , IN a_debug BIT
+)
+BEGIN
+ DECLARE v_time_start TIMESTAMP(6);
+ SET v_time_start := CURRENT_TIMESTAMP(6);
+
+ CALL parts.p_core_validate_guid ( a_guid );
+
+ START TRANSACTION;
+
+ DELETE LOCATIONS_T
+ FROM parts.DOG_Location_Temp LOCATIONS_T
+ WHERE LOCATIONS_T.GUID = a_guid
+ ;
+
+ DELETE LOCATION_LINK_T
+ FROM parts.DOG_Location_Link_Temp LOCATION_LINK_T
+ WHERE LOCATION_LINK_T.GUID = a_guid
+ ;
+
+ COMMIT;
+
+ IF a_debug = 1 THEN
+ CALL parts.p_debug_timing_reporting( v_time_start );
+ END IF;
+END //
+DELIMITER ;
+
+/*
+
+CALL parts.p_dog_clear_calc_location (
+ 'crips ' -- a_guid
+ , 1 -- debug
+);
+
+SELECT *
+FROM parts.DOG_Calc_User_Temp
+WHERE GUID = 'chips '
+;
+
+*/
diff --git a/static/MySQL/71200_p_dog_get_many_location.sql b/static/MySQL/71200_p_dog_get_many_location.sql
new file mode 100644
index 0000000..326d9e9
--- /dev/null
+++ b/static/MySQL/71200_p_dog_get_many_location.sql
@@ -0,0 +1,443 @@
+
+USE parts;
+
+DROP PROCEDURE IF EXISTS parts.p_dog_get_many_location;
+
+DELIMITER //
+CREATE PROCEDURE parts.p_dog_get_many_location (
+ IN a_id_user INT
+ , IN a_get_all_location BIT
+ , IN a_get_inactive_location BIT
+ , IN a_ids_location TEXT
+ , IN a_names_location TEXT
+ , IN a_require_all_id_search_filters_met BIT
+ , IN a_require_any_id_search_filters_met BIT
+ , IN a_require_all_non_id_search_filters_met BIT
+ , IN a_require_any_non_id_search_filters_met BIT
+ , IN a_output_LOCATIONS BIT
+ , IN a_output_LOCATION_links BIT
+ , IN a_debug BIT
+)
+BEGIN
+ DECLARE v_can_view BIT;
+ DECLARE v_code_type_error_bad_data VARCHAR(100);
+ DECLARE v_code_type_error_no_permission VARCHAR(100);
+ DECLARE v_guid BINARY(36);
+ DECLARE v_id_access_level_view INT;
+ DECLARE v_id_minimum INT;
+ DECLARE v_id_permission_dog_view INT;
+ DECLARE v_id_type_error_bad_data INT;
+ DECLARE v_id_type_error_no_permission INT;
+ DECLARE v_time_start TIMESTAMP(6);
+
+ DECLARE exit handler for SQLEXCEPTION
+ BEGIN
+ GET DIAGNOSTICS CONDITION 1
+ @sqlstate = RETURNED_SQLSTATE
+ , @errno = MYSQL_ERRNO
+ , @text = MESSAGE_TEXT
+ ;
+
+ ROLLBACK;
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
+ id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NULL
+ , code VARCHAR(100) NOT NULL
+ , msg TEXT NOT NULL
+ );
+
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ SELECT
+ MET.id_type
+ , @errno
+ , @text
+ FROM parts.CORE_Msg_Error_Type MET
+ WHERE MET.code = 'MYSQL_ERROR'
+ ;
+
+ SELECT
+ t_ERROR.id_error
+ , t_ERROR.id_type
+ , t_ERROR.code
+ , ERROR_TYPE.name
+ , ERROR_TYPE.description
+ , ERROR_TYPE.is_breaking_error
+ , ERROR_TYPE.background_colour
+ , ERROR_TYPE.text_colour
+ , t_ERROR.msg
+ FROM tmp_Msg_Error t_ERROR
+ INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
+ ;
+
+ DROP TABLE IF EXISTS tmp_Msg_Error;
+ END;
+
+ SET v_time_start := CURRENT_TIMESTAMP(6);
+ SET v_guid := UUID();
+ SET v_code_type_error_bad_data := 'BAD_DATA';
+ SET v_code_type_error_no_permission := 'NO_PERMISSION';
+ SET v_id_type_error_bad_data := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_bad_data LIMIT 1);
+ SET v_id_type_error_no_permission := (SELECT ERROR_TYPE.id_type FROM parts.CORE_Msg_Error_Type ERROR_TYPE WHERE ERROR_TYPE.code = v_code_type_error_no_permission LIMIT 1);
+ SET v_id_permission_dog_view := (SELECT PERMISSION.id_permission FROM parts.DOG_Permission PERMISSION WHERE PERMISSION.code = 'DOG_VIEW' LIMIT 1);
+ SET v_id_access_level_view := (SELECT ACCESS_LEVEL.id_access_level FROM parts.DOG_Access_Level ACCESS_LEVEL WHERE ACCESS_LEVEL.code = 'VIEW' LIMIT 1);
+
+ SET a_id_user := IFNULL(a_id_user, 0);
+ /*
+ SET a_get_all_location := IFNULL(a_get_all_location, 0);
+ SET a_get_inactive_location := IFNULL(a_get_inactive_location, 0);
+ SET a_ids_location := TRIM(IFNULL(a_ids_location, ''));
+ SET a_names_location := TRIM(IFNULL(a_names_location, ''));
+ SET a_hand_signal_default_descriptions_location := TRIM(IFNULL(a_hand_signal_default_descriptions_location, ''));
+ SET a_notes_location := TRIM(IFNULL(a_notes_location, ''));
+ SET a_require_all_id_search_filters_met := IFNULL(a_require_all_id_search_filters_met, 1);
+ SET a_require_any_id_search_filters_met := IFNULL(a_require_any_id_search_filters_met, 1);
+ SET a_require_all_non_id_search_filters_met := IFNULL(a_require_all_non_id_search_filters_met, 0);
+ SET a_require_any_non_id_search_filters_met := IFNULL(a_require_any_non_id_search_filters_met, 1);
+ */
+ SET a_output_LOCATIONS := IFNULL(a_output_LOCATIONS, 0);
+ SET a_output_LOCATION_links := IFNULL(a_output_LOCATION_links, 0);
+ SET a_debug := IFNULL(a_debug, 0);
+
+ IF a_debug = 1 THEN
+ SELECT
+ a_id_user
+ , a_get_all_location
+ , a_get_inactive_location
+ , a_ids_location
+ , a_names_location
+ , a_require_all_id_search_filters_met
+ , a_require_any_id_search_filters_met
+ , a_require_all_non_id_search_filters_met
+ , a_require_any_non_id_search_filters_met
+ , a_output_LOCATIONS
+ , a_output_LOCATION_links
+ , a_debug
+ ;
+
+ SELECT
+ v_id_type_error_bad_data
+ , v_id_type_error_no_permission
+ , v_guid
+ , v_id_permission_dog_view
+ , v_time_start
+ ;
+ END IF;
+
+ DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location_Link;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location;
+
+ CREATE TEMPORARY TABLE tmp_Location (
+ id_location INT NOT NULL
+ , code VARCHAR(100)
+ , name VARCHAR(250)
+ , active BIT
+
+ , does_meet_id_filters BIT
+ , does_meet_non_id_filters BIT
+ );
+
+ CREATE TEMPORARY TABLE tmp_Location_Link (
+ id_link INT NOT NULL
+ , id_location_parent INT
+ , id_location_child INT
+ , active BIT
+
+ , does_meet_id_filters BIT
+ , does_meet_non_id_filters BIT
+ );
+
+ CREATE TEMPORARY TABLE IF NOT EXISTS tmp_Msg_Error (
+ id_error INT NOT NULL PRIMARY KEY AUTO_INCREMENT
+ , id_type INT NULL
+ , code VARCHAR(100) NOT NULL
+ , msg TEXT NOT NULL
+ );
+
+ -- Permissions
+ IF a_debug = 1 THEN
+ SELECT
+ v_guid
+ , 0 -- get_all_user
+ , 0 -- get_inactive_user
+ , a_id_user -- ids_user
+ , '' -- a_auth0_ids_user
+ , '' -- a_names_user
+ , '' -- a_emails_user
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 0 -- a_require_any_non_id_search_filters_met
+ , v_id_permission_dog_view -- ids_permission
+ , v_id_access_level_view -- ids_access_level
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+ ;
+ END IF;
+
+ CALL parts.p_dog_calc_user(
+ v_guid
+ , 0 -- get_all_user
+ , 0 -- get_inactive_user
+ , a_id_user -- ids_user
+ , '' -- a_auth0_ids_user
+ , '' -- a_names_user
+ , '' -- a_emails_user
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 0 -- a_require_any_non_id_search_filters_met
+ , v_id_permission_dog_view -- ids_permission
+ , v_id_access_level_view -- ids_access_level
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+ );
+
+ SELECT
+ IFNULL(CALC_USER_T.has_access, 0)
+ INTO
+ v_can_view
+ FROM parts.DOG_Calc_User_Temp CALC_USER_T
+ WHERE CALC_USER_T.GUID = v_guid
+ LIMIT 1
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT v_can_view;
+ SELECT COUNT(*) AS Count_Errors FROM tmp_Msg_Error t_ERROR;
+ SELECT * FROM tmp_Msg_Error t_ERROR;
+ END IF;
+
+ IF (v_can_view = 0) THEN
+ DELETE t_ME
+ FROM tmp_Msg_Error t_ME
+ WHERE t_ME.id_type <> v_id_type_error_no_permission
+ ;
+ INSERT INTO tmp_Msg_Error (
+ id_type
+ , code
+ , msg
+ )
+ VALUES (
+ v_id_type_error_no_permission
+ , v_code_type_error_no_permission
+ , 'You do not have permission to view Locations.'
+ )
+ ;
+ END IF;
+
+ CALL parts.p_dog_clear_calc_user(
+ v_guid
+ , 0 -- a_debug
+ );
+
+
+ -- Call Location Calc
+ IF NOT EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
+ IF a_debug = 1 THEN
+ SELECT
+ v_guid -- a_guid
+ , a_id_user -- a_id_user
+ , a_get_all_location -- a_get_all_location
+ , a_get_inactive_location -- a_get_inactive_location
+ , a_ids_location -- a_ids_location
+ , a_names_location -- a_names_location
+ , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
+ , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
+ , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
+ , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+ ;
+ END IF;
+
+ CALL parts.p_dog_calc_location (
+ v_guid -- a_guid
+ , a_id_user -- a_id_user
+ , a_get_all_location -- a_get_all_location
+ , a_get_inactive_location -- a_get_inactive_location
+ , a_ids_location -- a_ids_location
+ , a_names_location -- a_names_location
+ , a_require_all_id_search_filters_met -- a_require_all_id_search_filters_met
+ , a_require_any_id_search_filters_met -- a_require_any_id_search_filters_met
+ , a_require_all_non_id_search_filters_met -- a_require_all_non_id_search_filters_met
+ , a_require_any_non_id_search_filters_met -- a_require_any_non_id_search_filters_met
+ , 0 -- a_show_errors
+ , 0 -- a_debug
+ );
+
+ IF a_debug = 1 THEN
+ SELECT COUNT(*) FROM parts.DOG_Location_Temp;
+ SELECT * FROM parts.DOG_Location_Temp;
+ SELECT COUNT(*) FROM parts.DOG_Location_Link_Temp;
+ SELECT * FROM parts.DOG_Location_Link_Temp;
+ END IF;
+
+ INSERT INTO tmp_Location (
+ id_location
+ , code
+ , name
+ , active
+
+ , does_meet_id_filters
+ , does_meet_non_id_filters
+ )
+ SELECT
+ LOCATION_T.id_location
+ , LOCATION_T.code
+ , LOCATION_T.name
+ , LOCATION_T.active
+
+ , LOCATION_T.does_meet_id_filters
+ , LOCATION_T.does_meet_non_id_filters
+ FROM parts.DOG_Location_Temp LOCATION_T
+ WHERE LOCATION_T.GUID = v_guid
+ ;
+
+ INSERT INTO tmp_Location_Link (
+ id_link
+ , id_location_parent
+ , id_location_child
+ , active
+
+ , does_meet_id_filters
+ , does_meet_non_id_filters
+ )
+ SELECT
+ LOCATION_LINK_T.id_link
+ , LOCATION_LINK_T.id_location_parent
+ , LOCATION_LINK_T.id_location_child
+ , LOCATION_LINK_T.active
+
+ , NULL AS does_meet_id_filters
+ , NULL AS does_meet_non_id_filters
+ FROM parts.DOG_Location_Link_Temp LOCATION_LINK_T
+ WHERE LOCATION_LINK_T.GUID = v_guid
+ ;
+
+ IF a_debug = 1 THEN
+ SELECT COUNT(*) FROM tmp_Location;
+ SELECT * FROM tmp_Location;
+ SELECT COUNT(*) FROM tmp_Location_Link;
+ SELECT * FROM tmp_Location_Link;
+ END IF;
+ END IF;
+
+ -- Filter outputs
+ IF EXISTS(SELECT * FROM tmp_Msg_Error t_ERROR INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type WHERE ERROR_TYPE.is_breaking_error = 1 LIMIT 1) THEN
+ IF a_debug = 1 THEN
+ SELECT * FROM tmp_Location;
+ SELECT * FROM tmp_Location_Link;
+ END IF;
+
+ DELETE FROM tmp_Location_Link;
+ DELETE FROM tmp_Location;
+ END IF;
+
+
+ -- Outputs
+ -- Locations
+ IF a_output_LOCATIONS = 1 THEN
+ SELECT
+ t_LOCATIONS.id_location
+ , t_LOCATIONS.code
+ , t_LOCATIONS.name
+ , t_LOCATIONS.active
+
+ , t_LOCATIONS.does_meet_id_filters
+ , t_LOCATIONS.does_meet_non_id_filters
+ FROM tmp_Location t_LOCATIONS
+ ORDER BY t_LOCATIONS.name
+ ;
+ END IF;
+
+ -- Location Links
+ IF a_output_LOCATION_links = 1 THEN
+ SELECT
+ t_LOCATION_LINK.id_link
+ , t_LOCATION_LINK.id_location_parent
+ , t_LOCATION_LINK.id_location_child
+ , t_LOCATION_LINK.active
+
+ , t_LOCATION_LINK.does_meet_id_filters
+ , t_LOCATION_LINK.does_meet_non_id_filters
+ FROM tmp_Location_Link t_LOCATION_LINK
+ INNER JOIN tmp_Location t_LOCATIONS ON t_LOCATION_LINK.id_location_child = t_LOCATIONS.id_location
+ ORDER BY t_LOCATIONS.name
+ ;
+ END IF;
+
+ -- Errors
+ SELECT
+ t_ERROR.id_error
+ , t_ERROR.id_type
+ , t_ERROR.code
+ , ERROR_TYPE.name
+ , ERROR_TYPE.description
+ , ERROR_TYPE.is_breaking_error
+ , ERROR_TYPE.background_colour
+ , ERROR_TYPE.text_colour
+ , t_ERROR.msg
+ FROM tmp_Msg_Error t_ERROR
+ INNER JOIN parts.CORE_Msg_Error_Type ERROR_TYPE ON t_ERROR.id_type = ERROR_TYPE.id_type
+ ;
+
+ IF a_debug = 1 AND v_can_view = 1 THEN
+ SELECT * FROM tmp_Location;
+ END IF;
+
+ CALL parts.p_dog_clear_calc_location(
+ v_guid -- a_guid
+ , 0 -- a_debug
+ );
+
+ DROP TEMPORARY TABLE IF EXISTS tmp_Msg_Error;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location_Link;
+ DROP TEMPORARY TABLE IF EXISTS tmp_Location;
+
+ IF a_debug = 1 THEN
+ CALL parts.p_core_debug_timing_reporting ( v_time_start );
+ END IF;
+END //
+DELIMITER ;
+
+
+/*
+
+CALL parts.p_dog_get_many_location (
+ 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
+ , 1 -- a_get_all_location
+ , 0 -- a_get_inactive_location
+ , '' -- a_ids_location
+ , '' -- a_names_location
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 1 -- a_require_any_non_id_search_filters_met
+ , 1 -- a_output_LOCATIONS
+ , 1 -- a_output_LOCATION_links
+ , 1 -- a_debug
+);
+
+
+CALL demo.p_dog_get_many_location (
+ 1 -- 'auth0|6582b95c895d09a70ba10fef', -- a_id_user
+ , 1 -- a_get_all_location
+ , 0 -- a_get_inactive_location
+ , '' -- a_ids_location
+ , 'pat,point' -- a_names_location
+ , 1 -- a_require_all_id_search_filters_met
+ , 1 -- a_require_any_id_search_filters_met
+ , 0 -- a_require_all_non_id_search_filters_met
+ , 1 -- a_require_any_non_id_search_filters_met
+ , 1 -- a_output_LOCATIONS
+ , 1 -- a_output_LOCATION_links
+ , 1 -- a_debug
+);
+
+*/
\ No newline at end of file
diff --git a/static/css/components/form.css b/static/css/components/form.css
index e69de29..235e8fa 100644
--- a/static/css/components/form.css
+++ b/static/css/components/form.css
@@ -0,0 +1,5 @@
+
+
+select {
+ border: 1px solid var(--colour-accent);
+}
\ No newline at end of file
diff --git a/static/css/layouts/header.css b/static/css/layouts/header.css
index 4937be6..cafec18 100644
--- a/static/css/layouts/header.css
+++ b/static/css/layouts/header.css
@@ -128,6 +128,7 @@ header {
#formFilters .container-input input {
width: 10vh;
max-width: 10vh;
+ height: 20px;
}
/*
#formFilters .container-input input {
@@ -145,15 +146,16 @@ header {
display: none;
}
#formFilters .container-input.filter.active_only svg.active_only {
- height: 2vh;
+ height: 25px;
fill: var(--colour-text-background);
- background-color: var(--colour-primary);
- border: 1px solid var(--colour-primary);
- width: 2vh;
- border-radius: 0.5vh;
+ background-color: var(--colour-accent);
+ /* border: 1px solid var(--colour-accent);
+ border-radius: 0.5vh; */
+ width: 25px;
}
#formFilters .container-input.filter.active_only svg.active_only.is_checked {
fill: var(--colour-accent);
+ background-color: var(--colour-text-background);
}
#formFilters .container-input.filter.is_not_empty {
width: 12vh;
diff --git a/static/css/layouts/table-main.css b/static/css/layouts/table-main.css
index b5c1f9b..6c99a9f 100644
--- a/static/css/layouts/table-main.css
+++ b/static/css/layouts/table-main.css
@@ -46,7 +46,7 @@
align-self: center;
position: relative;
display: block;
- width: min(calc(90vh), calc(70vw));
+ width: 100%; /* min(calc(90vh), calc(70vw)); */
}
#tableMain select,
diff --git a/static/css/main.css b/static/css/main.css
index 298a814..c541200 100644
--- a/static/css/main.css
+++ b/static/css/main.css
@@ -196,8 +196,9 @@ img.header-logo {
margin-top: 0;
}
-.container-input > input, .container-input > textarea {
- border: 2px solid var(--colour-primary);
+.container-input > input,
+.container-input > textarea {
+ border: 2px solid var(--colour-accent);
padding: 1vh;
}
diff --git a/static/css/pages/core/home.css b/static/css/pages/core/home.css
index 5c7521e..4400bff 100644
--- a/static/css/pages/core/home.css
+++ b/static/css/pages/core/home.css
@@ -23,7 +23,7 @@
.home-hero a {
font-size: 1.25rem;
margin-bottom: 2rem;
- color: var(--colour-text-background);
+ color: var(--colour-primary);
cursor: pointer;
margin-left: auto;
margin-right: auto;
diff --git a/static/css/pages/dog/command_categories.css b/static/css/pages/dog/command_categories.css
index b1a30d2..13c210b 100644
--- a/static/css/pages/dog/command_categories.css
+++ b/static/css/pages/dog/command_categories.css
@@ -4,26 +4,15 @@
min-width: 20vh;
}
+#tableMain tbody > div {
+ width: 58vh;
+}
#tableMain thead tr th,
#tableMain tbody tr td {
height: 3vh;
}
#tableMain tbody tr td.name .name {
border: 1px solid var(--colour-accent);
- /*
- align-content: center;
- align-items: center;
- align-self: center;
- text-align: center;
- justify-content: center;
- justify-items: center;
- justify-self: center;
- padding-top: auto;
- padding-bottom: auto;
- display: flex;
- resize: none;
- box-sizing: border-box;
- */
}
/*
#tableMain thead tr th.code,
diff --git a/static/css/pages/dog/commands.css b/static/css/pages/dog/commands.css
index fd72c7e..661f26f 100644
--- a/static/css/pages/dog/commands.css
+++ b/static/css/pages/dog/commands.css
@@ -4,6 +4,10 @@
max-width: fit-content;
}
*/
+
+#tableMain tbody > div {
+ width: 99vh;
+}
#tableMain thead tr th.can-have-button,
#tableMain tbody tr td.can-have-button {
width: 6vh;
diff --git a/static/css/pages/dog/dog_command_links.css b/static/css/pages/dog/dog_command_links.css
index c51c63b..1a22d08 100644
--- a/static/css/pages/dog/dog_command_links.css
+++ b/static/css/pages/dog/dog_command_links.css
@@ -4,32 +4,13 @@
}
*/
+
+#tableMain tbody > div {
+ width: 113vh;
+}
#tableMain {
max-width: 90vw;
}
-/*
-#tableMain thead tr th.category, #tableMain tbody tr td.category {
- width: 8vh;
- min-width: 8vh;
-}
-#tableMain thead tr th.product, #tableMain tbody tr td.product {
- width: 10vh;
- min-width: 10vh;
-}
-#tableMain thead tr th.product_variations.is_collapsed, #tableMain tbody tr td.product_variations.is_collapsed {
- width: 10vh;
- min-width: 10vh;
- display: table-cell !important;
-}
-#tableMain thead tr th.product_variations, #tableMain tbody tr td.product_variations {
- width: 24vh;
- min-width: 24vh;
-}
-#tableMain thead tr th.active, #tableMain tbody tr td.active {
- width: 6vh;
- min-width: 6vh;
-}
-*/
td > input,
td > select,
diff --git a/static/css/pages/dog/locations.css b/static/css/pages/dog/locations.css
new file mode 100644
index 0000000..dda1dd4
--- /dev/null
+++ b/static/css/pages/dog/locations.css
@@ -0,0 +1,5 @@
+
+
+#tableMain tbody > div {
+ width: 99vh;
+}
diff --git a/static/dist/css/core_home.bundle.css b/static/dist/css/core_home.bundle.css
index e6ce6c8..8b7bd60 100644
--- a/static/dist/css/core_home.bundle.css
+++ b/static/dist/css/core_home.bundle.css
@@ -23,7 +23,7 @@
.home-hero a {
font-size: 1.25rem;
margin-bottom: 2rem;
- color: var(--colour-text-background);
+ color: var(--colour-primary);
cursor: pointer;
margin-left: auto;
margin-right: auto;
diff --git a/static/dist/css/core_home.bundle.css.map b/static/dist/css/core_home.bundle.css.map
index ba4ec6e..3fc99ef 100644
--- a/static/dist/css/core_home.bundle.css.map
+++ b/static/dist/css/core_home.bundle.css.map
@@ -1 +1 @@
-{"version":3,"file":"css/core_home.bundle.css","mappings":";AACA,iBAAiB;AACjB;IACI,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,qBAAqB;IACrB,yBAAyB;IACzB,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,kBAAkB;IAClB,mBAAmB;IACnB,oCAAoC;IACpC,eAAe;IACf,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA,qBAAqB;AACrB;IACI,eAAe;IACf,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,2DAA2D;IAC3D,SAAS;IACT,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,wBAAwB;IACxB,kBAAkB;IAClB,+BAA+B;AACnC;;AAEA;IACI,2BAA2B;AAC/B;;AAEA,wBAAwB;AACxB;IACI,eAAe;IACf,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;IACjB,aAAa;IACb,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,qCAAqC;AACzC;;AAEA,oBAAoB;AACpB;IACI,eAAe;IACf,iBAAiB;AACrB;;AAEA;IACI,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;AACvB;;AAEA;IACI,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,cAAc;AAClB;;AAEA,gBAAgB;AAChB;IACI,eAAe;IACf,0BAA0B;IAC1B,YAAY;IACZ,kBAAkB;AACtB;;;AAGA,eAAe;AACf,4DAA4D;AAC5D;IACI,UAAU,EAAE,0BAA0B;AAC1C;;AAEA,iEAAiE;AACjE;IACI;QACI,UAAU;IACd;;IAEA;QACI,yCAAyC;IAC7C;AACJ;;AAEA;IACI;QACI,UAAU;QACV,2BAA2B;IAC/B;IACA;QACI,UAAU;QACV,wBAAwB;IAC5B;AACJ;;AAEA,WAAW,qBAAqB,EAAE;AAClC,WAAW,qBAAqB,EAAE;AAClC,WAAW,qBAAqB,EAAE;AAClC,WAAW,qBAAqB,EAAE,C","sources":["webpack://app/./static/css/pages/core/home.css"],"sourcesContent":["\n/* Hero Section */\n.home-hero {\n padding: 8rem 0 4rem;\n align-self: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.hero-content {\n max-width: 600px;\n}\n\n.home-hero h2 {\n font-size: 24px;\n line-height: 1.2;\n margin-bottom: 1.5rem;\n color: var(--colour-text); \n margin-left: auto;\n margin-right: auto;\n}\n\n.home-hero a {\n font-size: 1.25rem;\n margin-bottom: 2rem;\n color: var(--colour-text-background);\n cursor: pointer;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* Services Section */\n.services {\n padding: 6rem 0;\n background: white;\n}\n\n.services-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 2rem;\n margin-top: 3rem;\n}\n\n.service-card {\n padding: 2rem;\n background: var(--light);\n border-radius: 8px;\n transition: transform 0.3s ease;\n}\n\n.service-card:hover {\n transform: translateY(-5px);\n}\n\n/* Testimonial Section */\n.testimonial {\n padding: 6rem 0;\n background: var(--light);\n}\n\n.testimonial-card {\n background: white;\n padding: 2rem;\n border-radius: 8px;\n max-width: 800px;\n margin: 3rem auto 0;\n box-shadow: 0 4px 6px rgba(0,0,0,0.1);\n}\n\n/* Pricing Section */\n.pricing {\n padding: 6rem 0;\n background: white;\n}\n\n.pricing-card {\n background: var(--light);\n padding: 2rem;\n border-radius: 8px;\n text-align: center;\n max-width: 400px;\n margin: 3rem auto 0;\n}\n\n.price {\n font-size: 2.5rem;\n color: var(--primary);\n font-weight: bold;\n margin: 1rem 0;\n}\n\n/* CTA Section */\n.cta {\n padding: 6rem 0;\n background: var(--primary);\n color: white;\n text-align: center;\n}\n\n\n/* Animations */\n/* Fallback styles to ensure content is visible without JS */\n.reveal {\n opacity: 1; /* Default visible state */\n}\n\n/* Only hide elements if browser supports Intersection Observer */\n@supports (animation-name: fade) {\n .reveal {\n opacity: 0;\n }\n\n .reveal.active {\n animation: fade-up 0.8s ease-out forwards;\n }\n}\n\n@keyframes fade-up {\n 0% {\n opacity: 0;\n transform: translateY(30px);\n }\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.delay-1 { animation-delay: 0.1s; }\n.delay-2 { animation-delay: 0.2s; }\n.delay-3 { animation-delay: 0.3s; }\n.delay-4 { animation-delay: 0.4s; }"],"names":[],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"css/core_home.bundle.css","mappings":";AACA,iBAAiB;AACjB;IACI,oBAAoB;IACpB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;AACpB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,qBAAqB;IACrB,yBAAyB;IACzB,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,kBAAkB;IAClB,mBAAmB;IACnB,4BAA4B;IAC5B,eAAe;IACf,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA,qBAAqB;AACrB;IACI,eAAe;IACf,iBAAiB;AACrB;;AAEA;IACI,aAAa;IACb,2DAA2D;IAC3D,SAAS;IACT,gBAAgB;AACpB;;AAEA;IACI,aAAa;IACb,wBAAwB;IACxB,kBAAkB;IAClB,+BAA+B;AACnC;;AAEA;IACI,2BAA2B;AAC/B;;AAEA,wBAAwB;AACxB;IACI,eAAe;IACf,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;IACjB,aAAa;IACb,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;IACnB,qCAAqC;AACzC;;AAEA,oBAAoB;AACpB;IACI,eAAe;IACf,iBAAiB;AACrB;;AAEA;IACI,wBAAwB;IACxB,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,gBAAgB;IAChB,mBAAmB;AACvB;;AAEA;IACI,iBAAiB;IACjB,qBAAqB;IACrB,iBAAiB;IACjB,cAAc;AAClB;;AAEA,gBAAgB;AAChB;IACI,eAAe;IACf,0BAA0B;IAC1B,YAAY;IACZ,kBAAkB;AACtB;;;AAGA,eAAe;AACf,4DAA4D;AAC5D;IACI,UAAU,EAAE,0BAA0B;AAC1C;;AAEA,iEAAiE;AACjE;IACI;QACI,UAAU;IACd;;IAEA;QACI,yCAAyC;IAC7C;AACJ;;AAEA;IACI;QACI,UAAU;QACV,2BAA2B;IAC/B;IACA;QACI,UAAU;QACV,wBAAwB;IAC5B;AACJ;;AAEA,WAAW,qBAAqB,EAAE;AAClC,WAAW,qBAAqB,EAAE;AAClC,WAAW,qBAAqB,EAAE;AAClC,WAAW,qBAAqB,EAAE,C","sources":["webpack://app/./static/css/pages/core/home.css"],"sourcesContent":["\n/* Hero Section */\n.home-hero {\n padding: 8rem 0 4rem;\n align-self: center;\n margin-left: auto;\n margin-right: auto;\n}\n\n.hero-content {\n max-width: 600px;\n}\n\n.home-hero h2 {\n font-size: 24px;\n line-height: 1.2;\n margin-bottom: 1.5rem;\n color: var(--colour-text); \n margin-left: auto;\n margin-right: auto;\n}\n\n.home-hero a {\n font-size: 1.25rem;\n margin-bottom: 2rem;\n color: var(--colour-primary);\n cursor: pointer;\n margin-left: auto;\n margin-right: auto;\n}\n\n/* Services Section */\n.services {\n padding: 6rem 0;\n background: white;\n}\n\n.services-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 2rem;\n margin-top: 3rem;\n}\n\n.service-card {\n padding: 2rem;\n background: var(--light);\n border-radius: 8px;\n transition: transform 0.3s ease;\n}\n\n.service-card:hover {\n transform: translateY(-5px);\n}\n\n/* Testimonial Section */\n.testimonial {\n padding: 6rem 0;\n background: var(--light);\n}\n\n.testimonial-card {\n background: white;\n padding: 2rem;\n border-radius: 8px;\n max-width: 800px;\n margin: 3rem auto 0;\n box-shadow: 0 4px 6px rgba(0,0,0,0.1);\n}\n\n/* Pricing Section */\n.pricing {\n padding: 6rem 0;\n background: white;\n}\n\n.pricing-card {\n background: var(--light);\n padding: 2rem;\n border-radius: 8px;\n text-align: center;\n max-width: 400px;\n margin: 3rem auto 0;\n}\n\n.price {\n font-size: 2.5rem;\n color: var(--primary);\n font-weight: bold;\n margin: 1rem 0;\n}\n\n/* CTA Section */\n.cta {\n padding: 6rem 0;\n background: var(--primary);\n color: white;\n text-align: center;\n}\n\n\n/* Animations */\n/* Fallback styles to ensure content is visible without JS */\n.reveal {\n opacity: 1; /* Default visible state */\n}\n\n/* Only hide elements if browser supports Intersection Observer */\n@supports (animation-name: fade) {\n .reveal {\n opacity: 0;\n }\n\n .reveal.active {\n animation: fade-up 0.8s ease-out forwards;\n }\n}\n\n@keyframes fade-up {\n 0% {\n opacity: 0;\n transform: translateY(30px);\n }\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.delay-1 { animation-delay: 0.1s; }\n.delay-2 { animation-delay: 0.2s; }\n.delay-3 { animation-delay: 0.3s; }\n.delay-4 { animation-delay: 0.4s; }"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/static/dist/css/main.bundle.css b/static/dist/css/main.bundle.css
index 78ba433..bc0720d 100644
--- a/static/dist/css/main.bundle.css
+++ b/static/dist/css/main.bundle.css
@@ -196,8 +196,9 @@ img.header-logo {
margin-top: 0;
}
-.container-input > input, .container-input > textarea {
- border: 2px solid var(--colour-primary);
+.container-input > input,
+.container-input > textarea {
+ border: 2px solid var(--colour-accent);
padding: 1vh;
}
@@ -289,6 +290,10 @@ input.dirty, textarea.dirty, select.dirty {
+select {
+ border: 1px solid var(--colour-accent);
+}
+
img, video {
border-radius: 3vh;
}
@@ -645,6 +650,7 @@ header {
#formFilters .container-input input {
width: 10vh;
max-width: 10vh;
+ height: 20px;
}
/*
#formFilters .container-input input {
@@ -662,15 +668,16 @@ header {
display: none;
}
#formFilters .container-input.filter.active_only svg.active_only {
- height: 2vh;
+ height: 25px;
fill: var(--colour-text-background);
- background-color: var(--colour-primary);
- border: 1px solid var(--colour-primary);
- width: 2vh;
- border-radius: 0.5vh;
+ background-color: var(--colour-accent);
+ /* border: 1px solid var(--colour-accent);
+ border-radius: 0.5vh; */
+ width: 25px;
}
#formFilters .container-input.filter.active_only svg.active_only.is_checked {
fill: var(--colour-accent);
+ background-color: var(--colour-text-background);
}
#formFilters .container-input.filter.is_not_empty {
width: 12vh;
@@ -792,7 +799,7 @@ form.filter button.save, form.filter button.button-cancel {
align-self: center;
position: relative;
display: block;
- width: min(calc(90vh), calc(70vw));
+ width: 100%; /* min(calc(90vh), calc(70vw)); */
}
#tableMain select,
diff --git a/static/dist/css/main.bundle.css.map b/static/dist/css/main.bundle.css.map
index 43e7c88..626ece2 100644
--- a/static/dist/css/main.bundle.css.map
+++ b/static/dist/css/main.bundle.css.map
@@ -1 +1 @@
-{"version":3,"file":"css/main.bundle.css","mappings":"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;AAC3B;IACI,eAAe;IACf,kBAAkB;IAClB,QAAQ;IACR,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,WAAW;AACf;AACA;IACI,eAAe;IACf,eAAe;IACf,cAAc;IACd,cAAc;AAClB;AACA;;;;;CAKC;AACD;IACI,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;AACpB;AACA;IACI,sCAAsC;IACtC,kBAAkB;AACtB;AACA;IACI,4BAA4B;IAC5B,6BAA6B;AACjC;AACA;IACI,+BAA+B;IAC/B,gCAAgC;AACpC;;AAEA;IACI,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;IAClB,WAAW;IACX,+BAA+B;IAC/B,iBAAiB;IACjB,eAAe;IACf,kBAAkB;AACtB;AACA;IACI,oCAAoC;IACpC,uCAAuC;AAC3C;AACA;IACI,WAAW;IACX;;;KAGC;AACL;AACA;IACI,kBAAkB;IAClB,qBAAqB;AACzB;;AAEA;IACI;QACI,eAAe;QACf,eAAe;QACf,gBAAgB;QAChB,gBAAgB;IACpB;IACA;QACI,eAAe;QACf,eAAe;QACf,cAAc;QACd,cAAc;IAClB;IACA;QACI,SAAS;QACT,YAAY;QACZ,kBAAkB;IACtB;AACJ;;AAEA,oBAAoB;AACpB;IACI,kBAAkB;IAClB,UAAU;IACV,WAAW;IACX,YAAY;AAChB;;AAEA;IACI,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;AACvB;AACA;IACI,kBAAkB;AACtB;;;;;AChIA;IACI,sBAAsB;AAC1B;;AAEA;IACI,2BAA2B;IAC3B,8BAA8B;AAClC;;AAEA;IACI,6BAA6B;AACjC;AACA;IACI,mCAAmC;AACvC;;AAEA;IACI,sBAAsB;AAC1B;AACA;IACI,8CAA8C;AAClD;AACA;IACI,uBAAuB;AAC3B;AACA;IACI,8BAA8B;AAClC;AACA;IACI,uCAAuC;AAC3C;AACA;IACI,6BAA6B;AACjC;;AAEA;IACI,eAAe;IACf,wBAAwB;IACxB,qBAAqB;IACrB,kCAAkC;IAClC,6BAA6B;AACjC;;AAEA;IACI,cAAc;IACd,kBAAkB;AACtB;;AAEA;IACI,+CAA+C;AACnD;;AAEA;IACI,qCAAqC;AACzC;;AAEA;IACI,qBAAqB;AACzB,C;;AC1DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCC;;;AAGD,eAAe;AACf;IACI,gCAAgC;IAChC,iCAAiC;IACjC,aAAa;IACb,eAAe;IACf,OAAO;IACP,mBAAmB;IACnB,iBAAiB;IACjB,cAAc;IACd,gBAAgB;IAChB,YAAY;IACZ,uBAAuB;AAC3B;AACA;IACI,WAAW;IACX,aAAa;IACb,kBAAkB;IAClB,qBAAqB;IACrB,WAAW;IACX,gBAAgB;IAChB,mBAAmB;IACnB,uBAAuB;AAC3B;AACA;IACI,+CAA+C;AACnD;;AAEA;IACI,cAAc;IACd,YAAY;IACZ,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;AACjB;AACA;IACI,eAAe;IACf,eAAe;AACnB;AACA;IACI,6BAA6B;IAC7B,6BAA6B;AACjC;AACA;IACI,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,sCAAsC;IACtC,iBAAiB;IACjB,kBAAkB;IAClB,WAAW;AACf;AACA;IACI,UAAU;AACd;AACA;IACI,mCAAmC;AACvC;AACA;;;;;;CAMC;AACD,iBAAiB;AACjB;IACI,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;;AAEtB;AACA;IACI,eAAe;AACnB;;AAEA;AACA;AACA;IACI,sBAAsB;IACtB,gBAAgB;AACpB;AACA;IACI,sCAAsC;AAC1C;;AAEA;IACI,WAAW;IACX,eAAe;AACnB;AACA;;;;;;;CAOC;;AAED;IACI,UAAU;AACd;AACA;IACI,aAAa;AACjB;AACA;IACI,WAAW;IACX,mCAAmC;IACnC,uCAAuC;IACvC,uCAAuC;IACvC,UAAU;IACV,oBAAoB;AACxB;AACA;IACI,0BAA0B;AAC9B;AACA;IACI,WAAW;AACf;;AAEA;;;;;;;;;;;;;;CAcC;;AAED;IACI,aAAa;IACb,gBAAgB;AACpB;AACA;IACI,aAAa;IACb,kBAAkB;AACtB;;;AAGA;IACI;QACI,iBAAiB;IACrB;IACA;QACI,eAAe;IACnB;AACJ,C;;ACjMA,WAAW;AACX;IACI,gBAAgB;IAChB,kBAAkB;IAClB,SAAS;IACT,eAAe;IACf,gBAAgB;IAChB,sCAAsC;IACtC,kBAAkB;IAClB,SAAS;IACT,WAAW;AACf;;AAEA;IACI;QACI,eAAe;QACf,cAAc;QACd,eAAe;QACf,WAAW;QACX,eAAe;IACnB;IACA;QACI,eAAe;IACnB;IACA;QACI,cAAc;IAClB;AACJ;;AAEA;IACI,UAAU;IACV,SAAS;AACb,C;;AChCA;IACI,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;IAChB,eAAe,EAAE,yCAAyC;IAC1D,kBAAkB;IAClB,mBAAmB;IACnB,uBAAuB;AAC3B;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,eAAe;IACf,mBAAmB;AACvB;;AAEA;IACI,gBAAgB;IAChB,gBAAgB;IAChB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;AACvB;AACA;IACI,cAAc;AAClB;AACA;AACA;AACA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,uBAAuB;IACvB,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;IACnB,kBAAkB;IAClB,kBAAkB;IAClB,cAAc;IACd,kCAAkC;AACtC;;AAEA;;;;IAII,sBAAsB;IACtB,WAAW;IACX,YAAY;IACZ,sCAAsC;IACtC,oBAAoB;IACpB,kBAAkB;AACtB;;AAEA;IACI,WAAW;IACX,eAAe;IACf,gBAAgB;AACpB;AACA;IACI,WAAW;IACX,wBAAwB;AAC5B;AACA;IACI,uCAAuC;AAC3C;AACA;IACI,sBAAsB;AAC1B;AACA;;IAEI,iBAAiB;IACjB,kBAAkB;AACtB;AACA;IACI,eAAe;AACnB;AACA;;IAEI,UAAU;IACV,cAAc;AAClB;AACA;IACI,2BAA2B;IAC3B,sCAAsC;IACtC,sCAAsC;IACtC,UAAU;IACV,kBAAkB;AACtB;AACA;IACI,2BAA2B;AAC/B;AACA;IACI,yBAAyB;AAC7B;AACA;;IAEI,UAAU;IACV,cAAc;AAClB;;AAEA;IACI,aAAa;AACjB;;;AAGA;AACA;AACA;IACI;;QAEI,WAAW;QACX,iBAAiB;IACrB;IACA;QACI,gBAAgB;IACpB;IACA;QACI,gBAAgB;IACpB;AACJ,C;;;ACjIA;IACI,kBAAkB;AACtB;;AAEA;IACI,eAAe;IACf,mBAAmB;AACvB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI;QACI,iBAAiB;IACrB;;IAEA;QACI,aAAa;IACjB;AACJ,C;;ACrBA,YAAY;AACZ;IACI,kCAAkC;IAClC,wBAAwB;IACxB,mBAAmB;IACnB,iCAAiC;IACjC,mCAAmC;IACnC,mCAAmC;IACnC,yBAAyB;IACzB,2BAA2B;IAC3B,sBAAsB;IACtB,+BAA+B;IAC/B,qCAAqC;IACrC,mCAAmC;AACvC;;AAEA;;;;;;;;;;;;;;;;CAgBC,C","sources":["webpack://app/./static/css/main.css","webpack://app/./static/css/components/button.css","webpack://app/./static/css/components/image.css","webpack://app/./static/css/components/label.css","webpack://app/./static/css/components/overlay.css","webpack://app/./static/css/components/table.css","webpack://app/./static/css/layouts/header.css","webpack://app/./static/css/layouts/footer.css","webpack://app/./static/css/layouts/table-main.css","webpack://app/./static/css/lib/utils.css","webpack://app/./static/css/themes/light.css"],"sourcesContent":["\n:root {\n --font-family-base: 'Open Sans', Arial, sans-serif;\n /* Declare global variables */\n /*\n --c_purple: #5B29FF;\n --c_purple_pastel: #D1D1FF;\n --c_purple_lighter: #E8E1FF;\n --c_purple_light: #C6BDFF;\n --c_purple_dark: #4700B3;\n */\n /* purple theme\n - light https://coolors.co/palette/a172fd-a77afe-ac82fe-b691fe-c1a0fe-cbaffe-d6bffe-e0cefe-ebddfe-f5ecfe\n - dark https://coolors.co/palette/310055-3c0663-4a0a77-5a108f-6818a5-8b2fc9-ab51e3-bd68ee-d283ff-dc97ff\n */\n /*\n --c_purple_darker: #310055;\n --c_purple_dark: #4A0A77;\n --c_purple: #6818A5;\n --c_purple_light: #CBAFFE;\n --c_purple_lighter: #F5ECFE;\n\n --c_blue: #0044FF;\n --c_blue_pastel: #B8E0FF;\n --c_blue_light: #73E8FF;\n --c_blue_dark: #003ADB;\n */\n /* --c_red: * /\n --c-red: #FF0000;\n --c_red_pastel: #FAE0E2;\n --c_red_lighter: #FAE0E2;\n */\n}\n\nhtml {\n height: 100vh;\n /* overflow-y: clip; */\n}\n\nbody {\n background-color: var(--colour-page-background);\n color: var(--colour-text);\n font-family: var(--font-family-base);\n font-family: Arial;\n padding: 0;\n margin: 0;\n border: 0;\n background: linear-gradient(to bottom right, var(--colour-page-background-1), var(--colour-page-background-2)); /* var(--c_purple); */\n height: 100vh;\n /* max-height: 100vh;\n overflow-y: clip; */\n}\n\n* {\n margin: 0;\n}\n\nscript, link {\n display: none !important;\n}\n\n#pageBody {\n /* height: 69vh !important; */\n max-height: 79vh;\n padding: 0 5vw;\n margin: 0;\n border: 0;\n align-content: center;\n justify-content: flex-start;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n width: 90vw;\n color: var(--colour-text);\n}\n\n.page-body > * {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n align-self: center;\n font-size: min(16px, calc(1vh * 4));\n}\n#pageBody > * > * {\n align-self: center;\n padding-top: 0.5vh;\n padding-bottom: 0.5vh;\n}\n#pageBody > .card {\n height: fit-content;\n margin: 0.5vh auto;\n}\n\n/* header image */\nimg.header-logo {\n max-height: 15vh;\n max-width: 15vh;\n cursor: pointer;\n border-radius: 3vh;\n}\n\n/* icon images */\n.img-icon {\n max-width: 16vh;\n max-height: 8vh;\n border-radius: 0;\n}\n\n/* Add a card effect for articles */\n.card {\n background-color: var(--colour-text-background);\n padding: 1vh 2.5vw;\n margin: 1vh;\n display: flex !important;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n border-radius: 1.5vh;\n position: relative;\n height: fit-content;\n max-width: 80vw;\n}\n\n.header.card {\n border-radius: 2.5vh;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.container {\n flex: 1;\n margin: 0px;\n align-items: flex-start;\n justify-content: flex-start;\n text-align: flex-start;\n /* max-width: 100%; */\n /* min-width: fit-content; */\n}\n\n.column {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: auto 0;\n}\n\n.row {\n display: flex; \n flex-direction: row;\n width: 100%;\n flex-wrap: wrap;\n}\n\n.container > .card:first-of-type {\n margin-top: none;\n}\n\n\n/*\n/* Responsive layout - when the screen is less than 800px wide, make the two columns stack on top of each other instead of next to each other *\n@media screen and (max-width: 800px) {\n .leftcolumn, .rightcolumn { \n width: 100%;\n /* padding: 0; *\n }\n}\n\n/* Responsive layout - when the screen is less than 400px wide, make the navigation links stack on top of each other instead of next to each other *\n@media screen and (max-width: 400px) {\n .topnav a {\n float: none;\n width: 100%;\n }\n}\n*/\n\n.container-input {\n padding: 1vh;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.container-input > label {\n width: 100%;\n margin-bottom: 1vh;\n margin-top: 0;\n}\n\n.container-input > input, .container-input > textarea {\n border: 2px solid var(--colour-primary);\n padding: 1vh;\n}\n\n.label-title {\n width: 100%;\n}\n\n\nul {\n max-width: 90%;\n padding: 5px 0 10px 0;\n}\nli {\n text-align: left;\n font-size: 18px;\n}\n\n\n:not(input,textarea,select,button).dirty {\n background-color: var(--colour-accent);\n}\ninput.dirty, textarea.dirty, select.dirty {\n border-color: var(--colour-primary);\n}\n\n\n#pageBody > *, button {\n font-size: min(12px, calc(1vh * 3));\n}\n\n\n\n@media screen and (max-width: 400px) {\n img.header-logo {\n border-radius: 3vh;\n }\n /*\n .company-name {\n font-size: 14px;\n }\n */\n}",".button {\n display: inline-block;\n padding: 0.5vh 0.75vh;\n border-radius: 0.75vh;\n text-decoration: none;\n font-weight: bold;\n transition: all 0.3s ease;\n width: fit-content;\n}\n.button:not(.is_collapsed) {\n cursor: pointer;\n}\n.button.is_collapsed {\n display: block;\n opacity: 0;\n}\n\n.button-primary {\n background: var(--colour-accent);\n color: var(--colour-primary);\n border: 2px solid var(--colour-primary);\n}\n\n.button-primary:hover {\n background: var(--colour-secondary);\n}\n\n.button-light {\n background: white;\n color: var(--colour-primary);\n}\n\n.button-light:hover {\n background: var(--colour-accent);\n}\n\n.logo:hover{\n cursor: pointer;\n}\n\n\n.button.icon.active.delete, \n.button.icon.active.add {\n height: 2vh;\n}","\nimg, video {\n border-radius: 3vh;\n}\n","\nh1 {\n font-size: min(24px, calc(1vh * 6));\n}\n\nh2 {\n font-size: min(20px, calc(1vh * 5));\n}\n\nh3 {\n font-size: min(16px, calc(1vh * 4));\n margin-top: 1vh;\n}\n\nh4 {\n font-size: 13px;\n margin: 1vh;\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\nh5 {\n font-size: 11px;\n margin: 1vh;\n}\n","\n\n/* Overlay modal */\n.overlay {\n /*\n display: none;\n */\n position: fixed;\n width: 100px;\n /* height: 50%; */ \n background: var(--colour-page-background);\n justify-content: right;\n align-items: right;\n align-self: right;\n z-index: 999;\n}\n.is_collapsed {\n display: none;\n}\n\n/* Hamburger menu overlay */\n#buttonHamburger {\n cursor: pointer;\n position: absolute;\n right: 0;\n min-height: 4vh;\n max-height: 4vh;\n min-width: 4.5vh;\n max-width: 4.5vh;\n z-index: 10;\n}\n#buttonHamburger .icon.hamburger {\n min-height: 3vh;\n max-height: 3vh;\n min-width: 3vh;\n max-width: 3vh;\n}\n/*\n#buttonHamburger:hover {\n text-decoration: none;\n cursor: pointer;\n}\n*/\n#overlayHamburger {\n top: 20vh;\n right: 0.75vh;\n overflow-x: hidden;\n overflow-y: auto;\n max-height: 60vh;\n}\n#overlayHamburger {\n border: 2px solid var(--border-colour);\n border-radius: 4px;\n}\n#overlayHamburger:first-child {\n border-top-left-radius: 12px;\n border-top-right-radius: 12px;\n}\n#overlayHamburger:last-child {\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px;\n}\n\n#overlayHamburger > * {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n /* color: var(--colour-text); */\n font-weight: bold;\n font-size: 15px;\n /* height: 18px; */\n}\n#overlayHamburger > :hover {\n color: var(--colour-page-background);\n background-color: var(--colour-primary);\n}\n#overlayHamburger > * > * {\n width: 100%;\n /*\n margin-top: 4.5px;\n margin-bottom: 4.5px;\n */\n}\n#overlayHamburger > .container {\n padding-top: 4.5px;\n padding-bottom: 4.5px;\n}\n\n@media screen and (max-width: 400px) {\n #buttonHamburger {\n min-height: 6vh;\n max-height: 6vh;\n min-width: 6.5vh;\n max-width: 6.5vh;\n }\n #buttonHamburger .icon.hamburger {\n min-height: 5vh;\n max-height: 5vh;\n min-width: 5vh;\n max-width: 5vh;\n }\n #overlayHamburger {\n top: 22vh;\n width: 100px;\n /* right: 6.5vh; */\n }\n}\n\n/* Confirm overlay */\n#overlayConfirm {\n position: absolute;\n left: 25vw;\n width: 50vw;\n height: 50vh;\n}\n\n#overlayConfirm .row > * {\n margin-left: auto;\n margin-right: auto;\n}\n\n#overlayConfirm .row .button.button-cancel {\n margin-right: 0.5vh;\n}\n#overlayConfirm .row .button.submit {\n margin-left: 0.5vh;\n}\n\n\n","\n#formFilters .container {\n max-width: fit-content;\n}\n\nthead, tbody {\n padding-top: 0px !important;\n padding-bottom: 0px !important;\n}\n\nth {\n background-color: transparent;\n}\ntd {\n font-size: min(12px, calc(1vh * 3));\n}\n\nth, td {\n min-width: fit-content;\n}\ntr:not(:last-child) > td {\n border-bottom: 1px dashed var(--border-colour);\n}\ntd > table > tbody > tr > td {\n border: none !important;\n}\nth.is_collapsed, td.is_collapsed {\n display: table-cell !important;\n}\ntd.dirty {\n background-color: var(--colour-primary);\n}\ntd:not(.dirty) {\n background-color: transparent;\n}\n\ntr {\n min-height: 1px;\n border-bottom: 1px solid;\n border-top: 1px solid;\n border-color: var(--border-colour);\n background-color: transparent;\n}\n\ntable button {\n margin: 0.25vh;\n padding: 0.5vh 1vh;\n}\n\ntable button.active {\n background-color: var(--colour-page-background);\n}\n\ntr.delete, tr.delete > td {\n background-color: var(--colour-error);\n}\n\ntable div {\n align-content: center;\n}","\n/*\nheader {\n background: white;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n / * position: fixed;\n top: 0; * /\n width: 100%;\n z-index: 1000;\n}\n\n.navbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 0;\n}\n\n.logo {\n font-size: 1.5rem;\n font-weight: bold;\n color: var(--primary);\n}\n\n.nav-links {\n display: flex;\n gap: 2rem;\n}\n\n.nav-links a {\n text-decoration: none;\n color: var(--text);\n font-weight: 500;\n align-content: center;\n}\n.nav-links a.button {\n color: white;\n}\n*/\n\n\n/* Navigation */\n.topnav {\n border-bottom-left-radius: 2.5vh;\n border-bottom-right-radius: 2.5vh;\n display: flex;\n flex-wrap: wrap;\n flex: 1;\n flex-direction: row;\n font-weight: bold;\n font-size: 1vh;\n max-height: 15vh;\n height: 15vh;\n align-items: flex-start;\n}\n.topnav a, .topnav label, .topnav p, .topnav h1 {\n float: left;\n display: flex;\n text-align: center;\n text-decoration: none;\n width: 100%;\n max-height: 15vh;\n font-weight: normal;\n justify-content: center;\n}\n.topnav a:hover {\n background-color: var(--colour-page-background);\n}\n\n.topnav > .container {\n max-width: 50%;\n height: 100%;\n align-items: center;\n align-self: center;\n display: flex;\n}\n.topnav > .container.header-logo {\n min-width: 15vh;\n max-width: 15vh;\n}\n.topnav > .container.company-name {\n min-width: calc(100vw - 30vh);\n max-width: calc(100vw - 30vh);\n}\n.topnav select {\n padding: 1vh;\n margin: 1vh;\n border-radius: 1vh;\n border: 2px solid var(--border-colour);\n font-weight: bold;\n text-align: center;\n width: 25vw;\n}\n.topnav select .is_collapsed {\n width: 5vw;\n}\n.company-name {\n font-size: min(28px, calc(1vh * 7));\n}\n/*\n@media screen and (max-width: 450px) {\n .company-name {\n font-size: 18px; / * min(24px, calc(1vh * 7)); * /\n }\n}\n*/\n/* Page Filters */\n#formFilters {\n width: fit-content;\n margin-left: auto;\n margin-right: auto;\n \n}\n#formFilters * {\n font-size: 12px;\n}\n\n#formFilters .container {\n}\n#formFilters .container-input {\n max-width: fit-content;\n padding: 0 0.5vh;\n}\n#formFilters .container-input:has(.dirty) {\n background-color: var(--colour-accent);\n} \n\n#formFilters .container-input input {\n width: 10vh;\n max-width: 10vh;\n}\n/*\n#formFilters .container-input input {\n height: 1.7vh;\n}\n#formFilters .container-input select {\n height: 2vh;\n}\n*/\n\n#formFilters .container-input.filter.active_only {\n width: 8vh;\n}\n#formFilters .container-input.filter.active_only input {\n display: none;\n}\n#formFilters .container-input.filter.active_only svg.active_only {\n height: 2vh;\n fill: var(--colour-text-background);\n background-color: var(--colour-primary);\n border: 1px solid var(--colour-primary);\n width: 2vh;\n border-radius: 0.5vh;\n}\n#formFilters .container-input.filter.active_only svg.active_only.is_checked {\n fill: var(--colour-accent);\n}\n#formFilters .container-input.filter.is_not_empty {\n width: 12vh;\n}\n\n/*\n#formFilters button {\n padding: 0.5vh 0.75vh;\n background-color: var(--colour-accent);\n color: var(--colour-primary);\n font-weight: bold;\n border-radius: 0.75vh;\n border: 2px solid var(--colour-primary);\n}\n\n#formFilters button.is_collapsed {\n display: block;\n opacity: 0;\n}\n*/\n\nform.filter button.save, form.filter button.button-cancel {\n margin-top: 0;\n margin-bottom: 0;\n}\nform.filter button.save, form.filter button.button-cancel {\n margin-top: 0;\n margin-bottom: 1px;\n}\n\n\n@media screen and (max-width: 400px) {\n #formFilters .container-input select {\n /* height: 3vh; */\n }\n .topnav h1 {\n font-size: 16px;\n }\n}","\n/* Footer */\n.footer {\n padding: 1vh 1vw;\n text-align: center;\n margin: 0;\n max-height: 5vh;\n overflow-y: auto;\n background-color: var(--colour-accent);\n position: absolute;\n bottom: 0;\n width: 98vw;\n}\n\n@media screen and (max-width: 400px) {\n .footer {\n max-height: 8vh;\n padding: 0 2vw;\n font-size: 10px; \n width: 96vw;\n max-width: 96vw;\n }\n .footer > h4 {\n font-size: 10px;\n }\n .footer > h5 {\n font-size: 9px;\n }\n}\n\n.footer > h4, h5 {\n padding: 0;\n margin: 0;\n}","\n#formFilters {\n padding: 0.5vh 1vw;\n margin-top: 1vh;\n}\n\n#tableMain {\n overflow-x: auto;\n padding: 1vh 1vw;\n max-width: 88vw; /* min(calc(1vh * 80), calc(1vw * 90)); */\n width: min-content;\n align-items: normal;\n justify-content: normal;\n}\n\n#tableMain * {\n padding: 0.25vh 0.5vh;\n}\n\n#tableMain thead {\n max-height: 4vh;\n overflow-y: visible;\n}\n\n#tableMain tbody {\n max-height: 60vh;\n overflow-y: auto;\n min-width: fit-content;\n max-width: fit-content;\n overflow-x: visible;\n}\n#tableMain tbody.is_collapsed {\n display: block;\n}\n#tableMain:has(tbody > div) tbody {\n}\n#tableMain tbody > div {\n margin-left: auto;\n margin-right: auto;\n text-align: center;\n justify-content: center;\n justify-items: center;\n justify-self: center;\n align-content: center;\n align-items: center;\n align-self: center;\n position: relative;\n display: block;\n width: min(calc(90vh), calc(70vw));\n}\n\n#tableMain select, \n#tableMain input:not([type=\"checkbox\"]), \n#tableMain textarea, \n#tableMain div {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border: 1px solid var(--colour-accent);\n border-radius: 0.5vh;\n text-align: center;\n}\n\n#tableMain thead tr th, #tableMain tbody tr td {\n width: 20vh;\n min-width: 20vh;\n padding: 0 0.5vh;\n}\n#tableMain tbody tr td {\n height: 5vh;\n /* padding-top: 0.5vh; */\n}\n#tableMain tbody tr td:has(.dirty) {\n background-color: var(--colour-primary);\n}\n#tableMain tbody tr:not(:last-of-type) td {\n padding-bottom: 0.25vh;\n}\n#tableMain tbody tr td.ddl-preview div,\n#tableMain tbody tr td.ddl-preview select {\n padding-left: 2vh;\n padding-right: 2vh;\n}\n#tableMain tbody tr td.ddl-preview select {\n font-size: 12px;\n}\n#tableMain thead tr th.active, \n#tableMain tbody tr td.active {\n width: 6vh;\n min-width: 6vh;\n}\n#tableMain thead tr th.active svg.active.add {\n fill: var(--colour-primary);\n background-color: var(--colour-accent);\n border: 2px solid var(--colour-accent);\n padding: 0;\n border-radius: 1vh;\n}\n#tableMain tbody tr td.active svg.active.add {\n fill: var(--colour-primary);\n}\n#tableMain tbody tr td.active svg.active.delete {\n fill: var(--colour-error);\n}\n#tableMain tbody tr td.display_order, \n#tableMain thead tr th.display_order {\n width: 5vh;\n min-width: 5vh;\n}\n\n#container-template-elements {\n display: none;\n}\n\n\n@media screen and (max-width: 850px) {\n}\n@media screen and (max-width: 400px) {\n #formFilters input[type=\"text\"],\n #formFilters select {\n width: 15vh;\n /* height: 3vh; */\n }\n #tableMain {\n max-height: 60vh;\n }\n #tableMain tbody {\n max-height: 53vh;\n }\n}",".text-center {\n text-align: center;\n}\n\n.section-title {\n font-size: 2rem;\n margin-bottom: 1rem;\n}\n\n.section-subtitle {\n margin-bottom: 2rem;\n}\n\n@media (max-width: 768px) {\n .hero h1 {\n font-size: 2.5rem;\n }\n \n .nav-links {\n display: none;\n }\n}","/* Default */\n:root {\n /* Claude dark blue / grey theme */\n --colour-accent: #C77DFF;\n --colour-error: red;\n --colour-page-background: #E0AAFF;\n --colour-page-background-1: #F5ECFE;\n --colour-page-background-2: #FAE0E2;\n --colour-primary: #240046;\n --colour-secondary: #3C096C;\n --colour-text: #10002B;\n --colour-text-background: white;\n --colour-text-link-unvisited: #0000EE;\n --colour-text-link-visited: #551A8B;\n}\n\n/*\n--c_purple_darker: #310055;\n--c_purple_dark: #4A0A77;\n--c_purple: #6818A5;\n--c_purple_light: #CBAFFE;\n--c_purple_lighter: #F5ECFE;\n\n--c_blue: #0044FF;\n--c_blue_pastel: #B8E0FF;\n--c_blue_light: #73E8FF;\n--c_blue_dark: #003ADB;\n/* --c_red: * /\n--c-red: #FF0000;\n--c_red_pastel: #FAE0E2;\n--c_red_lighter: #FAE0E2;\n}\n*/"],"names":[],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"css/main.bundle.css","mappings":"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ACI,aAAa;AACjB;;AAEA,2BAA2B;AAC3B;IACI,eAAe;IACf,kBAAkB;IAClB,QAAQ;IACR,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,gBAAgB;IAChB,WAAW;AACf;AACA;IACI,eAAe;IACf,eAAe;IACf,cAAc;IACd,cAAc;AAClB;AACA;;;;;CAKC;AACD;IACI,SAAS;IACT,aAAa;IACb,kBAAkB;IAClB,gBAAgB;IAChB,gBAAgB;AACpB;AACA;IACI,sCAAsC;IACtC,kBAAkB;AACtB;AACA;IACI,4BAA4B;IAC5B,6BAA6B;AACjC;AACA;IACI,+BAA+B;IAC/B,gCAAgC;AACpC;;AAEA;IACI,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,uBAAuB;IACvB,kBAAkB;IAClB,WAAW;IACX,+BAA+B;IAC/B,iBAAiB;IACjB,eAAe;IACf,kBAAkB;AACtB;AACA;IACI,oCAAoC;IACpC,uCAAuC;AAC3C;AACA;IACI,WAAW;IACX;;;KAGC;AACL;AACA;IACI,kBAAkB;IAClB,qBAAqB;AACzB;;AAEA;IACI;QACI,eAAe;QACf,eAAe;QACf,gBAAgB;QAChB,gBAAgB;IACpB;IACA;QACI,eAAe;QACf,eAAe;QACf,cAAc;QACd,cAAc;IAClB;IACA;QACI,SAAS;QACT,YAAY;QACZ,kBAAkB;IACtB;AACJ;;AAEA,oBAAoB;AACpB;IACI,kBAAkB;IAClB,UAAU;IACV,WAAW;IACX,YAAY;AAChB;;AAEA;IACI,iBAAiB;IACjB,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;AACvB;AACA;IACI,kBAAkB;AACtB;;;;;AChIA;IACI,sBAAsB;AAC1B;;AAEA;IACI,2BAA2B;IAC3B,8BAA8B;AAClC;;AAEA;IACI,6BAA6B;AACjC;AACA;IACI,mCAAmC;AACvC;;AAEA;IACI,sBAAsB;AAC1B;AACA;IACI,8CAA8C;AAClD;AACA;IACI,uBAAuB;AAC3B;AACA;IACI,8BAA8B;AAClC;AACA;IACI,uCAAuC;AAC3C;AACA;IACI,6BAA6B;AACjC;;AAEA;IACI,eAAe;IACf,wBAAwB;IACxB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","sources":["webpack://app/./static/css/main.css","webpack://app/./static/css/components/button.css","webpack://app/./static/css/components/form.css","webpack://app/./static/css/components/image.css","webpack://app/./static/css/components/label.css","webpack://app/./static/css/components/overlay.css","webpack://app/./static/css/components/table.css","webpack://app/./static/css/layouts/header.css","webpack://app/./static/css/layouts/footer.css","webpack://app/./static/css/layouts/table-main.css","webpack://app/./static/css/lib/utils.css","webpack://app/./static/css/themes/light.css"],"sourcesContent":["\n:root {\n --font-family-base: 'Open Sans', Arial, sans-serif;\n /* Declare global variables */\n /*\n --c_purple: #5B29FF;\n --c_purple_pastel: #D1D1FF;\n --c_purple_lighter: #E8E1FF;\n --c_purple_light: #C6BDFF;\n --c_purple_dark: #4700B3;\n */\n /* purple theme\n - light https://coolors.co/palette/a172fd-a77afe-ac82fe-b691fe-c1a0fe-cbaffe-d6bffe-e0cefe-ebddfe-f5ecfe\n - dark https://coolors.co/palette/310055-3c0663-4a0a77-5a108f-6818a5-8b2fc9-ab51e3-bd68ee-d283ff-dc97ff\n */\n /*\n --c_purple_darker: #310055;\n --c_purple_dark: #4A0A77;\n --c_purple: #6818A5;\n --c_purple_light: #CBAFFE;\n --c_purple_lighter: #F5ECFE;\n\n --c_blue: #0044FF;\n --c_blue_pastel: #B8E0FF;\n --c_blue_light: #73E8FF;\n --c_blue_dark: #003ADB;\n */\n /* --c_red: * /\n --c-red: #FF0000;\n --c_red_pastel: #FAE0E2;\n --c_red_lighter: #FAE0E2;\n */\n}\n\nhtml {\n height: 100vh;\n /* overflow-y: clip; */\n}\n\nbody {\n background-color: var(--colour-page-background);\n color: var(--colour-text);\n font-family: var(--font-family-base);\n font-family: Arial;\n padding: 0;\n margin: 0;\n border: 0;\n background: linear-gradient(to bottom right, var(--colour-page-background-1), var(--colour-page-background-2)); /* var(--c_purple); */\n height: 100vh;\n /* max-height: 100vh;\n overflow-y: clip; */\n}\n\n* {\n margin: 0;\n}\n\nscript, link {\n display: none !important;\n}\n\n#pageBody {\n /* height: 69vh !important; */\n max-height: 79vh;\n padding: 0 5vw;\n margin: 0;\n border: 0;\n align-content: center;\n justify-content: flex-start;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow-y: auto;\n overflow-x: hidden;\n position: absolute;\n width: 90vw;\n color: var(--colour-text);\n}\n\n.page-body > * {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n align-self: center;\n font-size: min(16px, calc(1vh * 4));\n}\n#pageBody > * > * {\n align-self: center;\n padding-top: 0.5vh;\n padding-bottom: 0.5vh;\n}\n#pageBody > .card {\n height: fit-content;\n margin: 0.5vh auto;\n}\n\n/* header image */\nimg.header-logo {\n max-height: 15vh;\n max-width: 15vh;\n cursor: pointer;\n border-radius: 3vh;\n}\n\n/* icon images */\n.img-icon {\n max-width: 16vh;\n max-height: 8vh;\n border-radius: 0;\n}\n\n/* Add a card effect for articles */\n.card {\n background-color: var(--colour-text-background);\n padding: 1vh 2.5vw;\n margin: 1vh;\n display: flex !important;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n border-radius: 1.5vh;\n position: relative;\n height: fit-content;\n max-width: 80vw;\n}\n\n.header.card {\n border-radius: 2.5vh;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.container {\n flex: 1;\n margin: 0px;\n align-items: flex-start;\n justify-content: flex-start;\n text-align: flex-start;\n /* max-width: 100%; */\n /* min-width: fit-content; */\n}\n\n.column {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin: auto 0;\n}\n\n.row {\n display: flex; \n flex-direction: row;\n width: 100%;\n flex-wrap: wrap;\n}\n\n.container > .card:first-of-type {\n margin-top: none;\n}\n\n\n/*\n/* Responsive layout - when the screen is less than 800px wide, make the two columns stack on top of each other instead of next to each other *\n@media screen and (max-width: 800px) {\n .leftcolumn, .rightcolumn { \n width: 100%;\n /* padding: 0; *\n }\n}\n\n/* Responsive layout - when the screen is less than 400px wide, make the navigation links stack on top of each other instead of next to each other *\n@media screen and (max-width: 400px) {\n .topnav a {\n float: none;\n width: 100%;\n }\n}\n*/\n\n.container-input {\n padding: 1vh;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.container-input > label {\n width: 100%;\n margin-bottom: 1vh;\n margin-top: 0;\n}\n\n.container-input > input,\n.container-input > textarea {\n border: 2px solid var(--colour-accent);\n padding: 1vh;\n}\n\n.label-title {\n width: 100%;\n}\n\n\nul {\n max-width: 90%;\n padding: 5px 0 10px 0;\n}\nli {\n text-align: left;\n font-size: 18px;\n}\n\n\n:not(input,textarea,select,button).dirty {\n background-color: var(--colour-accent);\n}\ninput.dirty, textarea.dirty, select.dirty {\n border-color: var(--colour-primary);\n}\n\n\n#pageBody > *, button {\n font-size: min(12px, calc(1vh * 3));\n}\n\n\n\n@media screen and (max-width: 400px) {\n img.header-logo {\n border-radius: 3vh;\n }\n /*\n .company-name {\n font-size: 14px;\n }\n */\n}",".button {\n display: inline-block;\n padding: 0.5vh 0.75vh;\n border-radius: 0.75vh;\n text-decoration: none;\n font-weight: bold;\n transition: all 0.3s ease;\n width: fit-content;\n}\n.button:not(.is_collapsed) {\n cursor: pointer;\n}\n.button.is_collapsed {\n display: block;\n opacity: 0;\n}\n\n.button-primary {\n background: var(--colour-accent);\n color: var(--colour-primary);\n border: 2px solid var(--colour-primary);\n}\n\n.button-primary:hover {\n background: var(--colour-secondary);\n}\n\n.button-light {\n background: white;\n color: var(--colour-primary);\n}\n\n.button-light:hover {\n background: var(--colour-accent);\n}\n\n.logo:hover{\n cursor: pointer;\n}\n\n\n.button.icon.active.delete, \n.button.icon.active.add {\n height: 2vh;\n}","\n\nselect {\n border: 1px solid var(--colour-accent);\n}","\nimg, video {\n border-radius: 3vh;\n}\n","\nh1 {\n font-size: min(24px, calc(1vh * 6));\n}\n\nh2 {\n font-size: min(20px, calc(1vh * 5));\n}\n\nh3 {\n font-size: min(16px, calc(1vh * 4));\n margin-top: 1vh;\n}\n\nh4 {\n font-size: 13px;\n margin: 1vh;\n text-align: center;\n margin-left: auto;\n margin-right: auto;\n}\n\nh5 {\n font-size: 11px;\n margin: 1vh;\n}\n","\n\n/* Overlay modal */\n.overlay {\n /*\n display: none;\n */\n position: fixed;\n width: 100px;\n /* height: 50%; */ \n background: var(--colour-page-background);\n justify-content: right;\n align-items: right;\n align-self: right;\n z-index: 999;\n}\n.is_collapsed {\n display: none;\n}\n\n/* Hamburger menu overlay */\n#buttonHamburger {\n cursor: pointer;\n position: absolute;\n right: 0;\n min-height: 4vh;\n max-height: 4vh;\n min-width: 4.5vh;\n max-width: 4.5vh;\n z-index: 10;\n}\n#buttonHamburger .icon.hamburger {\n min-height: 3vh;\n max-height: 3vh;\n min-width: 3vh;\n max-width: 3vh;\n}\n/*\n#buttonHamburger:hover {\n text-decoration: none;\n cursor: pointer;\n}\n*/\n#overlayHamburger {\n top: 20vh;\n right: 0.75vh;\n overflow-x: hidden;\n overflow-y: auto;\n max-height: 60vh;\n}\n#overlayHamburger {\n border: 2px solid var(--border-colour);\n border-radius: 4px;\n}\n#overlayHamburger:first-child {\n border-top-left-radius: 12px;\n border-top-right-radius: 12px;\n}\n#overlayHamburger:last-child {\n border-bottom-left-radius: 12px;\n border-bottom-right-radius: 12px;\n}\n\n#overlayHamburger > * {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n /* color: var(--colour-text); */\n font-weight: bold;\n font-size: 15px;\n /* height: 18px; */\n}\n#overlayHamburger > :hover {\n color: var(--colour-page-background);\n background-color: var(--colour-primary);\n}\n#overlayHamburger > * > * {\n width: 100%;\n /*\n margin-top: 4.5px;\n margin-bottom: 4.5px;\n */\n}\n#overlayHamburger > .container {\n padding-top: 4.5px;\n padding-bottom: 4.5px;\n}\n\n@media screen and (max-width: 400px) {\n #buttonHamburger {\n min-height: 6vh;\n max-height: 6vh;\n min-width: 6.5vh;\n max-width: 6.5vh;\n }\n #buttonHamburger .icon.hamburger {\n min-height: 5vh;\n max-height: 5vh;\n min-width: 5vh;\n max-width: 5vh;\n }\n #overlayHamburger {\n top: 22vh;\n width: 100px;\n /* right: 6.5vh; */\n }\n}\n\n/* Confirm overlay */\n#overlayConfirm {\n position: absolute;\n left: 25vw;\n width: 50vw;\n height: 50vh;\n}\n\n#overlayConfirm .row > * {\n margin-left: auto;\n margin-right: auto;\n}\n\n#overlayConfirm .row .button.button-cancel {\n margin-right: 0.5vh;\n}\n#overlayConfirm .row .button.submit {\n margin-left: 0.5vh;\n}\n\n\n","\n#formFilters .container {\n max-width: fit-content;\n}\n\nthead, tbody {\n padding-top: 0px !important;\n padding-bottom: 0px !important;\n}\n\nth {\n background-color: transparent;\n}\ntd {\n font-size: min(12px, calc(1vh * 3));\n}\n\nth, td {\n min-width: fit-content;\n}\ntr:not(:last-child) > td {\n border-bottom: 1px dashed var(--border-colour);\n}\ntd > table > tbody > tr > td {\n border: none !important;\n}\nth.is_collapsed, td.is_collapsed {\n display: table-cell !important;\n}\ntd.dirty {\n background-color: var(--colour-primary);\n}\ntd:not(.dirty) {\n background-color: transparent;\n}\n\ntr {\n min-height: 1px;\n border-bottom: 1px solid;\n border-top: 1px solid;\n border-color: var(--border-colour);\n background-color: transparent;\n}\n\ntable button {\n margin: 0.25vh;\n padding: 0.5vh 1vh;\n}\n\ntable button.active {\n background-color: var(--colour-page-background);\n}\n\ntr.delete, tr.delete > td {\n background-color: var(--colour-error);\n}\n\ntable div {\n align-content: center;\n}","\n/*\nheader {\n background: white;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n / * position: fixed;\n top: 0; * /\n width: 100%;\n z-index: 1000;\n}\n\n.navbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 1rem 0;\n}\n\n.logo {\n font-size: 1.5rem;\n font-weight: bold;\n color: var(--primary);\n}\n\n.nav-links {\n display: flex;\n gap: 2rem;\n}\n\n.nav-links a {\n text-decoration: none;\n color: var(--text);\n font-weight: 500;\n align-content: center;\n}\n.nav-links a.button {\n color: white;\n}\n*/\n\n\n/* Navigation */\n.topnav {\n border-bottom-left-radius: 2.5vh;\n border-bottom-right-radius: 2.5vh;\n display: flex;\n flex-wrap: wrap;\n flex: 1;\n flex-direction: row;\n font-weight: bold;\n font-size: 1vh;\n max-height: 15vh;\n height: 15vh;\n align-items: flex-start;\n}\n.topnav a, .topnav label, .topnav p, .topnav h1 {\n float: left;\n display: flex;\n text-align: center;\n text-decoration: none;\n width: 100%;\n max-height: 15vh;\n font-weight: normal;\n justify-content: center;\n}\n.topnav a:hover {\n background-color: var(--colour-page-background);\n}\n\n.topnav > .container {\n max-width: 50%;\n height: 100%;\n align-items: center;\n align-self: center;\n display: flex;\n}\n.topnav > .container.header-logo {\n min-width: 15vh;\n max-width: 15vh;\n}\n.topnav > .container.company-name {\n min-width: calc(100vw - 30vh);\n max-width: calc(100vw - 30vh);\n}\n.topnav select {\n padding: 1vh;\n margin: 1vh;\n border-radius: 1vh;\n border: 2px solid var(--border-colour);\n font-weight: bold;\n text-align: center;\n width: 25vw;\n}\n.topnav select .is_collapsed {\n width: 5vw;\n}\n.company-name {\n font-size: min(28px, calc(1vh * 7));\n}\n/*\n@media screen and (max-width: 450px) {\n .company-name {\n font-size: 18px; / * min(24px, calc(1vh * 7)); * /\n }\n}\n*/\n/* Page Filters */\n#formFilters {\n width: fit-content;\n margin-left: auto;\n margin-right: auto;\n \n}\n#formFilters * {\n font-size: 12px;\n}\n\n#formFilters .container {\n}\n#formFilters .container-input {\n max-width: fit-content;\n padding: 0 0.5vh;\n}\n#formFilters .container-input:has(.dirty) {\n background-color: var(--colour-accent);\n} \n\n#formFilters .container-input input {\n width: 10vh;\n max-width: 10vh;\n height: 20px;\n}\n/*\n#formFilters .container-input input {\n height: 1.7vh;\n}\n#formFilters .container-input select {\n height: 2vh;\n}\n*/\n\n#formFilters .container-input.filter.active_only {\n width: 8vh;\n}\n#formFilters .container-input.filter.active_only input {\n display: none;\n}\n#formFilters .container-input.filter.active_only svg.active_only {\n height: 25px;\n fill: var(--colour-text-background);\n background-color: var(--colour-accent);\n /* border: 1px solid var(--colour-accent);\n border-radius: 0.5vh; */\n width: 25px;\n}\n#formFilters .container-input.filter.active_only svg.active_only.is_checked {\n fill: var(--colour-accent);\n background-color: var(--colour-text-background);\n}\n#formFilters .container-input.filter.is_not_empty {\n width: 12vh;\n}\n\n/*\n#formFilters button {\n padding: 0.5vh 0.75vh;\n background-color: var(--colour-accent);\n color: var(--colour-primary);\n font-weight: bold;\n border-radius: 0.75vh;\n border: 2px solid var(--colour-primary);\n}\n\n#formFilters button.is_collapsed {\n display: block;\n opacity: 0;\n}\n*/\n\nform.filter button.save, form.filter button.button-cancel {\n margin-top: 0;\n margin-bottom: 0;\n}\nform.filter button.save, form.filter button.button-cancel {\n margin-top: 0;\n margin-bottom: 1px;\n}\n\n\n@media screen and (max-width: 400px) {\n #formFilters .container-input select {\n /* height: 3vh; */\n }\n .topnav h1 {\n font-size: 16px;\n }\n}","\n/* Footer */\n.footer {\n padding: 1vh 1vw;\n text-align: center;\n margin: 0;\n max-height: 5vh;\n overflow-y: auto;\n background-color: var(--colour-accent);\n position: absolute;\n bottom: 0;\n width: 98vw;\n}\n\n@media screen and (max-width: 400px) {\n .footer {\n max-height: 8vh;\n padding: 0 2vw;\n font-size: 10px; \n width: 96vw;\n max-width: 96vw;\n }\n .footer > h4 {\n font-size: 10px;\n }\n .footer > h5 {\n font-size: 9px;\n }\n}\n\n.footer > h4, h5 {\n padding: 0;\n margin: 0;\n}","\n#formFilters {\n padding: 0.5vh 1vw;\n margin-top: 1vh;\n}\n\n#tableMain {\n overflow-x: auto;\n padding: 1vh 1vw;\n max-width: 88vw; /* min(calc(1vh * 80), calc(1vw * 90)); */\n width: min-content;\n align-items: normal;\n justify-content: normal;\n}\n\n#tableMain * {\n padding: 0.25vh 0.5vh;\n}\n\n#tableMain thead {\n max-height: 4vh;\n overflow-y: visible;\n}\n\n#tableMain tbody {\n max-height: 60vh;\n overflow-y: auto;\n min-width: fit-content;\n max-width: fit-content;\n overflow-x: visible;\n}\n#tableMain tbody.is_collapsed {\n display: block;\n}\n#tableMain:has(tbody > div) tbody {\n}\n#tableMain tbody > div {\n margin-left: auto;\n margin-right: auto;\n text-align: center;\n justify-content: center;\n justify-items: center;\n justify-self: center;\n align-content: center;\n align-items: center;\n align-self: center;\n position: relative;\n display: block;\n width: 100%; /* min(calc(90vh), calc(70vw)); */\n}\n\n#tableMain select, \n#tableMain input:not([type=\"checkbox\"]), \n#tableMain textarea, \n#tableMain div {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border: 1px solid var(--colour-accent);\n border-radius: 0.5vh;\n text-align: center;\n}\n\n#tableMain thead tr th, #tableMain tbody tr td {\n width: 20vh;\n min-width: 20vh;\n padding: 0 0.5vh;\n}\n#tableMain tbody tr td {\n height: 5vh;\n /* padding-top: 0.5vh; */\n}\n#tableMain tbody tr td:has(.dirty) {\n background-color: var(--colour-primary);\n}\n#tableMain tbody tr:not(:last-of-type) td {\n padding-bottom: 0.25vh;\n}\n#tableMain tbody tr td.ddl-preview div,\n#tableMain tbody tr td.ddl-preview select {\n padding-left: 2vh;\n padding-right: 2vh;\n}\n#tableMain tbody tr td.ddl-preview select {\n font-size: 12px;\n}\n#tableMain thead tr th.active, \n#tableMain tbody tr td.active {\n width: 6vh;\n min-width: 6vh;\n}\n#tableMain thead tr th.active svg.active.add {\n fill: var(--colour-primary);\n background-color: var(--colour-accent);\n border: 2px solid var(--colour-accent);\n padding: 0;\n border-radius: 1vh;\n}\n#tableMain tbody tr td.active svg.active.add {\n fill: var(--colour-primary);\n}\n#tableMain tbody tr td.active svg.active.delete {\n fill: var(--colour-error);\n}\n#tableMain tbody tr td.display_order, \n#tableMain thead tr th.display_order {\n width: 5vh;\n min-width: 5vh;\n}\n\n#container-template-elements {\n display: none;\n}\n\n\n@media screen and (max-width: 850px) {\n}\n@media screen and (max-width: 400px) {\n #formFilters input[type=\"text\"],\n #formFilters select {\n width: 15vh;\n /* height: 3vh; */\n }\n #tableMain {\n max-height: 60vh;\n }\n #tableMain tbody {\n max-height: 53vh;\n }\n}",".text-center {\n text-align: center;\n}\n\n.section-title {\n font-size: 2rem;\n margin-bottom: 1rem;\n}\n\n.section-subtitle {\n margin-bottom: 2rem;\n}\n\n@media (max-width: 768px) {\n .hero h1 {\n font-size: 2.5rem;\n }\n \n .nav-links {\n display: none;\n }\n}","/* Default */\n:root {\n /* Claude dark blue / grey theme */\n --colour-accent: #C77DFF;\n --colour-error: red;\n --colour-page-background: #E0AAFF;\n --colour-page-background-1: #F5ECFE;\n --colour-page-background-2: #FAE0E2;\n --colour-primary: #240046;\n --colour-secondary: #3C096C;\n --colour-text: #10002B;\n --colour-text-background: white;\n --colour-text-link-unvisited: #0000EE;\n --colour-text-link-visited: #551A8B;\n}\n\n/*\n--c_purple_darker: #310055;\n--c_purple_dark: #4A0A77;\n--c_purple: #6818A5;\n--c_purple_light: #CBAFFE;\n--c_purple_lighter: #F5ECFE;\n\n--c_blue: #0044FF;\n--c_blue_pastel: #B8E0FF;\n--c_blue_light: #73E8FF;\n--c_blue_dark: #003ADB;\n/* --c_red: * /\n--c-red: #FF0000;\n--c_red_pastel: #FAE0E2;\n--c_red_lighter: #FAE0E2;\n}\n*/"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js
index 38a1dba..11e7c9c 100644
--- a/static/dist/js/main.bundle.js
+++ b/static/dist/js/main.bundle.js
@@ -1339,7 +1339,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
} else {
var dataPage = this.getLocalStoragePage();
var filters = dataPage[flagFormFilters];
- var formFilters = this.getFormFilters();
+ var formFilters = TableBasePage.getFormFilters();
var filtersDefault = DOM.convertForm2JSON(formFilters);
if (!Validation.areEqualDicts(filters, filtersDefault)) {
this.callFilterTableContent();
@@ -1362,6 +1362,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupFilterActive",
value: function hookupFilterActive() {
+ var _this3 = this;
var filterSelector = idFormFilters + ' #' + flagActiveOnly;
var filterActiveOld = document.querySelector(filterSelector);
filterActiveOld.removeAttribute('id');
@@ -1382,7 +1383,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
} else {
svgElement.classList.add(flagIsChecked);
}
- return TableBasePage.isDirtyFilter(svgElement);
+ return _this3.handleChangeFilter(event, filterActive);
});
var filter = document.querySelector(filterSelector);
var filterValuePrevious = DOM.getElementValueCurrent(filter);
@@ -1392,8 +1393,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupFilter",
value: function hookupFilter(filterFlag) {
+ var _this4 = this;
var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, filter) {
- return TableBasePage.isDirtyFilter(filter);
+ return _this4.handleChangeFilter(event, filter);
};
var filterSelector = idFormFilters + ' #' + filterFlag;
this.hookupEventHandler("change", filterSelector, handler);
@@ -1402,6 +1404,44 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
filter.setAttribute(attrValueCurrent, filterValuePrevious);
filter.setAttribute(attrValuePrevious, filterValuePrevious);
}
+ }, {
+ key: "handleChangeFilter",
+ value: function handleChangeFilter(event, filter) {
+ var isDirtyFilter = DOM.updateAndCheckIsElementDirty(filter);
+ var formFilters = TableBasePage.getFormFilters();
+ var areDirtyFilters = isDirtyFilter || DOM.hasDirtyChildrenContainer(formFilters);
+ var tbody = document.querySelector(idTableMain + ' tbody');
+ var rows = tbody.querySelectorAll(':scope > tr');
+ rows.forEach(function (row) {
+ if (areDirtyFilters && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);
+ if (!areDirtyFilters && row.classList.contains(flagIsCollapsed)) {
+ row.classList.remove(flagIsCollapsed);
+ var dirtyInputs = row.querySelectorAll('input.' + flagDirty);
+ dirtyInputs.forEach(function (dirtyInput) {
+ dirtyInput.value = DOM.getElementAttributeValueCurrent(dirtyInput);
+ });
+ }
+ });
+ if (areDirtyFilters) {
+ /*
+ tbody.querySelectorAll('tr').forEach((tr) => {
+ if (!DOM.hasDirtyChildrenContainer(tr)) tr.remove();
+ });
+ */
+ tbody.innerHTML = '
Press "Apply Filters" to refresh the table.
' + tbody.innerHTML;
+ if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);
+ } else {
+ var isDirtyLabel = tbody.querySelector(":scope > div");
+ if (isDirtyLabel != null) isDirtyLabel.remove();
+ if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);
+ var initialisedElements = tbody.querySelectorAll('.' + flagInitialised);
+ initialisedElements.forEach(function (initialisedElement) {
+ initialisedElement.classList.remove(flagInitialised);
+ });
+ this.hookupTableMain();
+ }
+ this.updateAndToggleShowButtonsSaveCancel();
+ }
}, {
key: "hookupFilterIsNotEmpty",
value: function hookupFilterIsNotEmpty() {
@@ -1410,10 +1450,10 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupButtonApplyFilters",
value: function hookupButtonApplyFilters() {
- var _this3 = this;
+ var _this5 = this;
this.hookupEventHandler("click", idButtonApplyFilters, function (event, button) {
event.stopPropagation();
- _this3.callFilterTableContent();
+ _this5.callFilterTableContent();
});
}
}, {
@@ -1429,8 +1469,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupFilterCommandCategory",
value: function hookupFilterCommandCategory() {
+ var _this6 = this;
this.hookupFilter(attrIdCommandCategory, function (event, filterCommandCategory) {
- TableBasePage.isDirtyFilter(filterCommandCategory);
+ _this6.handleChangeFilter();
var isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);
var idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);
console.log("filter commands unsorted");
@@ -1467,15 +1508,10 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
.catch(error => console.error('Error:', error));
}
*/
- }, {
- key: "getFormFilters",
- value: function getFormFilters() {
- return document.querySelector(idFormFilters);
- }
}, {
key: "callFilterTableContent",
value: function callFilterTableContent() {
- var formFilters = this.getFormFilters();
+ var formFilters = TableBasePage.getFormFilters();
var filtersJson = DOM.convertForm2JSON(formFilters);
utils_Utils.consoleLogIfNotProductionEnvironment("callFilterTableContent");
utils_Utils.consoleLogIfNotProductionEnvironment("formFilters");
@@ -1512,10 +1548,10 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "getAndLoadFilteredTableContentSinglePageApp",
value: function getAndLoadFilteredTableContentSinglePageApp() {
- var _this4 = this;
+ var _this7 = this;
this.callFilterTableContent().then(function (data) {
utils_Utils.consoleLogIfNotProductionEnvironment('Table data received:', data);
- _this4.callbackLoadTableContent(data);
+ _this7.callbackLoadTableContent(data);
})["catch"](function (error) {
return console.error('Error:', error);
});
@@ -1530,13 +1566,13 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "saveRecordsTableDirty",
value: function saveRecordsTableDirty() {
- var _this5 = this;
+ var _this8 = this;
var records = this.getTableRecords(true);
if (records.length == 0) {
OverlayError.show('No records to save');
return;
}
- var formElement = this.getFormFilters();
+ var formElement = TableBasePage.getFormFilters();
var comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));
/*
Utils.consoleLogIfNotProductionEnvironment({ formElement, comment, records });
@@ -1550,7 +1586,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
utils_Utils.consoleLogIfNotProductionEnvironment('Records saved!');
utils_Utils.consoleLogIfNotProductionEnvironment('Data received:', data);
}
- _this5.callFilterTableContent();
+ _this8.callFilterTableContent();
} else {
utils_Utils.consoleLogIfNotProductionEnvironment("error: ", data[flagMessage]);
OverlayError.show(data[flagMessage]);
@@ -1562,13 +1598,13 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "getTableRecords",
value: function getTableRecords() {
- var _this6 = this;
+ var _this9 = this;
var dirtyOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var records = [];
var record;
document.querySelectorAll(idTableMain + ' > tbody > tr').forEach(function (row) {
if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;
- record = _this6.getJsonRow(row);
+ record = _this9.getJsonRow(row);
records.push(record);
});
return records;
@@ -1581,13 +1617,13 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "saveRecordsTableDirtySinglePageApp",
value: function saveRecordsTableDirtySinglePageApp() {
- var _this7 = this;
+ var _this10 = this;
var records = this.getTableRecords(true);
if (records.length == 0) {
OverlayError.show('No records to save');
return;
}
- var formElement = this.getFormFilters();
+ var formElement = TableBasePage.getFormFilters();
var comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));
this.callSaveTableContent(records, formElement, comment).then(function (data) {
if (data[flagStatus] == flagSuccess) {
@@ -1595,7 +1631,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
utils_Utils.consoleLogIfNotProductionEnvironment('Records saved!');
utils_Utils.consoleLogIfNotProductionEnvironment('Data received:', data);
}
- _this7.callbackLoadTableContent(data);
+ _this10.callbackLoadTableContent(data);
} else {
utils_Utils.consoleLogIfNotProductionEnvironment("error: ", data[flagMessage]);
OverlayError.show(data[flagMessage]);
@@ -1607,13 +1643,13 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupButtonCancel",
value: function hookupButtonCancel() {
- var _this8 = this;
+ var _this11 = this;
Events.initialiseEventHandler(idFormFilters + ' button.' + flagCancel, flagInitialised, function (button) {
button.addEventListener("click", function (event) {
event.stopPropagation();
button = event.target;
if (button.classList.contains(flagIsCollapsed)) return;
- _this8.callFilterTableContent();
+ _this11.callFilterTableContent();
});
button.classList.add(flagIsCollapsed);
});
@@ -1649,14 +1685,14 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupTableMain",
value: function hookupTableMain() {
- var _this9 = this;
+ var _this12 = this;
if (this.constructor === TableBasePage) {
throw new Error("Must implement hookupTableMain() method.");
}
if (true) {
// _rowBlank == null) {
Events.initialiseEventHandler(idTableMain, flagInitialised, function (table) {
- _this9.cacheRowBlank();
+ _this12.cacheRowBlank();
});
}
}
@@ -1702,9 +1738,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupChangeHandlerTableCells",
value: function hookupChangeHandlerTableCells(inputSelector) {
- var _this10 = this;
+ var _this13 = this;
var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
- _this10.handleChangeNestedElementCellTable(event, element);
+ _this13.handleChangeNestedElementCellTable(event, element);
};
Events.initialiseEventHandler(inputSelector, flagInitialised, function (input) {
input.addEventListener("change", function (event) {
@@ -1836,9 +1872,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupChangeHandlerTableCellsWhenNotCollapsed",
value: function hookupChangeHandlerTableCellsWhenNotCollapsed(inputSelector) {
- var _this11 = this;
+ var _this14 = this;
var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
- if (!element.classList.contains(flagIsCollapsed)) _this11.handleChangeNestedElementCellTable(event, element);
+ if (!element.classList.contains(flagIsCollapsed)) _this14.handleChangeNestedElementCellTable(event, element);
};
this.hookupEventHandler("change", inputSelector, handler);
}
@@ -1865,10 +1901,10 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupFieldsActive",
value: function hookupFieldsActive() {
- var _this12 = this;
+ var _this15 = this;
var flagTable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var handleClickRowNew = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
- _this12.handleClickAddRowTable(event, element);
+ _this15.handleClickAddRowTable(event, element);
};
var selectorButton = 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive;
var selectorButtonDelete = selectorButton + '.' + flagDelete;
@@ -1883,12 +1919,12 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupButtonsRowDelete",
value: function hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete) {
- var _this13 = this;
+ var _this16 = this;
var changeHandler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) {
- _this13.handleChangeNestedElementCellTable(event, element);
+ _this16.handleChangeNestedElementCellTable(event, element);
};
this.hookupEventHandler("click", selectorButtonDelete, function (event, element) {
- _this13.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) {
+ _this16.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) {
changeHandler(changeEvent, changeElement);
});
});
@@ -1896,9 +1932,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "handleClickButtonRowDelete",
value: function handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete) {
- var _this14 = this;
+ var _this17 = this;
var changeHandler = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (event, element) {
- _this14.handleChangeNestedElementCellTable(event, element);
+ _this17.handleChangeNestedElementCellTable(event, element);
};
if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;
var valuePrevious = DOM.getElementAttributeValuePrevious(element);
@@ -1923,12 +1959,12 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupButtonsRowUndelete",
value: function hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete) {
- var _this15 = this;
+ var _this18 = this;
var changeHandler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) {
- _this15.handleChangeNestedElementCellTable(event, element);
+ _this18.handleChangeNestedElementCellTable(event, element);
};
this.hookupEventHandler("click", selectorButtonUndelete, function (event, element) {
- _this15.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) {
+ _this18.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) {
changeHandler(changeEvent, changeElement);
});
});
@@ -1936,9 +1972,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "handleClickButtonRowUndelete",
value: function handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete) {
- var _this16 = this;
+ var _this19 = this;
var changeHandler = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (event, element) {
- _this16.handleChangeNestedElementCellTable(event, element);
+ _this19.handleChangeNestedElementCellTable(event, element);
};
if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;
var valuePrevious = DOM.getElementAttributeValuePrevious(element);
@@ -1963,17 +1999,17 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupTableCellDdlPreviews",
value: function hookupTableCellDdlPreviews(fieldFlag, optionList) {
- var _this17 = this;
+ var _this20 = this;
var cellSelector = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var ddlHookup = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function (ddlSelector) {
- _this17.hookupTableCellDdls(ddlSelector);
+ _this20.hookupTableCellDdls(ddlSelector);
};
var changeHandler = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (event, element) {
- _this17.handleChangeNestedElementCellTable(event, element);
+ _this20.handleChangeNestedElementCellTable(event, element);
};
if (cellSelector == null) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;
this.hookupEventHandler("click", cellSelector + ' div.' + fieldFlag, function (event, div) {
- _this17.handleClickTableCellDdlPreview(event, div, fieldFlag, optionList, cellSelector, function (ddlSelector) {
+ _this20.handleClickTableCellDdlPreview(event, div, fieldFlag, optionList, cellSelector, function (ddlSelector) {
ddlHookup(ddlSelector, function (event, element) {
changeHandler(event, element);
});
@@ -1984,9 +2020,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupTableCellDdls",
value: function hookupTableCellDdls(ddlSelector) {
- var _this18 = this;
+ var _this21 = this;
var changeHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) {
- _this18.handleChangeNestedElementCellTable(event, element);
+ _this21.handleChangeNestedElementCellTable(event, element);
};
this.hookupEventHandler("change", ddlSelector, function (event, element) {
changeHandler(event, element);
@@ -1995,10 +2031,10 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "handleClickTableCellDdlPreview",
value: function handleClickTableCellDdlPreview(event, div, fieldFlag, optionObjectList) {
- var _this19 = this;
+ var _this22 = this;
var cellSelector = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
var ddlHookup = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : function (cellSelector) {
- _this19.hookupTableCellDdls(cellSelector);
+ _this22.hookupTableCellDdls(cellSelector);
};
if (Validation.isEmpty(cellSelector)) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;
var idSelected = DOM.getElementAttributeValueCurrent(div);
@@ -2046,19 +2082,19 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupFieldsCommandCategory",
value: function hookupFieldsCommandCategory() {
- var _this20 = this;
+ var _this23 = this;
this.hookupTableCellDdlPreviews(flagCommandCategory, utils_Utils.getListFromDict(filterCommandCategories).sort(function (a, b) {
return a[flagName].localeCompare(b[flagName]);
}), null, function (cellSelector) {
- _this20.hookupCommandCategoryDdls(cellSelector);
+ _this23.hookupCommandCategoryDdls(cellSelector);
});
}
}, {
key: "hookupCommandCategoryDdls",
value: function hookupCommandCategoryDdls(ddlSelector) {
- var _this21 = this;
+ var _this24 = this;
this.hookupChangeHandlerTableCells(ddlSelector, function (event, element) {
- _this21.handleChangeCommandCategoryDdl(event, element);
+ _this24.handleChangeCommandCategoryDdl(event, element);
});
}
}, {
@@ -2092,7 +2128,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "hookupFieldsCommand",
value: function hookupFieldsCommand() {
- var _this22 = this;
+ var _this25 = this;
this.hookupEventHandler("click", idTableMain + ' td.' + flagCommand + ' .' + flagCommand, function (event, div) {
utils_Utils.consoleLogIfNotProductionEnvironment(div);
var parentTr = DOM.getRowFromElement(div);
@@ -2101,8 +2137,8 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
parentTr: parentTr
});
var tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);
- var idCommandCategoryRow = _this22.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);
- var idCommandCategoryFilter = _this22.getIdCommandCategoryFilter();
+ var idCommandCategoryRow = _this25.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);
+ var idCommandCategoryFilter = _this25.getIdCommandCategoryFilter();
var filterCommandList = utils_Utils.getListFromDict(filterCommands);
var commandsInCategory = filterCommandList.filter(function (command) {
return (command[attrIdCommandCategory] == idCommandCategoryRow || idCommandCategoryRow == 0) && (command[attrIdCommandCategory] == idCommandCategoryFilter || idCommandCategoryFilter == 0);
@@ -2118,9 +2154,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
commandsInCategory: commandsInCategory
});
utils_Utils.consoleLogIfNotProductionEnvironment(filterCommandList);
- _this22.handleClickTableCellDdlPreview(event, div, flagCommand, sortedCommands, null, function (cellSelector) {
- _this22.hookupTableCellDdls(cellSelector, function (event, element) {
- _this22.handleChangeNestedElementCellTable(event, element);
+ _this25.handleClickTableCellDdlPreview(event, div, flagCommand, sortedCommands, null, function (cellSelector) {
+ _this25.hookupTableCellDdls(cellSelector, function (event, element) {
+ _this25.handleChangeNestedElementCellTable(event, element);
});
});
});
@@ -2135,7 +2171,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "getIdCommandCategoryFilter",
value: function getIdCommandCategoryFilter() {
- var formFilters = this.getFormFilters();
+ var formFilters = TableBasePage.getFormFilters();
var commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);
var commandFilter = formFilters.querySelector('#' + attrIdCommand);
var idCommandCategory = 0;
@@ -2172,7 +2208,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
}, {
key: "getIdCommandFilter",
value: function getIdCommandFilter() {
- var formFilters = this.getFormFilters();
+ var formFilters = TableBasePage.getFormFilters();
var commandFilter = formFilters.querySelector('#' + attrIdCommand);
var valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);
var idCommand = Number(valueCurrentCommandFilter);
@@ -2215,7 +2251,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
throw new Error("Must implement leave() method.");
}
base_table_superPropGet(TableBasePage, "leave", this, 3)([]);
- var formFilters = this.getFormFilters();
+ var formFilters = TableBasePage.getFormFilters();
var dataPage = {};
dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);
this.setLocalStoragePage(dataPage);
@@ -2240,35 +2276,15 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) {
key: "updateAndToggleShowButtonsSaveCancel",
value: function updateAndToggleShowButtonsSaveCancel() {
var records = this.getTableRecords(true);
- var existsDirtyRecord = records.length > 0;
- this.toggleShowButtonsSaveCancel(existsDirtyRecord);
+ var isDirtyMainTable = records.length > 0;
+ var formFilters = TableBasePage.getFormFilters();
+ var areDirtyFilters = DOM.hasDirtyChildrenContainer(formFilters);
+ this.toggleShowButtonsSaveCancel(isDirtyMainTable && !areDirtyFilters);
}
}], [{
- key: "isDirtyFilter",
- value: function isDirtyFilter(filter) {
- var isDirty = DOM.updateAndCheckIsElementDirty(filter);
- var tbody = document.querySelector(idTableMain + ' tbody');
- var rows = tbody.querySelectorAll(':scope > tr');
- var cancelButton = document.querySelector(idFormFilters + ' ' + idButtonCancel);
- var saveButton = document.querySelector(idFormFilters + ' ' + idButtonSave);
- rows.forEach(function (row) {
- if (isDirty && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);
- if (!isDirty && row.classList.contains(flagIsCollapsed)) row.classList.remove(flagIsCollapsed);
- });
- if (isDirty) {
- // tbody.querySelectorAll('tr').forEach((tr) => { tr.remove(); });
- tbody.innerHTML = 'Press "Apply Filters" to refresh the table.
' + tbody.innerHTML;
- if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);
- if (!cancelButton.classList.contains(flagIsCollapsed)) cancelButton.classList.add(flagIsCollapsed);
- if (!saveButton.classList.contains(flagIsCollapsed)) saveButton.classList.add(flagIsCollapsed);
- } else {
- if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);
- if (cancelButton.classList.contains(flagIsCollapsed)) cancelButton.classList.remove(flagIsCollapsed);
- if (saveButton.classList.contains(flagIsCollapsed)) saveButton.classList.remove(flagIsCollapsed);
- var isDirtyLabel = tbody.querySelector(":scope > div");
- if (isDirtyLabel != null) isDirtyLabel.remove();
- }
- return isDirty;
+ key: "getFormFilters",
+ value: function getFormFilters() {
+ return document.querySelector(idFormFilters);
}
}, {
key: "getTableMain",
diff --git a/static/dist/js/main.bundle.js.map b/static/dist/js/main.bundle.js.map
index fb07dd3..7332219 100644
--- a/static/dist/js/main.bundle.js.map
+++ b/static/dist/js/main.bundle.js.map
@@ -1 +1 @@
-{"version":3,"file":"js/main.bundle.js","mappings":"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","sources":["webpack://app/./static/js/lib/validation.js","webpack://app/./static/js/dom.js","webpack://app/./static/js/lib/events.js","webpack://app/./static/js/lib/local_storage.js","webpack://app/./static/js/api.js","webpack://app/./static/js/lib/utils.js","webpack://app/./static/js/components/common/temporary/overlay_confirm.js","webpack://app/./static/js/pages/base.js","webpack://app/./static/js/pages/core/home.js","webpack://app/./static/js/pages/dog/home.js","webpack://app/./static/js/lib/business_objects/business_objects.js","webpack://app/./static/js/components/common/temporary/overlay_error.js","webpack://app/./static/js/pages/base_table.js","webpack://app/./static/js/pages/dog/mixin.js","webpack://app/./static/js/pages/dog/mixin_table.js","webpack://app/./static/js/pages/dog/command_categories.js","webpack://app/./static/js/pages/dog/commands.js","webpack://app/./static/js/pages/dog/dog_command_links.js","webpack://app/./static/js/pages/legal/accessibility_report.js","webpack://app/./static/js/pages/legal/accessibility_statement.js","webpack://app/./static/js/pages/legal/license.js","webpack://app/./static/js/pages/legal/privacy_policy.js","webpack://app/./static/js/pages/legal/retention_schedule.js","webpack://app/./static/js/router.js","webpack://app/./static/js/app.js","webpack://app/./static/css/main.css?0a91","webpack://app/./static/css/components/button.css?0e0b","webpack://app/./static/css/components/card.css","webpack://app/./static/css/components/dialog.css","webpack://app/./static/css/components/form.css","webpack://app/./static/css/components/image.css?9f9c","webpack://app/./static/css/components/label.css?b78f","webpack://app/./static/css/components/modal.css","webpack://app/./static/css/components/navigation.css","webpack://app/./static/css/components/overlay.css?6dfd","webpack://app/./static/css/components/table.css?e553","webpack://app/./static/css/layouts/header.css?da75","webpack://app/./static/css/layouts/footer.css?65e3","webpack://app/./static/css/layouts/table-main.css?8c15","webpack://app/./static/css/lib/reset.css","webpack://app/./static/css/lib/typography.css","webpack://app/./static/css/lib/utils.css?0479","webpack://app/./static/css/lib/variables.css","webpack://app/./static/css/themes/light.css?855e"],"sourcesContent":["\nexport default class Validation {\n /*\n isNullOrWhitespace(v) {\n let txt = JSON.stringify(v).replace('/\\s\\g', '');\n return (txt == '' || 'null');\n }\n */\n\n static isEmpty(object) {\n\n let isEmpty = true;\n\n if (object !== null && object !== \"null\" && object !== undefined && object !== \"undefined\") {\n\n if (object.length == undefined) {\n isEmpty = false; // object exists but isn't a collection\n }\n else if (typeof object === \"function\") {\n isEmpty = false; // object is reference\n }\n else { // string or collection\n\n let isString = (typeof object == \"string\");\n\n if (isString) object = object.trim();\n\n if (object.length > 0) {\n\n if (isString) {\n isEmpty = false; // String greater than length 0\n }\n else {\n\n if (typeof object[0] != \"string\") {\n isEmpty = false;\n }\n else {\n for(let i = 0; i < object.length; i++) {\n if (object[i] != \"\") {\n isEmpty = false;\n break\n }\n }\n }\n }\n }\n }\n }\n\n return isEmpty;\n }\n\n static isValidNumber(value, positiveOnly) {\n return !Validation.isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);\n }\n\n static getDataContentType(params) {\n\n var data = null;\n var contentType = '';\n\n if (!Validation.isEmpty(params)) {\n\n if (typeof params === \"string\") {\n data = params;\n contentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n }\n else {\n data = JSON.stringify(params);\n contentType = \"application/json; charset=UTF-8\";\n }\n }\n\n return { Data: data, ContentType: contentType };\n }\n\n static arrayContainsItem(array, itemValue) {\n\n var hasItem = false;\n\n if (!Validation.isEmpty(array) && !Validation.isEmpty(itemValue)) {\n\n var isJQueryElementArray = array[0] instanceof jQuery;\n\n if (isJQueryElementArray) {\n\n for (let i = 0; i < array.length; i++) {\n\n if (document.querySelectorAll(array[i]).is(itemValue)) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n var isDate = array[0] instanceof Date;\n\n if (isDate) {\n \n for (let i = 0; i < array.length; i++) {\n\n if (array[i].getTime() === itemValue.getTime()) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n for (let i = 0; i < array.length; i++) {\n\n if (array[i] == itemValue) {\n hasItem = true;\n break;\n }\n }\n }\n }\n }\n\n return hasItem;\n }\n\n static dictHasKey(d, k) {\n return (k in d);\n }\n static areEqualDicts(dict1, dict2) {\n const keys1 = Object.keys(dict1);\n const keys2 = Object.keys(dict2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n for (let key of keys1) {\n if (dict1[key] !== dict2[key]) {\n return false;\n }\n }\n \n return true;\n }\n\n static imageExists(url, callback) {\n\n var img = new Image();\n\n img.onload = function() { callback(true); };\n img.onerror = function() { callback(false); };\n img.src = url;\n }\n\n static toFixedOrDefault(value, decimalPlaces, defaultValue = null) {\n return Validation.isValidNumber(value) ? parseFloat(value).toFixed(decimalPlaces) : defaultValue;\n }\n}\n","\nimport Utils from \"./lib/utils.js\";\nimport Validation from \"./lib/validation.js\";\n\nexport default class DOM {\n static setElementAttributesValuesCurrentAndPrevious(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementAttributeValueCurrent(element, data) {\n element.setAttribute(attrValueCurrent, data);\n }\n static setElementAttributeValuePrevious(element, data) {\n element.setAttribute(attrValuePrevious, data);\n }\n static setElementValuesCurrentAndPrevious(element, data) {\n DOM.setElementValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementValueCurrent(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n element.checked = data;\n }\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n element.value = data;\n }\n else {\n element.textContent = data;\n }\n }\n static setElementValueCurrentIfEmpty(element, data) {\n if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {\n DOM.setElementValueCurrent(element, data);\n }\n }\n static getCellFromElement(element) {\n return element.closest('td');\n }\n static getRowFromElement(element, flagRow) {\n let selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;\n return element.closest(selector);\n }\n static getClosestParent(element, parentSelector) {\n let parent = element.parentElement;\n while (parent) {\n if (parent.matches(parentSelector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n static convertForm2JSON(elementForm) {\n let dataForm = {};\n if (Validation.isEmpty(elementForm)) {\n return dataForm;\n }\n let containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);\n let containerFilter, labelFilter, keyFilter, filter;\n for (let indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {\n containerFilter = containersFilter[indexFilter];\n labelFilter = containerFilter.querySelector('label');\n keyFilter = labelFilter.getAttribute('for');\n filter = containerFilter.querySelector(`#${keyFilter}`);\n dataForm[keyFilter] = DOM.getElementValueCurrent(filter);\n }\n return dataForm;\n }\n static loadPageBody(contentNew) {\n let pageBody = document.querySelector(idPageBody);\n pageBody.innerHTML = contentNew;\n }\n static getHashPageCurrent() {\n const hashPageCurrent = document.body.dataset.page;\n return hashPageCurrent;\n }\n static updateAndCheckIsElementDirty(element) {\n element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));\n return DOM.isElementDirty(element);\n }\n static isElementDirty(element) {\n let isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);\n DOM.handleDirtyElement(element, isDirty);\n return isDirty;\n }\n static handleDirtyElement(element, isDirty) {\n DOM.toggleElementHasClassnameFlag(element, isDirty, flagDirty);\n }\n static toggleElementHasClassnameFlag(element, elementHasFlag, flag) {\n let elementAlreadyHasFlag = element.classList.contains(flag);\n if (elementHasFlag == elementAlreadyHasFlag) return;\n if (elementHasFlag) {\n element.classList.add(flag);\n } else {\n element.classList.remove(flag);\n }\n }\n static hasDirtyChildrenContainer(container) {\n if (container == null) return false;\n return container.querySelector('.' + flagDirty) != null;\n }\n static hasDirtyChildrenNotDeletedContainer(container) {\n if (container == null || container.classList.contains(flagDelete)) return false;\n return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;\n }\n static getElementValueCurrent(element) {\n let returnVal = '';\n \n if (!Validation.isEmpty(element)) {\n \n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n returnVal = element.checked;\n }\n /*\n else if (element.classList.contains(flagIsDatePicker)) {\n returnVal = getDatePickerDate(element, adjust4DayLightSavings);\n }\n */\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n returnVal = element.value;\n }\n else if (element.classList.contains(flagButton) && element.classList.contains(flagActive)) { // tagName === 'BUTTON'\n returnVal = element.classList.contains(flagDelete);\n }\n else if (tagName === 'TD') {\n returnVal = DOM.getElementAttributeValueCurrent(element);\n }\n else if (tagName == 'SVG' && element.classList.contains(flagCheckbox)) {\n returnVal = (element.classList.contains(flagIsChecked))\n }\n else {\n returnVal = element.textContent;\n }\n }\n \n if (Validation.isEmpty(returnVal)) returnVal = '';\n \n return returnVal;\n }\n static getElementAttributeValueCurrent(element) {\n // debugger;\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValueCurrent);\n }\n static getElementAttributeValuePrevious(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValuePrevious);\n }\n /* base_table.handleChangeElementCellTable\n static updateAndCheckIsTableElementDirty(element) {\n let wasDirty = DOM.isElementDirty(element);\n let row = DOM.getRowFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n let isDirty = DOM.updateAndCheckIsElementDirty(element);\n let cell = DOM.getCellFromElement(element);\n Utils.consoleLogIfNotProductionEnvironment({element, row, cell, isDirty, wasDirty});\n if (isDirty != wasDirty) {\n DOM.handleDirtyElement(cell, isDirty);\n let isDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isDirtyRow);\n }\n }\n }\n */\n static scrollToElement(parent, element) {\n // REQUIRED: parent has scroll-bar\n parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));\n }\n static isElementInContainer(container, element) {\n\n if (typeof jQuery === 'function') {\n if (container instanceof jQuery) container = container[0];\n if (element instanceof jQuery) element = element[0];\n }\n\n var containerBounds = container.getBoundingClientRect();\n var elementBounds = element.getBoundingClientRect();\n\n return (\n containerBounds.top <= elementBounds.top &&\n containerBounds.left <= elementBounds.left &&\n ((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&\n ((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))\n );\n }\n static alertError(errorType, errorText) {\n alert(errorType + '\\n' + errorText);\n }\n static createOptionUnselectedProductVariation() {\n return {\n [flagProductVariationType]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariationType],\n [flagName]: 'Select Variation Type',\n [attrIdProductVariationType]: 0,\n },\n [flagProductVariation]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariation],\n [flagName]: 'Select Variation',\n [attrIdProductVariation]: 0,\n },\n };\n }\n static createOption(optionJson) {\n if (Validation.isEmpty(optionJson)) optionJson = {\n text: 'Select',\n value: 0,\n };\n let option = document.createElement('option');\n option.value = optionJson.value;\n option.textContent = optionJson.text;\n option.selected = optionJson.selected;\n return option;\n }\n\n static escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n static unescapeHtml(html) {\n const div = document.createElement('div');\n div.innerHTML = html;\n return div.textContent || div.innerText || '';\n }\n}\n","\nexport default class Events {\n static initialiseEventHandler(selectorElement, classInitialised, eventHandler) {\n document.querySelectorAll(selectorElement).forEach(function(element) {\n if (element.classList.contains(classInitialised)) return;\n eventHandler(element);\n element.classList.add(classInitialised);\n });\n }\n}","\nimport Validation from \"./validation.js\";\n\nexport default class LocalStorage {\n/*\nfunction getPageLocalStorage(pageHash) {\n\n let ls;\n try {\n ls = JSON.parse(localStorage.getItem(pageHash));\n } catch {\n\n }\n\n if (Validation.isEmpty(ls)) return {}\n\n return ls;\n}\nfunction getPageLocalStorageCurrent() {\n\n return JSON.parse(localStorage.getItem(hashPageCurrent));\n}\n\nfunction setPageLocalStorage(pageHash, newLS) {\n\n localStorage.setItem(pageHash, JSON.stringify(newLS));\n}\n\nfunction clearPageLocalStorage(pageHash) {\n localStorage.removeItem(pageHash);\n}\n\nfunction setupPageLocalStorage(pageHash) {\n\n let ls = getPageLocalStorage(pageHash);\n\n if (Validation.isEmpty(ls)) ls = {};\n\n setPageLocalStorage(pageHash, ls);\n}\n*/\n\n static getLocalStorage(key) {\n return JSON.parse(localStorage.getItem(key));\n }\n\n static setLocalStorage(key, newLS) {\n localStorage.setItem(key, JSON.stringify(newLS));\n }\n\n/*\nfunction setupPageLocalStorageNext(pageHashNext) {\n let lsOld = getPageLocalStorage(hashPageCurrent);\n hashPageCurrent = pageHashNext;\n clearPageLocalStorage(hashPageCurrent);\n setupPageLocalStorage(hashPageCurrent);\n let lsNew = getPageLocalStorage(hashPageCurrent);\n lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};\n setPageLocalStorage(hashPageCurrent, lsNew);\n}\n*/\n}","import DOM from './dom.js';\n\nexport default class API {\n \n static getCsrfToken() {\n return document.querySelector(idCSRFToken).getAttribute('content');\n }\n \n static async request(hashEndpoint, method = 'GET', data = null, params = null) {\n const url = API.getUrlFromHash(hashEndpoint, params);\n const csrfToken = API.getCsrfToken();\n const options = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n [flagCsrfToken]: csrfToken,\n }\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n data = { \n ...data, \n [flagCsrfToken]: csrfToken,\n };\n options.body = JSON.stringify(data);\n }\n\n try {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return await response.json();\n } catch (error) {\n console.error('API request failed:', error);\n throw error;\n }\n }\n \n static getUrlFromHash(hash, params = null) {\n if (hash == null) hash = hashPageHome;\n let url = API.parameteriseUrl(_pathHost + hash, params);\n return url;\n }\n static parameteriseUrl(url, params) {\n if (params) {\n url += '?' + new URLSearchParams(params).toString();\n }\n return url;\n }\n static goToUrl(url) {\n window.location.href = url;\n }\n static goToHash(hash, params = null) {\n const url = API.getUrlFromHash(hash, params);\n API.goToUrl(url);\n }\n\n // specific api calls\n /* Example:\n getUsers: () => request('/users'),\n getUserById: (id) => request(`/users/${id}`),\n createUser: (userData) => request('/users', 'POST', userData),\n updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),\n deleteUser: (id) => request(`/users/${id}`, 'DELETE'),\n */\n static async loginUser() {\n let callback = {};\n callback[flagCallback] = DOM.getHashPageCurrent();\n return await API.request(hashPageUserLogin, 'POST', callback);\n }\n\n // dog\n // Command categories\n static async saveCommandCategories(commandCategories, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagCommandCategory] = commandCategories;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogCommandCategory, 'POST', dataRequest);\n }\n \n // Commands\n static async saveCommands(commands, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagCommand] = commands;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogCommand, 'POST', dataRequest);\n }\n \n // Dog Command Links\n static async saveDogCommandLinks(dogCommandLinks, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagDogCommandLink] = dogCommandLinks;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);\n }\n \n}\n","// Utility functions\n/*\nfunction $(selector) {\n return document.querySelector(selector);\n}\n\nfunction $$(selector) {\n return document.querySelectorAll(selector);\n}\n*/\nexport default class Utils {\n static getListFromDict(dict) {\n let list = [];\n for (let key in dict) {\n list.push(dict[key]);\n }\n return list;\n }\n static consoleLogIfNotProductionEnvironment(message) {\n if (environment.is_production != \"true\") {\n console.log(message);\n }\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayConfirm {\n static hookup(callbackSuccess) {\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.style.visibility = 'hidden';\n });\n });\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, (buttonConfirm) => {\n buttonConfirm.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n let textarea = overlay.querySelector('textarea');\n overlay.style.visibility = 'hidden';\n callbackSuccess(textarea.value);\n });\n });\n }\n static show() {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.classList.remove(flagIsCollapsed);\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class BasePage {\n constructor(router) {\n if (!router) {\n throw new Error(\"Router is required\");\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"initialising with router: \", router);\n }\n this.router = router;\n this.title = titlePageCurrent;\n if (this.constructor === BasePage) {\n throw new Error(\"Cannot instantiate abstract class\");\n }\n \n if (!this.constructor.hash) {\n throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);\n }\n }\n\n initialize() {\n throw new Error(\"Method 'initialize()' must be implemented.\");\n }\n\n sharedInitialize() {\n this.logInitialisation();\n this.hookupCommonElements();\n }\n\n logInitialisation() {\n Utils.consoleLogIfNotProductionEnvironment('Initializing ' + this.title + ' page');\n }\n \n hookupCommonElements() {\n // hookupVideos();\n this.hookupLogos();\n this.hookupNavigation();\n this.hookupOverlays();\n }\n \n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n \n hookupNavigation() {\n this.hookupEventHandler(\"click\", idButtonHamburger, (event, element) => {\n let overlayHamburger = document.querySelector(idOverlayHamburger);\n if (overlayHamburger.classList.contains(flagIsCollapsed)) {\n overlayHamburger.classList.remove(flagIsCollapsed);\n overlayHamburger.classList.add(flagExpanded);\n } else {\n overlayHamburger.classList.remove(flagExpanded);\n overlayHamburger.classList.add(flagIsCollapsed);\n }\n });\n\n this.hookupButtonsNavHome();\n // this.hookupButtonsNavAdminHome();\n this.hookupButtonsNavUserAccount();\n this.hookupButtonsNavUserLogout();\n this.hookupButtonsNavUserLogin();\n\n // this.hookupButtonsNavStoreHome();\n // this.hookupButtonsNavStoreManufacturingPurchaseOrders();\n this.hookupButtonsNavDogHome();\n this.hookupButtonsNavDogCommandCategories();\n this.hookupButtonsNavDogCommands();\n this.hookupButtonsNavDogDogCommandLinks();\n this.hookupButtonsNavDogDogs();\n }\n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n hookupButtonsNavHome() {\n this.hookupButtonsNav('.' + flagNavHome, hashPageHome);\n }\n hookupButtonsNav(buttonSelector, hashPageNav) {\n this.hookupEventHandler(\"click\", buttonSelector, (event, button) => { \n this.router.navigateToHash(hashPageNav); \n });\n }\n /*\n hookupButtonsNavAdminHome() {\n this.hookupButtonsNav('.' + flagNavAdminHome, hashPageAdminHome);\n }\n hookupButtonsNavServices() {\n this.hookupButtonsNav('.' + flagNavServices, hashPageServices);\n }\n */\n hookupButtonsNavUserAccount() {\n this.hookupButtonsNav('.' + flagNavUserAccount, hashPageUserAccount);\n }\n hookupButtonsNavUserLogout() {\n this.hookupButtonsNav('.' + flagNavUserLogout, hashPageUserLogout);\n }\n hookupButtonsNavUserLogin() {\n this.hookupEventHandler(\"click\", '.' + flagNavUserLogin, (event, navigator) => { \n event.stopPropagation();\n this.leave();\n API.loginUser()\n .then((response) => {\n if (response.Success) {\n window.location.href = response[flagCallback];\n } else {\n DOM.alertError(\"Error\", response.Message);\n }\n });\n });\n }\n hookupButtonsNavDogHome() {\n this.hookupButtonsNav('.' + flagNavDogHome, hashPageDogHome);\n }\n hookupButtonsNavDogCommandCategories() {\n this.hookupButtonsNav('.' + flagNavDogCommandCategories, hashPageDogCommandCategories);\n }\n hookupButtonsNavDogCommands() {\n this.hookupButtonsNav('.' + flagNavDogCommands, hashPageDogCommands);\n }\n hookupButtonsNavDogDogCommandLinks() {\n this.hookupButtonsNav('.' + flagNavDogDogCommandLinks, hashPageDogDogCommandLinks);\n }\n hookupButtonsNavDogDogs() {\n this.hookupButtonsNav('.' + flagNavDogDogs, hashPageDogDogs);\n }\n\n hookupLogos() {\n this.hookupEventHandler(\"click\", \".\" + flagImageLogo + \",\" + \".\" + flagLogo, (event, element) => {\n Utils.consoleLogIfNotProductionEnvironment('clicking logo');\n this.router.navigateToHash(hashPageHome);\n });\n }\n\n hookupOverlays() {\n this.hookupOverlayFromId(idOverlayConfirm);\n this.hookupOverlayFromId(idOverlayError);\n }\n\n hookupOverlayFromId(idOverlay) {\n Events.initialiseEventHandler(idOverlay, flagInitialised, (overlay) => {\n overlay.querySelector('button.' + flagCancel).addEventListener(\"click\", (event) => {\n event.stopPropagation();\n overlay.style.display = 'none';\n });\n });\n }\n\n hookupButtonSave() {\n Events.initialiseEventHandler('form.' + flagFilter + ' button.' + flagSave, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n Utils.consoleLogIfNotProductionEnvironment('saving page: ', this.title);\n OverlayConfirm.show();\n });\n });\n }\n\n leave() {\n Utils.consoleLogIfNotProductionEnvironment('Leaving ' + this.title + ' page');\n if (this.constructor === BasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n }\n setLocalStoragePage(dataPage) {\n LocalStorage.setLocalStorage(this.hash, dataPage);\n }\n getLocalStoragePage() {\n return LocalStorage.getLocalStorage(this.hash);\n }\n\n toggleShowButtonsSaveCancel(show) { // , buttonSave = null, buttonCancel = null\n let buttonSave = document.querySelector('form.' + flagFilter + ' button.' + flagSave);\n let buttonCancel = document.querySelector('form.' + flagFilter + ' button.' + flagCancel);\n if (show) {\n buttonCancel.classList.remove(flagIsCollapsed);\n buttonSave.classList.remove(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('showing buttons');\n } else {\n buttonCancel.classList.add(flagIsCollapsed);\n buttonSave.classList.add(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('hiding buttons');\n }\n }\n\n static isDirtyFilter(filter) {\n let isDirty = DOM.updateAndCheckIsElementDirty(filter);\n if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();\n return isDirty;\n }\n\n}","\n// internal\nimport BasePage from \"../base.js\";\n// external\n\n\nexport default class PageHome extends BasePage {\n static hash = hashPageHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n // this.hookupButtonsNav();\n }\n\n leave() {\n super.leave();\n }\n}\n\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageDogHome extends BasePage {\n static hash = hashPageDogHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupDogHome();\n }\n hookupDogHome() {\n \n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport Utils from '../utils.js';\n\nexport default class BusinessObjects {\n static getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected = null) {\n return {\n text: objectJson[keyText],\n value: objectJson[keyValue],\n selected: (objectJson[keyValue] == valueSelected),\n };\n }\n static getOptionJsonFromObjectJson(objectJson, valueSelected = null) {\n let keyText = objectJson[flagNameAttrOptionText];\n let keyValue = objectJson[flagNameAttrOptionValue];\n Utils.consoleLogIfNotProductionEnvironment({objectJson, keyText, keyValue});\n return BusinessObjects.getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected);\n }\n static getObjectText(objectJson) {\n return objectJson == null ? '' : objectJson[objectJson[flagNameAttrOptionText]];\n }\n static getListObjectsFromIdDictAndCsv(idDict, idCsv) {\n let listObjects = [];\n let ids = idCsv.split(',');\n for (let id of ids) {\n listObjects.push(idDict[id]);\n }\n return listObjects;\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayError {\n static hookup() {\n Events.initialiseEventHandler(idOverlayError + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayError);\n overlay.style.visibility = 'hidden';\n });\n });\n }\n static show(msgError) {\n let overlay = document.querySelector(idOverlayError);\n let labelError = overlay.querySelector(idLabelError);\n labelError.innerText = msgError;\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport Validation from \"../lib/validation.js\";\nimport BasePage from \"./base.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class TableBasePage extends BasePage {\n // static hash\n // static attrIdRowObject\n // callSaveTableContent\n\n constructor(router) {\n super(router);\n this.cursorYInitial = null;\n this.rowInitial = null;\n this.placeholder = null;\n this.dragSrcEl = null;\n this.dragSrcRow = null;\n\n this.hookupTableCellDdls = this.hookupTableCellDdls.bind(this);\n }\n \n initialize(isPopState = false) {\n throw new Error(\"Must implement initialize() method.\");\n }\n sharedInitialize(isPopState = false, isSinglePageApp = false) {\n if (!isPopState) {\n super.sharedInitialize();\n this.hookupFilters();\n this.hookupButtonsSaveCancel();\n this.hookupTableMain();\n OverlayConfirm.hookup(() => {\n if (isSinglePageApp) {\n this.saveRecordsTableDirtySinglePageApp();\n }\n else {\n this.saveRecordsTableDirty();\n }\n });\n } else {\n let dataPage = this.getLocalStoragePage();\n let filters = dataPage[flagFormFilters];\n let formFilters = this.getFormFilters();\n let filtersDefault = DOM.convertForm2JSON(formFilters);\n if (!Validation.areEqualDicts(filters, filtersDefault)) {\n this.callFilterTableContent();\n }\n }\n }\n hookupFilters() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method hookupFilters().\");\n }\n }\n sharedHookupFilters() {\n this.hookupButtonApplyFilters();\n this.hookupSearchTextFilter();\n }\n hookupFilterActive() {\n let filterSelector = idFormFilters + ' #' + flagActiveOnly;\n let filterActiveOld = document.querySelector(filterSelector);\n filterActiveOld.removeAttribute('id');\n let parentDiv = filterActiveOld.parentElement;\n let isChecked = (DOM.getElementAttributeValuePrevious(parentDiv) == \"True\");\n let filterActiveNew = document.querySelector(idFormFilters + ' div.' + flagActiveOnly + '.' + flagContainerInput + ' svg.' + flagActiveOnly);\n filterActiveNew.setAttribute('id', flagActiveOnly);\n if (isChecked) filterActiveNew.classList.add(flagIsChecked);\n\n this.hookupEventHandler(\"click\", filterSelector, (event, filterActive) => {\n Utils.consoleLogIfNotProductionEnvironment({ filterActive });\n Utils.consoleLogIfNotProductionEnvironment({ [filterActive.tagName]: filterActive.tagName });\n let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;\n let wasChecked = svgElement.classList.contains(flagIsChecked);\n if (wasChecked) {\n svgElement.classList.remove(flagIsChecked);\n }\n else {\n svgElement.classList.add(flagIsChecked);\n }\n return TableBasePage.isDirtyFilter(svgElement);\n });\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n hookupFilter(filterFlag, handler = (event, filter) => { return TableBasePage.isDirtyFilter(filter); }) {\n let filterSelector = idFormFilters + ' #' + filterFlag;\n this.hookupEventHandler(\"change\", filterSelector, handler);\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n static isDirtyFilter(filter) {\n let isDirty = DOM.updateAndCheckIsElementDirty(filter);\n let tbody = document.querySelector(idTableMain + ' tbody');\n let rows = tbody.querySelectorAll(':scope > tr');\n let cancelButton = document.querySelector(idFormFilters + ' ' + idButtonCancel);\n let saveButton = document.querySelector(idFormFilters + ' ' + idButtonSave);\n rows.forEach((row) => {\n if (isDirty && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);\n if (!isDirty && row.classList.contains(flagIsCollapsed)) row.classList.remove(flagIsCollapsed);\n });\n if (isDirty) {\n // tbody.querySelectorAll('tr').forEach((tr) => { tr.remove(); });\n tbody.innerHTML = 'Press \"Apply Filters\" to refresh the table.
' + tbody.innerHTML;\n if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);\n if (!cancelButton.classList.contains(flagIsCollapsed)) cancelButton.classList.add(flagIsCollapsed);\n if (!saveButton.classList.contains(flagIsCollapsed)) saveButton.classList.add(flagIsCollapsed);\n }\n else {\n if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);\n if (cancelButton.classList.contains(flagIsCollapsed)) cancelButton.classList.remove(flagIsCollapsed);\n if (saveButton.classList.contains(flagIsCollapsed)) saveButton.classList.remove(flagIsCollapsed);\n let isDirtyLabel = tbody.querySelector(\":scope > div\");\n if (isDirtyLabel != null) isDirtyLabel.remove();\n }\n return isDirty;\n }\n hookupFilterIsNotEmpty() {\n this.hookupFilter(flagIsNotEmpty);\n }\n hookupButtonApplyFilters() {\n this.hookupEventHandler(\"click\", idButtonApplyFilters, (event, button) => {\n event.stopPropagation();\n this.callFilterTableContent();\n });\n }\n hookupSearchTextFilter() {\n this.hookupFilter(flagSearch);\n }\n hookupFilterDog() {\n this.hookupFilter(attrIdDog); \n }\n hookupFilterCommandCategory() {\n this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {\n TableBasePage.isDirtyFilter(filterCommandCategory);\n let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);\n let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);\n console.log(\"filter commands unsorted\");\n console.log(Utils.getListFromDict(filterCommands));\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => command[attrIdCommandCategory] == idCommandCategory);\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);\n let idCommandPrevious = DOM.getElementAttributeValuePrevious(filterCommand);\n filterCommand.innerHTML = '';\n let optionJson, option;\n option = DOM.createOption(null);\n filterCommand.appendChild(option);\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command, idCommandPrevious);\n option = DOM.createOption(optionJson);\n filterCommand.appendChild(option);\n });\n filterCommand.dispatchEvent(new Event('change'));\n return isDirtyFilter;\n });\n }\n hookupFilterCommand() {\n this.hookupFilter(attrIdCommand);\n }\n /*\n getAndLoadFilteredTableContent = () => {\n this.callFilterTableContent()\n .catch(error => console.error('Error:', error));\n }\n */\n getFormFilters() {\n return document.querySelector(idFormFilters);\n }\n callFilterTableContent() {\n let formFilters = this.getFormFilters();\n let filtersJson = DOM.convertForm2JSON(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"callFilterTableContent\");\n Utils.consoleLogIfNotProductionEnvironment(\"formFilters\");\n Utils.consoleLogIfNotProductionEnvironment(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"filtersJson\");\n Utils.consoleLogIfNotProductionEnvironment(filtersJson);\n this.leave();\n API.goToHash(this.constructor.hash, filtersJson);\n }\n callbackLoadTableContent(response) {\n let table = TableBasePage.getTableMain();\n let bodyTable = table.querySelector('tbody');\n bodyTable.querySelectorAll('tr').forEach(function(row) { row.remove(); });\n let rowsJson = response.data[flagRows];\n if (!Validation.isEmpty(rowsJson) && rowsJson.every(row => row.hasOwnProperty('display_order'))) {\n rowsJson = rowsJson.sort((a, b) => a.display_order - b.display_order);\n }\n rowsJson.forEach(this.loadRowTable.bind(this));\n this.hookupTableMain();\n }\n static getTableMain() {\n return document.querySelector(idTableMain);\n }\n loadRowTable(rowJson) {\n throw new Error(\"Subclass of TableBasePage must implement method loadRowTable().\");\n }\n getAndLoadFilteredTableContentSinglePageApp() {\n this.callFilterTableContent()\n .then(data => {\n Utils.consoleLogIfNotProductionEnvironment('Table data received:', data);\n this.callbackLoadTableContent(data);\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonsSaveCancel() {\n this.hookupButtonSave();\n this.hookupButtonCancel();\n this.toggleShowButtonsSaveCancel(false);\n }\n saveRecordsTableDirty() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = this.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n /*\n Utils.consoleLogIfNotProductionEnvironment({ formElement, comment, records });\n Utils.consoleLogIfNotProductionEnvironment('records');\n Utils.consoleLogIfNotProductionEnvironment(records);\n debugger;\n */\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callFilterTableContent();\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n getTableRecords(dirtyOnly = false) {\n let records = [];\n let record;\n document.querySelectorAll(idTableMain + ' > tbody > tr').forEach((row) => {\n if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;\n record = this.getJsonRow(row);\n records.push(record);\n });\n return records;\n }\n getJsonRow(row) {\n throw new Error(\"Subclass of TableBasePage must implement method getJsonRow().\");\n }\n saveRecordsTableDirtySinglePageApp() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = this.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callbackLoadTableContent(data);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonCancel() {\n Events.initialiseEventHandler(idFormFilters + ' button.' + flagCancel, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n this.callFilterTableContent();\n });\n button.classList.add(flagIsCollapsed);\n });\n }\n handleClickAddRowTable(event, button) {\n event.stopPropagation();\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - _rowBlank.getAttribute(this.constructor.attrIdRowObject));\n let tbody = document.querySelector(idTableMain + ' tbody');\n if (tbody.classList.contains(flagIsCollapsed)) return;\n let row = _rowBlank.cloneNode(true);\n row.classList.remove(flagInitialised);\n row.querySelectorAll('.' + flagInitialised).forEach(function(element) {\n element.classList.remove(flagInitialised);\n });\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n this.initialiseRowNew(tbody, row);\n tbody.prepend(row);\n tbody.scrollTop = 0;\n this.hookupTableMain();\n this.postInitialiseRowNewCallback(tbody);\n }\n initialiseRowNew(tbody, row) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method initialiseRowNew().\");\n }\n // row.classList.remove(flagRowNew);\n }\n hookupTableMain() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement hookupTableMain() method.\");\n }\n if (true) { // _rowBlank == null) {\n Events.initialiseEventHandler(idTableMain, flagInitialised, (table) => {\n this.cacheRowBlank();\n });\n }\n }\n cacheRowBlank() {\n let selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew;\n let rowBlankTemp = document.querySelector(selectorRowNew);\n Utils.consoleLogIfNotProductionEnvironment(\"row blank temp: \", rowBlankTemp);\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n _rowBlank = rowBlankTemp.cloneNode(true);\n document.querySelectorAll(selectorRowNew).forEach(function(row) {\n row.remove();\n });\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n }\n postInitialiseRowNewCallback(tbody) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method postInitialiseRowNewCallback(tbody).\");\n }\n }\n initialiseSliderDisplayOrderRowNew(tbody, row) {\n // let tdSelector = ':scope > tr > td.' + flagDisplayOrder;\n // let tbody = document.querySelector('table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody');\n let slidersDisplayOrder = tbody.querySelectorAll(':scope > tr > td.' + flagDisplayOrder + ' input.' + flagSlider);\n let maxDisplayOrder = 0;\n slidersDisplayOrder.forEach((slider) => {\n maxDisplayOrder = Math.max(maxDisplayOrder, parseFloat(DOM.getElementValueCurrent(slider)));\n });\n let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);\n DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, maxDisplayOrder + 1);\n }\n hookupSlidersDisplayOrderTable() {\n let selectorDisplayOrder = idTableMain + ' tbody tr td.' + flagDisplayOrder + ' input.' + flagSlider + '.' + flagDisplayOrder;\n this.hookupChangeHandlerTableCells(selectorDisplayOrder);\n }\n hookupChangeHandlerTableCells(inputSelector, handler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.initialiseEventHandler(inputSelector, flagInitialised, (input) => {\n input.addEventListener(\"change\", (event) => {\n handler(event, input);\n });\n handler(null, input);\n });\n }\n /*\n handleChangeElementCellTable(event, element) {\n let row = DOM.getRowFromElement(element);\n let td = DOM.getCellFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenContainer(row);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n if (isDirtyElement != wasDirtyElement) {\n DOM.handleDirtyElement(td, isDirtyElement);\n let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);\n if (isNowDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isNowDirtyRow);\n let rows = this.getTableRecords(true);\n let existsDirtyRecord = rows.length > 0;\n this.toggleShowButtonsSaveCancel(existsDirtyRecord);\n }\n }\n }\n handleChangeElementNestedCellTable(event, element, flagColumnList = [], orderNesting = 1) {\n let orderNestingTemp = orderNesting;\n let row, td, nestedRowSelector;\n while (orderNestingTemp > 0) {\n nestedRowSelector = idTableMain;\n for (let indexOrderNesting = 0; indexOrderNesting < orderNestingTemp; indexOrderNesting++) {\n nestedRowSelector += ' tbody tr';\n }\n row = DOM.getClosestParent(element, nestedRowSelector);\n td = row.querySelector('td.' + flag);\n }\n let row = DOM.getRowFromElement(element);\n let td = DOM.getCellFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenContainer(row);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n if (isDirtyElement != wasDirtyElement) {\n DOM.handleDirtyElement(td, isDirtyElement);\n let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);\n if (isNowDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isNowDirtyRow);\n let rows = this.getTableRecords(true);\n let existsDirtyRecord = rows.length > 0;\n this.toggleShowButtonsSaveCancel(existsDirtyRecord);\n }\n }\n }\n handleChangeElementSubtableCell(event, element, flagFieldSubtable) {\n let rowSubtable = element.closest(idTableMain + ' td.' + flagFieldSubtable + ' tbody tr');\n let rowTable = rowSubtable.closest(idTableMain + ' > tbody > tr');\n let td = DOM.getCellFromElement(element);\n // let tdSubtable = td.closest('td.' + flagFieldSubtable);\n let wasDirtyRowSubtable = DOM.hasDirtyChildrenContainer(rowSubtable);\n let wasDirtyRowTable = DOM.hasDirtyChildrenContainer(rowTable);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement});\n if (isDirtyElement != wasDirtyElement) {\n DOM.handleDirtyElement(td, isDirtyElement);\n let isNowDirtyRowSubtable = DOM.hasDirtyChildrenContainer(rowSubtable);\n Utils.consoleLogIfNotProductionEnvironment({isNowDirtyRowSubtable, wasDirtyRowSubtable});\n if (isNowDirtyRowSubtable != wasDirtyRowSubtable) {\n DOM.handleDirtyElement(rowSubtable, isNowDirtyRowSubtable);\n let isNowDirtyRowTable = DOM.hasDirtyChildrenContainer(rowTable);\n Utils.consoleLogIfNotProductionEnvironment({isNowDirtyRowTable, wasDirtyRowTable});\n if (isNowDirtyRowTable != wasDirtyRowTable) {\n DOM.handleDirtyElement(rowTable, isNowDirtyRowTable);\n let rows = this.getTableRecords(true);\n let existsDirtyRecord = rows.length > 0;\n this.toggleShowButtonsSaveCancel(existsDirtyRecord);\n }\n }\n }\n }\n */\n handleChangeNestedElementCellTable(event, element) {\n let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n // Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows});\n // let td = DOM.getCellFromElement(element);\n // DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));\n if (isDirtyElement != wasDirtyElement) {\n // DOM.handleDirtyElement(td, isDirtyElement);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows);\n }\n }\n getAllIsDirtyRowsInParentTree(element) {\n let rows = [];\n let parent = element;\n let isDirty;\n while (parent) {\n if (parent.tagName.toUpperCase() == 'TR') {\n isDirty = parent.classList.contains(flagDirty)\n rows.push(isDirty);\n }\n parent = parent.parentElement;\n }\n return rows;\n }\n cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) {\n if (Validation.isEmpty(wasDirtyParentRows)) return;\n let tr = DOM.getRowFromElement(element);\n let isDirtyRow = isDirtyElement || DOM.hasDirtyChildrenContainer(tr);\n let wasDirtyRow = wasDirtyParentRows.shift();\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(tr, isDirtyRow);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(tr.parentElement, isDirtyRow, wasDirtyParentRows);\n }\n }\n hookupChangeHandlerTableCellsWhenNotCollapsed(inputSelector, handler = (event, element) => {\n if (!element.classList.contains(flagIsCollapsed)) this.handleChangeNestedElementCellTable(event, element);\n }) {\n this.hookupEventHandler(\"change\", inputSelector, handler);\n }\n hookupFieldsCodeTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagCode + ' > .' + flagCode);\n }\n hookupFieldsNameTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagName + ' > .' + flagName);\n }\n hookupFieldsDescriptionTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagDescription + ' > .' + flagDescription);\n }\n hookupFieldsNotesTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagNotes + ' > .' + flagNotes);\n }\n hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) {\n let selectorButton = 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive;\n let selectorButtonDelete = selectorButton + '.' + flagDelete;\n let selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')';\n Utils.consoleLogIfNotProductionEnvironment(\"hookupFieldsActive: \", selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);\n this.hookupEventHandler(\n \"click\"\n , 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' .' + flagButton + '.' + flagActive\n , (event, button) => { handleClickRowNew(event, button); }\n );\n }\n hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupEventHandler(\"click\", selectorButtonDelete, (event, element) => {\n this.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = element.classList.contains(flagDirty);\n let row = DOM.getRowFromElement(element);\n if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) {\n row.parentNode.removeChild(row);\n }\n else {\n let buttonAddTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagAdd);\n let buttonAdd = buttonAddTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonAdd, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonAdd, false);\n if (wasDirty) buttonAdd.classList.add(flagDirty);\n element.replaceWith(buttonAdd);\n changeHandler(null, buttonAdd);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupEventHandler(\"click\", selectorButtonUndelete, (event, element) => {\n this.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = DOM.isElementDirty(element);\n let buttonDeleteTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagDelete);\n let buttonDelete = buttonDeleteTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonDelete, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonDelete, true);\n if (wasDirty) buttonDelete.classList.add(flagDirty);\n element.replaceWith(buttonDelete);\n changeHandler(null, buttonDelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupTdsAccessLevel() {\n this.hookupTableCellDdlPreviews(flagAccessLevel, Utils.getListFromDict(accessLevels));\n }\n hookupTableCellDdlPreviews(\n fieldFlag\n , optionList\n , cellSelector = null\n , ddlHookup = (ddlSelector) => { this.hookupTableCellDdls(ddlSelector); }\n , changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }\n ) {\n if (cellSelector == null) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n this.hookupEventHandler(\"click\", cellSelector + ' div.' + fieldFlag, (event, div) => {\n this.handleClickTableCellDdlPreview(\n event\n , div\n , fieldFlag\n , optionList\n , cellSelector\n , (ddlSelector) => { ddlHookup(\n ddlSelector\n , (event, element) => { changeHandler(event, element); }\n ); }\n );\n });\n ddlHookup(cellSelector + ' select.' + fieldFlag);\n }\n hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupEventHandler(\"change\", ddlSelector, (event, element) => { changeHandler(event, element); });\n }\n handleClickTableCellDdlPreview(event, div, fieldFlag, optionObjectList, cellSelector = null, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) {\n if (Validation.isEmpty(cellSelector)) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n let idSelected = DOM.getElementAttributeValueCurrent(div);\n let td = DOM.getCellFromElement(div);\n td.innerHTML = '';\n let ddl = document.createElement('select');\n ddl.classList.add(fieldFlag);\n DOM.setElementValuesCurrentAndPrevious(ddl, idSelected);\n let optionJson, option;\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment(\"click table cell ddl preview\");\n Utils.consoleLogIfNotProductionEnvironment({optionObjectList, cellSelector});\n }\n option = DOM.createOption(null);\n ddl.appendChild(option);\n optionObjectList.forEach((optionObjectJson) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(optionObjectJson, idSelected);\n option = DOM.createOption(optionJson);\n ddl.appendChild(option);\n });\n td.appendChild(ddl);\n let ddlSelector = cellSelector + ' select.' + fieldFlag;\n ddlHookup(ddlSelector);\n }\n /*\n hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList, ddlHookup = (event, element) => { this.hookupTableCellDdls(event, element); }) {\n this.hookupEventHandler(\"click\", cellSelector + ' div', (event, div) => {\n this.handleClickTableCellDdlPreview(event, div, optionList, cellSelector, (event, element) => { ddlHookup(event, element); });\n });\n }\n */\n toggleColumnCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n toggleColumnHeaderCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n\n hookupFieldsCommandCategory() {\n this.hookupTableCellDdlPreviews(\n flagCommandCategory\n , Utils.getListFromDict(filterCommandCategories).sort((a, b) => a[flagName].localeCompare(b[flagName]))\n , null\n , (cellSelector) => { this.hookupCommandCategoryDdls(cellSelector); }\n );\n }\n hookupCommandCategoryDdls(ddlSelector) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeCommandCategoryDdl(event, element); });\n }\n handleChangeCommandCategoryDdl(event, ddlCategory) {\n let row = DOM.getRowFromElement(ddlCategory);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n this.handleChangeNestedElementCellTable(event, ddlCategory);\n let idCommandCategoryRowNew = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n if (idCommandCategoryRowOld == idCommandCategoryRowNew) return;\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let tdCommand = row.querySelector('td.' + flagCommand);\n tdCommand.dispatchEvent(new Event('click'));\n let ddlCommand = row.querySelector('td.' + flagCommand + ' select.' + flagCommand);\n ddlCommand.innerHTML = '';\n ddlCommand.appendChild(DOM.createOption(null));\n let optionJson, option;\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);\n option = DOM.createOption(optionJson);\n ddlCommand.appendChild(option);\n });\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n }\n hookupFieldsCommand() {\n this.hookupEventHandler(\"click\", idTableMain + ' td.' + flagCommand + ' .' + flagCommand, (event, div) => {\n Utils.consoleLogIfNotProductionEnvironment(div);\n let parentTr = DOM.getRowFromElement(div);\n Utils.consoleLogIfNotProductionEnvironment({ div, parentTr });\n let tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);\n let idCommandCategoryRow = this.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let filterCommandList = Utils.getListFromDict(filterCommands);\n let commandsInCategory = filterCommandList.filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRow\n || idCommandCategoryRow == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n Utils.consoleLogIfNotProductionEnvironment({ tdCommandCategory, idCommandCategoryRow, idCommandCategoryFilter, filterCommandList, commandsInCategory });\n Utils.consoleLogIfNotProductionEnvironment(filterCommandList);\n this.handleClickTableCellDdlPreview(\n event\n , div\n , flagCommand\n , sortedCommands\n , null\n , (cellSelector) => { this.hookupTableCellDdls(\n cellSelector\n , (event, element) => { this.handleChangeNestedElementCellTable(event, element); }\n ); }\n );\n });\n this.hookupTableCellDdls(idTableMain + ' td.' + flagCommand + ' select.' + flagCommand);\n }\n getIdCommandCategoryRow(tr) {\n let elementCommandCategory = tr.querySelector('td.' + flagCommandCategory + ' .' + flagCommandCategory);\n return DOM.getElementAttributeValueCurrent(elementCommandCategory);\n }\n getIdCommandCategoryFilter() {\n let formFilters = this.getFormFilters();\n let commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let idCommandCategory = 0;\n let valueCurrentCommandCategoryFilter = DOM.getElementAttributeValueCurrent(commandCategoryFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandCategoryFilter });\n if (valueCurrentCommandCategoryFilter == \"\") {\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandFilter });\n if (valueCurrentCommandFilter != \"\") {\n let command = filterCommands[valueCurrentCommandFilter];\n idCommandCategory = command[attrIdCommandCategory];\n }\n } else {\n idCommandCategory = Number(valueCurrentCommandCategoryFilter);\n }\n return idCommandCategory;\n }\n getHasCommandCategoryFilter() {\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n return !(Validation.isEmpty(idCommandCategoryFilter) || idCommandCategoryFilter == 0);\n }\n getIdCommandRow(tr) {\n let elementCommand = tr.querySelector('td.' + flagCommand + ' .' + flagCommand);\n return DOM.getElementAttributeValueCurrent(elementCommand);\n }\n getIdCommandFilter() {\n let formFilters = this.getFormFilters();\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n let idCommand = Number(valueCurrentCommandFilter);\n return idCommand;\n }\n getHasCommandFilter() {\n let idCommandFilter = this.getIdCommandFilter();\n return !(Validation.isEmpty(idCommandFilter) || idCommandFilter == 0);\n }\n hookupFieldsDog() {\n this.hookupTableCellDdlPreviews(flagDog, Utils.getListFromDict(filterDogs));\n }\n getIdDogRow(tr) {\n let elementDog = tr.querySelector('td.' + flagDog + ' .' + flagDog);\n return DOM.getElementAttributeValueCurrent(elementDog);\n }\n \n createTdActive(isActive) {\n let tdActive = document.createElement(\"td\");\n tdActive.classList.add(flagActive);\n let buttonActive = document.createElement(\"button\");\n buttonActive.classList.add(flagActive);\n buttonActive.classList.add(isActive ? flagDelete : flagAdd);\n buttonActive.textContent = isActive ? 'x' : '+';\n DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, isActive);\n tdActive.appendChild(buttonActive);\n return tdActive;\n }\n \n leave() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n super.leave();\n let formFilters = this.getFormFilters();\n let dataPage = {};\n dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n this.setLocalStoragePage(dataPage);\n }\n\n toggleColumnHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n let columnThHasFlag = columnTh.classList.contains(classnameFlag);\n if (isRequiredFlag == columnThHasFlag) return;\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n toggleColumnHeaderHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n\n updateAndToggleShowButtonsSaveCancel() {\n let records = this.getTableRecords(true);\n let existsDirtyRecord = records.length > 0;\n this.toggleShowButtonsSaveCancel(existsDirtyRecord);\n }\n}\n","\nimport Events from \"../../lib/events.js\";\nimport LocalStorage from \"../../lib/local_storage.js\";\nimport Validation from \"../../lib/validation.js\";\n// import BasePage from \"../base.js\";\nimport DOM from \"../../dom.js\";\nimport { isEmpty } from \"../../lib/utils.js\";\nimport TableBasePage from \"../base_table.js\";\n\nexport default class DogMixinPage {\n constructor(pageCurrent) {\n this.page = pageCurrent;\n }\n\n initialize() {\n Utils.consoleLogIfNotProductionEnvironment('hookup dog start for ', this.page.hash);\n this.hookupFilters();\n this.hookupLocalStorageDog();\n }\n hookupFilters() {\n }\n hookupLocalStorageDog() {\n \n }\n\n /*\n hookupDogCardsProduct() {\n \n let d; // , lsShared;\n let selectorCardProduct = '.card.subcard';\n Events.initialiseEventHandler(selectorCardProduct, flagInitialised, function(cardProduct) {\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"initialising product card: \", cardProduct); }\n cardProduct.addEventListener(\"click\", function(event) {\n // d = { keyIdProduct: product.getAttribute(attrIdProduct) }\n var elemClicked = event.target;\n if (elemClicked.id != 'submit') { // disable for submit buttons\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment(\"product click: \" + cardProduct.getAttribute(attrIdProduct));\n Utils.consoleLogIfNotProductionEnvironment(\"permutation click: \" + cardProduct.getAttribute(attrIdPermutation));\n }\n var d = {}\n d[keyIdProduct] = cardProduct.getAttribute(attrIdProduct)\n d[keyIdPermutation] = cardProduct.getAttribute(attrIdPermutation)\n // send quantity requested\n goToPage(hashPageDogProduct, d);\n }\n });\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"click method added for product ID: \" + cardProduct.getAttribute(attrIdProduct) + ', permutation ID: ', cardProduct.getAttribute(attrIdPermutation)); }\n });\n }\n */\n \n leave() {}\n}\n","\nimport Events from \"../../lib/events.js\";\nimport LocalStorage from \"../../lib/local_storage.js\";\nimport Validation from \"../../lib/validation.js\";\n// import BasePage from \"../base.js\";\nimport DOM from \"../../dom.js\";\nimport { isEmpty } from \"../../lib/utils.js\";\nimport DogMixinPage from \"./mixin.js\";\n\nexport default class DogTableMixinPage extends DogMixinPage {\n constructor(pageCurrent) {\n super(pageCurrent);\n }\n initialize() {\n super.initialize();\n this.hookupFilters();\n this.hookupTable();\n }\n hookupFilters() {\n // Implement filter-specific functionality here\n }\n hookupTable() {\n // Implement table-specific functionality here\n }\n}","\nimport API from \"../../api.js\";\nimport BusinessObjects from \"../../lib/business_objects/business_objects.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\nimport Validation from \"../../lib/validation.js\";\nimport DogTableMixinPage from \"./mixin_table.js\";\n\nexport default class PageDogCommandCategories extends TableBasePage {\n static hash = hashPageDogCommandCategories;\n static attrIdRowObject = attrIdCommandCategory;\n callSaveTableContent = API.saveCommandCategories;\n\n constructor(router) {\n super(router);\n this.dogMixin = new DogTableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterActive();\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n Utils.consoleLogIfNotProductionEnvironment({ row });\n if (row == null) return;\n let inputCode = row.querySelector('td.' + flagCode + ' .' + flagCode);\n let inputName = row.querySelector('td.' + flagName + ' .' + flagName);\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n \n /*\n console.log(\"inputName\");\n console.log(inputName);\n */\n\n let jsonRow = {};\n jsonRow[attrIdCommandCategory] = row.getAttribute(attrIdCommandCategory);\n jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(inputCode);\n jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n return jsonRow;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n // let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsCodeTable();\n this.hookupFieldsNameTable();\n this.hookupFieldsActive();\n }\n\n leave() {\n super.leave();\n }\n}\n\n","\nimport API from \"../../api.js\";\nimport BusinessObjects from \"../../lib/business_objects/business_objects.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\nimport Validation from \"../../lib/validation.js\";\nimport DogTableMixinPage from \"./mixin_table.js\";\n\nexport default class PageDogCommands extends TableBasePage {\n static hash = hashPageDogCommands;\n static attrIdRowObject = attrIdCommand;\n callSaveTableContent = API.saveCommands;\n\n constructor(router) {\n super(router);\n this.dogMixin = new DogTableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterCommandCategory();\n this.hookupFilterActive();\n }\n hookupFilterCommandCategory() {\n this.hookupFilter(attrIdCommandCategory);\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n if (row == null) return;\n let inputName = row.querySelector('td.' + flagName + ' .' + flagName);\n let inputHandSignalDefaultDescription = row.querySelector('td.' + flagHandSignalDefaultDescription + ' .' + flagHandSignalDefaultDescription);\n let inputCanHaveButton = row.querySelector('td.' + flagCanHaveButton + ' .' + flagCanHaveButton);\n let inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes);\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n\n /*\n Utils.consoleLogIfNotProductionEnvironment({ inputName, inputHandSignalDefaultDescription, inputCanHaveButton, inputNotes, buttonActive });\n debugger;\n */\n\n let jsonRow = {};\n jsonRow[attrIdCommand] = row.getAttribute(attrIdCommand);\n jsonRow[attrIdCommandCategory] = this.getIdCommandCategoryRow(row);\n jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName);\n jsonRow[flagHandSignalDefaultDescription] = DOM.getElementAttributeValueCurrent(inputHandSignalDefaultDescription);\n jsonRow[flagCanHaveButton] = (DOM.getElementAttributeValueCurrent(inputCanHaveButton) == \"true\");\n jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n return jsonRow;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[0];\n let clickableElementsSelector = [\n 'td.' + flagDog + ' div.' + flagDog\n , ',td.' + flagCommandCategory + ' div.' + flagCommandCategory\n , ',td.' + flagCommand + ' div.' + flagCommand\n ].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsCommandCategory();\n this.hookupFieldsNameTable();\n this.hookupTextareasHandSignalDefaultDescription();\n this.hookupFieldsCanHaveButton();\n this.hookupFieldsNotesTable();\n this.hookupFieldsActive();\n }\n hookupFieldsCommandCategory() {\n this.hookupTableCellDdlPreviews(\n flagCommandCategory\n , Utils.getListFromDict(filterCommandCategories)\n );\n }\n hookupTextareasHandSignalDefaultDescription() {\n this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagHandSignalDefaultDescription + ' .' + flagHandSignalDefaultDescription);\n }\n hookupFieldsCanHaveButton() {\n this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCanHaveButton + ' .' + flagCanHaveButton);\n }\n\n leave() {\n super.leave();\n }\n}\n\n","\nimport API from \"../../api.js\";\nimport BusinessObjects from \"../../lib/business_objects/business_objects.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\nimport Validation from \"../../lib/validation.js\";\nimport DogTableMixinPage from \"./mixin_table.js\";\n\nexport default class PageDogDogCommandLinks extends TableBasePage {\n static hash = hashPageDogDogCommandLinks;\n static attrIdRowObject = attrIdDogCommandLink;\n callSaveTableContent = API.saveDogCommandLinks;\n\n constructor(router) {\n super(router);\n this.dogMixin = new DogTableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterDog();\n this.hookupFilterCommandCategory();\n this.hookupFilterCommand();\n this.hookupFilterActive();\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n if (row == null) return;\n let inputHandSignalDescription = row.querySelector('td.' + flagHandSignalDescription + ' textarea');\n let inputNotes = row.querySelector('td.' + flagNotes + ' textarea');\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n\n let jsonRow = {};\n jsonRow[attrIdDogCommandLink] = row.getAttribute(attrIdDogCommandLink);\n jsonRow[attrIdDog] = this.getIdDogRow(row);\n jsonRow[attrIdCommand] = this.getIdCommandRow(row);\n jsonRow[flagHandSignalDescription] = DOM.getElementAttributeValueCurrent(inputHandSignalDescription);\n jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n return jsonRow;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[newRows.length - 1];\n let clickableElementsSelector = [\n 'td.' + flagDog + ' div.' + flagDog\n , ',td.' + flagCommandCategory + ' div.' + flagCommandCategory\n , ',td.' + flagCommand + ' div.' + flagCommand\n ].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsDog();\n this.hookupFieldsCommandCategory();\n this.hookupFieldsCommand();\n this.hookupTextareasHandSignalDescription();\n this.hookupFieldsNotesTable();\n this.hookupFieldsActive();\n }\n hookupTextareasHandSignalDescription() {\n this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagHandSignalDescription + ' .' + flagHandSignalDescription);\n }\n\n leave() {\n super.leave();\n }\n}\n\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityReport extends BasePage {\n static hash = hashPageAccessibilityReport;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityStatement extends BasePage {\n static hash = hashPageAccessibilityStatement;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageLicense extends BasePage {\n static hash = hashPageLicense;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","\nimport BasePage from \"../base.js\";\n\nexport default class PagePrivacyPolicy extends BasePage {\n static hash = hashPagePrivacyPolicy;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","import BasePage from \"../base.js\";\n\nexport default class PageRetentionSchedule extends BasePage {\n static hash = hashPageDataRetentionSchedule;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\n// Pages\n// Core\nimport PageHome from './pages/core/home.js';\n// Dog\nimport PageDogHome from './pages/dog/home.js';\nimport PageDogCommandCategories from './pages/dog/command_categories.js';\nimport PageDogCommands from './pages/dog/commands.js';\nimport PageDogDogCommandLinks from './pages/dog/dog_command_links.js';\n// import PageDogDogs from './pages/dog/dogs.js';\n// Legal\nimport PageAccessibilityReport from './pages/legal/accessibility_report.js';\nimport PageAccessibilityStatement from './pages/legal/accessibility_statement.js';\nimport PageLicense from './pages/legal/license.js';\nimport PagePrivacyPolicy from './pages/legal/privacy_policy.js';\nimport PageRetentionSchedule from './pages/legal/retention_schedule.js';\n// User\n// import PageUserLogin from './pages/user/login.js';\n// import PageUserLogout from './pages/user/logout.js';\n// import PageUserAccount from './pages/user/account.js';\n\nimport API from './api.js';\nimport DOM from './dom.js';\nimport Utils from './lib/utils.js';\n\n\nexport default class Router {\n constructor() {\n // Pages\n this.pages = {};\n // Core\n this.pages[hashPageHome] = { name: 'PageHome', module: PageHome };\n // Dog\n this.pages[hashPageDogHome] = { name: 'PageDogHome', module: PageDogHome };\n this.pages[hashPageDogCommandCategories] = { name: 'PageDogCommands', module: PageDogCommandCategories };\n this.pages[hashPageDogCommands] = { name: 'PageDogCommands', module: PageDogCommands };\n this.pages[hashPageDogDogCommandLinks] = { name: 'PageDogDogCommandLinks', module: PageDogDogCommandLinks };\n // this.pages[hashPageDogDogs] = { name: 'PageDogDogs', module: PageDogDogs };\n // Legal\n this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement };\n this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule };\n this.pages[hashPageLicense] = { name: 'PageLicense', module: PageLicense };\n this.pages[hashPagePrivacyPolicy] = { name: 'PagePrivacyPolicy', module: PagePrivacyPolicy };\n // User\n // this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };\n // this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };\n // this.pages[hashPageUserAccount] = { name: 'PageUserAccount', module: PageUserAccount }; // pathModule: './pages/user/account.js' };\n // Routes\n this.routes = {};\n // Core\n this.routes[hashPageHome] = (isPopState = false) => this.navigateToHash(hashPageHome, isPopState);\n // Dog\n this.routes[hashPageDogHome] = (isPopState = false) => this.navigateToHash(hashPageDogHome, isPopState);\n this.routes[hashPageDogCommandCategories] = (isPopState = false) => this.navigateToHash(hashPageDogCommandCategories, isPopState);\n this.routes[hashPageDogCommands] = (isPopState = false) => this.navigateToHash(hashPageDogCommands, isPopState);\n this.routes[hashPageDogDogCommandLinks] = (isPopState = false) => this.navigateToHash(hashPageDogDogCommandLinks, isPopState);\n // this.routes[hashPageDogDogs] = (isPopState = false) => this.navigateToHash(hashPageDogDogs, isPopState);\n // Legal\n this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);\n this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);\n this.routes[hashPageLicense] = (isPopState = false) => this.navigateToHash(hashPageLicense, isPopState);\n this.routes[hashPagePrivacyPolicy] = (isPopState = false) => this.navigateToHash(hashPagePrivacyPolicy, isPopState);\n // User\n // this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);\n // this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);\n // this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);\n this.initialize();\n }\n loadPage(hashPage, isPopState = false) {\n const PageClass = this.getClassPageFromHash(hashPage);\n this.currentPage = new PageClass(this);\n this.currentPage.initialize(isPopState);\n window.addEventListener('beforeunload', () => this.currentPage.leave());\n }\n getClassPageFromHash(hashPage) {\n \n let pageJson = this.pages[hashPage];\n try {\n const module = pageJson.module;\n return module; \n }\n catch (error) {\n Utils.consoleLogIfNotProductionEnvironment(\"this.pages: \", this.pages);\n console.error('Page not found:', hashPage);\n throw error;\n }\n }\n initialize() {\n window.addEventListener('popstate', this.handlePopState.bind(this));\n }\n handlePopState(event) {\n this.loadPageCurrent();\n }\n loadPageCurrent() {\n const hashPageCurrent = DOM.getHashPageCurrent();\n this.loadPage(hashPageCurrent);\n }\n navigateToHash(hash, data = null, params = null, isPopState = false) {\n let url = API.getUrlFromHash(hash, params);\n history.pushState({data: data, params: params}, '', hash);\n API.goToUrl(url, data);\n }\n \n navigateToUrl(url, data = null, appendHistory = true) {\n // this.beforeLeave();\n if (appendHistory) history.pushState(data, '', url);\n url = API.parameteriseUrl(url, data);\n API.goToUrl(url);\n }\n\n static loadPageBodyFromResponse(response) {\n DOM.loadPageBody(response.data);\n }\n}\n\nexport const router = new Router();\n","\n'use strict';\n\nimport DOM from './dom.js';\nimport Router from './router.js';\n\n\nclass App {\n constructor() {\n this.dom = new DOM();\n this.router = new Router();\n }\n\n initialize() {\n this.setupEventListeners();\n this.start();\n }\n\n setupEventListeners() {\n // document.addEventListener('click', this.handleGlobalClick.bind(this));\n }\n\n handleGlobalClick(event) {\n }\n\n start() {\n this.initPageCurrent();\n }\n\n initPageCurrent() {\n this.router.loadPageCurrent();\n }\n \n}\n\nconst app = new App();\n\nfunction domReady(fn) {\n if (document.readyState !== 'loading') {\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n}\n\ndomReady(() => {\n app.initialize();\n});\n\nwindow.app = app;\n\nexport default app;","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":["Validation","_classCallCheck","_createClass","key","value","isEmpty","object","undefined","length","isString","trim","i","isValidNumber","positiveOnly","isNaN","parseFloat","getDataContentType","params","data","contentType","JSON","stringify","Data","ContentType","arrayContainsItem","array","itemValue","hasItem","isJQueryElementArray","jQuery","document","querySelectorAll","is","isDate","Date","getTime","dictHasKey","d","k","areEqualDicts","dict1","dict2","keys1","Object","keys","keys2","_i3","_keys","imageExists","url","callback","img","Image","onload","onerror","src","toFixedOrDefault","decimalPlaces","defaultValue","arguments","toFixed","default","Utils","DOM","setElementAttributesValuesCurrentAndPrevious","element","setElementAttributeValueCurrent","setElementAttributeValuePrevious","setAttribute","attrValueCurrent","attrValuePrevious","setElementValuesCurrentAndPrevious","setElementValueCurrent","tagName","toUpperCase","type","checked","textContent","setElementValueCurrentIfEmpty","getElementValueCurrent","getCellFromElement","closest","getRowFromElement","flagRow","selector","getClosestParent","parentSelector","parent","parentElement","matches","convertForm2JSON","elementForm","dataForm","containersFilter","flagContainerInput","flagFilter","containerFilter","labelFilter","keyFilter","filter","indexFilter","querySelector","getAttribute","concat","loadPageBody","contentNew","pageBody","idPageBody","innerHTML","getHashPageCurrent","hashPageCurrent","body","dataset","page","updateAndCheckIsElementDirty","isElementDirty","isDirty","handleDirtyElement","toggleElementHasClassnameFlag","flagDirty","elementHasFlag","flag","elementAlreadyHasFlag","classList","contains","add","remove","hasDirtyChildrenContainer","container","hasDirtyChildrenNotDeletedContainer","flagDelete","returnVal","flagButton","flagActive","getElementAttributeValueCurrent","flagCheckbox","flagIsChecked","getElementAttributeValuePrevious","scrollToElement","scrollTop","offset","top","isElementInContainer","containerBounds","getBoundingClientRect","elementBounds","left","height","width","alertError","errorType","errorText","alert","createOptionUnselectedProductVariation","_defineProperty","flagProductVariationType","flagNameAttrOptionText","flagName","flagNameAttrOptionValue","attrIdProductVariationType","flagProductVariation","attrIdProductVariation","createOption","optionJson","text","option","createElement","selected","escapeHtml","div","unescapeHtml","html","innerText","Events","initialiseEventHandler","selectorElement","classInitialised","eventHandler","forEach","LocalStorage","getLocalStorage","parse","localStorage","getItem","setLocalStorage","newLS","setItem","_regeneratorRuntime","e","t","r","prototype","n","hasOwnProperty","o","defineProperty","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","apply","_objectSpread","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","asyncGeneratorStep","_asyncToGenerator","_next","_throw","_defineProperties","_toPrimitive","toPrimitive","String","Number","API","getCsrfToken","idCSRFToken","_request","_callee","hashEndpoint","csrfToken","options","response","_args","_callee$","_context","getUrlFromHash","headers","flagCsrfToken","fetch","ok","status","json","t0","console","error","request","_x","hash","hashPageHome","parameteriseUrl","_pathHost","URLSearchParams","toString","goToUrl","window","location","href","goToHash","_loginUser","_callee2","_callee2$","_context2","flagCallback","hashPageUserLogin","loginUser","_saveCommandCategories","_callee3","commandCategories","formFilters","comment","dataRequest","_callee3$","_context3","flagFormFilters","flagCommandCategory","flagComment","hashSaveDogCommandCategory","saveCommandCategories","_x2","_x3","_x4","_saveCommands","_callee4","commands","_callee4$","_context4","flagCommand","hashSaveDogCommand","saveCommands","_x5","_x6","_x7","_saveDogCommandLinks","_callee5","dogCommandLinks","_callee5$","_context5","flagDogCommandLink","hashSaveDogDogCommandLink","saveDogCommandLinks","_x8","_x9","_x10","getListFromDict","dict","list","consoleLogIfNotProductionEnvironment","message","environment","is_production","log","OverlayConfirm","hookup","callbackSuccess","idOverlayConfirm","flagCancel","flagInitialised","buttonCancel","addEventListener","overlay","style","visibility","flagSubmit","buttonConfirm","textarea","show","flagIsCollapsed","BusinessObjects","OverlayError","BasePage","router","title","titlePageCurrent","initialize","sharedInitialize","logInitialisation","hookupCommonElements","hookupLogos","hookupNavigation","hookupOverlays","hookupEventHandler","eventType","event","stopPropagation","idButtonHamburger","overlayHamburger","idOverlayHamburger","flagExpanded","hookupButtonsNavHome","hookupButtonsNavUserAccount","hookupButtonsNavUserLogout","hookupButtonsNavUserLogin","hookupButtonsNavDogHome","hookupButtonsNavDogCommandCategories","hookupButtonsNavDogCommands","hookupButtonsNavDogDogCommandLinks","hookupButtonsNavDogDogs","hookupButtonsNav","flagNavHome","buttonSelector","hashPageNav","_this","button","navigateToHash","flagNavUserAccount","hashPageUserAccount","flagNavUserLogout","hashPageUserLogout","_this2","flagNavUserLogin","navigator","leave","Success","Message","flagNavDogHome","hashPageDogHome","flagNavDogCommandCategories","hashPageDogCommandCategories","flagNavDogCommands","hashPageDogCommands","flagNavDogDogCommandLinks","hashPageDogDogCommandLinks","flagNavDogDogs","hashPageDogDogs","_this3","flagImageLogo","flagLogo","hookupOverlayFromId","idOverlayError","idOverlay","display","hookupButtonSave","_this4","flagSave","target","setLocalStoragePage","dataPage","getLocalStoragePage","toggleShowButtonsSaveCancel","buttonSave","isDirtyFilter","idTableMain","PageHome","_BasePage","_callSuper","_inherits","_superPropGet","PageDogHome","hookupDogHome","getOptionJsonFromObjectJsonAndKeys","objectJson","keyText","keyValue","valueSelected","getOptionJsonFromObjectJson","getObjectText","getListObjectsFromIdDictAndCsv","idDict","idCsv","listObjects","ids","split","_iterator","_createForOfIteratorHelper","_step","id","err","msgError","labelError","idLabelError","TableBasePage","cursorYInitial","rowInitial","placeholder","dragSrcEl","dragSrcRow","hookupTableCellDdls","bind","isPopState","isSinglePageApp","hookupFilters","hookupButtonsSaveCancel","hookupTableMain","saveRecordsTableDirtySinglePageApp","saveRecordsTableDirty","filters","getFormFilters","filtersDefault","callFilterTableContent","sharedHookupFilters","hookupButtonApplyFilters","hookupSearchTextFilter","hookupFilterActive","filterSelector","idFormFilters","flagActiveOnly","filterActiveOld","removeAttribute","parentDiv","isChecked","filterActiveNew","filterActive","svgElement","wasChecked","filterValuePrevious","hookupFilter","filterFlag","handler","hookupFilterIsNotEmpty","flagIsNotEmpty","idButtonApplyFilters","flagSearch","hookupFilterDog","attrIdDog","hookupFilterCommandCategory","attrIdCommandCategory","filterCommandCategory","idCommandCategory","filterCommands","commandsInCategory","command","sortedCommands","sort","b","localeCompare","filterCommand","idCommandPrevious","appendChild","dispatchEvent","Event","hookupFilterCommand","attrIdCommand","filtersJson","callbackLoadTableContent","table","getTableMain","bodyTable","row","rowsJson","flagRows","every","display_order","loadRowTable","rowJson","getAndLoadFilteredTableContentSinglePageApp","hookupButtonCancel","_this5","records","getTableRecords","formElement","idTextareaConfirm","callSaveTableContent","flagStatus","flagSuccess","_verbose","flagMessage","_this6","dirtyOnly","record","getJsonRow","_this7","_this8","handleClickAddRowTable","_rowBlank","attrIdRowObject","tbody","cloneNode","countRows","initialiseRowNew","prepend","postInitialiseRowNewCallback","_this9","cacheRowBlank","selectorRowNew","flagRowNew","rowBlankTemp","initialiseSliderDisplayOrderRowNew","slidersDisplayOrder","flagDisplayOrder","flagSlider","maxDisplayOrder","slider","Math","max","sliderDisplayOrder","hookupSlidersDisplayOrderTable","selectorDisplayOrder","hookupChangeHandlerTableCells","inputSelector","_this10","handleChangeNestedElementCellTable","input","wasDirtyParentRows","getAllIsDirtyRowsInParentTree","wasDirtyElement","isDirtyElement","updateAndToggleShowButtonsSaveCancel","cascadeChangedIsDirtyNestedElementCellTable","rows","tr","isDirtyRow","wasDirtyRow","shift","hookupChangeHandlerTableCellsWhenNotCollapsed","_this11","hookupFieldsCodeTable","flagCode","hookupFieldsNameTable","hookupFieldsDescriptionTable","flagDescription","hookupFieldsNotesTable","flagNotes","hookupFieldsActive","_this12","flagTable","handleClickRowNew","selectorButton","selectorButtonDelete","selectorButtonUndelete","hookupButtonsRowDelete","hookupButtonsRowUndelete","_this13","changeHandler","handleClickButtonRowDelete","changeEvent","changeElement","_this14","valuePrevious","wasDirty","parentNode","removeChild","buttonAddTemplate","idContainerTemplateElements","flagAdd","buttonAdd","replaceWith","_this15","handleClickButtonRowUndelete","_this16","buttonDeleteTemplate","buttonDelete","hookupTdsAccessLevel","hookupTableCellDdlPreviews","flagAccessLevel","accessLevels","fieldFlag","optionList","_this17","cellSelector","ddlHookup","ddlSelector","handleClickTableCellDdlPreview","_this18","optionObjectList","_this19","idSelected","td","ddl","optionObjectJson","toggleColumnCollapsed","flagColumn","isCollapsed","toggleColumnHasClassnameFlag","toggleColumnHeaderCollapsed","hookupFieldsCommandCategory","_this20","filterCommandCategories","hookupCommandCategoryDdls","_this21","handleChangeCommandCategoryDdl","ddlCategory","idCommandCategoryRowOld","getIdCommandCategoryRow","idCommandCategoryRowNew","idCommandCategoryFilter","getIdCommandCategoryFilter","tdCommand","ddlCommand","hookupFieldsCommand","_this22","parentTr","tdCommandCategory","idCommandCategoryRow","filterCommandList","elementCommandCategory","commandCategoryFilter","commandFilter","valueCurrentCommandCategoryFilter","valueCurrentCommandFilter","getHasCommandCategoryFilter","getIdCommandRow","elementCommand","getIdCommandFilter","idCommand","getHasCommandFilter","idCommandFilter","hookupFieldsDog","flagDog","filterDogs","getIdDogRow","elementDog","createTdActive","isActive","tdActive","buttonActive","columnFlag","isRequiredFlag","classnameFlag","columnTh","columnThHasFlag","toggleColumnHeaderHasClassnameFlag","existsDirtyRecord","cancelButton","idButtonCancel","saveButton","idButtonSave","isDirtyLabel","DogMixinPage","pageCurrent","hookupLocalStorageDog","DogTableMixinPage","_DogMixinPage","hookupTable","PageDogCommandCategories","_TableBasePage","dogMixin","inputCode","inputName","jsonRow","PageDogCommands","inputHandSignalDefaultDescription","flagHandSignalDefaultDescription","inputCanHaveButton","flagCanHaveButton","inputNotes","newRows","newestRow","clickableElementsSelector","join","clickableElement","click","hookupTextareasHandSignalDefaultDescription","hookupFieldsCanHaveButton","PageDogDogCommandLinks","inputHandSignalDescription","flagHandSignalDescription","attrIdDogCommandLink","hookupTextareasHandSignalDescription","PageAccessibilityReport","hashPageAccessibilityReport","PageAccessibilityStatement","hashPageAccessibilityStatement","PageLicense","hashPageLicense","PagePrivacyPolicy","hashPagePrivacyPolicy","PageRetentionSchedule","hashPageDataRetentionSchedule","Router","pages","module","routes","loadPage","hashPage","PageClass","getClassPageFromHash","currentPage","pageJson","handlePopState","loadPageCurrent","history","pushState","navigateToUrl","appendHistory","loadPageBodyFromResponse","App","dom","setupEventListeners","start","handleGlobalClick","initPageCurrent","app","domReady","fn","readyState"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"js/main.bundle.js","mappings":"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","sources":["webpack://app/./static/js/lib/validation.js","webpack://app/./static/js/dom.js","webpack://app/./static/js/lib/events.js","webpack://app/./static/js/lib/local_storage.js","webpack://app/./static/js/api.js","webpack://app/./static/js/lib/utils.js","webpack://app/./static/js/components/common/temporary/overlay_confirm.js","webpack://app/./static/js/pages/base.js","webpack://app/./static/js/pages/core/home.js","webpack://app/./static/js/pages/dog/home.js","webpack://app/./static/js/lib/business_objects/business_objects.js","webpack://app/./static/js/components/common/temporary/overlay_error.js","webpack://app/./static/js/pages/base_table.js","webpack://app/./static/js/pages/dog/mixin.js","webpack://app/./static/js/pages/dog/mixin_table.js","webpack://app/./static/js/pages/dog/command_categories.js","webpack://app/./static/js/pages/dog/commands.js","webpack://app/./static/js/pages/dog/dog_command_links.js","webpack://app/./static/js/pages/legal/accessibility_report.js","webpack://app/./static/js/pages/legal/accessibility_statement.js","webpack://app/./static/js/pages/legal/license.js","webpack://app/./static/js/pages/legal/privacy_policy.js","webpack://app/./static/js/pages/legal/retention_schedule.js","webpack://app/./static/js/router.js","webpack://app/./static/js/app.js","webpack://app/./static/css/main.css?0a91","webpack://app/./static/css/components/button.css?0e0b","webpack://app/./static/css/components/card.css","webpack://app/./static/css/components/dialog.css","webpack://app/./static/css/components/form.css?94e1","webpack://app/./static/css/components/image.css?9f9c","webpack://app/./static/css/components/label.css?b78f","webpack://app/./static/css/components/modal.css","webpack://app/./static/css/components/navigation.css","webpack://app/./static/css/components/overlay.css?6dfd","webpack://app/./static/css/components/table.css?e553","webpack://app/./static/css/layouts/header.css?da75","webpack://app/./static/css/layouts/footer.css?65e3","webpack://app/./static/css/layouts/table-main.css?8c15","webpack://app/./static/css/lib/reset.css","webpack://app/./static/css/lib/typography.css","webpack://app/./static/css/lib/utils.css?0479","webpack://app/./static/css/lib/variables.css","webpack://app/./static/css/themes/light.css?855e"],"sourcesContent":["\nexport default class Validation {\n /*\n isNullOrWhitespace(v) {\n let txt = JSON.stringify(v).replace('/\\s\\g', '');\n return (txt == '' || 'null');\n }\n */\n\n static isEmpty(object) {\n\n let isEmpty = true;\n\n if (object !== null && object !== \"null\" && object !== undefined && object !== \"undefined\") {\n\n if (object.length == undefined) {\n isEmpty = false; // object exists but isn't a collection\n }\n else if (typeof object === \"function\") {\n isEmpty = false; // object is reference\n }\n else { // string or collection\n\n let isString = (typeof object == \"string\");\n\n if (isString) object = object.trim();\n\n if (object.length > 0) {\n\n if (isString) {\n isEmpty = false; // String greater than length 0\n }\n else {\n\n if (typeof object[0] != \"string\") {\n isEmpty = false;\n }\n else {\n for(let i = 0; i < object.length; i++) {\n if (object[i] != \"\") {\n isEmpty = false;\n break\n }\n }\n }\n }\n }\n }\n }\n\n return isEmpty;\n }\n\n static isValidNumber(value, positiveOnly) {\n return !Validation.isEmpty(value) && !isNaN(value) && (!positiveOnly || parseFloat(value) > 0);\n }\n\n static getDataContentType(params) {\n\n var data = null;\n var contentType = '';\n\n if (!Validation.isEmpty(params)) {\n\n if (typeof params === \"string\") {\n data = params;\n contentType = \"application/x-www-form-urlencoded; charset=UTF-8\";\n }\n else {\n data = JSON.stringify(params);\n contentType = \"application/json; charset=UTF-8\";\n }\n }\n\n return { Data: data, ContentType: contentType };\n }\n\n static arrayContainsItem(array, itemValue) {\n\n var hasItem = false;\n\n if (!Validation.isEmpty(array) && !Validation.isEmpty(itemValue)) {\n\n var isJQueryElementArray = array[0] instanceof jQuery;\n\n if (isJQueryElementArray) {\n\n for (let i = 0; i < array.length; i++) {\n\n if (document.querySelectorAll(array[i]).is(itemValue)) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n var isDate = array[0] instanceof Date;\n\n if (isDate) {\n \n for (let i = 0; i < array.length; i++) {\n\n if (array[i].getTime() === itemValue.getTime()) {\n hasItem = true;\n break;\n }\n }\n }\n else {\n\n for (let i = 0; i < array.length; i++) {\n\n if (array[i] == itemValue) {\n hasItem = true;\n break;\n }\n }\n }\n }\n }\n\n return hasItem;\n }\n\n static dictHasKey(d, k) {\n return (k in d);\n }\n static areEqualDicts(dict1, dict2) {\n const keys1 = Object.keys(dict1);\n const keys2 = Object.keys(dict2);\n \n if (keys1.length !== keys2.length) {\n return false;\n }\n \n for (let key of keys1) {\n if (dict1[key] !== dict2[key]) {\n return false;\n }\n }\n \n return true;\n }\n\n static imageExists(url, callback) {\n\n var img = new Image();\n\n img.onload = function() { callback(true); };\n img.onerror = function() { callback(false); };\n img.src = url;\n }\n\n static toFixedOrDefault(value, decimalPlaces, defaultValue = null) {\n return Validation.isValidNumber(value) ? parseFloat(value).toFixed(decimalPlaces) : defaultValue;\n }\n}\n","\nimport Utils from \"./lib/utils.js\";\nimport Validation from \"./lib/validation.js\";\n\nexport default class DOM {\n static setElementAttributesValuesCurrentAndPrevious(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementAttributeValueCurrent(element, data) {\n element.setAttribute(attrValueCurrent, data);\n }\n static setElementAttributeValuePrevious(element, data) {\n element.setAttribute(attrValuePrevious, data);\n }\n static setElementValuesCurrentAndPrevious(element, data) {\n DOM.setElementValueCurrent(element, data);\n DOM.setElementAttributeValuePrevious(element, data);\n }\n static setElementValueCurrent(element, data) {\n DOM.setElementAttributeValueCurrent(element, data);\n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n element.checked = data;\n }\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n element.value = data;\n }\n else {\n element.textContent = data;\n }\n }\n static setElementValueCurrentIfEmpty(element, data) {\n if (Validation.isEmpty(DOM.getElementValueCurrent(element))) {\n DOM.setElementValueCurrent(element, data);\n }\n }\n static getCellFromElement(element) {\n return element.closest('td');\n }\n static getRowFromElement(element, flagRow) {\n let selector = Validation.isEmpty(flagRow) ? 'tr' : 'tr.' + flagRow;\n return element.closest(selector);\n }\n static getClosestParent(element, parentSelector) {\n let parent = element.parentElement;\n while (parent) {\n if (parent.matches(parentSelector)) {\n return parent;\n }\n parent = parent.parentElement;\n }\n return null;\n }\n static convertForm2JSON(elementForm) {\n let dataForm = {};\n if (Validation.isEmpty(elementForm)) {\n return dataForm;\n }\n let containersFilter = elementForm.querySelectorAll('.' + flagContainerInput + '.' + flagFilter);\n let containerFilter, labelFilter, keyFilter, filter;\n for (let indexFilter = 0; indexFilter < containersFilter.length; indexFilter++) {\n containerFilter = containersFilter[indexFilter];\n labelFilter = containerFilter.querySelector('label');\n keyFilter = labelFilter.getAttribute('for');\n filter = containerFilter.querySelector(`#${keyFilter}`);\n dataForm[keyFilter] = DOM.getElementValueCurrent(filter);\n }\n return dataForm;\n }\n static loadPageBody(contentNew) {\n let pageBody = document.querySelector(idPageBody);\n pageBody.innerHTML = contentNew;\n }\n static getHashPageCurrent() {\n const hashPageCurrent = document.body.dataset.page;\n return hashPageCurrent;\n }\n static updateAndCheckIsElementDirty(element) {\n element.setAttribute(attrValueCurrent, DOM.getElementValueCurrent(element));\n return DOM.isElementDirty(element);\n }\n static isElementDirty(element) {\n let isDirty = element.getAttribute(attrValuePrevious) != element.getAttribute(attrValueCurrent);\n DOM.handleDirtyElement(element, isDirty);\n return isDirty;\n }\n static handleDirtyElement(element, isDirty) {\n DOM.toggleElementHasClassnameFlag(element, isDirty, flagDirty);\n }\n static toggleElementHasClassnameFlag(element, elementHasFlag, flag) {\n let elementAlreadyHasFlag = element.classList.contains(flag);\n if (elementHasFlag == elementAlreadyHasFlag) return;\n if (elementHasFlag) {\n element.classList.add(flag);\n } else {\n element.classList.remove(flag);\n }\n }\n static hasDirtyChildrenContainer(container) {\n if (container == null) return false;\n return container.querySelector('.' + flagDirty) != null;\n }\n static hasDirtyChildrenNotDeletedContainer(container) {\n if (container == null || container.classList.contains(flagDelete)) return false;\n return container.querySelector('.' + flagDirty + ':not(.' + flagDelete + ', .' + flagDelete + ' *)') != null;\n }\n static getElementValueCurrent(element) {\n let returnVal = '';\n \n if (!Validation.isEmpty(element)) {\n \n let tagName = element.tagName.toUpperCase();\n if (element.type === \"checkbox\") {\n returnVal = element.checked;\n }\n /*\n else if (element.classList.contains(flagIsDatePicker)) {\n returnVal = getDatePickerDate(element, adjust4DayLightSavings);\n }\n */\n else if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT') {\n returnVal = element.value;\n }\n else if (element.classList.contains(flagButton) && element.classList.contains(flagActive)) { // tagName === 'BUTTON'\n returnVal = element.classList.contains(flagDelete);\n }\n else if (tagName === 'TD') {\n returnVal = DOM.getElementAttributeValueCurrent(element);\n }\n else if (tagName == 'SVG' && element.classList.contains(flagCheckbox)) {\n returnVal = (element.classList.contains(flagIsChecked))\n }\n else {\n returnVal = element.textContent;\n }\n }\n \n if (Validation.isEmpty(returnVal)) returnVal = '';\n \n return returnVal;\n }\n static getElementAttributeValueCurrent(element) {\n // debugger;\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValueCurrent);\n }\n static getElementAttributeValuePrevious(element) {\n if (Validation.isEmpty(element)) return null;\n return element.getAttribute(attrValuePrevious);\n }\n /* base_table.handleChangeElementCellTable\n static updateAndCheckIsTableElementDirty(element) {\n let wasDirty = DOM.isElementDirty(element);\n let row = DOM.getRowFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n let isDirty = DOM.updateAndCheckIsElementDirty(element);\n let cell = DOM.getCellFromElement(element);\n Utils.consoleLogIfNotProductionEnvironment({element, row, cell, isDirty, wasDirty});\n if (isDirty != wasDirty) {\n DOM.handleDirtyElement(cell, isDirty);\n let isDirtyRow = DOM.hasDirtyChildrenNotDeletedContainer(row);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isDirtyRow);\n }\n }\n }\n */\n static scrollToElement(parent, element) {\n // REQUIRED: parent has scroll-bar\n parent.scrollTop(parent.scrollTop() + (element.offset().top - parent.offset().top));\n }\n static isElementInContainer(container, element) {\n\n if (typeof jQuery === 'function') {\n if (container instanceof jQuery) container = container[0];\n if (element instanceof jQuery) element = element[0];\n }\n\n var containerBounds = container.getBoundingClientRect();\n var elementBounds = element.getBoundingClientRect();\n\n return (\n containerBounds.top <= elementBounds.top &&\n containerBounds.left <= elementBounds.left &&\n ((elementBounds.top + elementBounds.height) <= (containerBounds.top + containerBounds.height)) &&\n ((elementBounds.left + elementBounds.width) <= (containerBounds.left + containerBounds.width))\n );\n }\n static alertError(errorType, errorText) {\n alert(errorType + '\\n' + errorText);\n }\n static createOptionUnselectedProductVariation() {\n return {\n [flagProductVariationType]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariationType],\n [flagName]: 'Select Variation Type',\n [attrIdProductVariationType]: 0,\n },\n [flagProductVariation]: {\n [flagNameAttrOptionText]: [flagName],\n [flagNameAttrOptionValue]: [attrIdProductVariation],\n [flagName]: 'Select Variation',\n [attrIdProductVariation]: 0,\n },\n };\n }\n static createOption(optionJson) {\n if (Validation.isEmpty(optionJson)) optionJson = {\n text: 'Select',\n value: 0,\n };\n let option = document.createElement('option');\n option.value = optionJson.value;\n option.textContent = optionJson.text;\n option.selected = optionJson.selected;\n return option;\n }\n\n static escapeHtml(text) {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n }\n static unescapeHtml(html) {\n const div = document.createElement('div');\n div.innerHTML = html;\n return div.textContent || div.innerText || '';\n }\n}\n","\nexport default class Events {\n static initialiseEventHandler(selectorElement, classInitialised, eventHandler) {\n document.querySelectorAll(selectorElement).forEach(function(element) {\n if (element.classList.contains(classInitialised)) return;\n eventHandler(element);\n element.classList.add(classInitialised);\n });\n }\n}","\nimport Validation from \"./validation.js\";\n\nexport default class LocalStorage {\n/*\nfunction getPageLocalStorage(pageHash) {\n\n let ls;\n try {\n ls = JSON.parse(localStorage.getItem(pageHash));\n } catch {\n\n }\n\n if (Validation.isEmpty(ls)) return {}\n\n return ls;\n}\nfunction getPageLocalStorageCurrent() {\n\n return JSON.parse(localStorage.getItem(hashPageCurrent));\n}\n\nfunction setPageLocalStorage(pageHash, newLS) {\n\n localStorage.setItem(pageHash, JSON.stringify(newLS));\n}\n\nfunction clearPageLocalStorage(pageHash) {\n localStorage.removeItem(pageHash);\n}\n\nfunction setupPageLocalStorage(pageHash) {\n\n let ls = getPageLocalStorage(pageHash);\n\n if (Validation.isEmpty(ls)) ls = {};\n\n setPageLocalStorage(pageHash, ls);\n}\n*/\n\n static getLocalStorage(key) {\n return JSON.parse(localStorage.getItem(key));\n }\n\n static setLocalStorage(key, newLS) {\n localStorage.setItem(key, JSON.stringify(newLS));\n }\n\n/*\nfunction setupPageLocalStorageNext(pageHashNext) {\n let lsOld = getPageLocalStorage(hashPageCurrent);\n hashPageCurrent = pageHashNext;\n clearPageLocalStorage(hashPageCurrent);\n setupPageLocalStorage(hashPageCurrent);\n let lsNew = getPageLocalStorage(hashPageCurrent);\n lsNew[keyBasket] = (keyBasket in lsOld) ? lsOld[keyBasket] : {'items': []};\n setPageLocalStorage(hashPageCurrent, lsNew);\n}\n*/\n}","import DOM from './dom.js';\n\nexport default class API {\n \n static getCsrfToken() {\n return document.querySelector(idCSRFToken).getAttribute('content');\n }\n \n static async request(hashEndpoint, method = 'GET', data = null, params = null) {\n const url = API.getUrlFromHash(hashEndpoint, params);\n const csrfToken = API.getCsrfToken();\n const options = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n [flagCsrfToken]: csrfToken,\n }\n };\n\n if (data && (method === 'POST' || method === 'PUT' || method === 'PATCH')) {\n data = { \n ...data, \n [flagCsrfToken]: csrfToken,\n };\n options.body = JSON.stringify(data);\n }\n\n try {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return await response.json();\n } catch (error) {\n console.error('API request failed:', error);\n throw error;\n }\n }\n \n static getUrlFromHash(hash, params = null) {\n if (hash == null) hash = hashPageHome;\n let url = API.parameteriseUrl(_pathHost + hash, params);\n return url;\n }\n static parameteriseUrl(url, params) {\n if (params) {\n url += '?' + new URLSearchParams(params).toString();\n }\n return url;\n }\n static goToUrl(url) {\n window.location.href = url;\n }\n static goToHash(hash, params = null) {\n const url = API.getUrlFromHash(hash, params);\n API.goToUrl(url);\n }\n\n // specific api calls\n /* Example:\n getUsers: () => request('/users'),\n getUserById: (id) => request(`/users/${id}`),\n createUser: (userData) => request('/users', 'POST', userData),\n updateUser: (id, userData) => request(`/users/${id}`, 'PUT', userData),\n deleteUser: (id) => request(`/users/${id}`, 'DELETE'),\n */\n static async loginUser() {\n let callback = {};\n callback[flagCallback] = DOM.getHashPageCurrent();\n return await API.request(hashPageUserLogin, 'POST', callback);\n }\n\n // dog\n // Command categories\n static async saveCommandCategories(commandCategories, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagCommandCategory] = commandCategories;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogCommandCategory, 'POST', dataRequest);\n }\n \n // Commands\n static async saveCommands(commands, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagCommand] = commands;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogCommand, 'POST', dataRequest);\n }\n \n // Dog Command Links\n static async saveDogCommandLinks(dogCommandLinks, formFilters, comment) {\n let dataRequest = {};\n dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n dataRequest[flagDogCommandLink] = dogCommandLinks;\n dataRequest[flagComment] = comment;\n return await API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);\n }\n \n}\n","// Utility functions\n/*\nfunction $(selector) {\n return document.querySelector(selector);\n}\n\nfunction $$(selector) {\n return document.querySelectorAll(selector);\n}\n*/\nexport default class Utils {\n static getListFromDict(dict) {\n let list = [];\n for (let key in dict) {\n list.push(dict[key]);\n }\n return list;\n }\n static consoleLogIfNotProductionEnvironment(message) {\n if (environment.is_production != \"true\") {\n console.log(message);\n }\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayConfirm {\n static hookup(callbackSuccess) {\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.style.visibility = 'hidden';\n });\n });\n Events.initialiseEventHandler(idOverlayConfirm + ' button.' + flagSubmit, flagInitialised, (buttonConfirm) => {\n buttonConfirm.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayConfirm);\n let textarea = overlay.querySelector('textarea');\n overlay.style.visibility = 'hidden';\n callbackSuccess(textarea.value);\n });\n });\n }\n static show() {\n let overlay = document.querySelector(idOverlayConfirm);\n overlay.classList.remove(flagIsCollapsed);\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class BasePage {\n constructor(router) {\n if (!router) {\n throw new Error(\"Router is required\");\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"initialising with router: \", router);\n }\n this.router = router;\n this.title = titlePageCurrent;\n if (this.constructor === BasePage) {\n throw new Error(\"Cannot instantiate abstract class\");\n }\n \n if (!this.constructor.hash) {\n throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);\n }\n }\n\n initialize() {\n throw new Error(\"Method 'initialize()' must be implemented.\");\n }\n\n sharedInitialize() {\n this.logInitialisation();\n this.hookupCommonElements();\n }\n\n logInitialisation() {\n Utils.consoleLogIfNotProductionEnvironment('Initializing ' + this.title + ' page');\n }\n \n hookupCommonElements() {\n // hookupVideos();\n this.hookupLogos();\n this.hookupNavigation();\n this.hookupOverlays();\n }\n \n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n \n hookupNavigation() {\n this.hookupEventHandler(\"click\", idButtonHamburger, (event, element) => {\n let overlayHamburger = document.querySelector(idOverlayHamburger);\n if (overlayHamburger.classList.contains(flagIsCollapsed)) {\n overlayHamburger.classList.remove(flagIsCollapsed);\n overlayHamburger.classList.add(flagExpanded);\n } else {\n overlayHamburger.classList.remove(flagExpanded);\n overlayHamburger.classList.add(flagIsCollapsed);\n }\n });\n\n this.hookupButtonsNavHome();\n // this.hookupButtonsNavAdminHome();\n this.hookupButtonsNavUserAccount();\n this.hookupButtonsNavUserLogout();\n this.hookupButtonsNavUserLogin();\n\n // this.hookupButtonsNavStoreHome();\n // this.hookupButtonsNavStoreManufacturingPurchaseOrders();\n this.hookupButtonsNavDogHome();\n this.hookupButtonsNavDogCommandCategories();\n this.hookupButtonsNavDogCommands();\n this.hookupButtonsNavDogDogCommandLinks();\n this.hookupButtonsNavDogDogs();\n }\n hookupEventHandler(eventType, selector, callback) {\n Events.initialiseEventHandler(selector, flagInitialised, (element) => {\n element.addEventListener(eventType, (event) => {\n event.stopPropagation();\n callback(event, element);\n });\n });\n }\n hookupButtonsNavHome() {\n this.hookupButtonsNav('.' + flagNavHome, hashPageHome);\n }\n hookupButtonsNav(buttonSelector, hashPageNav) {\n this.hookupEventHandler(\"click\", buttonSelector, (event, button) => { \n this.router.navigateToHash(hashPageNav); \n });\n }\n /*\n hookupButtonsNavAdminHome() {\n this.hookupButtonsNav('.' + flagNavAdminHome, hashPageAdminHome);\n }\n hookupButtonsNavServices() {\n this.hookupButtonsNav('.' + flagNavServices, hashPageServices);\n }\n */\n hookupButtonsNavUserAccount() {\n this.hookupButtonsNav('.' + flagNavUserAccount, hashPageUserAccount);\n }\n hookupButtonsNavUserLogout() {\n this.hookupButtonsNav('.' + flagNavUserLogout, hashPageUserLogout);\n }\n hookupButtonsNavUserLogin() {\n this.hookupEventHandler(\"click\", '.' + flagNavUserLogin, (event, navigator) => { \n event.stopPropagation();\n this.leave();\n API.loginUser()\n .then((response) => {\n if (response.Success) {\n window.location.href = response[flagCallback];\n } else {\n DOM.alertError(\"Error\", response.Message);\n }\n });\n });\n }\n hookupButtonsNavDogHome() {\n this.hookupButtonsNav('.' + flagNavDogHome, hashPageDogHome);\n }\n hookupButtonsNavDogCommandCategories() {\n this.hookupButtonsNav('.' + flagNavDogCommandCategories, hashPageDogCommandCategories);\n }\n hookupButtonsNavDogCommands() {\n this.hookupButtonsNav('.' + flagNavDogCommands, hashPageDogCommands);\n }\n hookupButtonsNavDogDogCommandLinks() {\n this.hookupButtonsNav('.' + flagNavDogDogCommandLinks, hashPageDogDogCommandLinks);\n }\n hookupButtonsNavDogDogs() {\n this.hookupButtonsNav('.' + flagNavDogDogs, hashPageDogDogs);\n }\n\n hookupLogos() {\n this.hookupEventHandler(\"click\", \".\" + flagImageLogo + \",\" + \".\" + flagLogo, (event, element) => {\n Utils.consoleLogIfNotProductionEnvironment('clicking logo');\n this.router.navigateToHash(hashPageHome);\n });\n }\n\n hookupOverlays() {\n this.hookupOverlayFromId(idOverlayConfirm);\n this.hookupOverlayFromId(idOverlayError);\n }\n\n hookupOverlayFromId(idOverlay) {\n Events.initialiseEventHandler(idOverlay, flagInitialised, (overlay) => {\n overlay.querySelector('button.' + flagCancel).addEventListener(\"click\", (event) => {\n event.stopPropagation();\n overlay.style.display = 'none';\n });\n });\n }\n\n hookupButtonSave() {\n Events.initialiseEventHandler('form.' + flagFilter + ' button.' + flagSave, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n Utils.consoleLogIfNotProductionEnvironment('saving page: ', this.title);\n OverlayConfirm.show();\n });\n });\n }\n\n leave() {\n Utils.consoleLogIfNotProductionEnvironment('Leaving ' + this.title + ' page');\n if (this.constructor === BasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n }\n setLocalStoragePage(dataPage) {\n LocalStorage.setLocalStorage(this.hash, dataPage);\n }\n getLocalStoragePage() {\n return LocalStorage.getLocalStorage(this.hash);\n }\n\n toggleShowButtonsSaveCancel(show) { // , buttonSave = null, buttonCancel = null\n let buttonSave = document.querySelector('form.' + flagFilter + ' button.' + flagSave);\n let buttonCancel = document.querySelector('form.' + flagFilter + ' button.' + flagCancel);\n if (show) {\n buttonCancel.classList.remove(flagIsCollapsed);\n buttonSave.classList.remove(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('showing buttons');\n } else {\n buttonCancel.classList.add(flagIsCollapsed);\n buttonSave.classList.add(flagIsCollapsed);\n Utils.consoleLogIfNotProductionEnvironment('hiding buttons');\n }\n }\n\n static isDirtyFilter(filter) {\n let isDirty = DOM.updateAndCheckIsElementDirty(filter);\n if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();\n return isDirty;\n }\n\n}","\n// internal\nimport BasePage from \"../base.js\";\n// external\n\n\nexport default class PageHome extends BasePage {\n static hash = hashPageHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n // this.hookupButtonsNav();\n }\n\n leave() {\n super.leave();\n }\n}\n\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageDogHome extends BasePage {\n static hash = hashPageDogHome;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n this.hookupDogHome();\n }\n hookupDogHome() {\n \n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport Utils from '../utils.js';\n\nexport default class BusinessObjects {\n static getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected = null) {\n return {\n text: objectJson[keyText],\n value: objectJson[keyValue],\n selected: (objectJson[keyValue] == valueSelected),\n };\n }\n static getOptionJsonFromObjectJson(objectJson, valueSelected = null) {\n let keyText = objectJson[flagNameAttrOptionText];\n let keyValue = objectJson[flagNameAttrOptionValue];\n Utils.consoleLogIfNotProductionEnvironment({objectJson, keyText, keyValue});\n return BusinessObjects.getOptionJsonFromObjectJsonAndKeys(objectJson, keyText, keyValue, valueSelected);\n }\n static getObjectText(objectJson) {\n return objectJson == null ? '' : objectJson[objectJson[flagNameAttrOptionText]];\n }\n static getListObjectsFromIdDictAndCsv(idDict, idCsv) {\n let listObjects = [];\n let ids = idCsv.split(',');\n for (let id of ids) {\n listObjects.push(idDict[id]);\n }\n return listObjects;\n }\n}","\nimport Events from \"../../../lib/events.js\";\n\nexport default class OverlayError {\n static hookup() {\n Events.initialiseEventHandler(idOverlayError + ' button.' + flagCancel, flagInitialised, (buttonCancel) => {\n buttonCancel.addEventListener('click', () => {\n let overlay = document.querySelector(idOverlayError);\n overlay.style.visibility = 'hidden';\n });\n });\n }\n static show(msgError) {\n let overlay = document.querySelector(idOverlayError);\n let labelError = overlay.querySelector(idLabelError);\n labelError.innerText = msgError;\n overlay.style.visibility = 'visible';\n }\n}","\nimport BusinessObjects from \"../lib/business_objects/business_objects.js\";\nimport Events from \"../lib/events.js\";\nimport LocalStorage from \"../lib/local_storage.js\";\nimport Validation from \"../lib/validation.js\";\nimport BasePage from \"./base.js\";\nimport API from \"../api.js\";\nimport DOM from \"../dom.js\";\nimport Utils from \"../lib/utils.js\";\n\nimport OverlayConfirm from \"../components/common/temporary/overlay_confirm.js\";\nimport OverlayError from \"../components/common/temporary/overlay_error.js\";\n\nexport default class TableBasePage extends BasePage {\n // static hash\n // static attrIdRowObject\n // callSaveTableContent\n\n constructor(router) {\n super(router);\n this.cursorYInitial = null;\n this.rowInitial = null;\n this.placeholder = null;\n this.dragSrcEl = null;\n this.dragSrcRow = null;\n\n this.hookupTableCellDdls = this.hookupTableCellDdls.bind(this);\n }\n \n initialize(isPopState = false) {\n throw new Error(\"Must implement initialize() method.\");\n }\n sharedInitialize(isPopState = false, isSinglePageApp = false) {\n if (!isPopState) {\n super.sharedInitialize();\n this.hookupFilters();\n this.hookupButtonsSaveCancel();\n this.hookupTableMain();\n OverlayConfirm.hookup(() => {\n if (isSinglePageApp) {\n this.saveRecordsTableDirtySinglePageApp();\n }\n else {\n this.saveRecordsTableDirty();\n }\n });\n } else {\n let dataPage = this.getLocalStoragePage();\n let filters = dataPage[flagFormFilters];\n let formFilters = TableBasePage.getFormFilters();\n let filtersDefault = DOM.convertForm2JSON(formFilters);\n if (!Validation.areEqualDicts(filters, filtersDefault)) {\n this.callFilterTableContent();\n }\n }\n }\n hookupFilters() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method hookupFilters().\");\n }\n }\n sharedHookupFilters() {\n this.hookupButtonApplyFilters();\n this.hookupSearchTextFilter();\n }\n hookupFilterActive() {\n let filterSelector = idFormFilters + ' #' + flagActiveOnly;\n let filterActiveOld = document.querySelector(filterSelector);\n filterActiveOld.removeAttribute('id');\n let parentDiv = filterActiveOld.parentElement;\n let isChecked = (DOM.getElementAttributeValuePrevious(parentDiv) == \"True\");\n let filterActiveNew = document.querySelector(idFormFilters + ' div.' + flagActiveOnly + '.' + flagContainerInput + ' svg.' + flagActiveOnly);\n filterActiveNew.setAttribute('id', flagActiveOnly);\n if (isChecked) filterActiveNew.classList.add(flagIsChecked);\n\n this.hookupEventHandler(\"click\", filterSelector, (event, filterActive) => {\n Utils.consoleLogIfNotProductionEnvironment({ filterActive });\n Utils.consoleLogIfNotProductionEnvironment({ [filterActive.tagName]: filterActive.tagName });\n let svgElement = (filterActive.tagName.toUpperCase() == 'SVG') ? filterActive : filterActive.parentElement;\n let wasChecked = svgElement.classList.contains(flagIsChecked);\n if (wasChecked) {\n svgElement.classList.remove(flagIsChecked);\n }\n else {\n svgElement.classList.add(flagIsChecked);\n }\n return this.handleChangeFilter(event, filterActive);\n });\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n hookupFilter(filterFlag, handler = (event, filter) => { return this.handleChangeFilter(event, filter); }) {\n let filterSelector = idFormFilters + ' #' + filterFlag;\n this.hookupEventHandler(\"change\", filterSelector, handler);\n let filter = document.querySelector(filterSelector);\n let filterValuePrevious = DOM.getElementValueCurrent(filter);\n filter.setAttribute(attrValueCurrent, filterValuePrevious);\n filter.setAttribute(attrValuePrevious, filterValuePrevious);\n }\n handleChangeFilter(event, filter) {\n let isDirtyFilter = DOM.updateAndCheckIsElementDirty(filter);\n let formFilters = TableBasePage.getFormFilters();\n let areDirtyFilters = isDirtyFilter || DOM.hasDirtyChildrenContainer(formFilters);\n let tbody = document.querySelector(idTableMain + ' tbody');\n let rows = tbody.querySelectorAll(':scope > tr');\n rows.forEach((row) => {\n if (areDirtyFilters && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);\n if (!areDirtyFilters && row.classList.contains(flagIsCollapsed)) {\n row.classList.remove(flagIsCollapsed);\n let dirtyInputs = row.querySelectorAll('input.' + flagDirty);\n dirtyInputs.forEach((dirtyInput) => {\n dirtyInput.value = DOM.getElementAttributeValueCurrent(dirtyInput);\n });\n }\n });\n if (areDirtyFilters) {\n /*\n tbody.querySelectorAll('tr').forEach((tr) => { \n if (!DOM.hasDirtyChildrenContainer(tr)) tr.remove(); \n });\n */\n tbody.innerHTML = 'Press \"Apply Filters\" to refresh the table.
' + tbody.innerHTML;\n if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);\n }\n else {\n let isDirtyLabel = tbody.querySelector(\":scope > div\");\n if (isDirtyLabel != null) isDirtyLabel.remove();\n if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);\n let initialisedElements = tbody.querySelectorAll('.' + flagInitialised);\n initialisedElements.forEach((initialisedElement) => {\n initialisedElement.classList.remove(flagInitialised);\n });\n this.hookupTableMain();\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupFilterIsNotEmpty() {\n this.hookupFilter(flagIsNotEmpty);\n }\n hookupButtonApplyFilters() {\n this.hookupEventHandler(\"click\", idButtonApplyFilters, (event, button) => {\n event.stopPropagation();\n this.callFilterTableContent();\n });\n }\n hookupSearchTextFilter() {\n this.hookupFilter(flagSearch);\n }\n hookupFilterDog() {\n this.hookupFilter(attrIdDog); \n }\n hookupFilterCommandCategory() {\n this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {\n this.handleChangeFilter();\n let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);\n let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);\n console.log(\"filter commands unsorted\");\n console.log(Utils.getListFromDict(filterCommands));\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => command[attrIdCommandCategory] == idCommandCategory);\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n let filterCommand = document.querySelector(idFormFilters + ' .' + flagCommand);\n let idCommandPrevious = DOM.getElementAttributeValuePrevious(filterCommand);\n filterCommand.innerHTML = '';\n let optionJson, option;\n option = DOM.createOption(null);\n filterCommand.appendChild(option);\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command, idCommandPrevious);\n option = DOM.createOption(optionJson);\n filterCommand.appendChild(option);\n });\n filterCommand.dispatchEvent(new Event('change'));\n return isDirtyFilter;\n });\n }\n hookupFilterCommand() {\n this.hookupFilter(attrIdCommand);\n }\n /*\n getAndLoadFilteredTableContent = () => {\n this.callFilterTableContent()\n .catch(error => console.error('Error:', error));\n }\n */\n static getFormFilters() {\n return document.querySelector(idFormFilters);\n }\n callFilterTableContent() {\n let formFilters = TableBasePage.getFormFilters();\n let filtersJson = DOM.convertForm2JSON(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"callFilterTableContent\");\n Utils.consoleLogIfNotProductionEnvironment(\"formFilters\");\n Utils.consoleLogIfNotProductionEnvironment(formFilters);\n Utils.consoleLogIfNotProductionEnvironment(\"filtersJson\");\n Utils.consoleLogIfNotProductionEnvironment(filtersJson);\n this.leave();\n API.goToHash(this.constructor.hash, filtersJson);\n }\n callbackLoadTableContent(response) {\n let table = TableBasePage.getTableMain();\n let bodyTable = table.querySelector('tbody');\n bodyTable.querySelectorAll('tr').forEach(function(row) { row.remove(); });\n let rowsJson = response.data[flagRows];\n if (!Validation.isEmpty(rowsJson) && rowsJson.every(row => row.hasOwnProperty('display_order'))) {\n rowsJson = rowsJson.sort((a, b) => a.display_order - b.display_order);\n }\n rowsJson.forEach(this.loadRowTable.bind(this));\n this.hookupTableMain();\n }\n static getTableMain() {\n return document.querySelector(idTableMain);\n }\n loadRowTable(rowJson) {\n throw new Error(\"Subclass of TableBasePage must implement method loadRowTable().\");\n }\n getAndLoadFilteredTableContentSinglePageApp() {\n this.callFilterTableContent()\n .then(data => {\n Utils.consoleLogIfNotProductionEnvironment('Table data received:', data);\n this.callbackLoadTableContent(data);\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonsSaveCancel() {\n this.hookupButtonSave();\n this.hookupButtonCancel();\n this.toggleShowButtonsSaveCancel(false);\n }\n saveRecordsTableDirty() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n /*\n Utils.consoleLogIfNotProductionEnvironment({ formElement, comment, records });\n Utils.consoleLogIfNotProductionEnvironment('records');\n Utils.consoleLogIfNotProductionEnvironment(records);\n debugger;\n */\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callFilterTableContent();\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n getTableRecords(dirtyOnly = false) {\n let records = [];\n let record;\n document.querySelectorAll(idTableMain + ' > tbody > tr').forEach((row) => {\n if (dirtyOnly && !DOM.hasDirtyChildrenContainer(row)) return;\n record = this.getJsonRow(row);\n records.push(record);\n });\n return records;\n }\n getJsonRow(row) {\n throw new Error(\"Subclass of TableBasePage must implement method getJsonRow().\");\n }\n saveRecordsTableDirtySinglePageApp() {\n let records = this.getTableRecords(true);\n if (records.length == 0) {\n OverlayError.show('No records to save');\n return;\n }\n let formElement = TableBasePage.getFormFilters();\n let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));\n this.callSaveTableContent(records, formElement, comment)\n .then(data => {\n if (data[flagStatus] == flagSuccess) {\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment('Records saved!');\n Utils.consoleLogIfNotProductionEnvironment('Data received:', data);\n }\n this.callbackLoadTableContent(data);\n }\n else {\n Utils.consoleLogIfNotProductionEnvironment(\"error: \", data[flagMessage]);\n OverlayError.show(data[flagMessage]);\n }\n })\n .catch(error => console.error('Error:', error));\n }\n hookupButtonCancel() {\n Events.initialiseEventHandler(idFormFilters + ' button.' + flagCancel, flagInitialised, (button) => {\n button.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n button = event.target;\n if (button.classList.contains(flagIsCollapsed)) return;\n this.callFilterTableContent();\n });\n button.classList.add(flagIsCollapsed);\n });\n }\n handleClickAddRowTable(event, button) {\n event.stopPropagation();\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - _rowBlank.getAttribute(this.constructor.attrIdRowObject));\n let tbody = document.querySelector(idTableMain + ' tbody');\n if (tbody.classList.contains(flagIsCollapsed)) return;\n let row = _rowBlank.cloneNode(true);\n row.classList.remove(flagInitialised);\n row.querySelectorAll('.' + flagInitialised).forEach(function(element) {\n element.classList.remove(flagInitialised);\n });\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n row.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n this.initialiseRowNew(tbody, row);\n tbody.prepend(row);\n tbody.scrollTop = 0;\n this.hookupTableMain();\n this.postInitialiseRowNewCallback(tbody);\n }\n initialiseRowNew(tbody, row) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method initialiseRowNew().\");\n }\n // row.classList.remove(flagRowNew);\n }\n hookupTableMain() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement hookupTableMain() method.\");\n }\n if (true) { // _rowBlank == null) {\n Events.initialiseEventHandler(idTableMain, flagInitialised, (table) => {\n this.cacheRowBlank();\n });\n }\n }\n cacheRowBlank() {\n let selectorRowNew = idTableMain + ' tbody tr.' + flagRowNew;\n let rowBlankTemp = document.querySelector(selectorRowNew);\n Utils.consoleLogIfNotProductionEnvironment(\"row blank temp: \", rowBlankTemp);\n let countRows = document.querySelectorAll(idTableMain + ' > tbody > tr').length;\n _rowBlank = rowBlankTemp.cloneNode(true);\n document.querySelectorAll(selectorRowNew).forEach(function(row) {\n row.remove();\n });\n _rowBlank.setAttribute(this.constructor.attrIdRowObject, -1 - countRows);\n }\n postInitialiseRowNewCallback(tbody) {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Subclass of TableBasePage must implement method postInitialiseRowNewCallback(tbody).\");\n }\n }\n initialiseSliderDisplayOrderRowNew(tbody, row) {\n // let tdSelector = ':scope > tr > td.' + flagDisplayOrder;\n // let tbody = document.querySelector('table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody');\n let slidersDisplayOrder = tbody.querySelectorAll(':scope > tr > td.' + flagDisplayOrder + ' input.' + flagSlider);\n let maxDisplayOrder = 0;\n slidersDisplayOrder.forEach((slider) => {\n maxDisplayOrder = Math.max(maxDisplayOrder, parseFloat(DOM.getElementValueCurrent(slider)));\n });\n let sliderDisplayOrder = row.querySelector('td.' + flagDisplayOrder + ' .' + flagSlider);\n DOM.setElementValuesCurrentAndPrevious(sliderDisplayOrder, maxDisplayOrder + 1);\n }\n hookupSlidersDisplayOrderTable() {\n let selectorDisplayOrder = idTableMain + ' tbody tr td.' + flagDisplayOrder + ' input.' + flagSlider + '.' + flagDisplayOrder;\n this.hookupChangeHandlerTableCells(selectorDisplayOrder);\n }\n hookupChangeHandlerTableCells(inputSelector, handler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n Events.initialiseEventHandler(inputSelector, flagInitialised, (input) => {\n input.addEventListener(\"change\", (event) => {\n handler(event, input);\n });\n handler(null, input);\n });\n }\n /*\n handleChangeElementCellTable(event, element) {\n let row = DOM.getRowFromElement(element);\n let td = DOM.getCellFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenContainer(row);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n if (isDirtyElement != wasDirtyElement) {\n DOM.handleDirtyElement(td, isDirtyElement);\n let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);\n if (isNowDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isNowDirtyRow);\n let rows = this.getTableRecords(true);\n let existsDirtyRecord = rows.length > 0;\n this.toggleShowButtonsSaveCancel(existsDirtyRecord);\n }\n }\n }\n handleChangeElementNestedCellTable(event, element, flagColumnList = [], orderNesting = 1) {\n let orderNestingTemp = orderNesting;\n let row, td, nestedRowSelector;\n while (orderNestingTemp > 0) {\n nestedRowSelector = idTableMain;\n for (let indexOrderNesting = 0; indexOrderNesting < orderNestingTemp; indexOrderNesting++) {\n nestedRowSelector += ' tbody tr';\n }\n row = DOM.getClosestParent(element, nestedRowSelector);\n td = row.querySelector('td.' + flag);\n }\n let row = DOM.getRowFromElement(element);\n let td = DOM.getCellFromElement(element);\n let wasDirtyRow = DOM.hasDirtyChildrenContainer(row);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n if (isDirtyElement != wasDirtyElement) {\n DOM.handleDirtyElement(td, isDirtyElement);\n let isNowDirtyRow = DOM.hasDirtyChildrenContainer(row);\n if (isNowDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(row, isNowDirtyRow);\n let rows = this.getTableRecords(true);\n let existsDirtyRecord = rows.length > 0;\n this.toggleShowButtonsSaveCancel(existsDirtyRecord);\n }\n }\n }\n handleChangeElementSubtableCell(event, element, flagFieldSubtable) {\n let rowSubtable = element.closest(idTableMain + ' td.' + flagFieldSubtable + ' tbody tr');\n let rowTable = rowSubtable.closest(idTableMain + ' > tbody > tr');\n let td = DOM.getCellFromElement(element);\n // let tdSubtable = td.closest('td.' + flagFieldSubtable);\n let wasDirtyRowSubtable = DOM.hasDirtyChildrenContainer(rowSubtable);\n let wasDirtyRowTable = DOM.hasDirtyChildrenContainer(rowTable);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement});\n if (isDirtyElement != wasDirtyElement) {\n DOM.handleDirtyElement(td, isDirtyElement);\n let isNowDirtyRowSubtable = DOM.hasDirtyChildrenContainer(rowSubtable);\n Utils.consoleLogIfNotProductionEnvironment({isNowDirtyRowSubtable, wasDirtyRowSubtable});\n if (isNowDirtyRowSubtable != wasDirtyRowSubtable) {\n DOM.handleDirtyElement(rowSubtable, isNowDirtyRowSubtable);\n let isNowDirtyRowTable = DOM.hasDirtyChildrenContainer(rowTable);\n Utils.consoleLogIfNotProductionEnvironment({isNowDirtyRowTable, wasDirtyRowTable});\n if (isNowDirtyRowTable != wasDirtyRowTable) {\n DOM.handleDirtyElement(rowTable, isNowDirtyRowTable);\n let rows = this.getTableRecords(true);\n let existsDirtyRecord = rows.length > 0;\n this.toggleShowButtonsSaveCancel(existsDirtyRecord);\n }\n }\n }\n }\n */\n handleChangeNestedElementCellTable(event, element) {\n let wasDirtyParentRows = this.getAllIsDirtyRowsInParentTree(element);\n let wasDirtyElement = element.classList.contains(flagDirty);\n let isDirtyElement = DOM.updateAndCheckIsElementDirty(element);\n // Utils.consoleLogIfNotProductionEnvironment({isDirtyElement, wasDirtyElement, wasDirtyParentRows});\n // let td = DOM.getCellFromElement(element);\n // DOM.setElementAttributeValueCurrent(td, DOM.getElementAttributeValueCurrent(element));\n if (isDirtyElement != wasDirtyElement) {\n // DOM.handleDirtyElement(td, isDirtyElement);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows);\n }\n }\n getAllIsDirtyRowsInParentTree(element) {\n let rows = [];\n let parent = element;\n let isDirty;\n while (parent) {\n if (parent.tagName.toUpperCase() == 'TR') {\n isDirty = parent.classList.contains(flagDirty)\n rows.push(isDirty);\n }\n parent = parent.parentElement;\n }\n return rows;\n }\n cascadeChangedIsDirtyNestedElementCellTable(element, isDirtyElement, wasDirtyParentRows) {\n if (Validation.isEmpty(wasDirtyParentRows)) return;\n let tr = DOM.getRowFromElement(element);\n let isDirtyRow = isDirtyElement || DOM.hasDirtyChildrenContainer(tr);\n let wasDirtyRow = wasDirtyParentRows.shift();\n Utils.consoleLogIfNotProductionEnvironment({isDirtyRow, wasDirtyRow});\n if (isDirtyRow != wasDirtyRow) {\n DOM.handleDirtyElement(tr, isDirtyRow);\n this.updateAndToggleShowButtonsSaveCancel();\n this.cascadeChangedIsDirtyNestedElementCellTable(tr.parentElement, isDirtyRow, wasDirtyParentRows);\n }\n }\n hookupChangeHandlerTableCellsWhenNotCollapsed(inputSelector, handler = (event, element) => {\n if (!element.classList.contains(flagIsCollapsed)) this.handleChangeNestedElementCellTable(event, element);\n }) {\n this.hookupEventHandler(\"change\", inputSelector, handler);\n }\n hookupFieldsCodeTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagCode + ' > .' + flagCode);\n }\n hookupFieldsNameTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagName + ' > .' + flagName);\n }\n hookupFieldsDescriptionTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagDescription + ' > .' + flagDescription);\n }\n hookupFieldsNotesTable() {\n this.hookupChangeHandlerTableCells(idTableMain + ' > tbody > tr > td.' + flagNotes + ' > .' + flagNotes);\n }\n hookupFieldsActive(flagTable = '', handleClickRowNew = (event, element) => { this.handleClickAddRowTable(event, element); }) {\n let selectorButton = 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > tbody > tr > td.' + flagActive + ' .' + flagButton + '.' + flagActive;\n let selectorButtonDelete = selectorButton + '.' + flagDelete;\n let selectorButtonUndelete = selectorButton + ':not(.' + flagDelete + ')';\n Utils.consoleLogIfNotProductionEnvironment(\"hookupFieldsActive: \", selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete);\n this.hookupEventHandler(\n \"click\"\n , 'table' + (Validation.isEmpty(flagTable) ? '' : '.' + flagTable) + ' > thead > tr > th.' + flagActive + ' .' + flagButton + '.' + flagActive\n , (event, button) => { handleClickRowNew(event, button); }\n );\n }\n hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupEventHandler(\"click\", selectorButtonDelete, (event, element) => {\n this.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = element.classList.contains(flagDirty);\n let row = DOM.getRowFromElement(element);\n if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) {\n row.parentNode.removeChild(row);\n }\n else {\n let buttonAddTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagAdd);\n let buttonAdd = buttonAddTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonAdd, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonAdd, false);\n if (wasDirty) buttonAdd.classList.add(flagDirty);\n element.replaceWith(buttonAdd);\n changeHandler(null, buttonAdd);\n this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n }\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupEventHandler(\"click\", selectorButtonUndelete, (event, element) => {\n this.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n });\n }\n handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n if (element.tagName.toUpperCase() != 'SVG') element = element.parentElement;\n let valuePrevious = DOM.getElementAttributeValuePrevious(element);\n let wasDirty = DOM.isElementDirty(element);\n let buttonDeleteTemplate = document.querySelector(idContainerTemplateElements + ' .' + flagButton + '.' + flagActive + '.' + flagDelete);\n let buttonDelete = buttonDeleteTemplate.cloneNode(true);\n DOM.setElementAttributeValuePrevious(buttonDelete, valuePrevious);\n DOM.setElementAttributeValueCurrent(buttonDelete, true);\n if (wasDirty) buttonDelete.classList.add(flagDirty);\n element.replaceWith(buttonDelete);\n changeHandler(null, buttonDelete);\n this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); });\n this.updateAndToggleShowButtonsSaveCancel();\n }\n hookupTdsAccessLevel() {\n this.hookupTableCellDdlPreviews(flagAccessLevel, Utils.getListFromDict(accessLevels));\n }\n hookupTableCellDdlPreviews(\n fieldFlag\n , optionList\n , cellSelector = null\n , ddlHookup = (ddlSelector) => { this.hookupTableCellDdls(ddlSelector); }\n , changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }\n ) {\n if (cellSelector == null) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n this.hookupEventHandler(\"click\", cellSelector + ' div.' + fieldFlag, (event, div) => {\n this.handleClickTableCellDdlPreview(\n event\n , div\n , fieldFlag\n , optionList\n , cellSelector\n , (ddlSelector) => { ddlHookup(\n ddlSelector\n , (event, element) => { changeHandler(event, element); }\n ); }\n );\n });\n ddlHookup(cellSelector + ' select.' + fieldFlag);\n }\n hookupTableCellDdls(ddlSelector, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) {\n this.hookupEventHandler(\"change\", ddlSelector, (event, element) => { changeHandler(event, element); });\n }\n handleClickTableCellDdlPreview(event, div, fieldFlag, optionObjectList, cellSelector = null, ddlHookup = (cellSelector) => { this.hookupTableCellDdls(cellSelector); }) {\n if (Validation.isEmpty(cellSelector)) cellSelector = idTableMain + ' > tbody > tr > td.' + fieldFlag;\n let idSelected = DOM.getElementAttributeValueCurrent(div);\n let td = DOM.getCellFromElement(div);\n td.innerHTML = '';\n let ddl = document.createElement('select');\n ddl.classList.add(fieldFlag);\n DOM.setElementValuesCurrentAndPrevious(ddl, idSelected);\n let optionJson, option;\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment(\"click table cell ddl preview\");\n Utils.consoleLogIfNotProductionEnvironment({optionObjectList, cellSelector});\n }\n option = DOM.createOption(null);\n ddl.appendChild(option);\n optionObjectList.forEach((optionObjectJson) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(optionObjectJson, idSelected);\n option = DOM.createOption(optionJson);\n ddl.appendChild(option);\n });\n td.appendChild(ddl);\n let ddlSelector = cellSelector + ' select.' + fieldFlag;\n ddlHookup(ddlSelector);\n }\n /*\n hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList, ddlHookup = (event, element) => { this.hookupTableCellDdls(event, element); }) {\n this.hookupEventHandler(\"click\", cellSelector + ' div', (event, div) => {\n this.handleClickTableCellDdlPreview(event, div, optionList, cellSelector, (event, element) => { ddlHookup(event, element); });\n });\n }\n */\n toggleColumnCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n toggleColumnHeaderCollapsed(flagColumn, isCollapsed) {\n this.toggleColumnHasClassnameFlag(flagColumn, isCollapsed, flagIsCollapsed);\n }\n\n hookupFieldsCommandCategory() {\n this.hookupTableCellDdlPreviews(\n flagCommandCategory\n , Utils.getListFromDict(filterCommandCategories).sort((a, b) => a[flagName].localeCompare(b[flagName]))\n , null\n , (cellSelector) => { this.hookupCommandCategoryDdls(cellSelector); }\n );\n }\n hookupCommandCategoryDdls(ddlSelector) {\n this.hookupChangeHandlerTableCells(ddlSelector, (event, element) => { this.handleChangeCommandCategoryDdl(event, element); });\n }\n handleChangeCommandCategoryDdl(event, ddlCategory) {\n let row = DOM.getRowFromElement(ddlCategory);\n let idCommandCategoryRowOld = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n this.handleChangeNestedElementCellTable(event, ddlCategory);\n let idCommandCategoryRowNew = this.getIdCommandCategoryRow(row); // DOM.getElementAttributeValueCurrent(ddlCategory);\n if (idCommandCategoryRowOld == idCommandCategoryRowNew) return;\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let tdCommand = row.querySelector('td.' + flagCommand);\n tdCommand.dispatchEvent(new Event('click'));\n let ddlCommand = row.querySelector('td.' + flagCommand + ' select.' + flagCommand);\n ddlCommand.innerHTML = '';\n ddlCommand.appendChild(DOM.createOption(null));\n let optionJson, option;\n let commandsInCategory = Utils.getListFromDict(filterCommands).filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRowNew\n || idCommandCategoryRowNew == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n sortedCommands.forEach((command) => {\n optionJson = BusinessObjects.getOptionJsonFromObjectJson(command);\n option = DOM.createOption(optionJson);\n ddlCommand.appendChild(option);\n });\n this.handleChangeNestedElementCellTable(event, ddlCommand);\n }\n hookupFieldsCommand() {\n this.hookupEventHandler(\"click\", idTableMain + ' td.' + flagCommand + ' .' + flagCommand, (event, div) => {\n Utils.consoleLogIfNotProductionEnvironment(div);\n let parentTr = DOM.getRowFromElement(div);\n Utils.consoleLogIfNotProductionEnvironment({ div, parentTr });\n let tdCommandCategory = parentTr.querySelector('td.' + flagCommandCategory);\n let idCommandCategoryRow = this.getIdCommandCategoryRow(parentTr); // DOM.getElementAttributeValueCurrent(tdCommandCategory);\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n let filterCommandList = Utils.getListFromDict(filterCommands);\n let commandsInCategory = filterCommandList.filter(command => \n (\n command[attrIdCommandCategory] == idCommandCategoryRow\n || idCommandCategoryRow == 0\n )\n && (\n command[attrIdCommandCategory] == idCommandCategoryFilter\n || idCommandCategoryFilter == 0\n )\n );\n let sortedCommands = commandsInCategory.sort((a, b) => a[flagName].localeCompare(b[flagName]));\n Utils.consoleLogIfNotProductionEnvironment({ tdCommandCategory, idCommandCategoryRow, idCommandCategoryFilter, filterCommandList, commandsInCategory });\n Utils.consoleLogIfNotProductionEnvironment(filterCommandList);\n this.handleClickTableCellDdlPreview(\n event\n , div\n , flagCommand\n , sortedCommands\n , null\n , (cellSelector) => { this.hookupTableCellDdls(\n cellSelector\n , (event, element) => { this.handleChangeNestedElementCellTable(event, element); }\n ); }\n );\n });\n this.hookupTableCellDdls(idTableMain + ' td.' + flagCommand + ' select.' + flagCommand);\n }\n getIdCommandCategoryRow(tr) {\n let elementCommandCategory = tr.querySelector('td.' + flagCommandCategory + ' .' + flagCommandCategory);\n return DOM.getElementAttributeValueCurrent(elementCommandCategory);\n }\n getIdCommandCategoryFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let idCommandCategory = 0;\n let valueCurrentCommandCategoryFilter = DOM.getElementAttributeValueCurrent(commandCategoryFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandCategoryFilter });\n if (valueCurrentCommandCategoryFilter == \"\") {\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n Utils.consoleLogIfNotProductionEnvironment({ valueCurrentCommandFilter });\n if (valueCurrentCommandFilter != \"\") {\n let command = filterCommands[valueCurrentCommandFilter];\n idCommandCategory = command[attrIdCommandCategory];\n }\n } else {\n idCommandCategory = Number(valueCurrentCommandCategoryFilter);\n }\n return idCommandCategory;\n }\n getHasCommandCategoryFilter() {\n let idCommandCategoryFilter = this.getIdCommandCategoryFilter();\n return !(Validation.isEmpty(idCommandCategoryFilter) || idCommandCategoryFilter == 0);\n }\n getIdCommandRow(tr) {\n let elementCommand = tr.querySelector('td.' + flagCommand + ' .' + flagCommand);\n return DOM.getElementAttributeValueCurrent(elementCommand);\n }\n getIdCommandFilter() {\n let formFilters = TableBasePage.getFormFilters();\n let commandFilter = formFilters.querySelector('#' + attrIdCommand);\n let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);\n let idCommand = Number(valueCurrentCommandFilter);\n return idCommand;\n }\n getHasCommandFilter() {\n let idCommandFilter = this.getIdCommandFilter();\n return !(Validation.isEmpty(idCommandFilter) || idCommandFilter == 0);\n }\n hookupFieldsDog() {\n this.hookupTableCellDdlPreviews(flagDog, Utils.getListFromDict(filterDogs));\n }\n getIdDogRow(tr) {\n let elementDog = tr.querySelector('td.' + flagDog + ' .' + flagDog);\n return DOM.getElementAttributeValueCurrent(elementDog);\n }\n \n createTdActive(isActive) {\n let tdActive = document.createElement(\"td\");\n tdActive.classList.add(flagActive);\n let buttonActive = document.createElement(\"button\");\n buttonActive.classList.add(flagActive);\n buttonActive.classList.add(isActive ? flagDelete : flagAdd);\n buttonActive.textContent = isActive ? 'x' : '+';\n DOM.setElementAttributesValuesCurrentAndPrevious(buttonActive, isActive);\n tdActive.appendChild(buttonActive);\n return tdActive;\n }\n \n leave() {\n if (this.constructor === TableBasePage) {\n throw new Error(\"Must implement leave() method.\");\n }\n super.leave();\n let formFilters = TableBasePage.getFormFilters();\n let dataPage = {};\n dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);\n this.setLocalStoragePage(dataPage);\n }\n\n toggleColumnHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n let columnThHasFlag = columnTh.classList.contains(classnameFlag);\n if (isRequiredFlag == columnThHasFlag) return;\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n toggleColumnHeaderHasClassnameFlag(columnFlag, isRequiredFlag, classnameFlag) {\n let table = TableBasePage.getTableMain();\n let columnTh = table.querySelector('th.' + columnFlag);\n DOM.toggleElementHasClassnameFlag(columnTh, isRequiredFlag, classnameFlag);\n }\n\n updateAndToggleShowButtonsSaveCancel() {\n let records = this.getTableRecords(true);\n let isDirtyMainTable = records.length > 0;\n\n let formFilters = TableBasePage.getFormFilters();\n let areDirtyFilters = DOM.hasDirtyChildrenContainer(formFilters);\n\n this.toggleShowButtonsSaveCancel(isDirtyMainTable && !areDirtyFilters);\n }\n}\n","\nimport Events from \"../../lib/events.js\";\nimport LocalStorage from \"../../lib/local_storage.js\";\nimport Validation from \"../../lib/validation.js\";\n// import BasePage from \"../base.js\";\nimport DOM from \"../../dom.js\";\nimport { isEmpty } from \"../../lib/utils.js\";\nimport TableBasePage from \"../base_table.js\";\n\nexport default class DogMixinPage {\n constructor(pageCurrent) {\n this.page = pageCurrent;\n }\n\n initialize() {\n Utils.consoleLogIfNotProductionEnvironment('hookup dog start for ', this.page.hash);\n this.hookupFilters();\n this.hookupLocalStorageDog();\n }\n hookupFilters() {\n }\n hookupLocalStorageDog() {\n \n }\n\n /*\n hookupDogCardsProduct() {\n \n let d; // , lsShared;\n let selectorCardProduct = '.card.subcard';\n Events.initialiseEventHandler(selectorCardProduct, flagInitialised, function(cardProduct) {\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"initialising product card: \", cardProduct); }\n cardProduct.addEventListener(\"click\", function(event) {\n // d = { keyIdProduct: product.getAttribute(attrIdProduct) }\n var elemClicked = event.target;\n if (elemClicked.id != 'submit') { // disable for submit buttons\n if (_verbose) { \n Utils.consoleLogIfNotProductionEnvironment(\"product click: \" + cardProduct.getAttribute(attrIdProduct));\n Utils.consoleLogIfNotProductionEnvironment(\"permutation click: \" + cardProduct.getAttribute(attrIdPermutation));\n }\n var d = {}\n d[keyIdProduct] = cardProduct.getAttribute(attrIdProduct)\n d[keyIdPermutation] = cardProduct.getAttribute(attrIdPermutation)\n // send quantity requested\n goToPage(hashPageDogProduct, d);\n }\n });\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"click method added for product ID: \" + cardProduct.getAttribute(attrIdProduct) + ', permutation ID: ', cardProduct.getAttribute(attrIdPermutation)); }\n });\n }\n */\n \n leave() {}\n}\n","\nimport Events from \"../../lib/events.js\";\nimport LocalStorage from \"../../lib/local_storage.js\";\nimport Validation from \"../../lib/validation.js\";\n// import BasePage from \"../base.js\";\nimport DOM from \"../../dom.js\";\nimport { isEmpty } from \"../../lib/utils.js\";\nimport DogMixinPage from \"./mixin.js\";\n\nexport default class DogTableMixinPage extends DogMixinPage {\n constructor(pageCurrent) {\n super(pageCurrent);\n }\n initialize() {\n super.initialize();\n this.hookupFilters();\n this.hookupTable();\n }\n hookupFilters() {\n // Implement filter-specific functionality here\n }\n hookupTable() {\n // Implement table-specific functionality here\n }\n}","\nimport API from \"../../api.js\";\nimport BusinessObjects from \"../../lib/business_objects/business_objects.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\nimport Validation from \"../../lib/validation.js\";\nimport DogTableMixinPage from \"./mixin_table.js\";\n\nexport default class PageDogCommandCategories extends TableBasePage {\n static hash = hashPageDogCommandCategories;\n static attrIdRowObject = attrIdCommandCategory;\n callSaveTableContent = API.saveCommandCategories;\n\n constructor(router) {\n super(router);\n this.dogMixin = new DogTableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterActive();\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n Utils.consoleLogIfNotProductionEnvironment({ row });\n if (row == null) return;\n let inputCode = row.querySelector('td.' + flagCode + ' .' + flagCode);\n let inputName = row.querySelector('td.' + flagName + ' .' + flagName);\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n \n /*\n console.log(\"inputName\");\n console.log(inputName);\n */\n\n let jsonRow = {};\n jsonRow[attrIdCommandCategory] = row.getAttribute(attrIdCommandCategory);\n jsonRow[flagCode] = DOM.getElementAttributeValueCurrent(inputCode);\n jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n return jsonRow;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n // let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsCodeTable();\n this.hookupFieldsNameTable();\n this.hookupFieldsActive();\n }\n\n leave() {\n super.leave();\n }\n}\n\n","\nimport API from \"../../api.js\";\nimport BusinessObjects from \"../../lib/business_objects/business_objects.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\nimport Validation from \"../../lib/validation.js\";\nimport DogTableMixinPage from \"./mixin_table.js\";\n\nexport default class PageDogCommands extends TableBasePage {\n static hash = hashPageDogCommands;\n static attrIdRowObject = attrIdCommand;\n callSaveTableContent = API.saveCommands;\n\n constructor(router) {\n super(router);\n this.dogMixin = new DogTableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterCommandCategory();\n this.hookupFilterActive();\n }\n hookupFilterCommandCategory() {\n this.hookupFilter(attrIdCommandCategory);\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n if (row == null) return;\n let inputName = row.querySelector('td.' + flagName + ' .' + flagName);\n let inputHandSignalDefaultDescription = row.querySelector('td.' + flagHandSignalDefaultDescription + ' .' + flagHandSignalDefaultDescription);\n let inputCanHaveButton = row.querySelector('td.' + flagCanHaveButton + ' .' + flagCanHaveButton);\n let inputNotes = row.querySelector('td.' + flagNotes + ' .' + flagNotes);\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n\n /*\n Utils.consoleLogIfNotProductionEnvironment({ inputName, inputHandSignalDefaultDescription, inputCanHaveButton, inputNotes, buttonActive });\n debugger;\n */\n\n let jsonRow = {};\n jsonRow[attrIdCommand] = row.getAttribute(attrIdCommand);\n jsonRow[attrIdCommandCategory] = this.getIdCommandCategoryRow(row);\n jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName);\n jsonRow[flagHandSignalDefaultDescription] = DOM.getElementAttributeValueCurrent(inputHandSignalDefaultDescription);\n jsonRow[flagCanHaveButton] = (DOM.getElementAttributeValueCurrent(inputCanHaveButton) == \"true\");\n jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n return jsonRow;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[0];\n let clickableElementsSelector = [\n 'td.' + flagDog + ' div.' + flagDog\n , ',td.' + flagCommandCategory + ' div.' + flagCommandCategory\n , ',td.' + flagCommand + ' div.' + flagCommand\n ].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsCommandCategory();\n this.hookupFieldsNameTable();\n this.hookupTextareasHandSignalDefaultDescription();\n this.hookupFieldsCanHaveButton();\n this.hookupFieldsNotesTable();\n this.hookupFieldsActive();\n }\n hookupFieldsCommandCategory() {\n this.hookupTableCellDdlPreviews(\n flagCommandCategory\n , Utils.getListFromDict(filterCommandCategories)\n );\n }\n hookupTextareasHandSignalDefaultDescription() {\n this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagHandSignalDefaultDescription + ' .' + flagHandSignalDefaultDescription);\n }\n hookupFieldsCanHaveButton() {\n this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagCanHaveButton + ' .' + flagCanHaveButton);\n }\n\n leave() {\n super.leave();\n }\n}\n\n","\nimport API from \"../../api.js\";\nimport BusinessObjects from \"../../lib/business_objects/business_objects.js\";\nimport DOM from \"../../dom.js\";\nimport Events from \"../../lib/events.js\";\nimport TableBasePage from \"../base_table.js\";\nimport Utils from \"../../lib/utils.js\";\nimport Validation from \"../../lib/validation.js\";\nimport DogTableMixinPage from \"./mixin_table.js\";\n\nexport default class PageDogDogCommandLinks extends TableBasePage {\n static hash = hashPageDogDogCommandLinks;\n static attrIdRowObject = attrIdDogCommandLink;\n callSaveTableContent = API.saveDogCommandLinks;\n\n constructor(router) {\n super(router);\n this.dogMixin = new DogTableMixinPage(this);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n hookupFilters() {\n this.sharedHookupFilters();\n this.hookupFilterDog();\n this.hookupFilterCommandCategory();\n this.hookupFilterCommand();\n this.hookupFilterActive();\n }\n\n loadRowTable(rowJson) {\n if (rowJson == null) return;\n if (_verbose) { Utils.consoleLogIfNotProductionEnvironment(\"applying data row: \", rowJson); }\n }\n getJsonRow(row) {\n if (row == null) return;\n let inputHandSignalDescription = row.querySelector('td.' + flagHandSignalDescription + ' textarea');\n let inputNotes = row.querySelector('td.' + flagNotes + ' textarea');\n let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);\n\n let jsonRow = {};\n jsonRow[attrIdDogCommandLink] = row.getAttribute(attrIdDogCommandLink);\n jsonRow[attrIdDog] = this.getIdDogRow(row);\n jsonRow[attrIdCommand] = this.getIdCommandRow(row);\n jsonRow[flagHandSignalDescription] = DOM.getElementAttributeValueCurrent(inputHandSignalDescription);\n jsonRow[flagNotes] = DOM.getElementAttributeValueCurrent(inputNotes);\n jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);\n return jsonRow;\n }\n initialiseRowNew(tbody, row) {\n \n }\n postInitialiseRowNewCallback(tbody) {\n let newRows = tbody.querySelectorAll('tr.' + flagRowNew);\n let newestRow = newRows[newRows.length - 1];\n let clickableElementsSelector = [\n 'td.' + flagDog + ' div.' + flagDog\n , ',td.' + flagCommandCategory + ' div.' + flagCommandCategory\n , ',td.' + flagCommand + ' div.' + flagCommand\n ].join('');\n newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {\n clickableElement.click();\n });\n }\n\n hookupTableMain() {\n super.hookupTableMain();\n this.hookupFieldsDog();\n this.hookupFieldsCommandCategory();\n this.hookupFieldsCommand();\n this.hookupTextareasHandSignalDescription();\n this.hookupFieldsNotesTable();\n this.hookupFieldsActive();\n }\n hookupTextareasHandSignalDescription() {\n this.hookupChangeHandlerTableCells(idTableMain + ' td.' + flagHandSignalDescription + ' .' + flagHandSignalDescription);\n }\n\n leave() {\n super.leave();\n }\n}\n\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityReport extends BasePage {\n static hash = hashPageAccessibilityReport;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","import BasePage from \"../base.js\";\n\nexport default class PageAccessibilityStatement extends BasePage {\n static hash = hashPageAccessibilityStatement;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\nimport BasePage from \"../base.js\";\n\nexport default class PageLicense extends BasePage {\n static hash = hashPageLicense;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","\nimport BasePage from \"../base.js\";\n\nexport default class PagePrivacyPolicy extends BasePage {\n static hash = hashPagePrivacyPolicy;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}","import BasePage from \"../base.js\";\n\nexport default class PageRetentionSchedule extends BasePage {\n static hash = hashPageDataRetentionSchedule;\n\n constructor(router) {\n super(router);\n }\n\n initialize() {\n this.sharedInitialize();\n }\n\n leave() {\n super.leave();\n }\n}\n","\n// Pages\n// Core\nimport PageHome from './pages/core/home.js';\n// Dog\nimport PageDogHome from './pages/dog/home.js';\nimport PageDogCommandCategories from './pages/dog/command_categories.js';\nimport PageDogCommands from './pages/dog/commands.js';\nimport PageDogDogCommandLinks from './pages/dog/dog_command_links.js';\n// import PageDogDogs from './pages/dog/dogs.js';\n// Legal\nimport PageAccessibilityReport from './pages/legal/accessibility_report.js';\nimport PageAccessibilityStatement from './pages/legal/accessibility_statement.js';\nimport PageLicense from './pages/legal/license.js';\nimport PagePrivacyPolicy from './pages/legal/privacy_policy.js';\nimport PageRetentionSchedule from './pages/legal/retention_schedule.js';\n// User\n// import PageUserLogin from './pages/user/login.js';\n// import PageUserLogout from './pages/user/logout.js';\n// import PageUserAccount from './pages/user/account.js';\n\nimport API from './api.js';\nimport DOM from './dom.js';\nimport Utils from './lib/utils.js';\n\n\nexport default class Router {\n constructor() {\n // Pages\n this.pages = {};\n // Core\n this.pages[hashPageHome] = { name: 'PageHome', module: PageHome };\n // Dog\n this.pages[hashPageDogHome] = { name: 'PageDogHome', module: PageDogHome };\n this.pages[hashPageDogCommandCategories] = { name: 'PageDogCommands', module: PageDogCommandCategories };\n this.pages[hashPageDogCommands] = { name: 'PageDogCommands', module: PageDogCommands };\n this.pages[hashPageDogDogCommandLinks] = { name: 'PageDogDogCommandLinks', module: PageDogDogCommandLinks };\n // this.pages[hashPageDogDogs] = { name: 'PageDogDogs', module: PageDogDogs };\n // Legal\n this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement };\n this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule };\n this.pages[hashPageLicense] = { name: 'PageLicense', module: PageLicense };\n this.pages[hashPagePrivacyPolicy] = { name: 'PagePrivacyPolicy', module: PagePrivacyPolicy };\n // User\n // this.pages[hashPageUserLogin] = { name: 'PageUserLogin', module: PageUserLogin }; // pathModule: './pages/user/login.js' };\n // this.pages[hashPageUserLogout] = { name: 'PageUserLogout', module: PageUserLogout }; // pathModule: './pages/user/logout.js' };\n // this.pages[hashPageUserAccount] = { name: 'PageUserAccount', module: PageUserAccount }; // pathModule: './pages/user/account.js' };\n // Routes\n this.routes = {};\n // Core\n this.routes[hashPageHome] = (isPopState = false) => this.navigateToHash(hashPageHome, isPopState);\n // Dog\n this.routes[hashPageDogHome] = (isPopState = false) => this.navigateToHash(hashPageDogHome, isPopState);\n this.routes[hashPageDogCommandCategories] = (isPopState = false) => this.navigateToHash(hashPageDogCommandCategories, isPopState);\n this.routes[hashPageDogCommands] = (isPopState = false) => this.navigateToHash(hashPageDogCommands, isPopState);\n this.routes[hashPageDogDogCommandLinks] = (isPopState = false) => this.navigateToHash(hashPageDogDogCommandLinks, isPopState);\n // this.routes[hashPageDogDogs] = (isPopState = false) => this.navigateToHash(hashPageDogDogs, isPopState);\n // Legal\n this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);\n this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);\n this.routes[hashPageLicense] = (isPopState = false) => this.navigateToHash(hashPageLicense, isPopState);\n this.routes[hashPagePrivacyPolicy] = (isPopState = false) => this.navigateToHash(hashPagePrivacyPolicy, isPopState);\n // User\n // this.routes[hashPageUserLogin] = (isPopState = false) => this.navigateToHash(hashPageUserLogin, isPopState);\n // this.routes[hashPageUserLogout] = (isPopState = false) => this.navigateToHash(hashPageUserLogout, isPopState);\n // this.routes[hashPageUserAccount] = (isPopState = false) => this.navigateToHash(hashPageUserAccount, isPopState);\n this.initialize();\n }\n loadPage(hashPage, isPopState = false) {\n const PageClass = this.getClassPageFromHash(hashPage);\n this.currentPage = new PageClass(this);\n this.currentPage.initialize(isPopState);\n window.addEventListener('beforeunload', () => this.currentPage.leave());\n }\n getClassPageFromHash(hashPage) {\n \n let pageJson = this.pages[hashPage];\n try {\n const module = pageJson.module;\n return module; \n }\n catch (error) {\n Utils.consoleLogIfNotProductionEnvironment(\"this.pages: \", this.pages);\n console.error('Page not found:', hashPage);\n throw error;\n }\n }\n initialize() {\n window.addEventListener('popstate', this.handlePopState.bind(this));\n }\n handlePopState(event) {\n this.loadPageCurrent();\n }\n loadPageCurrent() {\n const hashPageCurrent = DOM.getHashPageCurrent();\n this.loadPage(hashPageCurrent);\n }\n navigateToHash(hash, data = null, params = null, isPopState = false) {\n let url = API.getUrlFromHash(hash, params);\n history.pushState({data: data, params: params}, '', hash);\n API.goToUrl(url, data);\n }\n \n navigateToUrl(url, data = null, appendHistory = true) {\n // this.beforeLeave();\n if (appendHistory) history.pushState(data, '', url);\n url = API.parameteriseUrl(url, data);\n API.goToUrl(url);\n }\n\n static loadPageBodyFromResponse(response) {\n DOM.loadPageBody(response.data);\n }\n}\n\nexport const router = new Router();\n","\n'use strict';\n\nimport DOM from './dom.js';\nimport Router from './router.js';\n\n\nclass App {\n constructor() {\n this.dom = new DOM();\n this.router = new Router();\n }\n\n initialize() {\n this.setupEventListeners();\n this.start();\n }\n\n setupEventListeners() {\n // document.addEventListener('click', this.handleGlobalClick.bind(this));\n }\n\n handleGlobalClick(event) {\n }\n\n start() {\n this.initPageCurrent();\n }\n\n initPageCurrent() {\n this.router.loadPageCurrent();\n }\n \n}\n\nconst app = new App();\n\nfunction domReady(fn) {\n if (document.readyState !== 'loading') {\n fn();\n } else {\n document.addEventListener('DOMContentLoaded', fn);\n }\n}\n\ndomReady(() => {\n app.initialize();\n});\n\nwindow.app = app;\n\nexport default app;","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};","// extracted by mini-css-extract-plugin\nexport {};"],"names":["Validation","_classCallCheck","_createClass","key","value","isEmpty","object","undefined","length","isString","trim","i","isValidNumber","positiveOnly","isNaN","parseFloat","getDataContentType","params","data","contentType","JSON","stringify","Data","ContentType","arrayContainsItem","array","itemValue","hasItem","isJQueryElementArray","jQuery","document","querySelectorAll","is","isDate","Date","getTime","dictHasKey","d","k","areEqualDicts","dict1","dict2","keys1","Object","keys","keys2","_i3","_keys","imageExists","url","callback","img","Image","onload","onerror","src","toFixedOrDefault","decimalPlaces","defaultValue","arguments","toFixed","default","Utils","DOM","setElementAttributesValuesCurrentAndPrevious","element","setElementAttributeValueCurrent","setElementAttributeValuePrevious","setAttribute","attrValueCurrent","attrValuePrevious","setElementValuesCurrentAndPrevious","setElementValueCurrent","tagName","toUpperCase","type","checked","textContent","setElementValueCurrentIfEmpty","getElementValueCurrent","getCellFromElement","closest","getRowFromElement","flagRow","selector","getClosestParent","parentSelector","parent","parentElement","matches","convertForm2JSON","elementForm","dataForm","containersFilter","flagContainerInput","flagFilter","containerFilter","labelFilter","keyFilter","filter","indexFilter","querySelector","getAttribute","concat","loadPageBody","contentNew","pageBody","idPageBody","innerHTML","getHashPageCurrent","hashPageCurrent","body","dataset","page","updateAndCheckIsElementDirty","isElementDirty","isDirty","handleDirtyElement","toggleElementHasClassnameFlag","flagDirty","elementHasFlag","flag","elementAlreadyHasFlag","classList","contains","add","remove","hasDirtyChildrenContainer","container","hasDirtyChildrenNotDeletedContainer","flagDelete","returnVal","flagButton","flagActive","getElementAttributeValueCurrent","flagCheckbox","flagIsChecked","getElementAttributeValuePrevious","scrollToElement","scrollTop","offset","top","isElementInContainer","containerBounds","getBoundingClientRect","elementBounds","left","height","width","alertError","errorType","errorText","alert","createOptionUnselectedProductVariation","_defineProperty","flagProductVariationType","flagNameAttrOptionText","flagName","flagNameAttrOptionValue","attrIdProductVariationType","flagProductVariation","attrIdProductVariation","createOption","optionJson","text","option","createElement","selected","escapeHtml","div","unescapeHtml","html","innerText","Events","initialiseEventHandler","selectorElement","classInitialised","eventHandler","forEach","LocalStorage","getLocalStorage","parse","localStorage","getItem","setLocalStorage","newLS","setItem","_regeneratorRuntime","e","t","r","prototype","n","hasOwnProperty","o","defineProperty","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","getPrototypeOf","v","values","g","defineIteratorMethods","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","_catch","delegateYield","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","apply","_objectSpread","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","asyncGeneratorStep","_asyncToGenerator","_next","_throw","_defineProperties","_toPrimitive","toPrimitive","String","Number","API","getCsrfToken","idCSRFToken","_request","_callee","hashEndpoint","csrfToken","options","response","_args","_callee$","_context","getUrlFromHash","headers","flagCsrfToken","fetch","ok","status","json","t0","console","error","request","_x","hash","hashPageHome","parameteriseUrl","_pathHost","URLSearchParams","toString","goToUrl","window","location","href","goToHash","_loginUser","_callee2","_callee2$","_context2","flagCallback","hashPageUserLogin","loginUser","_saveCommandCategories","_callee3","commandCategories","formFilters","comment","dataRequest","_callee3$","_context3","flagFormFilters","flagCommandCategory","flagComment","hashSaveDogCommandCategory","saveCommandCategories","_x2","_x3","_x4","_saveCommands","_callee4","commands","_callee4$","_context4","flagCommand","hashSaveDogCommand","saveCommands","_x5","_x6","_x7","_saveDogCommandLinks","_callee5","dogCommandLinks","_callee5$","_context5","flagDogCommandLink","hashSaveDogDogCommandLink","saveDogCommandLinks","_x8","_x9","_x10","getListFromDict","dict","list","consoleLogIfNotProductionEnvironment","message","environment","is_production","log","OverlayConfirm","hookup","callbackSuccess","idOverlayConfirm","flagCancel","flagInitialised","buttonCancel","addEventListener","overlay","style","visibility","flagSubmit","buttonConfirm","textarea","show","flagIsCollapsed","BusinessObjects","OverlayError","BasePage","router","title","titlePageCurrent","initialize","sharedInitialize","logInitialisation","hookupCommonElements","hookupLogos","hookupNavigation","hookupOverlays","hookupEventHandler","eventType","event","stopPropagation","idButtonHamburger","overlayHamburger","idOverlayHamburger","flagExpanded","hookupButtonsNavHome","hookupButtonsNavUserAccount","hookupButtonsNavUserLogout","hookupButtonsNavUserLogin","hookupButtonsNavDogHome","hookupButtonsNavDogCommandCategories","hookupButtonsNavDogCommands","hookupButtonsNavDogDogCommandLinks","hookupButtonsNavDogDogs","hookupButtonsNav","flagNavHome","buttonSelector","hashPageNav","_this","button","navigateToHash","flagNavUserAccount","hashPageUserAccount","flagNavUserLogout","hashPageUserLogout","_this2","flagNavUserLogin","navigator","leave","Success","Message","flagNavDogHome","hashPageDogHome","flagNavDogCommandCategories","hashPageDogCommandCategories","flagNavDogCommands","hashPageDogCommands","flagNavDogDogCommandLinks","hashPageDogDogCommandLinks","flagNavDogDogs","hashPageDogDogs","_this3","flagImageLogo","flagLogo","hookupOverlayFromId","idOverlayError","idOverlay","display","hookupButtonSave","_this4","flagSave","target","setLocalStoragePage","dataPage","getLocalStoragePage","toggleShowButtonsSaveCancel","buttonSave","isDirtyFilter","idTableMain","PageHome","_BasePage","_callSuper","_inherits","_superPropGet","PageDogHome","hookupDogHome","getOptionJsonFromObjectJsonAndKeys","objectJson","keyText","keyValue","valueSelected","getOptionJsonFromObjectJson","getObjectText","getListObjectsFromIdDictAndCsv","idDict","idCsv","listObjects","ids","split","_iterator","_createForOfIteratorHelper","_step","id","err","msgError","labelError","idLabelError","TableBasePage","cursorYInitial","rowInitial","placeholder","dragSrcEl","dragSrcRow","hookupTableCellDdls","bind","isPopState","isSinglePageApp","hookupFilters","hookupButtonsSaveCancel","hookupTableMain","saveRecordsTableDirtySinglePageApp","saveRecordsTableDirty","filters","getFormFilters","filtersDefault","callFilterTableContent","sharedHookupFilters","hookupButtonApplyFilters","hookupSearchTextFilter","hookupFilterActive","filterSelector","idFormFilters","flagActiveOnly","filterActiveOld","removeAttribute","parentDiv","isChecked","filterActiveNew","filterActive","svgElement","wasChecked","handleChangeFilter","filterValuePrevious","hookupFilter","filterFlag","handler","areDirtyFilters","tbody","rows","row","dirtyInputs","dirtyInput","isDirtyLabel","initialisedElements","initialisedElement","updateAndToggleShowButtonsSaveCancel","hookupFilterIsNotEmpty","flagIsNotEmpty","_this5","idButtonApplyFilters","flagSearch","hookupFilterDog","attrIdDog","hookupFilterCommandCategory","_this6","attrIdCommandCategory","filterCommandCategory","idCommandCategory","filterCommands","commandsInCategory","command","sortedCommands","sort","b","localeCompare","filterCommand","idCommandPrevious","appendChild","dispatchEvent","Event","hookupFilterCommand","attrIdCommand","filtersJson","callbackLoadTableContent","table","getTableMain","bodyTable","rowsJson","flagRows","every","display_order","loadRowTable","rowJson","getAndLoadFilteredTableContentSinglePageApp","_this7","hookupButtonCancel","_this8","records","getTableRecords","formElement","idTextareaConfirm","callSaveTableContent","flagStatus","flagSuccess","_verbose","flagMessage","_this9","dirtyOnly","record","getJsonRow","_this10","_this11","handleClickAddRowTable","_rowBlank","attrIdRowObject","cloneNode","countRows","initialiseRowNew","prepend","postInitialiseRowNewCallback","_this12","cacheRowBlank","selectorRowNew","flagRowNew","rowBlankTemp","initialiseSliderDisplayOrderRowNew","slidersDisplayOrder","flagDisplayOrder","flagSlider","maxDisplayOrder","slider","Math","max","sliderDisplayOrder","hookupSlidersDisplayOrderTable","selectorDisplayOrder","hookupChangeHandlerTableCells","inputSelector","_this13","handleChangeNestedElementCellTable","input","wasDirtyParentRows","getAllIsDirtyRowsInParentTree","wasDirtyElement","isDirtyElement","cascadeChangedIsDirtyNestedElementCellTable","tr","isDirtyRow","wasDirtyRow","shift","hookupChangeHandlerTableCellsWhenNotCollapsed","_this14","hookupFieldsCodeTable","flagCode","hookupFieldsNameTable","hookupFieldsDescriptionTable","flagDescription","hookupFieldsNotesTable","flagNotes","hookupFieldsActive","_this15","flagTable","handleClickRowNew","selectorButton","selectorButtonDelete","selectorButtonUndelete","hookupButtonsRowDelete","hookupButtonsRowUndelete","_this16","changeHandler","handleClickButtonRowDelete","changeEvent","changeElement","_this17","valuePrevious","wasDirty","parentNode","removeChild","buttonAddTemplate","idContainerTemplateElements","flagAdd","buttonAdd","replaceWith","_this18","handleClickButtonRowUndelete","_this19","buttonDeleteTemplate","buttonDelete","hookupTdsAccessLevel","hookupTableCellDdlPreviews","flagAccessLevel","accessLevels","fieldFlag","optionList","_this20","cellSelector","ddlHookup","ddlSelector","handleClickTableCellDdlPreview","_this21","optionObjectList","_this22","idSelected","td","ddl","optionObjectJson","toggleColumnCollapsed","flagColumn","isCollapsed","toggleColumnHasClassnameFlag","toggleColumnHeaderCollapsed","hookupFieldsCommandCategory","_this23","filterCommandCategories","hookupCommandCategoryDdls","_this24","handleChangeCommandCategoryDdl","ddlCategory","idCommandCategoryRowOld","getIdCommandCategoryRow","idCommandCategoryRowNew","idCommandCategoryFilter","getIdCommandCategoryFilter","tdCommand","ddlCommand","hookupFieldsCommand","_this25","parentTr","tdCommandCategory","idCommandCategoryRow","filterCommandList","elementCommandCategory","commandCategoryFilter","commandFilter","valueCurrentCommandCategoryFilter","valueCurrentCommandFilter","getHasCommandCategoryFilter","getIdCommandRow","elementCommand","getIdCommandFilter","idCommand","getHasCommandFilter","idCommandFilter","hookupFieldsDog","flagDog","filterDogs","getIdDogRow","elementDog","createTdActive","isActive","tdActive","buttonActive","columnFlag","isRequiredFlag","classnameFlag","columnTh","columnThHasFlag","toggleColumnHeaderHasClassnameFlag","isDirtyMainTable","DogMixinPage","pageCurrent","hookupLocalStorageDog","DogTableMixinPage","_DogMixinPage","hookupTable","PageDogCommandCategories","_TableBasePage","dogMixin","inputCode","inputName","jsonRow","PageDogCommands","inputHandSignalDefaultDescription","flagHandSignalDefaultDescription","inputCanHaveButton","flagCanHaveButton","inputNotes","newRows","newestRow","clickableElementsSelector","join","clickableElement","click","hookupTextareasHandSignalDefaultDescription","hookupFieldsCanHaveButton","PageDogDogCommandLinks","inputHandSignalDescription","flagHandSignalDescription","attrIdDogCommandLink","hookupTextareasHandSignalDescription","PageAccessibilityReport","hashPageAccessibilityReport","PageAccessibilityStatement","hashPageAccessibilityStatement","PageLicense","hashPageLicense","PagePrivacyPolicy","hashPagePrivacyPolicy","PageRetentionSchedule","hashPageDataRetentionSchedule","Router","pages","module","routes","loadPage","hashPage","PageClass","getClassPageFromHash","currentPage","pageJson","handlePopState","loadPageCurrent","history","pushState","navigateToUrl","appendHistory","loadPageBodyFromResponse","App","dom","setupEventListeners","start","handleGlobalClick","initPageCurrent","app","domReady","fn","readyState"],"sourceRoot":""}
\ No newline at end of file
diff --git a/static/js/api.js b/static/js/api.js
index 7d39f8b..23eeca4 100644
--- a/static/js/api.js
+++ b/static/js/api.js
@@ -98,4 +98,13 @@ export default class API {
return await API.request(hashSaveDogDogCommandLink, 'POST', dataRequest);
}
+ // Locations
+ static async saveLocations(locations, formFilters, comment) {
+ let dataRequest = {};
+ dataRequest[flagFormFilters] = DOM.convertForm2JSON(formFilters);
+ dataRequest[flagLocation] = locations;
+ dataRequest[flagComment] = comment;
+ return await API.request(hashSaveDogLocation, 'POST', dataRequest);
+ }
+
}
diff --git a/static/js/pages/base_table.js b/static/js/pages/base_table.js
index 4c1c2e1..22cacba 100644
--- a/static/js/pages/base_table.js
+++ b/static/js/pages/base_table.js
@@ -47,7 +47,7 @@ export default class TableBasePage extends BasePage {
} else {
let dataPage = this.getLocalStoragePage();
let filters = dataPage[flagFormFilters];
- let formFilters = this.getFormFilters();
+ let formFilters = TableBasePage.getFormFilters();
let filtersDefault = DOM.convertForm2JSON(formFilters);
if (!Validation.areEqualDicts(filters, filtersDefault)) {
this.callFilterTableContent();
@@ -84,14 +84,14 @@ export default class TableBasePage extends BasePage {
else {
svgElement.classList.add(flagIsChecked);
}
- return TableBasePage.isDirtyFilter(svgElement);
+ return this.handleChangeFilter(event, filterActive);
});
let filter = document.querySelector(filterSelector);
let filterValuePrevious = DOM.getElementValueCurrent(filter);
filter.setAttribute(attrValueCurrent, filterValuePrevious);
filter.setAttribute(attrValuePrevious, filterValuePrevious);
}
- hookupFilter(filterFlag, handler = (event, filter) => { return TableBasePage.isDirtyFilter(filter); }) {
+ hookupFilter(filterFlag, handler = (event, filter) => { return this.handleChangeFilter(event, filter); }) {
let filterSelector = idFormFilters + ' #' + filterFlag;
this.hookupEventHandler("change", filterSelector, handler);
let filter = document.querySelector(filterSelector);
@@ -99,31 +99,42 @@ export default class TableBasePage extends BasePage {
filter.setAttribute(attrValueCurrent, filterValuePrevious);
filter.setAttribute(attrValuePrevious, filterValuePrevious);
}
- static isDirtyFilter(filter) {
- let isDirty = DOM.updateAndCheckIsElementDirty(filter);
+ handleChangeFilter(event, filter) {
+ let isDirtyFilter = DOM.updateAndCheckIsElementDirty(filter);
+ let formFilters = TableBasePage.getFormFilters();
+ let areDirtyFilters = isDirtyFilter || DOM.hasDirtyChildrenContainer(formFilters);
let tbody = document.querySelector(idTableMain + ' tbody');
let rows = tbody.querySelectorAll(':scope > tr');
- let cancelButton = document.querySelector(idFormFilters + ' ' + idButtonCancel);
- let saveButton = document.querySelector(idFormFilters + ' ' + idButtonSave);
rows.forEach((row) => {
- if (isDirty && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);
- if (!isDirty && row.classList.contains(flagIsCollapsed)) row.classList.remove(flagIsCollapsed);
+ if (areDirtyFilters && !row.classList.contains(flagIsCollapsed)) row.classList.add(flagIsCollapsed);
+ if (!areDirtyFilters && row.classList.contains(flagIsCollapsed)) {
+ row.classList.remove(flagIsCollapsed);
+ let dirtyInputs = row.querySelectorAll('input.' + flagDirty);
+ dirtyInputs.forEach((dirtyInput) => {
+ dirtyInput.value = DOM.getElementAttributeValueCurrent(dirtyInput);
+ });
+ }
});
- if (isDirty) {
- // tbody.querySelectorAll('tr').forEach((tr) => { tr.remove(); });
+ if (areDirtyFilters) {
+ /*
+ tbody.querySelectorAll('tr').forEach((tr) => {
+ if (!DOM.hasDirtyChildrenContainer(tr)) tr.remove();
+ });
+ */
tbody.innerHTML = 'Press "Apply Filters" to refresh the table.
' + tbody.innerHTML;
if (!tbody.classList.contains(flagIsCollapsed)) tbody.classList.add(flagIsCollapsed);
- if (!cancelButton.classList.contains(flagIsCollapsed)) cancelButton.classList.add(flagIsCollapsed);
- if (!saveButton.classList.contains(flagIsCollapsed)) saveButton.classList.add(flagIsCollapsed);
}
else {
- if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);
- if (cancelButton.classList.contains(flagIsCollapsed)) cancelButton.classList.remove(flagIsCollapsed);
- if (saveButton.classList.contains(flagIsCollapsed)) saveButton.classList.remove(flagIsCollapsed);
let isDirtyLabel = tbody.querySelector(":scope > div");
if (isDirtyLabel != null) isDirtyLabel.remove();
+ if (tbody.classList.contains(flagIsCollapsed)) tbody.classList.remove(flagIsCollapsed);
+ let initialisedElements = tbody.querySelectorAll('.' + flagInitialised);
+ initialisedElements.forEach((initialisedElement) => {
+ initialisedElement.classList.remove(flagInitialised);
+ });
+ this.hookupTableMain();
}
- return isDirty;
+ this.updateAndToggleShowButtonsSaveCancel();
}
hookupFilterIsNotEmpty() {
this.hookupFilter(flagIsNotEmpty);
@@ -142,7 +153,7 @@ export default class TableBasePage extends BasePage {
}
hookupFilterCommandCategory() {
this.hookupFilter(attrIdCommandCategory, (event, filterCommandCategory) => {
- TableBasePage.isDirtyFilter(filterCommandCategory);
+ this.handleChangeFilter();
let isDirtyFilter = filterCommandCategory.classList.contains(flagDirty);
let idCommandCategory = DOM.getElementValueCurrent(filterCommandCategory);
console.log("filter commands unsorted");
@@ -173,11 +184,11 @@ export default class TableBasePage extends BasePage {
.catch(error => console.error('Error:', error));
}
*/
- getFormFilters() {
+ static getFormFilters() {
return document.querySelector(idFormFilters);
}
callFilterTableContent() {
- let formFilters = this.getFormFilters();
+ let formFilters = TableBasePage.getFormFilters();
let filtersJson = DOM.convertForm2JSON(formFilters);
Utils.consoleLogIfNotProductionEnvironment("callFilterTableContent");
Utils.consoleLogIfNotProductionEnvironment("formFilters");
@@ -223,7 +234,7 @@ export default class TableBasePage extends BasePage {
OverlayError.show('No records to save');
return;
}
- let formElement = this.getFormFilters();
+ let formElement = TableBasePage.getFormFilters();
let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));
/*
Utils.consoleLogIfNotProductionEnvironment({ formElement, comment, records });
@@ -266,7 +277,7 @@ export default class TableBasePage extends BasePage {
OverlayError.show('No records to save');
return;
}
- let formElement = this.getFormFilters();
+ let formElement = TableBasePage.getFormFilters();
let comment = DOM.getElementValueCurrent(document.querySelector(idTextareaConfirm));
this.callSaveTableContent(records, formElement, comment)
.then(data => {
@@ -703,7 +714,7 @@ export default class TableBasePage extends BasePage {
return DOM.getElementAttributeValueCurrent(elementCommandCategory);
}
getIdCommandCategoryFilter() {
- let formFilters = this.getFormFilters();
+ let formFilters = TableBasePage.getFormFilters();
let commandCategoryFilter = formFilters.querySelector('#' + attrIdCommandCategory);
let commandFilter = formFilters.querySelector('#' + attrIdCommand);
let idCommandCategory = 0;
@@ -730,7 +741,7 @@ export default class TableBasePage extends BasePage {
return DOM.getElementAttributeValueCurrent(elementCommand);
}
getIdCommandFilter() {
- let formFilters = this.getFormFilters();
+ let formFilters = TableBasePage.getFormFilters();
let commandFilter = formFilters.querySelector('#' + attrIdCommand);
let valueCurrentCommandFilter = DOM.getElementAttributeValueCurrent(commandFilter);
let idCommand = Number(valueCurrentCommandFilter);
@@ -765,7 +776,7 @@ export default class TableBasePage extends BasePage {
throw new Error("Must implement leave() method.");
}
super.leave();
- let formFilters = this.getFormFilters();
+ let formFilters = TableBasePage.getFormFilters();
let dataPage = {};
dataPage[flagFormFilters] = DOM.convertForm2JSON(formFilters);
this.setLocalStoragePage(dataPage);
@@ -786,7 +797,11 @@ export default class TableBasePage extends BasePage {
updateAndToggleShowButtonsSaveCancel() {
let records = this.getTableRecords(true);
- let existsDirtyRecord = records.length > 0;
- this.toggleShowButtonsSaveCancel(existsDirtyRecord);
+ let isDirtyMainTable = records.length > 0;
+
+ let formFilters = TableBasePage.getFormFilters();
+ let areDirtyFilters = DOM.hasDirtyChildrenContainer(formFilters);
+
+ this.toggleShowButtonsSaveCancel(isDirtyMainTable && !areDirtyFilters);
}
}
diff --git a/static/js/pages/dog/command_categories.js b/static/js/pages/dog/command_categories.js
index 5407877..c6fe5ea 100644
--- a/static/js/pages/dog/command_categories.js
+++ b/static/js/pages/dog/command_categories.js
@@ -38,10 +38,8 @@ export default class PageDogCommandCategories extends TableBasePage {
let inputName = row.querySelector('td.' + flagName + ' .' + flagName);
let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
- /*
- console.log("inputName");
- console.log(inputName);
- */
+ console.log("inputCode");
+ console.log(inputCode);
let jsonRow = {};
jsonRow[attrIdCommandCategory] = row.getAttribute(attrIdCommandCategory);
diff --git a/static/js/pages/dog/locations.js b/static/js/pages/dog/locations.js
new file mode 100644
index 0000000..108c6db
--- /dev/null
+++ b/static/js/pages/dog/locations.js
@@ -0,0 +1,83 @@
+
+import API from "../../api.js";
+import BusinessObjects from "../../lib/business_objects/business_objects.js";
+import DOM from "../../dom.js";
+import Events from "../../lib/events.js";
+import TableBasePage from "../base_table.js";
+import Utils from "../../lib/utils.js";
+import Validation from "../../lib/validation.js";
+import DogTableMixinPage from "./mixin_table.js";
+
+export default class PageDogLocations extends TableBasePage {
+ static hash = hashPageDogLocations;
+ static attrIdRowObject = attrIdLocation;
+ callSaveTableContent = API.saveLocations;
+
+ constructor(router) {
+ super(router);
+ this.dogMixin = new DogTableMixinPage(this);
+ }
+
+ initialize() {
+ this.sharedInitialize();
+ }
+
+ hookupFilters() {
+ this.sharedHookupFilters();
+ this.hookupFilterActive();
+ }
+
+ loadRowTable(rowJson) {
+ if (rowJson == null) return;
+ if (_verbose) { Utils.consoleLogIfNotProductionEnvironment("applying data row: ", rowJson); }
+ }
+ getJsonRow(row) {
+ if (row == null) return;
+ let inputName = row.querySelector('td.' + flagName + ' .' + flagName);
+ let buttonActive = row.querySelector('td.' + flagActive + ' .' + flagActive);
+
+ let jsonRow = {};
+ jsonRow[attrIdLocation] = row.getAttribute(attrIdLocation);
+ jsonRow[flagLocationParent] = this.getIdLocationParentRow(row);
+ jsonRow[flagName] = DOM.getElementAttributeValueCurrent(inputName);
+ jsonRow[flagActive] = buttonActive.classList.contains(flagDelete);
+ return jsonRow;
+ }
+ getIdLocationParentRow(row) {
+ let elementLocationParent = row.querySelector('td.' + flagLocationParent + ' .' + flagLocationParent);
+ return DOM.getElementAttributeValueCurrent(elementLocationParent);
+ }
+ initialiseRowNew(tbody, row) {
+
+ }
+ postInitialiseRowNewCallback(tbody) {
+ let newRows = tbody.querySelectorAll('tr.' + flagRowNew);
+ let newestRow = newRows[0];
+ let clickableElementsSelector = [
+ 'td.' + flagDog + ' div.' + flagDog
+ , ',td.' + flagLocationCategory + ' div.' + flagLocationCategory
+ , ',td.' + flagLocation + ' div.' + flagLocation
+ ].join('');
+ newestRow.querySelectorAll(clickableElementsSelector).forEach((clickableElement) => {
+ clickableElement.click();
+ });
+ }
+
+ hookupTableMain() {
+ super.hookupTableMain();
+ this.hookupFieldsLocationCategory();
+ this.hookupFieldsNameTable();
+ this.hookupFieldsActive();
+ }
+ hookupFieldsLocationParent() {
+ this.hookupTableCellDdlPreviews(
+ flagLocationParent
+ , Utils.getListFromDict(locations)
+ );
+ }
+
+ leave() {
+ super.leave();
+ }
+}
+
diff --git a/static/js/router.js b/static/js/router.js
index ecb263e..9647ee1 100644
--- a/static/js/router.js
+++ b/static/js/router.js
@@ -8,6 +8,7 @@ import PageDogCommandCategories from './pages/dog/command_categories.js';
import PageDogCommands from './pages/dog/commands.js';
import PageDogDogCommandLinks from './pages/dog/dog_command_links.js';
// import PageDogDogs from './pages/dog/dogs.js';
+import PageDogLocations from './pages/dog/locations.js';
// Legal
import PageAccessibilityReport from './pages/legal/accessibility_report.js';
import PageAccessibilityStatement from './pages/legal/accessibility_statement.js';
@@ -36,6 +37,7 @@ export default class Router {
this.pages[hashPageDogCommands] = { name: 'PageDogCommands', module: PageDogCommands };
this.pages[hashPageDogDogCommandLinks] = { name: 'PageDogDogCommandLinks', module: PageDogDogCommandLinks };
// this.pages[hashPageDogDogs] = { name: 'PageDogDogs', module: PageDogDogs };
+ this.pages[hashPageDogLocations] = { name: 'PageDogLocations', module: PageDogLocations };
// Legal
this.pages[hashPageAccessibilityStatement] = { name: 'PageAccessibilityStatement', module: PageAccessibilityStatement };
this.pages[hashPageDataRetentionSchedule] = { name: 'PageDataRetentionSchedule', module: PageRetentionSchedule };
@@ -55,6 +57,7 @@ export default class Router {
this.routes[hashPageDogCommands] = (isPopState = false) => this.navigateToHash(hashPageDogCommands, isPopState);
this.routes[hashPageDogDogCommandLinks] = (isPopState = false) => this.navigateToHash(hashPageDogDogCommandLinks, isPopState);
// this.routes[hashPageDogDogs] = (isPopState = false) => this.navigateToHash(hashPageDogDogs, isPopState);
+ this.routes[hashPageDogLocations] = (isPopState = false) => this.navigateToHash(hashPageDogLocations, isPopState);
// Legal
this.routes[hashPageAccessibilityStatement] = (isPopState = false) => this.navigateToHash(hashPageAccessibilityStatement, isPopState);
this.routes[hashPageDataRetentionSchedule] = (isPopState = false) => this.navigateToHash(hashPageDataRetentionSchedule, isPopState);
diff --git a/templates/components/dog/_preview_DDL_location.html b/templates/components/dog/_preview_DDL_location.html
new file mode 100644
index 0000000..72f0f67
--- /dev/null
+++ b/templates/components/dog/_preview_DDL_location.html
@@ -0,0 +1,7 @@
+
+{% with _attribute_text = '' if (attribute_text is not defined or attribute_text is none) else attribute_text %}
+ {% set value_previous = '0' if is_blank_row else location_preview.id_location %}
+ {% set text_previous = '' if is_blank_row else location_preview.name %}
+
+ {{ text_previous }}
+{% endwith %}
\ No newline at end of file
diff --git a/templates/components/dog/_row_location.html b/templates/components/dog/_row_location.html
new file mode 100644
index 0000000..e62fdd4
--- /dev/null
+++ b/templates/components/dog/_row_location.html
@@ -0,0 +1,33 @@
+
+{% if is_blank_row %}
+
+
+ {% set attribute_text = model.FLAG_LOCATION_PARENT %}
+ {% include 'components/dog/_preview_DDL_location.html' %}
+
+
+
+
+ {% set active = True %}
+ {% include 'components/dog/_td_active.html' %}
+
+{% else %}
+
+ {% set location_preview = location.location_parent %}
+
+ {% set attribute_text = model.FLAG_LOCATION_PARENT %}
+ {% include 'components/dog/_preview_DDL_location.html' %}
+
+
+
+
+ {% set active = location.active %}
+ {% include 'components/dog/_td_active.html' %}
+
+{% endif %}
diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html
index af914b6..880a9fa 100644
--- a/templates/layouts/layout.html
+++ b/templates/layouts/layout.html
@@ -42,6 +42,7 @@
var attrIdCommandCategory = "{{ model.ATTR_ID_COMMAND_CATEGORY }}";
var attrIdDog = "{{ model.ATTR_ID_DOG }}";
var attrIdDogCommandLink = "{{ model.ATTR_ID_DOG_COMMAND_LINK }}";
+ var attrIdLocation = "{{ model.ATTR_ID_LOCATION }}";
var attrTextCollapsed = "{{ model.ATTR_TEXT_COLLAPSED }}";
var attrTextExpanded = "{{ model.ATTR_TEXT_EXPANDED }}";
var attrValueCurrent = "{{ model.ATTR_VALUE_CURRENT }}";
@@ -85,7 +86,6 @@
var flagCommand = "{{ model.FLAG_COMMAND }}";
var flagCommandCategory = "{{ model.FLAG_COMMAND_CATEGORY }}";
var flagComment = "{{ model.FLAG_COMMENT }}";
- // var flagContactUs = "{{ model.FLAG_CONTACT_US }}";
var flagContainer = "{{ model.FLAG_CONTAINER }}";
var flagContainerInput = "{{ model.FLAG_CONTAINER_INPUT }}";
var flagCounty = "{{ model.FLAG_COUNTY }}";
@@ -114,9 +114,9 @@
var flagInitialised = "{{ model.FLAG_INITIALISED }}";
var flagIsChecked = "{{ model.FLAG_IS_CHECKED }}";
var flagIsCollapsed = "{{ model.FLAG_IS_COLLAPSED }}";
- // var flagItems = "{{ model.FLAG_ITEMS }}";
- // var flagKeyPrimary = "{{ model.FLAG_KEY_PRIMARY }}";
var flagLeftHandStub = "{{ model.FLAG_LEFT_HAND_STUB }}";
+ var flagLocation = "{{ model.FLAG_LOCATION }}";
+ var flagLocationParent = "{{ model.FLAG_LOCATION_PARENT }}";
var flagLogo = "{{ model.FLAG_LOGO }}";
var flagMessage = "{{ model.FLAG_MESSAGE }}";
var flagModal = "{{ model.FLAG_MODAL }}";
@@ -125,7 +125,6 @@
var flagNameAttrOptionText = "{{ model.FLAG_NAME_ATTR_OPTION_TEXT}}";
var flagNameAttrOptionValue = "{{ model.FLAG_NAME_ATTR_OPTION_VALUE }}";
var flagNamePlural = "{{ model.FLAG_NAME_PLURAL }}";
- {# var flagNameSingular = "{{ model.FLAG_NAME_SINGULAR }}"; #}
var flagNavAdminHome = "{{ model.FLAG_NAV_ADMIN_HOME }}";
var flagNavContact = "{{ model.FLAG_NAV_CONTACT }}";
var flagNavHome = "{{ model.FLAG_NAV_HOME }}";
@@ -172,6 +171,7 @@
var hashPageDogDogCommandLinks = "{{ model.HASH_PAGE_DOG_DOG_COMMAND_LINKS }}";
var hashPageDogDogs = "{{ model.HASH_PAGE_DOG_DOGS }}";
var hashPageDogHome = "{{ model.HASH_PAGE_DOG_HOME }}";
+ var hashPageDogLocations = "{{ model.HASH_PAGE_DOG_LOCATIONS }}";
var hashPageErrorNoPermission = "{{ model.HASH_PAGE_ERROR_NO_PERMISSION }}";
var hashPageHome = "{{ model.HASH_PAGE_HOME }}";
var hashPageLicense = "{{ model.HASH_PAGE_LICENSE }}";
@@ -183,6 +183,7 @@
var hashSaveDogCommand = "{{ model.HASH_SAVE_DOG_COMMAND }}";
var hashSaveDogCommandCategory = "{{ model.HASH_SAVE_DOG_COMMAND_CATEGORY }}";
var hashSaveDogDogCommandLink = "{{ model.HASH_SAVE_DOG_DOG_COMMAND_LINK }}";
+ var hashSaveDogLocation = "{{ model.HASH_SAVE_DOG_LOCATION }}";
var idButtonApplyFilters = "#{{ model.ID_BUTTON_APPLY_FILTERS }}";
var idButtonHamburger = "#{{ model.ID_BUTTON_HAMBURGER }}";
var idButtonCancel = "#{{ model.ID_BUTTON_CANCEL }}";
diff --git a/templates/pages/dog/_locations.html b/templates/pages/dog/_locations.html
new file mode 100644
index 0000000..e3673f1
--- /dev/null
+++ b/templates/pages/dog/_locations.html
@@ -0,0 +1,74 @@
+{% extends 'layouts/layout.html' %}
+
+{% block page_body %}
+
+
+
+
+
+
+
+ Parent
+ Name
+
+ {% set class_name = model.FLAG_ACTIVE %}
+ {% set attribute_text = '' %}
+ {% include 'components/common/buttons/_icon_add.html' %}
+
+
+
+
+ {% set is_blank_row = False %}
+ {% for location in model.locations %}
+ {% include 'components/dog/_row_location.html' %}
+ {% endfor %}
+
+ {% set is_blank_row = True %}
+ {% include 'components/dog/_row_location.html' %}
+
+
+
+ {% include 'components/common/temporary/_overlay_confirm.html' %}
+ {% include 'components/common/temporary/_overlay_error.html' %}
+
+
+
+
+ {% set class_name = '' %}
+ {% include 'components/common/buttons/_icon_trash.html' %}
+
+ {% set class_name = model.FLAG_ACTIVE %}
+ {% set attribute_text = '' %}
+ {% include 'components/common/buttons/_icon_add.html' %}
+
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/todo.txt b/todo.txt
index a9aa25e..fe5e127 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,8 +1,23 @@
-Command list random generator for assessment - and any other variables e.g. location, handler
+Features:
+- Command list random generator for assessment - and any other variables e.g. location, handler
+- Last tested
+- Print page option on Dog Command Links Page, Assessment-single Page for test sessions, giving the dog to another handler temporarily - give view only access
+- UI warning for attempt to create duplicate
+- Add Button management to Command page
+- Add Command management to Command Category page
+- Reporting
+ - Buttons by category, command
+ - Assessment results by category, command
+- Reminders / calendar sync
+- Dietary and medical appointments and notes tracking
+- Sample trigger sounds
+- Training videos for commands
+- Timer / stopwatch functionality
+- Hamburger menu links for local website subsection
+- Info icon and popup for page purpose on page and against links to page
-Last tested
-Print page option on Dog Command Links Page, Assessment-single Page for test sessions, giving the dog to another handler temporarily - give view only access
+Fix:
+- formFilters - centre columns on flex
-UI warning for attempt to create duplicate
diff --git a/webpack.config.js b/webpack.config.js
index 91cef25..2836316 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -81,6 +81,10 @@ module.exports = {
path.resolve(__dirname, 'static/css/sections/dog.css'),
path.resolve(__dirname, 'static/css/pages/dog/dog_command_links.css')
],
+ dog_locations: [
+ path.resolve(__dirname, 'static/css/sections/location.css'),
+ path.resolve(__dirname, 'static/css/pages/dog/locations.css')
+ ],
},
output: {
filename: 'js/[name].bundle.js',