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 }