From 8e21dda195015a3c9420553f874c10d3ebfa5dfa Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Mon, 3 Jan 2011 20:24:21 -0800 Subject: Complete rewrite of the organize module in Javascript using the Sencha JavaScript library. It's got all the functionality from the Flash version except it doesn't support creating new albums or uploading photos. Only tested in Chrome 10.0.x so far. --- modules/organize/views/organize_dialog.html.php | 481 +++++++++++++++++------- 1 file changed, 354 insertions(+), 127 deletions(-) (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index 3ea1143d..b2e56a04 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -1,144 +1,371 @@ - - + + -
- - -

html::purify($album->title))) ?>

-
-

- $flash_minimum_version)) ?> -

- - <?=for_js() ?> /> - -
-
-- cgit v1.2.3 From 90852b192970173042ac34191b12be725021897a Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Mon, 3 Jan 2011 21:23:21 -0800 Subject: whitespace fix. --- modules/organize/views/organize_dialog.html.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index b2e56a04..9f89ba4d 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -103,7 +103,7 @@ div.className = "multi-proxy"; for (var i = 0; i != selected_nodes.length; i++) { div.appendChild(selected_nodes[i].cloneNode(true)); - if ((i+1) % 3 == 0) { + if ((i + 1) % 3 == 0) { div.appendChild(document.createElement("br")); } } -- cgit v1.2.3 From 3928058ba5897eb2c6a2f3fb76664012db014a89 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Mon, 3 Jan 2011 22:31:20 -0800 Subject: Fix a few small visual issues: - Let the thumb data view scroll on drag/drop - Switch the album panel to be a FitLayout and use a title and bbar instead of nested panels. - Set the tree_panel width to be 200px to start. --- modules/organize/views/organize_dialog.html.php | 27 +++++++++---------------- 1 file changed, 9 insertions(+), 18 deletions(-) (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index 9f89ba4d..0135707a 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -85,6 +85,7 @@ listeners: { "render": function(v) { v.dragZone = new Ext.dd.DragZone(v.getEl(), { + containerScroll: true, getDragData: function(e) { var target = e.getTarget(v.itemSelector, 10); if (target) { @@ -248,23 +249,11 @@ }); var album_panel = new Ext.Panel({ - layout: "border", + layout: "fit", region: "center", - items: [ - { - xtype: "label", - region: "north", - text: for_js() ?>, - margins: "5 5 5 10", - }, - { - xtype: "panel", - layout: "fit", - region: "center", - items: [thumb_data_view] - }, - button_panel - ] + title: for_js() ?>, + items: [thumb_data_view], + bbar: button_panel }); /* @@ -339,8 +328,10 @@ loader: tree_loader, region: "west", - width: 150, split: true, + minSize: 200, + maxSize: 350, + width: 200, root: { nodeType: "async", @@ -362,7 +353,7 @@ }); tree_panel.getRootNode().expand(); - new Ext.Viewport({ + var outer = new Ext.Viewport({ layout: "border", cls: "g-organize", items: [tree_panel, album_panel] -- cgit v1.2.3 From 79f27ea1ecefd6e0fdf725f218cc66c18b568fb4 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Mon, 3 Jan 2011 22:59:07 -0800 Subject: Remove a bunch of trailing commas from arrays to make IE happy. --- modules/organize/views/organize_dialog.html.php | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index 0135707a..7c812f32 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -178,6 +178,11 @@ * Toolbar with sort column, sort order and a close button. * ******************************************************************************** */ + + sort_order_data = []; + $value): ?> + sort_order_data.push(["", for_js() ?>]); + var sort_column_combobox = new Ext.form.ComboBox({ mode: "local", editable: false, @@ -187,11 +192,7 @@ store: new Ext.data.ArrayStore({ id: 0, fields: ["key", "value"], - data: [ - $value): ?> - ["", for_js() ?>], - - ] + data: sort_order_data }), listeners: { "select": function(combo, record, index) { @@ -234,7 +235,7 @@ items: [sort_column_combobox, sort_order_combobox, { xtype: "spacer", - flex: 4, + flex: 4 }, { xtype: "button", flex: 1, @@ -244,7 +245,7 @@ parent.done_organizing(current_album_id); } } - }, + } ] }); @@ -264,7 +265,7 @@ var tree_loader = new Ext.tree.TreeLoader({ dataUrl: 'id}") ?>', nodeParameter: "root_id", - requestMethod: "post", + requestMethod: "post" }); var tree_panel = new Ext.tree.TreePanel({ @@ -338,7 +339,7 @@ text: "title ?>", draggable: false, id: "id ?>", - expanded: true, + expanded: true } }); -- cgit v1.2.3 From 51d66df1924b9fb835ed741042beddce4f6e899f Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Tue, 4 Jan 2011 00:14:53 -0800 Subject: Switch to using Ext.Element.mask for a custom busy message that looks a little cleaner. --- modules/organize/css/organize.css | 9 +++++++ modules/organize/views/organize_dialog.html.php | 32 +++++++++++++++---------- 2 files changed, 29 insertions(+), 12 deletions(-) (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/css/organize.css b/modules/organize/css/organize.css index 00395520..be449138 100644 --- a/modules/organize/css/organize.css +++ b/modules/organize/css/organize.css @@ -58,3 +58,12 @@ div.multi-proxy div { font-size: 12px; line-height: 20px; } + +.loading div { + font-size: 1.1em; + padding-left: 24px; + background-color: white; + background-image: url(../vendor/ext/images/default/tree/loading.gif); + background-position: 4px 8px; + background-repeat: no-repeat; +} diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index 7c812f32..a3b1a1c5 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -20,13 +20,21 @@ * Utility functions for loading data and making changes * ******************************************************************************** */ + var start_busy = function(msg) { + outer.el.mask(msg, "loading"); + } + + var stop_busy = function() { + outer.el.unmask(); + } + var current_album_id = null; var load_album_data = function(id) { - Ext.Msg.wait(for_js() ?>); + start_busy(for_js() ?>); Ext.Ajax.request({ url: ''.replace("__ID__", id), success: function(xhr, opts) { - Ext.Msg.hide(); + stop_busy(); var album_info = Ext.util.JSON.decode(xhr.responseText); var store = new Ext.data.JsonStore({ autoDestroy: true, @@ -41,7 +49,7 @@ sort_order_combobox.setValue(album_info.sort_order); }, failure: function() { - Ext.Msg.hide(); + stop_busy(); Ext.Msg.alert( for_js() ?>); } @@ -55,17 +63,17 @@ }; var set_album_sort = function(params) { - Ext.Msg.wait(for_js() ?>); + start_busy(for_js() ?>); params['csrf'] = ''; Ext.Ajax.request({ url: ''.replace("__ID__", current_album_id), method: "post", success: function() { - Ext.Msg.hide(); + stop_busy(); reload_album_data(); }, failure: function() { - Ext.Msg.hide(); + stop_busy(); Ext.Msg.alert( for_js() ?>); }, @@ -137,16 +145,16 @@ for (var i = 0; i != nodes.length; i++) { source_ids.push(Ext.fly(nodes[i]).getAttribute("rel")); } - Ext.Msg.wait(for_js() ?>); + start_busy(for_js() ?>); Ext.Ajax.request({ url: '', method: "post", success: function() { - Ext.Msg.hide(); + stop_busy(); reload_album_data(); }, failure: function() { - Ext.Msg.hide(); + stop_busy(); Ext.Msg.alert( for_js() ?>); }, @@ -293,12 +301,12 @@ source_ids.push(node.getAttribute("rel")); } var target_id = target.getAttribute("ext:tree-node-id"); - Ext.Msg.wait(for_js() ?>); + start_busy(for_js() ?>); Ext.Ajax.request({ url: '', method: "post", success: function() { - Ext.Msg.hide(); + stop_busy(); reload_album_data(); v.getNodeById(target_id).reload(); @@ -311,7 +319,7 @@ } }, failure: function() { - Ext.Msg.hide(); + stop_busy(); Ext.Msg.alert( for_js() ?>); }, -- cgit v1.2.3 From 31652eae44bdd93b45d965a8288a3069e37d1934 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Tue, 4 Jan 2011 22:00:30 -0800 Subject: Drag/drop improvements: - Restrict drag and drop to albums where the user has edit permissions. - Use the existing TreeDropZone instead of making a new DropZone to take advantage of TreeDropZone features. - Properly use dropConfig in TreePanel. --- modules/organize/views/organize_dialog.html.php | 85 ++++++++++++------------- 1 file changed, 42 insertions(+), 43 deletions(-) (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index a3b1a1c5..4d4bf990 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -93,6 +93,7 @@ listeners: { "render": function(v) { v.dragZone = new Ext.dd.DragZone(v.getEl(), { + ddGroup: "organizeDD", containerScroll: true, getDragData: function(e) { var target = e.getTarget(v.itemSelector, 10); @@ -283,55 +284,52 @@ border: false, containerScroll: true, enableDD: true, - ddGroup: "organizeDD", + dropConfig: { + appendOnly: true, + ddGroup: "organizeDD", + }, listeners: { "click": function(node) { load_album_data(node.id); }, - "render": function(v) { - v.dropZone = new Ext.dd.DropZone(v.getEl(), { - getTargetFromEvent: function(e) { - return e.getTarget("div.x-tree-node-el", 10); - }, - onNodeDrop: function(target, dd, e, data) { - var nodes = data.nodes; - source_ids = []; - for (var i = 0; i != nodes.length; i++) { - var node = Ext.fly(nodes[i]); - source_ids.push(node.getAttribute("rel")); - } - var target_id = target.getAttribute("ext:tree-node-id"); - start_busy(for_js() ?>); - Ext.Ajax.request({ - url: '', - method: "post", - success: function() { - stop_busy(); - reload_album_data(); - v.getNodeById(target_id).reload(); + "afterrender": function(v) { + v.dropZone.onNodeDrop = function(target, dd, e, data) { + var nodes = data.nodes; + source_ids = []; + for (var i = 0; i != nodes.length; i++) { + var node = Ext.fly(nodes[i]); + source_ids.push(node.getAttribute("rel")); + } + start_busy(for_js() ?>); + Ext.Ajax.request({ + url: '', + method: "post", + success: function() { + stop_busy(); + reload_album_data(); + target.node.reload(); - // If the target node contains the selected node, then the selected - // node just got strafed by the target's reload and no longer exists, - // so we can't reload it. - var selected_node = v.getNodeById(current_album_id); - if (selected_node) { - selected_node.reload(); - } - }, - failure: function() { - stop_busy(); - Ext.Msg.alert( - for_js() ?>); - }, - params: { - source_ids: source_ids.join(","), - target_id: target_id, - csrf: '' + // If the target node contains the selected node, then the selected + // node just got strafed by the target's reload and no longer exists, + // so we can't reload it. + var selected_node = v.getNodeById(current_album_id); + if (selected_node) { + selected_node.reload(); } - }); - return true; - } - }) + }, + failure: function() { + stop_busy(); + Ext.Msg.alert( + for_js() ?>); + }, + params: { + source_ids: source_ids.join(","), + target_id: target.node.id, + csrf: '' + } + }); + return true; + } } }, loader: tree_loader, @@ -343,6 +341,7 @@ width: 200, root: { + allowDrop: Boolean(), nodeType: "async", text: "title ?>", draggable: false, -- cgit v1.2.3 From bd5e71ba6a84b4cda484bb4e4a8a77889bb0a02d Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Tue, 4 Jan 2011 22:20:24 -0800 Subject: More drag/drop tweaks. - Fix a bug in the prior commit where we could no longer drag/drop in the thumb_data_view. - Change the CSS class when dropping items in the tree panel to be a check box, not a plus symbol. --- modules/organize/views/organize_dialog.html.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index 4d4bf990..b398a19d 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -128,6 +128,7 @@ }); v.dropZone = new Ext.dd.DropZone(v.getEl(), { + ddGroup: "organizeDD", getTargetFromEvent: function(e) { return e.getTarget("div.thumb", 10); }, @@ -293,6 +294,22 @@ load_album_data(node.id); }, "afterrender": function(v) { + // Override Ext.tree.TreeDragZone.onNodeOver to change the + // x-tree-drop-ok-append CSS class to be x-dd-drop-ok since + // that connotes "ok" instead of "adding something new" and we're + // moving the item, not adding it. + // + // There's probably a better way of overriding the parent method, but + // my JavaScript-fu is weak. + v.dropZone.super_onNodeOver = v.dropZone.onNodeOver; + v.dropZone.onNodeOver = function(target, dd, e, data) { + var returnCls = this.super_onNodeOver(target, dd, e, data); + if (returnCls == "x-tree-drop-ok-append") { + return "x-dd-drop-ok"; + } + return returnCls; + } + v.dropZone.onNodeDrop = function(target, dd, e, data) { var nodes = data.nodes; source_ids = []; -- cgit v1.2.3 From c590f881ebbb005390f6e4f8a37a6252a5796f51 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Wed, 5 Jan 2011 01:25:17 -0800 Subject: single -> double quotes. --- modules/organize/views/organize_dialog.html.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index b398a19d..773e1955 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -7,7 +7,6 @@ background-image: url(); } - + - - + diff --git a/modules/organize/views/organize_frame.html.php b/modules/organize/views/organize_frame.html.php index 2abea898..d9303075 100644 --- a/modules/organize/views/organize_frame.html.php +++ b/modules/organize/views/organize_frame.html.php @@ -1,23 +1,409 @@ - + + + - -- cgit v1.2.3 From 89597e7e703dddef8a2379f822772f9fd205d03b Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Thu, 6 Jan 2011 23:43:26 -0800 Subject: Add a spinner to the dialog when loading the iframe so that it's not just a blank dialog. Create separate CSS for dialog vs. frame. Don't show the Loading message for the first load. --- modules/organize/css/organize.css | 99 --------------------- modules/organize/css/organize_dialog.css | 17 ++++ modules/organize/css/organize_frame.css | 99 +++++++++++++++++++++ .../vendor/ext/images/default/tree/leaf.gif | Bin 945 -> 0 bytes modules/organize/views/organize_dialog.html.php | 14 +-- modules/organize/views/organize_frame.html.php | 13 ++- 6 files changed, 134 insertions(+), 108 deletions(-) delete mode 100644 modules/organize/css/organize.css create mode 100644 modules/organize/css/organize_dialog.css create mode 100644 modules/organize/css/organize_frame.css delete mode 100644 modules/organize/vendor/ext/images/default/tree/leaf.gif (limited to 'modules/organize/views/organize_dialog.html.php') diff --git a/modules/organize/css/organize.css b/modules/organize/css/organize.css deleted file mode 100644 index 3f7ce8f6..00000000 --- a/modules/organize/css/organize.css +++ /dev/null @@ -1,99 +0,0 @@ -.g-organize { - font-family: 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; -} - -.g-organize div.thumb { - padding: 8px; - width: 128px; - height: 128px; - vertical-align: middle; - float: left; -} - -.g-organize div.selected { - background: #C9D8EB; -} - -.g-organize div.thumb { - border: 4px solid white; -} - -.g-organize div.thumb:hover { - border: 2px solid #eee; - margin: 2px; - cursor: pointer; -} - -.g-organize div.thumb div.icon { - position: relative; - padding: 0px; - margin: 0px; - visibility: hidden; - width: 16px; - height: 16px; - top: -16px; - margin-bottom: -16px; - padding-bottom: -16px; -} - -.g-organize div.thumb-album div.icon { - visibility: visible; -} - -.g-organize div.drag-ghost { - width: 300px; - height: 180px; -} - -.g-organize div.drag-ghost div { - width: 72px; - height: 72px; - vertical-align: baseline; - float: left; -} - -.g-organize div.drop-target { - background: #eee; -} - -.g-organize div.active-left { - border-left: 4px solid #C9D8EB; -} - -.g-organize div.active-right { - border-right: 4px solid #C9D8EB; -} - -.g-organize label.sort { - font: 12px tahoma, arial; - vertical-align: middle; - font-weight: bold; - height: 22px; - text-align: center; - padding: 4px; -} - -.loading div { - font-size: 1.1em; - padding-left: 24px; - background-color: white; - background-image: url(../vendor/ext/images/default/tree/loading.gif); - background-position: 4px 8px; - background-repeat: no-repeat; -} - -/* IE specific overrides */ -body.ext-ie div.thumb { - width: 150px; - height: 150px; -} - -/* ExtJS overrides */ -.x-tree-node-el { - font-size: 12px; - line-height: 20px; -} - -.x-tree-node-leaf .x-tree-node-icon { - background-image:url(../vendor/ext/images/default/tree/folder.gif); -} diff --git a/modules/organize/css/organize_dialog.css b/modules/organize/css/organize_dialog.css new file mode 100644 index 00000000..2b39cdf4 --- /dev/null +++ b/modules/organize/css/organize_dialog.css @@ -0,0 +1,17 @@ +#g-organize-frame { + border: 0px; + width: 100%; + height: 100%; +} + +#g-organize-app-loading { + display: block; + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + background-image: url(../vendor/ext/images/default/tree/loading.gif); + background-position: center center; + background-repeat: no-repeat; +} diff --git a/modules/organize/css/organize_frame.css b/modules/organize/css/organize_frame.css new file mode 100644 index 00000000..3f7ce8f6 --- /dev/null +++ b/modules/organize/css/organize_frame.css @@ -0,0 +1,99 @@ +.g-organize { + font-family: 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; +} + +.g-organize div.thumb { + padding: 8px; + width: 128px; + height: 128px; + vertical-align: middle; + float: left; +} + +.g-organize div.selected { + background: #C9D8EB; +} + +.g-organize div.thumb { + border: 4px solid white; +} + +.g-organize div.thumb:hover { + border: 2px solid #eee; + margin: 2px; + cursor: pointer; +} + +.g-organize div.thumb div.icon { + position: relative; + padding: 0px; + margin: 0px; + visibility: hidden; + width: 16px; + height: 16px; + top: -16px; + margin-bottom: -16px; + padding-bottom: -16px; +} + +.g-organize div.thumb-album div.icon { + visibility: visible; +} + +.g-organize div.drag-ghost { + width: 300px; + height: 180px; +} + +.g-organize div.drag-ghost div { + width: 72px; + height: 72px; + vertical-align: baseline; + float: left; +} + +.g-organize div.drop-target { + background: #eee; +} + +.g-organize div.active-left { + border-left: 4px solid #C9D8EB; +} + +.g-organize div.active-right { + border-right: 4px solid #C9D8EB; +} + +.g-organize label.sort { + font: 12px tahoma, arial; + vertical-align: middle; + font-weight: bold; + height: 22px; + text-align: center; + padding: 4px; +} + +.loading div { + font-size: 1.1em; + padding-left: 24px; + background-color: white; + background-image: url(../vendor/ext/images/default/tree/loading.gif); + background-position: 4px 8px; + background-repeat: no-repeat; +} + +/* IE specific overrides */ +body.ext-ie div.thumb { + width: 150px; + height: 150px; +} + +/* ExtJS overrides */ +.x-tree-node-el { + font-size: 12px; + line-height: 20px; +} + +.x-tree-node-leaf .x-tree-node-icon { + background-image:url(../vendor/ext/images/default/tree/folder.gif); +} diff --git a/modules/organize/vendor/ext/images/default/tree/leaf.gif b/modules/organize/vendor/ext/images/default/tree/leaf.gif deleted file mode 100644 index 445769d3..00000000 Binary files a/modules/organize/vendor/ext/images/default/tree/leaf.gif and /dev/null differ diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php index 7bff576d..a386fa77 100644 --- a/modules/organize/views/organize_dialog.html.php +++ b/modules/organize/views/organize_dialog.html.php @@ -1,11 +1,5 @@ - +" /> +
 
+ diff --git a/modules/organize/views/organize_frame.html.php b/modules/organize/views/organize_frame.html.php index 16f78603..cdbf3be7 100644 --- a/modules/organize/views/organize_frame.html.php +++ b/modules/organize/views/organize_frame.html.php @@ -1,7 +1,7 @@ " /> " /> -" /> +" />