Skip to content

Commit f897e84

Browse files
committed
Temporal commit for issue #432
1 parent eae51e9 commit f897e84

File tree

5 files changed

+141
-42
lines changed

5 files changed

+141
-42
lines changed

src/gui/src/globals.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ window.is_auto_arrange_enabled = true;
231231
window.desktop_item_positions = {};
232232
window.reset_item_positions = true; // The variable decides if the item positions should be reset when the user enabled auto arrange
233233

234+
window.file_templates = []
235+
234236
// default language
235237
window.locale = 'en';
236238

src/gui/src/helpers.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,60 @@ window.create_file = async(options)=>{
837837
}
838838
}
839839

840+
window.available_templates = async () => {
841+
console.log(window.user.username)
842+
const baseRoute = `/${window.user.username}`
843+
const keywords = ["template", "templates", i18n('template')]
844+
//make sure all its lowercase
845+
const lowerCaseKeywords = keywords.map(keywords => keywords.toLowerCase())
846+
847+
//create file
848+
try{
849+
// search the folder name i18n("template"), "template" or "templates"
850+
const files = await puter.fs.readdir(baseRoute)
851+
852+
const hasTemplateFolder = files.find(file => lowerCaseKeywords.includes(file.name.toLowerCase()))
853+
console.log(hasTemplateFolder)
854+
855+
if(!hasTemplateFolder){
856+
console.log("No template folder")
857+
return []
858+
}
859+
860+
const hasTemplateFiles = await puter.fs.readdir(baseRoute + "/" + hasTemplateFolder.name)
861+
console.log(hasTemplateFiles)
862+
863+
if(hasTemplateFiles.length == 0) {
864+
console.log("There are no templates")
865+
return []
866+
}
867+
868+
let result = []
869+
870+
hasTemplateFiles.forEach(element => {
871+
console.log(element)
872+
const elementInformation = element.name.split(".")
873+
const name = elementInformation[0]
874+
let extension = elementInformation[1]
875+
console.log(extension)
876+
if(extension == "txt") extension = "text"
877+
const itemStructure = {
878+
html: `${extension.toUpperCase()} ${name}`,
879+
extension:extension,
880+
name: element.name
881+
}
882+
console.log(extension)
883+
result.push(itemStructure)
884+
});
885+
886+
// return result
887+
return result
888+
889+
} catch (err) {
890+
console.log(err)
891+
}
892+
}
893+
840894
window.create_shortcut = async(filename, is_dir, basedir, appendto_element, shortcut_to, shortcut_to_path)=>{
841895
let dirname = basedir;
842896
const extname = path.extname(filename);

src/gui/src/helpers/new_context_menu_item.js

Lines changed: 72 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -27,52 +27,82 @@
2727
*/
2828

2929
const new_context_menu_item = function(dirname, append_to_element){
30-
return {
31-
html: i18n('new'),
32-
items: [
33-
// New Folder
34-
{
35-
html: i18n('new_folder'),
36-
icon: `<img src="${html_encode(window.icons['folder.svg'])}" class="ctx-item-icon">`,
37-
onClick: function(){
38-
window.create_folder(dirname, append_to_element);
39-
}
40-
},
41-
// divider
42-
'-',
43-
// Text Document
44-
{
45-
html: i18n('text_document'),
46-
icon: `<img src="${html_encode(window.icons['file-text.svg'])}" class="ctx-item-icon">`,
47-
onClick: async function(){
48-
window.create_file({dirname: dirname, append_to_element: append_to_element, name: 'New File.txt'});
49-
}
50-
},
51-
// HTML Document
52-
{
53-
html: i18n('html_document'),
54-
icon: `<img src="${html_encode(window.icons['file-html.svg'])}" class="ctx-item-icon">`,
55-
onClick: async function(){
56-
window.create_file({dirname: dirname, append_to_element: append_to_element, name: 'New File.html'});
57-
}
30+
31+
const baseItems = [
32+
// New Folder
33+
{
34+
html: i18n('new_folder'),
35+
icon: `<img src="${html_encode(window.icons['folder.svg'])}" class="ctx-item-icon">`,
36+
onClick: function() {
37+
window.create_folder(dirname, append_to_element);
5838
},
59-
// JPG Image
60-
{
61-
html: i18n('jpeg_image'),
62-
icon: `<img src="${html_encode(window.icons['file-image.svg'])}" class="ctx-item-icon">`,
63-
onClick: async function(){
64-
var canvas = document.createElement("canvas");
39+
},
40+
// divider
41+
'-',
42+
// Text Document
43+
{
44+
html: i18n('text_document'),
45+
icon: `<img src="${html_encode(window.icons['file-text.svg'])}" class="ctx-item-icon">`,
46+
onClick: async function() {
47+
window.create_file({dirname: dirname, append_to_element: append_to_element, name: 'New File.txt'});
48+
}
49+
},
50+
// HTML Document
51+
{
52+
html: i18n('html_document'),
53+
icon: `<img src="${html_encode(window.icons['file-html.svg'])}" class="ctx-item-icon">`,
54+
onClick: async function() {
55+
window.create_file({dirname: dirname, append_to_element: append_to_element, name: 'New File.html'});
56+
}
57+
},
58+
// JPG Image
59+
{
60+
html: i18n('jpeg_image'),
61+
icon: `<img src="${html_encode(window.icons['file-image.svg'])}" class="ctx-item-icon">`,
62+
onClick: async function() {
63+
var canvas = document.createElement("canvas");
6564

66-
canvas.width = 800;
67-
canvas.height = 600;
68-
69-
canvas.toBlob((blob) =>{
70-
window.create_file({dirname: dirname, append_to_element: append_to_element, name: 'New Image.jpg', content: blob});
71-
});
65+
canvas.width = 800;
66+
canvas.height = 600;
67+
68+
canvas.toBlob((blob) => {
69+
window.create_file({dirname: dirname, append_to_element: append_to_element, name: 'New Image.jpg', content: blob});
70+
});
71+
}
72+
},
73+
// divider
74+
'-'
75+
];
76+
77+
//Show file_templates on the lower part of "New"
78+
if (window.file_templates.length > 0) {
79+
baseItems.push({
80+
html: "User templates",
81+
icon: `<img src="${html_encode(window.icons['file-template.svg'])}" class="ctx-item-icon">`,
82+
items: window.file_templates.map(template => ({
83+
html: template.html,
84+
icon: `<img src="${html_encode(window.icons[`file-${template.extension}.svg`])}" class="ctx-item-icon">`,
85+
onClick: function() {
86+
window.create_file({dirname: dirname, append_to_element: append_to_element, name: template.name});
7287
}
73-
},
74-
]
88+
}))
89+
});
90+
} else {
91+
baseItems.push({
92+
html: "No templates found",
93+
icon: `<img src="${html_encode(window.icons['file-template.svg'])}" class="ctx-item-icon">`,
94+
//Add function to ask user to create new template folder
95+
// onClick: function() {
96+
// window.create_file({dirname: dirname, append_to_element: append_to_element, name: template.name});
97+
// }
98+
});
7599
}
100+
101+
//Conditional rendering for the templates
102+
return {
103+
html: i18n('new'),
104+
items: baseItems
105+
};
76106
}
77107

78108
export default new_context_menu_item;
Lines changed: 11 additions & 0 deletions
Loading

src/gui/src/initgui.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ const launch_services = async function (options) {
108108
const svc_process = globalThis.services.get('process');
109109
svc_process.get_init().chstatus(PROCESS_RUNNING);
110110
}
111+
// Search and store user templates
112+
window.file_templates = await window.available_templates()
111113
};
112114

113115
// This code snippet addresses the issue flagged by Lighthouse regarding the use of

0 commit comments

Comments
 (0)