adds check all checkbox
This commit is contained in:
7
app/static/common.js
Normal file
7
app/static/common.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
function checkAllCheckboxes(tableId, checkAllCheckboxId) {
|
||||||
|
const table = document.getElementById(tableId);
|
||||||
|
const checkboxes = table.querySelectorAll('input[type="checkbox"]');
|
||||||
|
const checkAllCheckbox = document.getElementById(checkAllCheckboxId);
|
||||||
|
|
||||||
|
checkboxes.forEach(checkbox => checkbox.checked = checkAllCheckbox.checked);
|
||||||
|
}
|
||||||
@@ -94,11 +94,3 @@ function sortTable(columnIndex, tableId) {
|
|||||||
// Reinsert sorted rows
|
// Reinsert sorted rows
|
||||||
rows.forEach(row => tbody.appendChild(row));
|
rows.forEach(row => tbody.appendChild(row));
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkAllCheckboxes(tableId, checkAllCheckboxId) {
|
|
||||||
const table = document.getElementById(tableId);
|
|
||||||
const checkboxes = table.querySelectorAll('input[name="fileCheckbox"]');
|
|
||||||
const checkAllCheckbox = document.getElementById(checkAllCheckboxId);
|
|
||||||
|
|
||||||
checkboxes.forEach(checkbox => checkbox.checked = checkAllCheckbox.checked);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -29,10 +29,10 @@
|
|||||||
|
|
||||||
<!-- Analysis Selection Table -->
|
<!-- Analysis Selection Table -->
|
||||||
<label for="analyses" class="form-label">Select Analyses:</label>
|
<label for="analyses" class="form-label">Select Analyses:</label>
|
||||||
<table class="table table-bordered table-striped">
|
<table id="analysesTable" class="table table-bordered table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Select</th>
|
<th width="2%"><input type="checkbox" id="checkAllAnalyses" class="form-check-input" onclick="checkAllCheckboxes('analysesTable', 'checkAllAnalyses')"></th>
|
||||||
<th>Analysis Name</th>
|
<th>Analysis Name</th>
|
||||||
<th>Description</th>
|
<th>Description</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<table id="dataFilesTable" class="table table-striped table-bordered table-hover">
|
<table id="dataFilesTable" class="table table-striped table-bordered table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th width="2%"><input type="checkbox" id="checkAllData" onclick="checkAllCheckboxes('dataFilesTable', 'checkAllData')"></th>
|
<th width="2%"><input type="checkbox" class="form-check-input" id="checkAllData" onclick="checkAllCheckboxes('dataFilesTable', 'checkAllData')"></th>
|
||||||
<th onclick="sortTable(1, 'dataFilesTable')">File Name</th>
|
<th onclick="sortTable(1, 'dataFilesTable')">File Name</th>
|
||||||
<th onclick="sortTable(2, 'dataFilesTable')">Last Modified</th>
|
<th onclick="sortTable(2, 'dataFilesTable')">Last Modified</th>
|
||||||
<th onclick="sortTable(3, 'dataFilesTable')">Created</th>
|
<th onclick="sortTable(3, 'dataFilesTable')">Created</th>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{% for file in files.data %}
|
{% for file in files.data %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="checkbox" name="fileCheckbox" value="{{ url_for('download_data_file', filename=file.name_display) }}"{{ ' disabled' if file.active }}></td>
|
<td><input type="checkbox" name="fileCheckbox" class="form-check-input" value="{{ url_for('download_data_file', filename=file.name_display) }}"{{ ' disabled' if file.active }}></td>
|
||||||
<td><a href="{{ url_for('download_data_file', filename=file.name_display) }}" target="_blank">{{ file.name_display }}</a></td>
|
<td><a href="{{ url_for('download_data_file', filename=file.name_display) }}" target="_blank">{{ file.name_display }}</a></td>
|
||||||
<td>{{ file.last_modified | datetimeformat }}</td>
|
<td>{{ file.last_modified | datetimeformat }}</td>
|
||||||
<td>{{ file.created | datetimeformat }}</td>
|
<td>{{ file.created | datetimeformat }}</td>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{% for file in files.log %}
|
{% for file in files.log %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><input type="checkbox" name="fileCheckbox" value="{{ url_for('download_log_file', filename=file.name_display) }}"{{ ' disabled' if file.active }}></td>
|
<td><input type="checkbox" name="fileCheckbox" class="form-check-input" value="{{ url_for('download_log_file', filename=file.name_display) }}"{{ ' disabled' if file.active }}></td>
|
||||||
<td><a href="{{ url_for('download_log_file', filename=file.name_display) }}" target="_blank">{{ file.name_display }}</a></td>
|
<td><a href="{{ url_for('download_log_file', filename=file.name_display) }}" target="_blank">{{ file.name_display }}</a></td>
|
||||||
<td>{{ file.last_modified | datetimeformat }}</td>
|
<td>{{ file.last_modified | datetimeformat }}</td>
|
||||||
<td>{{ file.created | datetimeformat }}</td>
|
<td>{{ file.created | datetimeformat }}</td>
|
||||||
@@ -98,8 +98,5 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
{% block scripts %}
|
|
||||||
{{ bootstrap.load_js() }}
|
|
||||||
<script src="{{url_for('.static', filename='download_results.js')}}"></script>
|
<script src="{{url_for('.static', filename='download_results.js')}}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% endblock content %}
|
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
{{ bootstrap.load_js() }}
|
{{ bootstrap.load_js() }}
|
||||||
<script src="{{url_for('static', filename='color_mode.js')}}"></script>
|
<script src="{{url_for('static', filename='color_mode.js')}}"></script>
|
||||||
|
<script src="{{ url_for('static', filename='common.js') }}"></script>
|
||||||
|
|||||||
@@ -113,7 +113,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 61,
|
"execution_count": 69,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@@ -144,6 +144,7 @@
|
|||||||
" <th>timestamp</th>\n",
|
" <th>timestamp</th>\n",
|
||||||
" <th>prev_timestamp</th>\n",
|
" <th>prev_timestamp</th>\n",
|
||||||
" <th>was_active</th>\n",
|
" <th>was_active</th>\n",
|
||||||
|
" <th>hour</th>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" </thead>\n",
|
" </thead>\n",
|
||||||
" <tbody>\n",
|
" <tbody>\n",
|
||||||
@@ -156,6 +157,7 @@
|
|||||||
" <td>2025-02-08 18:09:41.867984056</td>\n",
|
" <td>2025-02-08 18:09:41.867984056</td>\n",
|
||||||
" <td>NaT</td>\n",
|
" <td>NaT</td>\n",
|
||||||
" <td>False</td>\n",
|
" <td>False</td>\n",
|
||||||
|
" <td>18</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>1</th>\n",
|
" <th>1</th>\n",
|
||||||
@@ -166,6 +168,7 @@
|
|||||||
" <td>2025-02-08 18:09:42.427846909</td>\n",
|
" <td>2025-02-08 18:09:42.427846909</td>\n",
|
||||||
" <td>NaT</td>\n",
|
" <td>NaT</td>\n",
|
||||||
" <td>False</td>\n",
|
" <td>False</td>\n",
|
||||||
|
" <td>18</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>2</th>\n",
|
" <th>2</th>\n",
|
||||||
@@ -176,6 +179,7 @@
|
|||||||
" <td>2025-02-08 18:09:42.823201895</td>\n",
|
" <td>2025-02-08 18:09:42.823201895</td>\n",
|
||||||
" <td>NaT</td>\n",
|
" <td>NaT</td>\n",
|
||||||
" <td>False</td>\n",
|
" <td>False</td>\n",
|
||||||
|
" <td>18</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>3</th>\n",
|
" <th>3</th>\n",
|
||||||
@@ -186,6 +190,7 @@
|
|||||||
" <td>2025-02-08 18:09:43.179914951</td>\n",
|
" <td>2025-02-08 18:09:43.179914951</td>\n",
|
||||||
" <td>NaT</td>\n",
|
" <td>NaT</td>\n",
|
||||||
" <td>False</td>\n",
|
" <td>False</td>\n",
|
||||||
|
" <td>18</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" <tr>\n",
|
" <tr>\n",
|
||||||
" <th>4</th>\n",
|
" <th>4</th>\n",
|
||||||
@@ -196,6 +201,7 @@
|
|||||||
" <td>2025-02-08 18:09:43.434650898</td>\n",
|
" <td>2025-02-08 18:09:43.434650898</td>\n",
|
||||||
" <td>NaT</td>\n",
|
" <td>NaT</td>\n",
|
||||||
" <td>False</td>\n",
|
" <td>False</td>\n",
|
||||||
|
" <td>18</td>\n",
|
||||||
" </tr>\n",
|
" </tr>\n",
|
||||||
" </tbody>\n",
|
" </tbody>\n",
|
||||||
"</table>\n",
|
"</table>\n",
|
||||||
@@ -209,15 +215,15 @@
|
|||||||
"3 2208384 Volfywolf 2025-02-06 23:57:24 Okay \n",
|
"3 2208384 Volfywolf 2025-02-06 23:57:24 Okay \n",
|
||||||
"4 2521738 LordGrim69 2025-02-06 06:33:40 Okay \n",
|
"4 2521738 LordGrim69 2025-02-06 06:33:40 Okay \n",
|
||||||
"\n",
|
"\n",
|
||||||
" timestamp prev_timestamp was_active \n",
|
" timestamp prev_timestamp was_active hour \n",
|
||||||
"0 2025-02-08 18:09:41.867984056 NaT False \n",
|
"0 2025-02-08 18:09:41.867984056 NaT False 18 \n",
|
||||||
"1 2025-02-08 18:09:42.427846909 NaT False \n",
|
"1 2025-02-08 18:09:42.427846909 NaT False 18 \n",
|
||||||
"2 2025-02-08 18:09:42.823201895 NaT False \n",
|
"2 2025-02-08 18:09:42.823201895 NaT False 18 \n",
|
||||||
"3 2025-02-08 18:09:43.179914951 NaT False \n",
|
"3 2025-02-08 18:09:43.179914951 NaT False 18 \n",
|
||||||
"4 2025-02-08 18:09:43.434650898 NaT False "
|
"4 2025-02-08 18:09:43.434650898 NaT False 18 "
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 61,
|
"execution_count": 69,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
@@ -229,6 +235,7 @@
|
|||||||
" df[\"prev_timestamp\"] = df.groupby(\"user_id\")[\"timestamp\"].shift(1)\n",
|
" df[\"prev_timestamp\"] = df.groupby(\"user_id\")[\"timestamp\"].shift(1)\n",
|
||||||
" df[\"was_active\"] = (df[\"timestamp\"] - df[\"last_action\"]) <= pd.Timedelta(seconds=60)\n",
|
" df[\"was_active\"] = (df[\"timestamp\"] - df[\"last_action\"]) <= pd.Timedelta(seconds=60)\n",
|
||||||
" df[\"was_active\"] = df[\"was_active\"].fillna(False)\n",
|
" df[\"was_active\"] = df[\"was_active\"].fillna(False)\n",
|
||||||
|
" df['hour'] = df['timestamp'].dt.hour\n",
|
||||||
" return df\n",
|
" return df\n",
|
||||||
"\n",
|
"\n",
|
||||||
"df = prepare_data(df)\n",
|
"df = prepare_data(df)\n",
|
||||||
@@ -269,7 +276,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 63,
|
"execution_count": null,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@@ -284,9 +291,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"# Extract the hour from the 'timestamp' column\n",
|
|
||||||
"df['hour'] = df['timestamp'].dt.hour\n",
|
|
||||||
"\n",
|
|
||||||
"# Filter for active users and create a pivot table\n",
|
"# Filter for active users and create a pivot table\n",
|
||||||
"active_counts = df[df['was_active'] == True].pivot_table(index='name', columns='hour', values='was_active', aggfunc='sum', fill_value=0)\n",
|
"active_counts = df[df['was_active'] == True].pivot_table(index='name', columns='hour', values='was_active', aggfunc='sum', fill_value=0)\n",
|
||||||
"active_counts['total_active_minutes'] = active_counts.sum(axis=1)\n",
|
"active_counts['total_active_minutes'] = active_counts.sum(axis=1)\n",
|
||||||
@@ -303,7 +307,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 64,
|
"execution_count": null,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@@ -342,6 +346,7 @@
|
|||||||
"plt.ylabel('Activity Count')\n",
|
"plt.ylabel('Activity Count')\n",
|
||||||
"plt.title('User Activity Throughout the Day')\n",
|
"plt.title('User Activity Throughout the Day')\n",
|
||||||
"plt.legend(loc='upper left', bbox_to_anchor=(1, 1))\n",
|
"plt.legend(loc='upper left', bbox_to_anchor=(1, 1))\n",
|
||||||
|
" pd.DataFrame: The processed DataFrame with additional columns for analysis.\n",
|
||||||
"\n",
|
"\n",
|
||||||
"plt.grid(True)\n",
|
"plt.grid(True)\n",
|
||||||
"plt.show()\n"
|
"plt.show()\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user