Skip to content
This repository has been archived by the owner on Nov 25, 2020. It is now read-only.

Commit

Permalink
Wire up various details in left-pane column: alert badge, dismiss ale…
Browse files Browse the repository at this point in the history
…rt (using inline toolbars), drop files/folders to bookmark

Fix: make sure BookmarksBar is not initialized many times.
  • Loading branch information
cdujeu committed Jul 18, 2014
1 parent 8142f44 commit cf65eef
Show file tree
Hide file tree
Showing 12 changed files with 235 additions and 20 deletions.
8 changes: 4 additions & 4 deletions core/src/plugins/access.fs/fsTemplatePart.xml
Expand Up @@ -15,12 +15,12 @@
<div id="topPane" ajxpClass="AjxpPane" ajxpOptions=''>
<div id="navigation_pane" style="position:relative;" ajxpClass="AjxpPane" ajxpOptions='{"fit":"height"}' >
<div id="navigation_scroller" ajxpClass="AjxpPane" ajxpOptions='{"fit":"height", "replaceScroller":true}'>
<h3 class="colorcode-alert">Alerts <small id="alerts_toggler" class="simple-toggler-show" ajxpClass="VisibilityToggler" ajxpOptions='{"widget_id":"notif_pane"}'>show</small></h3>
<div style="display:none;" id="notif_pane" ajxpClass="FetchedResultPane" ajxpOptions='{"fit":"content", "columnsDef":[{"attributeName":"ajxp_label", "messageId":1, "sortType":"String"},{"attributeName":"event_time", "messageString":"Time", "sortType":"MyDate"},{"attributeName":"event_type", "messageString":"Type", "sortType":"String"}], "reloadOnServerMessage":"tree/reload_user_feed", "silentLoading":true, "fixedSortColumn":"event_time", "fixedSortDirection":"desc","nodeProviderProperties":{"get_action":"get_my_feed", "connexion_discrete":true, "format":"xml", "current_repository":"true", "feed_type":"alert", "merge_description":"true"}}'></div>
<h3 class="colorcode-alert">Alerts <span class="alerts_number_badge" id="alerts_number" ajxpClass="DataModelProperty" ajxpOptions='{"dmID":"notif_pane","property":"metadata","metadata_sum":"event_occurence"}'></span><small id="alerts_toggler" class="simple-toggler-hide" ajxpClass="VisibilityToggler" ajxpOptions='{"widget_id":"notif_pane"}'>show</small></h3>
<div id="notif_pane" ajxpClass="FetchedResultPane" ajxpOptions='{"inlineToolbarOptions":{"toolbarsList":["inline-notifications"]}, "fit":"content", "columnsDef":[{"attributeName":"ajxp_label", "messageId":1, "sortType":"String"},{"attributeName":"event_time", "messageString":"Time", "sortType":"MyDate"},{"attributeName":"event_type", "messageString":"Type", "sortType":"String"}], "reloadOnServerMessage":"tree/reload_user_feed", "silentLoading":true, "fixedSortColumn":"event_time", "fixedSortDirection":"desc","nodeProviderProperties":{"get_action":"get_my_feed", "connexion_discrete":true, "format":"xml", "current_repository":"true", "feed_type":"alert", "merge_description":"true"}, "emptyChildrenMessage":"No alerts - watch files or folders to be informed of their changes."}'></div>
<h3 class="colorcode-bookmark">Bookmarks <small id="bookmarks_toggler" class="simple-toggler-show" ajxpClass="VisibilityToggler" ajxpOptions='{"widget_id":"flagged_elements"}'>show</small></h3>
<div style="display:none;" id="flagged_elements" ajxpClass="FetchedResultPane" ajxpOptions='{"replaceScroller":false, "fit":"content", "silentLoading":true, "nodeProviderProperties":{"get_action":"search", "query":"keyword:ajxp_bookmarked"},"reloadOnServerMessage":"tree/reload_bookmarks", "connexion_discrete":true}'></div>
<div style="display:none;" id="flagged_elements" ajxpClass="FetchedResultPane" ajxpOptions='{"replaceScroller":false, "fit":"content", "silentLoading":true, "nodeProviderProperties":{"get_action":"search", "query":"keyword:ajxp_bookmarked"},"reloadOnServerMessage":"tree/reload_bookmarks", "connexion_discrete":true, "containerDroppableAction":"bookmark", "emptyChildrenMessage":"No bookmarks - drag items here to keep a quick access to thems"}'></div>
<h3 class="colorcode-shared">Shared <small id="shared_files_toggler" class="simple-toggler-show" ajxpClass="VisibilityToggler" ajxpOptions='{"widget_id":"shared_files_list"}'>show</small></h3>
<div style="display:none;" id="shared_files_list" ajxpClass="FetchedResultPane" ajxpOptions='{"fit":"content","silentLoading":true, "nodeProviderProperties":{"get_action":"search", "query":"keyword:ajxp_shared", "connexion_discrete":true}}'></div>
<div style="display:none;" id="shared_files_list" ajxpClass="FetchedResultPane" ajxpOptions='{"fit":"content","silentLoading":true, "nodeProviderProperties":{"get_action":"search", "query":"keyword:ajxp_shared", "connexion_discrete":true}, "emptyChildrenMessage":"No shared elements.","containerDroppableAction":"share"}'></div>
<h3 class="colorcode-folder">Folders <small id="folders_pane_toggler" ajxpClass="VisibilityToggler" ajxpOptions='{"widget_id":"folder_pane", "detection_id":"tree_container"}'>hide</small> <small onclick="$('folder_pane').toggleClassName('show_first_level')">expand</small>&nbsp;</h3>
<div id="folder_pane" class="show_first_level" ajxpClass="FoldersTree" ajxpOptions='{"display":"dz","replaceScroller":false,"fit":"content"}' ></div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion core/src/plugins/core.conf/standard_conf_actions.xml
Expand Up @@ -173,7 +173,7 @@
<clientListener name="init"><![CDATA[
window.setTimeout(function(){
if(!$('get_bookmarks_button')) {
ajaxplorer.bookmarkBar = new BookmarksBar(null, {});
if(!ajaxplorer.bookmarkBar) ajaxplorer.bookmarkBar = new BookmarksBar(null, {});
return;
}
var bmBar = new BookmarksBar($('get_bookmarks_button'), {bookmarksMenuOptions:{
Expand Down
26 changes: 25 additions & 1 deletion core/src/plugins/core.notifications/manifest.xml
Expand Up @@ -47,7 +47,31 @@
</processing>
</action>
<action name="dismiss_user_alert">
<processing><serverCallback methodName="dismissUserAlert"/></processing>
<gui text="notification_center.7" title="notification_center.7" iconClass="icon-remove-sign" src="notification_center/ICON_SIZE/feed.png" accessKey="" hasAccessKey="false">
<context selection="false" dir="" recycle="true" actionBar="true" actionBarGroup="inline-notifications" contextMenu="false" infoPanel="false"/>
</gui>
<processing>
<clientCallback><![CDATA[
var selection = window.actionArguments[0];
if(selection && selection.getMetadata && selection.getMetadata().get("alert_id")){
var elMeta = selection.getMetadata();
var conn = new Connexion();
conn.onComplete = function(){
ajaxplorer.notify("server_message:tree/reload_user_feed");
};
var params = {
get_action:'dismiss_user_alert',
alert_id:elMeta.get('alert_id')
};
if(elMeta.get("event_occurence")){
params.occurrences = elMeta.get("event_occurence");
}
conn.setParameters(params);
conn.sendAsync();
}
]]></clientCallback>
<serverCallback methodName="dismissUserAlert"/>
</processing>
</action>
<action name="activateDesktopNotifications">
<gui src="" iconClass="icon-rss" text="notification_center.1" title="notification_title.2">
Expand Down
2 changes: 1 addition & 1 deletion core/src/plugins/gui.ajax/res/js/ajaxplorer.js

Large diffs are not rendered by default.

26 changes: 19 additions & 7 deletions core/src/plugins/gui.ajax/res/js/ajaxplorer/class.BookmarksBar.js
Expand Up @@ -47,9 +47,10 @@

}
this.createMenu();
document.observe("ajaxplorer:registry_loaded", function(event){
this.parseXml(event.memo);
}.bind(this) );
this.regObserver = function(event){
this.parseXml(event.memo);
}.bind(this);
document.observe("ajaxplorer:registry_loaded", this.regObserver);
document.observeOnce("ajaxplorer:actions_loaded", function(){
var bmAction = ajaxplorer.actionBar.actions.get('bookmark');
if(!bmAction) return;
Expand All @@ -62,15 +63,21 @@
}.bind(this)
};
}.bind(this));
document.observe("ajaxplorer:add_bookmark", function(){
var node = ajaxplorer.getUserSelection().getUniqueNode();
this.bmObserver = function(){
var node = ajaxplorer.getUserSelection().getUniqueNode();
if(node.getMetadata().get('ajxp_bookmarked') && node.getMetadata().get('ajxp_bookmarked') == 'true'){
this.removeBookmark(node.getPath(), function(){ajaxplorer.fireNodeRefresh(node);});
}else{
this.addBookmark(node.getPath(), node.getLabel(),function(){ajaxplorer.fireNodeRefresh(node);});
}
}.bind(this) );
}.bind(this);
document.observe("ajaxplorer:add_bookmark", this.bmObserver );
},

destroy:function(){
document.stopObserving("ajaxplorer:add_bookmark", this.bmObserver);
document.stopObserving("ajaxplorer:registry_loaded", this.regObserver);
},
/**
* Parses the registry to find the bookmarks definition
* @param registry XMLDocument
Expand Down Expand Up @@ -191,7 +198,10 @@
actionsParameters.set('get_action', 'get_bookmarks');
connexion.setParameters(actionsParameters);
if(onComplete){
connexion.onComplete = onComplete;
connexion.onComplete = function(transport){
onComplete();
ajaxplorer.notify('server_message:tree/reload_bookmarks');
};
}else{
connexion.onComplete = function(transport){
document.observeOnce("ajaxplorer:registry_part_loaded", function(event){
Expand All @@ -203,8 +213,10 @@
this.bmMenu.refreshList();
if(!silently) this.bmMenu.show();
}
ajaxplorer.notify('server_message:tree/reload_bookmarks');
}.bind(this);
}

connexion.sendAsync();
},

Expand Down
@@ -0,0 +1,70 @@
/*
* Copyright 2007-2013 Charles du Jeu - Abstrium SAS <team (at) pyd.io>
* This file is part of Pydio.
*
* Pydio is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Pydio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Pydio. If not, see <http://www.gnu.org/licenses/>.
*
* The latest code can be found at <http://pyd.io/>.
*/

Class.create("DataModelProperty", {

__implements: ["IAjxpWidget"],

initialize: function(element, options){

options = Object.extend({
dmID: "ajaxplorer-global"
}, options);
var dm;
if(options.dmID == "ajaxplorer-global"){
dm = ajaxplorer.getContextHolder();
}else if($(options.dmID) && $(options.dmID).ajxpPaneObject && $(options.dmID).ajxpPaneObject.getDataModel){
dm = $(options.dmID).ajxpPaneObject.getDataModel();
}
if(!dm) return;
dm.getRootNode().observe("loaded", function(){
switch (options.property){
case "root_children":
var l = dm.getRootNode().getChildren().length;
element.update(l?l:'');
break;
case "root_label":
var lab = dm.getRootNode().getLabel();
element.update(label);
break;
case "metadata":
if(options.metadata_sum){
var sum = 0;
dm.getRootNode().getChildren().each(function(c){
if(c.getMetadata().get(options.metadata_sum)) sum += parseInt(c.getMetadata().get(options.metadata_sum));
});
element.update(sum?sum:'');
}
default:
break;
}


}.bind(this));

},

resize : function(){},
showElement : function(show){},
getDomNode : function(){},
destroy : function(){}


});
Expand Up @@ -49,6 +49,9 @@ Class.create("FetchedResultPane", FilesList, {
columnsTemplate:"search_results",
selectable: true,
draggable: false,
droppable: false,
containerDroppableAction:null,
emptyChildrenMessage:'',
replaceScroller:true,
fit:'height',
detailThumbSize:22,
Expand Down Expand Up @@ -90,12 +93,39 @@ Class.create("FetchedResultPane", FilesList, {
var newValue = XPathSelectSingleNode(event, ajxpOptions.reloadOnServerMessage);
if(newValue) this.reloadDataModel();
}.bind(this));
ajaxplorer.observe("server_message:" + ajxpOptions.reloadOnServerMessage, function(){
this.reloadDataModel();
}.bind(this));
}

if(ajxpOptions.containerDroppableAction){

Droppables.add(this.htmlElement, {
hoverclass:'droppableZone',
accept:'ajxp_draggable',
onDrop:function(draggable, droppable, event)
{
if(draggable.getAttribute('user_selection')){
ajaxplorer.actionBar.fireAction(ajxpOptions.containerDroppableAction);
}else if(draggable.ajxpNode){
ajaxplorer.actionBar.fireAction(ajxpOptions.containerDroppableAction, draggable.ajxpNode);
}
}
});

}

//ajaxplorer.registerFocusable(this);

},

destroy:function($super){
if(this.options.containerDroppableAction){
Droppables.remove(this.htmlElement);
}
$super();
},

reloadDataModel: function(){
if(this._dataLoaded){
if(!this.options.silentLoading){
Expand All @@ -122,6 +152,16 @@ Class.create("FetchedResultPane", FilesList, {
rNodeProvider.initProvider(ajxpOptions.nodeProviderProperties);
this._rootNode = new AjxpNode("/", false, "Results", "folder.png", rNodeProvider);
dataModel.setRootNode(this._rootNode);
if(ajxpOptions.emptyChildrenMessage){
var emptyMessage = MessageHash[ajxpOptions.emptyChildrenMessage]?MessageHash[ajxpOptions.emptyChildrenMessage]:ajxpOptions.emptyChildrenMessage;
this._rootNode.observe("loaded", function(){
this.htmlElement.select('div.no-results-found').invoke('remove');
if(!this._rootNode.getChildren().length){
this.htmlElement.insert({bottom:'<div class="no-results-found">'+emptyMessage+'</div>'});
}
}.bind(this));
}

return dataModel;

},
Expand Down
Expand Up @@ -1715,7 +1715,7 @@ Class.create("FilesList", SelectableElements, {
);
if(this.protoMenu) this.protoMenu.addElements(innerSpan);
}
if(!ajxpNode.isLeaf())
if(!ajxpNode.isLeaf() && (this.options.droppable === undefined || this.options.droppable === true ))
{
AjxpDroppables.add(innerSpan, ajxpNode);
}
Expand Down Expand Up @@ -1857,7 +1857,7 @@ Class.create("FilesList", SelectableElements, {
}, this, 'filesList');
}.bind(this), 500);
}
if(!ajxpNode.isLeaf())
if(!ajxpNode.isLeaf() && (this.options.droppable === undefined || this.options.droppable === true ))
{
AjxpDroppables.add(newRow, ajxpNode);
}
Expand Down Expand Up @@ -2005,7 +2005,7 @@ Class.create("FilesList", SelectableElements, {
}, this, 'filesList');
}.bind(this), 500);
}
if(!ajxpNode.isLeaf())
if(!ajxpNode.isLeaf() && (this.options.droppable === undefined || this.options.droppable === true ))
{
AjxpDroppables.add(largeRow, ajxpNode);
}
Expand Down Expand Up @@ -2037,7 +2037,7 @@ Class.create("FilesList", SelectableElements, {
Event.stop(event);
dm.setSelectedNodes([ajxpNode]);
window.setTimeout(function(){
button.ACTION.apply();
button.ACTION.apply([ajxpNode]);
}, 20);
});
});
Expand Down
Expand Up @@ -55,6 +55,36 @@ Class.create("VisibilityToggler", AjxpPane, {
window.setTimeout(updaterScroller, 1500);
});

