[24900] | 1 |
|
---|
| 2 | console.log("Loading format_jquery_prototypes.js\n");
|
---|
| 3 |
|
---|
| 4 | $(document).ready(function()
|
---|
| 5 | {
|
---|
| 6 | /*
|
---|
| 7 | var collection = "";
|
---|
| 8 |
|
---|
| 9 | var regex = new RegExp("[?&]c=");
|
---|
| 10 | var matches = regex.exec(document.URL);
|
---|
| 11 | if(matches != null)
|
---|
| 12 | {
|
---|
| 13 | var startIndex = matches.index;
|
---|
| 14 | var endIndex = document.URL.indexOf("&", startIndex + 1);
|
---|
| 15 |
|
---|
| 16 | if(endIndex == -1)
|
---|
| 17 | {
|
---|
| 18 | endIndex = document.URL.length;
|
---|
| 19 | }
|
---|
| 20 |
|
---|
| 21 | collection = document.URL.substring(startIndex, endIndex);
|
---|
| 22 | }
|
---|
| 23 | */
|
---|
| 24 |
|
---|
| 25 | //Retrieve the collection metadataset using ajax
|
---|
| 26 | $.ajax
|
---|
| 27 | ({
|
---|
| 28 | type: "GET",
|
---|
| 29 | url: "?a=g&s=CoverageMetadataRetrieve&o=xml&rt=r&c=" + host_info.collection_name,
|
---|
| 30 | success: function(data)
|
---|
| 31 | {
|
---|
| 32 | var str = "<select name=\"meta_select\" onChange=\"onSelectChange(this)\">";
|
---|
| 33 |
|
---|
| 34 | var selectorArea = document.getElementById("metadataSelector");
|
---|
| 35 | var metadataSets = data.getElementsByTagName("metadataSet");
|
---|
| 36 | for(var i = 0; i < metadataSets.length; i++)
|
---|
| 37 | {
|
---|
| 38 | var metadata = metadataSets[i].getElementsByTagName("metadata");
|
---|
| 39 | for(var j = 0; j < metadata.length; j++)
|
---|
| 40 | {
|
---|
| 41 | var metaValue = metadataSets[i].getAttribute("name") + "." + metadata[j].getAttribute("name");
|
---|
| 42 | str += "<option value=\"" + metaValue + "\">" + metaValue + "</option>";
|
---|
| 43 | }
|
---|
| 44 | }
|
---|
| 45 |
|
---|
| 46 | str += "</select>";
|
---|
| 47 |
|
---|
| 48 | selectorArea.innerHTML = str;
|
---|
| 49 | gsf_metadata_element = "<div class=\"gsf_metadata css_gsf_metadata block leaf\" title=\"gsf:metadata\"><table class=\"header\"><tbody><tr><td class=\"header\">" + str + "</td><td class=\"header\"><a href=\"#\" class=\"remove ui-icon ui-icon-closethick\" title=\"Click me to remove\"/></td></tr></tbody></table></div>";
|
---|
| 50 | //console.log("Metadata element from ajax: " + gsf_metadata_element);
|
---|
| 51 | }
|
---|
| 52 | });
|
---|
| 53 |
|
---|
| 54 | $.ui.draggable.prototype._createHelper = function(event) {
|
---|
| 55 | var o = this.options;
|
---|
| 56 | var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone().removeAttr('id') : this.element);
|
---|
| 57 |
|
---|
| 58 | var select = $(this.element).find('select');
|
---|
| 59 | var value = select.attr('value');
|
---|
| 60 | console.log("Found "+value+" in helper");
|
---|
| 61 | CURRENT_SELECT_VALUE = value;
|
---|
| 62 | helper.find('select').attr('value', value);
|
---|
| 63 |
|
---|
| 64 | if(!helper.parents('body').length)
|
---|
| 65 | helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));
|
---|
| 66 |
|
---|
| 67 | if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
|
---|
| 68 | helper.css("position", "absolute");
|
---|
| 69 |
|
---|
| 70 | return helper;
|
---|
| 71 |
|
---|
| 72 | };
|
---|
| 73 |
|
---|
| 74 | $.ui.sortable.prototype._removeCurrentsFromItems = function() {
|
---|
| 75 | //console.log("IN _removeCurrentsFromItems FUNCTION");
|
---|
| 76 | //console.log("this = " + this.currentItem[0].getAttribute('class'));
|
---|
| 77 | var list = this.currentItem.find(":data(sortable-item)");
|
---|
| 78 |
|
---|
| 79 | var i = 0;
|
---|
| 80 | while (i<this.items.length) {
|
---|
| 81 | var found_match = false;
|
---|
| 82 | for (var j=0; j<list.length; j++) {
|
---|
| 83 | if(this.items[i])
|
---|
| 84 | {
|
---|
| 85 | if(list[j] == this.items[i].item[0]) {
|
---|
| 86 | //console.log("Item to splice = " + this.items[i].item[0].getAttribute('class'));
|
---|
| 87 | this.items.splice(i,1);
|
---|
| 88 | found_match = true;
|
---|
| 89 | break;
|
---|
| 90 | }
|
---|
| 91 | }
|
---|
| 92 | };
|
---|
| 93 | if (!found_match)
|
---|
| 94 | i++;
|
---|
| 95 | else
|
---|
| 96 | break;
|
---|
| 97 | }
|
---|
| 98 | };
|
---|
| 99 |
|
---|
| 100 | $.ui.plugin.add("draggable", "connectToSortable", {
|
---|
| 101 | start: function(event, ui) {
|
---|
| 102 | //console.log("FUNCTION start draggable connectToSortable");
|
---|
| 103 | var inst = $(this).data("draggable"), o = inst.options, uiSortable = $.extend({}, ui, { item: inst.element });
|
---|
| 104 | inst.sortables = [];
|
---|
| 105 | $(o.connectToSortable).each(function() {
|
---|
| 106 | var sortable = $.data(this, 'sortable');
|
---|
| 107 | if (sortable && !sortable.options.disabled) {
|
---|
| 108 | inst.sortables.push({instance: sortable, shouldRevert: sortable.options.revert});
|
---|
| 109 | sortable._refreshItems(); //Do a one-time refresh at start to refresh the containerCache
|
---|
| 110 | sortable._trigger("activate", event, uiSortable);
|
---|
| 111 | }
|
---|
| 112 | });
|
---|
| 113 |
|
---|
| 114 | },
|
---|
| 115 | stop: function(event, ui) {
|
---|
| 116 |
|
---|
| 117 | //console.log("FUNCTION stop draggable connectToSortable");
|
---|
| 118 | //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
|
---|
| 119 | var inst = $(this).data("draggable"),
|
---|
| 120 | uiSortable = $.extend({}, ui, { item: inst.element });
|
---|
| 121 |
|
---|
| 122 | $.each(inst.sortables, function() {
|
---|
| 123 | if(this.instance.isOver) {
|
---|
| 124 |
|
---|
| 125 | this.instance.isOver = 0;
|
---|
| 126 |
|
---|
| 127 | inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
|
---|
| 128 | this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)
|
---|
| 129 |
|
---|
| 130 | //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
|
---|
| 131 | if(this.shouldRevert) this.instance.options.revert = true;
|
---|
| 132 |
|
---|
| 133 | //Trigger the stop of the sortable
|
---|
| 134 | //console.log("Draggable tells sortable to stop");
|
---|
| 135 | this.instance._mouseStop(event);
|
---|
| 136 |
|
---|
| 137 | this.instance.options.helper = this.instance.options._helper;
|
---|
| 138 |
|
---|
| 139 | //If the helper has been the original item, restore properties in the sortable
|
---|
| 140 | if(inst.options.helper == 'original')
|
---|
| 141 | this.instance.currentItem.css({ top: 'auto', left: 'auto' });
|
---|
| 142 |
|
---|
| 143 | } else {
|
---|
| 144 | this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
|
---|
| 145 | this.instance._trigger("deactivate", event, uiSortable);
|
---|
| 146 | }
|
---|
| 147 | });
|
---|
| 148 |
|
---|
| 149 | },
|
---|
| 150 | drag: function(event, ui) {
|
---|
| 151 | //console.log("FUNCTION drag draggable connectToSortable");
|
---|
| 152 |
|
---|
| 153 | var inst = $(this).data("draggable"), self = this;
|
---|
| 154 |
|
---|
| 155 | var checkPos = function(o) {
|
---|
| 156 | var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
|
---|
| 157 | var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
|
---|
| 158 | var itemHeight = o.height, itemWidth = o.width;
|
---|
| 159 | var itemTop = o.top, itemLeft = o.left;
|
---|
| 160 |
|
---|
| 161 | return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
|
---|
| 162 | };
|
---|
| 163 |
|
---|
| 164 | var intersecting_items = new Array();
|
---|
| 165 |
|
---|
| 166 | $.each(inst.sortables, function(i) {
|
---|
| 167 |
|
---|
| 168 | //Copy over some variables to allow calling the sortable's native _intersectsWith
|
---|
| 169 | this.instance.positionAbs = inst.positionAbs;
|
---|
| 170 | this.instance.helperProportions = inst.helperProportions;
|
---|
| 171 | this.instance.offset.click = inst.offset.click;
|
---|
| 172 |
|
---|
| 173 | if(this.instance._intersectsWith(this.instance.containerCache)) {
|
---|
| 174 |
|
---|
| 175 | //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
|
---|
| 176 | //if(!this.instance.isOver) {
|
---|
| 177 |
|
---|
| 178 | //console.log('Line 1113');
|
---|
| 179 |
|
---|
| 180 | // this.instance.isOver = 1;
|
---|
| 181 |
|
---|
| 182 | intersecting_items.push(this.instance); // sam
|
---|
| 183 | //} //sam
|
---|
| 184 |
|
---|
| 185 | //Now we fake the start of dragging for the sortable instance,
|
---|
| 186 | //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
|
---|
| 187 | //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
|
---|
| 188 | //sam this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
|
---|
| 189 | //sam this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
|
---|
| 190 | //sam this.instance.options.helper = function() { return ui.helper[0]; };
|
---|
| 191 |
|
---|
| 192 | //sam event.target = this.instance.currentItem[0];
|
---|
| 193 | //sam this.instance._mouseCapture(event, true);
|
---|
| 194 | //sam this.instance._mouseStart(event, true, true);
|
---|
| 195 |
|
---|
| 196 | //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
|
---|
| 197 | //sam this.instance.offset.click.top = inst.offset.click.top;
|
---|
| 198 | //sam this.instance.offset.click.left = inst.offset.click.left;
|
---|
| 199 | //sam this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
|
---|
| 200 | //sam this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;
|
---|
| 201 |
|
---|
| 202 | //sam inst._trigger("toSortable", event);
|
---|
| 203 | //sam inst.dropped = this.instance.element; //draggable revert needs that
|
---|
| 204 | //hack so receive/update callbacks work (mostly)
|
---|
| 205 | //sam inst.currentItem = inst.element;
|
---|
| 206 | //sam this.instance.fromOutside = inst;
|
---|
| 207 |
|
---|
| 208 | //sam brace
|
---|
| 209 |
|
---|
| 210 | //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
|
---|
| 211 | //sam if(this.instance.currentItem) this.instance._mouseDrag(event);
|
---|
| 212 |
|
---|
| 213 | } else {
|
---|
| 214 |
|
---|
| 215 | //If it doesn't intersect with the sortable, and it intersected before,
|
---|
| 216 | //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
|
---|
| 217 | if(this.instance.isOver) {
|
---|
| 218 |
|
---|
| 219 | console.log("UNSETTING ISOVER");
|
---|
| 220 | console.log("ON ITEM="+this.instance.currentItem[0].getAttribute('class'))
|
---|
| 221 | this.instance.isOver = 0;
|
---|
| 222 | this.instance.cancelHelperRemoval = true;
|
---|
| 223 |
|
---|
| 224 | //Prevent reverting on this forced stop
|
---|
| 225 | this.instance.options.revert = false;
|
---|
| 226 |
|
---|
| 227 | // The out event needs to be triggered independently
|
---|
| 228 | this.instance._trigger('out', event, this.instance._uiHash(this.instance));
|
---|
| 229 |
|
---|
| 230 | this.instance._mouseStop(event, true);
|
---|
| 231 | this.instance.options.helper = this.instance.options._helper;
|
---|
| 232 |
|
---|
| 233 | //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
|
---|
| 234 | //console.log("DO WE GET HERE?");
|
---|
| 235 | this.instance.currentItem.remove();
|
---|
| 236 | if(this.instance.placeholder) this.instance.placeholder.remove();
|
---|
| 237 |
|
---|
| 238 | inst._trigger("fromSortable", event);
|
---|
| 239 | inst.dropped = false; //draggable revert needs that
|
---|
| 240 |
|
---|
| 241 | }
|
---|
| 242 | }
|
---|
| 243 | });
|
---|
| 244 |
|
---|
| 245 | //sam
|
---|
| 246 | //console.log("Contents of intersecting_items");
|
---|
| 247 | var innermostContainer = null, innermostIndex = null;
|
---|
| 248 | for (i=0;i<intersecting_items.length;i++)
|
---|
| 249 | {
|
---|
| 250 | //console.log('ITEM: '+intersecting_items[i].element[0].getAttribute('class'));
|
---|
| 251 |
|
---|
| 252 | if(innermostContainer && $.ui.contains(intersecting_items[i].element[0], innermostContainer.element[0]))
|
---|
| 253 | continue;
|
---|
| 254 |
|
---|
| 255 | innermostContainer = intersecting_items[i];
|
---|
| 256 | innermostIndex = i;
|
---|
| 257 | }
|
---|
| 258 |
|
---|
| 259 | for (i=0;i<intersecting_items.length;i++)
|
---|
| 260 | {
|
---|
| 261 | if(intersecting_items[i] != innermostContainer)
|
---|
| 262 | if(intersecting_items[i].isOver) {
|
---|
| 263 |
|
---|
| 264 | console.log("UNSETTING ISOVER");
|
---|
| 265 | console.log("ON ITEM="+intersecting_items[i].currentItem[0].getAttribute('class'))
|
---|
| 266 | intersecting_items[i].isOver = 0;
|
---|
| 267 | intersecting_items[i].cancelHelperRemoval = true;
|
---|
| 268 |
|
---|
| 269 | //Prevent reverting on this forced stop
|
---|
| 270 | intersecting_items[i].options.revert = false;
|
---|
| 271 |
|
---|
| 272 | // The out event needs to be triggered independently
|
---|
| 273 | intersecting_items[i]._trigger('out', event, intersecting_items[i]._uiHash(intersecting_items[i]));
|
---|
| 274 |
|
---|
| 275 | intersecting_items[i]._mouseStop(event, true);
|
---|
| 276 | intersecting_items[i].options.helper = intersecting_items[i].options._helper;
|
---|
| 277 |
|
---|
| 278 | //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
|
---|
| 279 | //console.log("DO WE GET HERE?");
|
---|
| 280 | if(intersecting_items[i].currentItem) intersecting_items[i].currentItem.remove();
|
---|
| 281 | if(intersecting_items[i].placeholder) intersecting_items[i].placeholder.remove();
|
---|
| 282 |
|
---|
| 283 | inst._trigger("fromSortable", event);
|
---|
| 284 | inst.dropped = false; //draggable revert needs that
|
---|
| 285 | }
|
---|
| 286 |
|
---|
| 287 | intersecting_items[i].isOver = 0;
|
---|
| 288 | }
|
---|
| 289 |
|
---|
| 290 | if(innermostContainer && !innermostContainer.isOver)
|
---|
| 291 | {
|
---|
| 292 | console.log("INNER="+innermostContainer.element[0].getAttribute('class'));
|
---|
| 293 | console.log("SETTING ISOVER");
|
---|
| 294 | innermostContainer.isOver = 1;
|
---|
| 295 |
|
---|
| 296 | //Now we fake the start of dragging for the sortable instance,
|
---|
| 297 | //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
|
---|
| 298 | //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
|
---|
| 299 |
|
---|
| 300 | if(innermostContainer.currentItem) innermostContainer.currentItem.remove();
|
---|
| 301 | if(innermostContainer.placeholder) innermostContainer.placeholder.remove();
|
---|
| 302 |
|
---|
| 303 | innermostContainer.currentItem = $(self).clone().appendTo(innermostContainer.element).data("sortable-item", true);
|
---|
| 304 |
|
---|
| 305 | innermostContainer.options._helper = innermostContainer.options.helper; //Store helper option to later restore it
|
---|
| 306 | innermostContainer.options.helper = function() { return ui.helper[0]; };
|
---|
| 307 |
|
---|
| 308 | console.log("EVENT TARGET="+innermostContainer.currentItem[0].getAttribute('class'));
|
---|
| 309 | event.target = innermostContainer.currentItem[0];
|
---|
| 310 | innermostContainer._mouseCapture(event, true);
|
---|
| 311 | innermostContainer._mouseStart(event, true, true);
|
---|
| 312 |
|
---|
| 313 | //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
|
---|
| 314 | innermostContainer.offset.click.top = inst.offset.click.top;
|
---|
| 315 | innermostContainer.offset.click.left = inst.offset.click.left;
|
---|
| 316 | innermostContainer.offset.parent.left -= inst.offset.parent.left - innermostContainer.offset.parent.left;
|
---|
| 317 | innermostContainer.offset.parent.top -= inst.offset.parent.top - innermostContainer.offset.parent.top;
|
---|
| 318 |
|
---|
| 319 | inst._trigger("toSortable", event);
|
---|
| 320 | inst.dropped = innermostContainer.element; //draggable revert needs that
|
---|
| 321 | //hack so receive/update callbacks work (mostly)
|
---|
| 322 | inst.currentItem = inst.element;
|
---|
| 323 | innermostContainer.fromOutside = inst;
|
---|
| 324 |
|
---|
| 325 | //sam brace
|
---|
| 326 | }
|
---|
| 327 |
|
---|
| 328 | if(innermostContainer)
|
---|
| 329 | {
|
---|
| 330 | //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
|
---|
| 331 | if(innermostContainer.currentItem) innermostContainer._mouseDrag(event);
|
---|
| 332 | }
|
---|
| 333 |
|
---|
| 334 | }
|
---|
| 335 | });
|
---|
| 336 |
|
---|
| 337 | });
|
---|