mirror of
https://github.com/gchq/CyberChef.git
synced 2025-05-08 07:21:02 -04:00
[#181] add
This commit is contained in:
parent
f1257ea356
commit
5362f9fda4
9 changed files with 48 additions and 23 deletions
|
@ -451,6 +451,7 @@ class App {
|
||||||
this.loadFavourites();
|
this.loadFavourites();
|
||||||
this.populateOperationsList();
|
this.populateOperationsList();
|
||||||
this.manager.recipe.initialiseOperationDragNDrop();
|
this.manager.recipe.initialiseOperationDragNDrop();
|
||||||
|
this.manager.recipe.updateSelectedOperations();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -471,6 +472,7 @@ class App {
|
||||||
this.saveFavourites(favourites);
|
this.saveFavourites(favourites);
|
||||||
this.loadFavourites();
|
this.loadFavourites();
|
||||||
this.populateOperationsList();
|
this.populateOperationsList();
|
||||||
|
this.manager.recipe.updateSelectedOperations();
|
||||||
this.manager.recipe.initialiseOperationDragNDrop();
|
this.manager.recipe.initialiseOperationDragNDrop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -886,7 +888,7 @@ class App {
|
||||||
setMobileUI(){
|
setMobileUI(){
|
||||||
$("[data-toggle=tooltip]").tooltip("disable");
|
$("[data-toggle=tooltip]").tooltip("disable");
|
||||||
this.setMobileSplitter();
|
this.setMobileSplitter();
|
||||||
this.divideAvailableSpace();
|
this.assignAvailableHeight();
|
||||||
this.populateOperationsList();
|
this.populateOperationsList();
|
||||||
this.manager.recipe.updateSelectedOperations();
|
this.manager.recipe.updateSelectedOperations();
|
||||||
}
|
}
|
||||||
|
@ -902,12 +904,16 @@ class App {
|
||||||
* Be mindful to update these accordingly in the stylesheets
|
* Be mindful to update these accordingly in the stylesheets
|
||||||
* ( themes/_structure ) if you want to make changes.
|
* ( themes/_structure ) if you want to make changes.
|
||||||
*/
|
*/
|
||||||
divideAvailableSpace( isMobile ){
|
assignAvailableHeight( isMobile ){
|
||||||
const remainingSpace = window.innerHeight - (40+70+90-2); // banner, operations, controls height + borders
|
const remainingSpace = window.innerHeight - (40+70+90-2); // banner, operations, controls height
|
||||||
|
|
||||||
|
// equally divide among recipe, input and output
|
||||||
["recipe", "input", "output"].forEach(( div ) => {
|
["recipe", "input", "output"].forEach(( div ) => {
|
||||||
document.getElementById(div).style.height = `${remainingSpace/3}px`;
|
document.getElementById(div).style.height = `${remainingSpace/3}px`;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// set the ops-dropdown height
|
||||||
|
document.getElementById("operations-dropdown").style.maxHeight = `${remainingSpace}px`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,13 @@ class HTMLOperation {
|
||||||
html += "<i class='material-icons check-icon op-icon'>check</i>";
|
html += "<i class='material-icons check-icon op-icon'>check</i>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const favourites = JSON.parse(localStorage.favourites);
|
||||||
|
const isFavourite = favourites.includes(this.name);
|
||||||
|
|
||||||
|
html += `<i title="${this.name}" class='material-icons icon-add-favourite mobile-only star-icon op-icon ${isFavourite ? "fav-op" : ""}'>
|
||||||
|
${isFavourite ? "star" : "star_outline"}
|
||||||
|
</i>`
|
||||||
|
|
||||||
html += "</li>";
|
html += "</li>";
|
||||||
|
|
||||||
return html;
|
return html;
|
||||||
|
|
|
@ -155,6 +155,7 @@ class Manager {
|
||||||
document.getElementById("reset-favourites").addEventListener("click", this.ops.resetFavouritesClick.bind(this.ops));
|
document.getElementById("reset-favourites").addEventListener("click", this.ops.resetFavouritesClick.bind(this.ops));
|
||||||
this.addDynamicListener(".op-list", "oplistcreate", this.ops.opListCreate, this.ops);
|
this.addDynamicListener(".op-list", "oplistcreate", this.ops.opListCreate, this.ops);
|
||||||
this.addDynamicListener("li.operation", "operationadd", this.recipe.opAdd, this.recipe);
|
this.addDynamicListener("li.operation", "operationadd", this.recipe.opAdd, this.recipe);
|
||||||
|
this.addDynamicListener(".icon-add-favourite", "click", this.ops.onIconFavouriteClick, this.ops);
|
||||||
|
|
||||||
// Recipe
|
// Recipe
|
||||||
this.addDynamicListener(".arg:not(select)", "input", this.recipe.ingChange, this.recipe);
|
this.addDynamicListener(".arg:not(select)", "input", this.recipe.ingChange, this.recipe);
|
||||||
|
|
|
@ -4,26 +4,14 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
#### Mobile UI ( on real device ):
|
#### Mobile UI ( on real device ):
|
||||||
- need long press checks on mobile to add favourites ( recipe is done ) >
|
|
||||||
- check on window resizing
|
|
||||||
|
|
||||||
- shannon entropy thingies
|
- shannon entropy thingies
|
||||||
|
- maybe a bit annoying that the fav cat opens whenever you add a new fav via icon-fav-click on mobile
|
||||||
- backspace on fs view should close max view. Keep making the same mistake and navigating away when for instance recipe is expanded and double click the window to fs > resolve. Reset layout
|
- backspace on fs view should close max view. Keep making the same mistake and navigating away when for instance recipe is expanded and double click the window to fs > resolve. Reset layout
|
||||||
|
|
||||||
|
|
||||||
### Desktop UI:
|
|
||||||
### General UI:
|
|
||||||
- fix up key / tab events so UI can be navigated comfortably with keys ( inc. visual focus feedback ). Probably a lot of
|
|
||||||
work though
|
|
||||||
|
|
||||||
### JS:
|
### JS:
|
||||||
- `core/Recipe.mjs`, `core/lib/Magic.js` return imports to original
|
- `core/Recipe.mjs`, `core/lib/Magic.js` return imports to original
|
||||||
|
|
||||||
### Misc:
|
### Misc:
|
||||||
- Gruntfile revert dev config
|
- Gruntfile revert dev config
|
||||||
- check for lingering @TODO across code
|
|
||||||
- comb through CSS and improve organisation for better DevX. Ask repo owners to open another issue perhaps and just
|
|
||||||
redo all of the stylesheets ( preferably with SASS )
|
|
||||||
- delete this file when done :)
|
- delete this file when done :)
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.operation {
|
.operation {
|
||||||
cursor: grab;
|
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
list-style-type: none;
|
list-style-type: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -19,6 +18,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (min-width: 768px){
|
@media only screen and (min-width: 768px){
|
||||||
|
.operation {
|
||||||
|
cursor: grab;
|
||||||
|
}
|
||||||
|
|
||||||
/* never display check icons on desktop views */
|
/* never display check icons on desktop views */
|
||||||
.op-icon.check-icon {
|
.op-icon.check-icon {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -31,6 +34,20 @@
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*mobile only favourite icon in operation list*/
|
||||||
|
.icon-add-favourite {
|
||||||
|
float: left;
|
||||||
|
margin: 0 10px 0 0;
|
||||||
|
padding: 0;
|
||||||
|
color: var(--category-list-font-colour);
|
||||||
|
opacity: .5;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-add-favourite.fav-op {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
.op-icon.remove-icon {
|
.op-icon.remove-icon {
|
||||||
color: #f44336;
|
color: #f44336;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,10 +18,8 @@
|
||||||
top: 41px;
|
top: 41px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: auto;
|
height: auto;
|
||||||
max-height: 60vh;
|
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
z-index: 20; /* to dropdown on top of all the other elements */
|
z-index: 20; /* to dropdown on top of all the other elements */
|
||||||
border-bottom: 1px solid var(--primary-border-colour);
|
|
||||||
background-color: var(--secondary-background-colour);
|
background-color: var(--secondary-background-colour);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -451,7 +451,7 @@ ${navigator.userAgent}
|
||||||
pane.style.height = `${window.innerHeight - 40}px`;
|
pane.style.height = `${window.innerHeight - 40}px`;
|
||||||
} else {
|
} else {
|
||||||
if ( window.innerWidth < this.app.breakpoint ){
|
if ( window.innerWidth < this.app.breakpoint ){
|
||||||
this.app.divideAvailableSpace();
|
this.app.assignAvailableHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -325,7 +325,7 @@ class OperationsWaiter {
|
||||||
* Open operations dropdown
|
* Open operations dropdown
|
||||||
*/
|
*/
|
||||||
openOperationsDropdown(){
|
openOperationsDropdown(){
|
||||||
// 'close' ( dropdown ) icon in Operations component mobile UI
|
// the 'close' ( dropdown ) icon in Operations component mobile UI
|
||||||
const closeOperationsDropdown = document.getElementById("close-operations-dropdown");
|
const closeOperationsDropdown = document.getElementById("close-operations-dropdown");
|
||||||
const categories = document.getElementById("categories");
|
const categories = document.getElementById("categories");
|
||||||
|
|
||||||
|
@ -373,7 +373,15 @@ class OperationsWaiter {
|
||||||
*/
|
*/
|
||||||
resetFavouritesClick() {
|
resetFavouritesClick() {
|
||||||
this.app.resetFavourites();
|
this.app.resetFavourites();
|
||||||
this.manager.recipe.updateSelectedOperations();
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a favourite op, for mobile UI only
|
||||||
|
*
|
||||||
|
* @param {Event} e
|
||||||
|
*/
|
||||||
|
onIconFavouriteClick(e){
|
||||||
|
this.app.addFavourite(e.target.getAttribute("title"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -658,7 +658,7 @@ class RecipeWaiter {
|
||||||
* Note: It seems a little overkill, but with the current tightly coupled code this is
|
* Note: It seems a little overkill, but with the current tightly coupled code this is
|
||||||
* a reliable way to make sure the 'selected' operations are always in sync with
|
* a reliable way to make sure the 'selected' operations are always in sync with
|
||||||
* the recipe list ( I think this is preferable to complicating a lot of existing
|
* the recipe list ( I think this is preferable to complicating a lot of existing
|
||||||
* code ), I'd recommend to refactor this at one point, but that will mean a huge code
|
* code ), I'd recommend to refactor this at one point, but that would mean a huge code
|
||||||
* overhaul for another time / issue.
|
* overhaul for another time / issue.
|
||||||
*/
|
*/
|
||||||
updateSelectedOperations(){
|
updateSelectedOperations(){
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue