File indexing completed on 2024-05-19 16:39:55
0001 /* 0002 SPDX-FileCopyrightText: 2013 Aurélien Gâteau <agateau@kde.org> 0003 SPDX-FileCopyrightText: 2013-2015 Eike Hein <hein@kde.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 .pragma library 0009 0010 function fillActionMenu(i18n, actionMenu, actionList, favoriteModel, favoriteId) { 0011 // Accessing actionList can be a costly operation, so we don't 0012 // access it until we need the menu. 0013 0014 var actions = createFavoriteActions(i18n, favoriteModel, favoriteId); 0015 0016 if (actions) { 0017 if (actionList && actionList.length > 0) { 0018 var separator = { "type": "separator" }; 0019 actionList.unshift(separator); 0020 // actionList = actions.concat(actionList); // this crashes Qt O.o 0021 actionList.unshift.apply(actionList, actions); 0022 } else { 0023 actionList = actions; 0024 } 0025 } 0026 0027 actionMenu.actionList = actionList; 0028 } 0029 0030 function createFavoriteActions(i18n, favoriteModel, favoriteId) { 0031 if (favoriteModel === null || !favoriteModel.enabled || favoriteId == null) { 0032 return null; 0033 } 0034 0035 if ("initForClient" in favoriteModel) { 0036 var activities = favoriteModel.activities.runningActivities; 0037 0038 if (activities.length <= 1) { 0039 var action = {}; 0040 0041 if (favoriteModel.isFavorite(favoriteId)) { 0042 action.text = i18n("Remove from Favorites"); 0043 action.icon = "list-remove"; 0044 action.actionId = "_kicker_favorite_remove"; 0045 } else if (favoriteModel.maxFavorites == -1 || favoriteModel.count < favoriteModel.maxFavorites) { 0046 action.text = i18n("Add to Favorites"); 0047 action.icon = "bookmark-new"; 0048 action.actionId = "_kicker_favorite_add"; 0049 } else { 0050 return null; 0051 } 0052 0053 action.actionArgument = { favoriteModel: favoriteModel, favoriteId: favoriteId }; 0054 0055 return [action]; 0056 0057 } else { 0058 var actions = []; 0059 0060 var linkedActivities = favoriteModel.linkedActivitiesFor(favoriteId); 0061 0062 // Adding the item to link/unlink to all activities 0063 0064 var linkedToAllActivities = 0065 !(linkedActivities.indexOf(":global") === -1); 0066 0067 actions.push({ 0068 text : i18n("On All Activities"), 0069 checkable : true, 0070 0071 actionId : linkedToAllActivities ? 0072 "_kicker_favorite_remove_from_activity" : 0073 "_kicker_favorite_set_to_activity", 0074 checked : linkedToAllActivities, 0075 0076 actionArgument : { 0077 favoriteModel: favoriteModel, 0078 favoriteId: favoriteId, 0079 favoriteActivity: "" 0080 } 0081 }); 0082 0083 0084 // Adding items for each activity separately 0085 0086 var addActivityItem = function(activityId, activityName) { 0087 var linkedToThisActivity = 0088 !(linkedActivities.indexOf(activityId) === -1); 0089 0090 actions.push({ 0091 text : activityName, 0092 checkable : true, 0093 checked : linkedToThisActivity && !linkedToAllActivities, 0094 0095 actionId : 0096 // If we are on all activities, and the user clicks just one 0097 // specific activity, unlink from everything else 0098 linkedToAllActivities ? "_kicker_favorite_set_to_activity" : 0099 0100 // If we are linked to the current activity, just unlink from 0101 // that single one 0102 linkedToThisActivity ? "_kicker_favorite_remove_from_activity" : 0103 0104 // Otherwise, link to this activity, but do not unlink from 0105 // other ones 0106 "_kicker_favorite_add_to_activity", 0107 0108 actionArgument : { 0109 favoriteModel : favoriteModel, 0110 favoriteId : favoriteId, 0111 favoriteActivity : activityId 0112 } 0113 }); 0114 }; 0115 0116 // Adding the item to link/unlink to the current activity 0117 0118 addActivityItem(favoriteModel.activities.currentActivity, i18n("On The Current Activity")); 0119 0120 actions.push({ 0121 type: "separator", 0122 actionId: "_kicker_favorite_separator" 0123 }); 0124 0125 // Adding the items for each activity 0126 0127 activities.forEach(function(activityId) { 0128 addActivityItem(activityId, favoriteModel.activityNameForId(activityId)); 0129 }); 0130 0131 return [{ 0132 text : i18n("Show In Favorites"), 0133 icon : "favorite", 0134 subActions : actions 0135 }]; 0136 } 0137 } else { 0138 var action = {}; 0139 0140 if (favoriteModel.isFavorite(favoriteId)) { 0141 action.text = i18n("Remove from Favorites"); 0142 action.icon = "list-remove"; 0143 action.actionId = "_kicker_favorite_remove"; 0144 } else if (favoriteModel.maxFavorites == -1 || favoriteModel.count < favoriteModel.maxFavorites) { 0145 action.text = i18n("Add to Favorites"); 0146 action.icon = "bookmark-new"; 0147 action.actionId = "_kicker_favorite_add"; 0148 } else { 0149 return null; 0150 } 0151 0152 action.actionArgument = { favoriteModel: favoriteModel, favoriteId: favoriteId }; 0153 0154 return [action]; 0155 } 0156 } 0157 0158 function triggerAction(plasmoid, model, index, actionId, actionArgument) { 0159 function startsWith(txt, needle) { 0160 return txt.substr(0, needle.length) === needle; 0161 } 0162 0163 if (startsWith(actionId, "_kicker_favorite_")) { 0164 handleFavoriteAction(actionId, actionArgument); 0165 return; 0166 } 0167 0168 var closeRequested = model.trigger(index, actionId, actionArgument); 0169 0170 if (closeRequested) { 0171 plasmoid.expanded = false; 0172 0173 return true; 0174 } 0175 0176 return false; 0177 } 0178 0179 function handleFavoriteAction(actionId, actionArgument) { 0180 var favoriteId = actionArgument.favoriteId; 0181 var favoriteModel = actionArgument.favoriteModel; 0182 0183 console.log(actionId); 0184 0185 if (favoriteModel === null || favoriteId == null) { 0186 return null; 0187 } 0188 0189 if ("initForClient" in favoriteModel) { 0190 if (actionId == "_kicker_favorite_remove") { 0191 console.log("Removing from all activities"); 0192 favoriteModel.removeFavoriteFrom(favoriteId, ":any"); 0193 0194 } else if (actionId == "_kicker_favorite_add") { 0195 console.log("Adding to global activity"); 0196 favoriteModel.addFavoriteTo(favoriteId, ":global"); 0197 0198 } else if (actionId == "_kicker_favorite_remove_from_activity") { 0199 console.log("Removing from a specific activity"); 0200 favoriteModel.removeFavoriteFrom(favoriteId, actionArgument.favoriteActivity); 0201 0202 } else if (actionId == "_kicker_favorite_add_to_activity") { 0203 console.log("Adding to another activity"); 0204 favoriteModel.addFavoriteTo(favoriteId, actionArgument.favoriteActivity); 0205 0206 } else if (actionId == "_kicker_favorite_set_to_activity") { 0207 console.log("Removing the item from the favourites, and re-adding it just to be on a specific activity"); 0208 favoriteModel.setFavoriteOn(favoriteId, actionArgument.favoriteActivity); 0209 0210 } 0211 } else { 0212 if (actionId == "_kicker_favorite_remove") { 0213 favoriteModel.removeFavorite(favoriteId); 0214 } else if (actionId == "_kicker_favorite_add") { 0215 favoriteModel.addFavorite(favoriteId); 0216 } 0217 } 0218 }