this.parentElement = htmlElement.up();
Droppables.add(this.parentElement, {
hoverclass:'',
accept:'ajxp_draggable',
onHover:function(draggable, droppable, event)
{
if(!$(togId) || !$(detectionId)) return;
if($(detectionId).visible()) return;
if($(togId).ajxpPaneObject){
$(togId).ajxpPaneObject.showElement(!$(detectionId).visible());
}else{
var show = !$(detectionId).visible();
if(show) $(togId).show();
else $(togId).hide();
}
htmlElement.removeClassName('simple-toggler-show').removeClassName('simple-toggler-hide');
htmlElement.addClassName($(detectionId).visible()?'simple-toggler-hide':'simple-toggler-show');
htmlElement.update($(detectionId).visible()?"Hide":"Show");
updaterScroller();
window.setTimeout(updaterScroller, 1500);
}.bind(this)
});


},

destroy:function($super){
Droppables.remove(this.parentElement);
$super();
}


});
1 change: 1 addition & 0 deletions core/src/plugins/gui.ajax/res/js/ajaxplorer_list.txt
Expand Up @@ -61,6 +61,7 @@ js/ajaxplorer/class.AbstractEditor.js
js/ajaxplorer/class.Modal.js
js/ajaxplorer/class.BookmarksBar.js
js/ajaxplorer/class.FormManager.js
js/ajaxplorer/class.DataModelProperty.js
js/ajaxplorer/class.MultiDownloader.js
js/ajaxplorer/class.ActivityMonitor.js
js/ajaxplorer/class.Ajaxplorer.js

0 comments on commit cf65eef

Please sign in to comment.