leaflet map - path not working
This commit is contained in:
10
static/suit/js/djangocms.js
Normal file
10
static/suit/js/djangocms.js
Normal file
@@ -0,0 +1,10 @@
|
||||
$(function () {
|
||||
// Add AJAX loader
|
||||
$('.plugin-list .text').click(function(){
|
||||
var $target = $(this).parent().parent().parent().parent().children("div.plugin-editor");
|
||||
var $icon = $('<i/>').attr('id','suit-loading-icon');
|
||||
$icon.css({'display': 'inline-block', 'top': -25, 'left': 15, 'position': 'absolute'});
|
||||
$target.prepend($icon)
|
||||
|
||||
});
|
||||
});
|
||||
2
static/suit/js/jquery-1.8.3.min.js
vendored
Normal file
2
static/suit/js/jquery-1.8.3.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
4
static/suit/js/jquery-2.2.4.min.js
vendored
Normal file
4
static/suit/js/jquery-2.2.4.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
19
static/suit/js/jquery.autosize-min.js
vendored
Normal file
19
static/suit/js/jquery.autosize-min.js
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
// Wrap in Suit jQuery
|
||||
(function ($) {
|
||||
/*
|
||||
jQuery Autosize v1.16.5
|
||||
(c) 2013 Jack Moore - jacklmoore.com
|
||||
updated: 2013-02-11
|
||||
license: http://www.opensource.org/licenses/mit-license.php
|
||||
*/
|
||||
(function(e){var t,o={className:"autosizejs",append:"",callback:!1},i="hidden",n="border-box",s="lineHeight",a='<textarea tabindex="-1" style="position:absolute; top:-999px; left:0; right:auto; bottom:auto; border:0; -moz-box-sizing:content-box; -webkit-box-sizing:content-box; box-sizing:content-box; word-wrap:break-word; height:0 !important; min-height:0 !important; overflow:hidden;"/>',r=["fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","textTransform","wordSpacing","textIndent"],l="oninput",c="onpropertychange",h=e(a).data("autosize",!0)[0];h.style.lineHeight="99px","99px"===e(h).css(s)&&r.push(s),h.style.lineHeight="",e.fn.autosize=function(s){return s=e.extend({},o,s||{}),h.parentNode!==document.body&&e(document.body).append(h),this.each(function(){function o(){t=b,h.className=s.className,e.each(r,function(e,t){h.style[t]=f.css(t)})}function a(){var e,n,a;if(t!==b&&o(),!d){d=!0,h.value=b.value+s.append,h.style.overflowY=b.style.overflowY,a=parseInt(b.style.height,10),h.style.width=Math.max(f.width(),0)+"px",h.scrollTop=0,h.scrollTop=9e4,e=h.scrollTop;var r=parseInt(f.css("maxHeight"),10);r=r&&r>0?r:9e4,e>r?(e=r,n="scroll"):p>e&&(e=p),e+=g,b.style.overflowY=n||i,a!==e&&(b.style.height=e+"px",x&&s.callback.call(b)),setTimeout(function(){d=!1},1)}}var p,d,u,b=this,f=e(b),g=0,x=e.isFunction(s.callback);f.data("autosize")||((f.css("box-sizing")===n||f.css("-moz-box-sizing")===n||f.css("-webkit-box-sizing")===n)&&(g=f.outerHeight()-f.height()),p=Math.max(parseInt(f.css("minHeight"),10)-g,f.height()),u="none"===f.css("resize")||"vertical"===f.css("resize")?"none":"horizontal",f.css({overflow:i,overflowY:i,wordWrap:"break-word",resize:u}).data("autosize",!0),c in b?l in b?b[l]=b.onkeyup=a:b[c]=a:b[l]=a,e(window).resize(function(){d=!1,a()}),f.bind("autosize",function(){d=!1,a()}),a())})}})(window.jQuery||window.Zepto);
|
||||
|
||||
/*
|
||||
Custom hook for Django Suit inlines
|
||||
*/
|
||||
$(function () {
|
||||
Suit.after_inline.register('autosize_textarea', function (inline_prefix, row) {
|
||||
$(row).find('.autosize').autosize()
|
||||
});
|
||||
});
|
||||
}(Suit.$));
|
||||
167
static/suit/js/sortables.js
Normal file
167
static/suit/js/sortables.js
Normal file
@@ -0,0 +1,167 @@
|
||||
/**
|
||||
* List sortables
|
||||
*/
|
||||
(function ($) {
|
||||
$.fn.suit_list_sortable = function () {
|
||||
var $inputs = $(this);
|
||||
if (!$inputs.length)
|
||||
return;
|
||||
|
||||
// Detect if this is normal or mptt table
|
||||
var mptt_table = $inputs.first().closest('table').hasClass('table-mptt');
|
||||
|
||||
function perform_move($arrow, $row) {
|
||||
var $next, $prev;
|
||||
if (mptt_table) {
|
||||
function get_padding($tr) {
|
||||
return parseInt($tr.find('th:first').css('padding-left'));
|
||||
}
|
||||
|
||||
function find_with_children($tr) {
|
||||
var padding = get_padding($tr);
|
||||
return $tr.nextUntil(function () {
|
||||
return get_padding($(this)) <= padding
|
||||
}).andSelf();
|
||||
}
|
||||
|
||||
$('.selected').removeClass('selected');
|
||||
var padding = get_padding($row);
|
||||
var $rows_to_move = find_with_children($row);
|
||||
if ($arrow.data('dir') === 'down') {
|
||||
$next = $rows_to_move.last().next();
|
||||
if ($next.length && get_padding($next) === padding) {
|
||||
var $after = find_with_children($next).last();
|
||||
if ($after.length) {
|
||||
$rows_to_move.insertAfter($after).addClass('selected');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$prev = $row.prevUntil(function () {
|
||||
return get_padding($(this)) <= padding
|
||||
}).andSelf().first().prev();
|
||||
if ($prev.length && get_padding($prev) === padding) {
|
||||
$rows_to_move.insertBefore($prev).addClass('selected')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$('.selected').removeClass('selected');
|
||||
if ($arrow.data('dir') === 'down') {
|
||||
$next = $row.next();
|
||||
if ($next.is(':visible') && $next.length) {
|
||||
$row.insertAfter($next).addClass('selected')
|
||||
}
|
||||
} else {
|
||||
$prev = $row.prev();
|
||||
if ($prev.is(':visible') && $prev.length) {
|
||||
$row.insertBefore($prev).addClass('selected')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function on_arrow_click(e) {
|
||||
var $sortable = $(this);
|
||||
var $row = $sortable.closest(
|
||||
$sortable.hasClass('sortable-stacked') ? 'div.inline-related' : 'tr'
|
||||
);
|
||||
perform_move($sortable, $row);
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
function create_link(text, direction, on_click_func, is_stacked) {
|
||||
return $('<a/>').attr('href', '#')
|
||||
.addClass('sortable sortable-' + direction +
|
||||
(is_stacked ? ' sortable-stacked' : ''))
|
||||
.attr('data-dir', direction).html(text)
|
||||
.click(on_click_func);
|
||||
}
|
||||
|
||||
$inputs.each(function () {
|
||||
var $inline_sortable = $('<div class="inline-sortable"/>'),
|
||||
icon = '<i class="icon-arrow-up icon-alpha5"></i>',
|
||||
$sortable = $(this),
|
||||
is_stacked = $sortable.hasClass('suit-sortable-stacked');
|
||||
|
||||
var $up_link = create_link(icon, 'up', on_arrow_click, is_stacked),
|
||||
$down_link = create_link(icon.replace('-up', '-down'), 'down', on_arrow_click, is_stacked);
|
||||
|
||||
if (is_stacked) {
|
||||
var $sortable_row = $sortable.closest('div.form-row'),
|
||||
$stacked_block = $sortable.closest('div.inline-related'),
|
||||
$links_span = $('<span/>').attr('class', 'stacked-inline-sortable');
|
||||
|
||||
// Add arrows to header h3, move order input and remove order field row
|
||||
$links_span.append($up_link).append($down_link);
|
||||
$stacked_block.find('h3').append($links_span);
|
||||
$stacked_block.append($sortable);
|
||||
$sortable_row.remove();
|
||||
} else {
|
||||
$sortable.parent().append($inline_sortable);
|
||||
$inline_sortable.append($up_link);
|
||||
$inline_sortable.append($down_link);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Filters out unchanged checkboxes, selects and sortable field itself
|
||||
function filter_unchanged(i, input) {
|
||||
if (input.type == 'checkbox') {
|
||||
if (input.defaultChecked == input.checked) {
|
||||
return false;
|
||||
}
|
||||
} else if (input.type == 'select-one' || input.type == 'select-multiple') {
|
||||
var options = input.options, option;
|
||||
for (var j = 0; j < options.length; j++) {
|
||||
option = options[j];
|
||||
if (option.selected && option.selected == option.defaultSelected) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var $input = $(input);
|
||||
if ($input.hasClass('suit-sortable')) {
|
||||
if (input.defaultValue == input.value && input.value == 0) {
|
||||
return false;
|
||||
}
|
||||
} else if (!$input.val()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Update input count right before submit
|
||||
if ($inputs && $inputs.length) {
|
||||
var $last_input = $inputs.last();
|
||||
var selector = $(this).selector;
|
||||
$($last_input[0].form).submit(function (e) {
|
||||
var i = 0, value;
|
||||
$(selector).each(function () {
|
||||
var $input = $(this);
|
||||
var fieldset_id = $input.attr('name').split(/-\d+-/)[0];
|
||||
// Check if any of new dynamic block values has been added
|
||||
var $set_block = $input.closest('.dynamic-' + fieldset_id);
|
||||
var $changed_fields = $set_block.find(":input[type!='hidden']").filter(filter_unchanged);
|
||||
if (!$set_block.length
|
||||
|| $set_block.hasClass('has_original')
|
||||
|| $changed_fields.serialize()
|
||||
// Since jQuery serialize() doesn't include type=file do additional check
|
||||
|| $changed_fields.find(":input[type='file']").addBack().length) {
|
||||
value = i++;
|
||||
$input.val(value);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Suit.after_inline.register('bind_sortable_arrows', function (prefix, row) {
|
||||
$(row).find('.sortable').click(on_arrow_click);
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
$(function () {
|
||||
$('.suit-sortable').suit_list_sortable();
|
||||
});
|
||||
|
||||
}(Suit.$));
|
||||
69
static/suit/js/suit-form-confirm.js
Normal file
69
static/suit/js/suit-form-confirm.js
Normal file
@@ -0,0 +1,69 @@
|
||||
/**
|
||||
* Determines if a form is dirty by comparing the current value of each element
|
||||
* with its default value.
|
||||
*
|
||||
* @param {Form} form the form to be checked.
|
||||
* @return {Boolean} <code>true</code> if the form is dirty, <code>false</code>
|
||||
* otherwise.
|
||||
*
|
||||
* Taken from here: http://stackoverflow.com/a/155812/641263
|
||||
*/
|
||||
|
||||
var confirmExitIfModified = (function () {
|
||||
|
||||
function formIsDirty(form) {
|
||||
for (var i = 0; i < form.elements.length; i++) {
|
||||
var element = form.elements[i];
|
||||
var type = element.type;
|
||||
if (type == "checkbox" || type == "radio") {
|
||||
if (element.checked != element.defaultChecked) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (type == "hidden" || type == "password" ||
|
||||
type == "text" || type == "textarea") {
|
||||
var cls = element.getAttribute('class');
|
||||
if (!cls) cls = '';
|
||||
if (element.value != element.defaultValue &&
|
||||
// Fix for select2 multiple
|
||||
cls.indexOf('select2') == -1 &&
|
||||
// Skip elements with ignore-changes class
|
||||
cls.indexOf('ignore-changes') == -1
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (type == "select-one" || type == "select-multiple") {
|
||||
for (var j = 0; j < element.options.length; j++) {
|
||||
if (element.options[j].selected !=
|
||||
element.options[j].defaultSelected) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
var submit = false;
|
||||
return function (form_id, message) {
|
||||
var form = document.forms[form_id]
|
||||
if (form) {
|
||||
form.onsubmit = function (e) {
|
||||
e = e || window.event;
|
||||
submit = true
|
||||
};
|
||||
}
|
||||
window.onbeforeunload = function (e) {
|
||||
e = e || window.event;
|
||||
if (!submit && formIsDirty(form)) {
|
||||
// For IE and Firefox
|
||||
if (e) {
|
||||
e.returnValue = message;
|
||||
}
|
||||
// For Safari
|
||||
return message;
|
||||
}
|
||||
};
|
||||
};
|
||||
})();
|
||||
199
static/suit/js/suit.js
Normal file
199
static/suit/js/suit.js
Normal file
@@ -0,0 +1,199 @@
|
||||
(function ($) {
|
||||
|
||||
// Register callbacks to perform after inline has been added
|
||||
Suit.after_inline = function () {
|
||||
var functions = {};
|
||||
var register = function (fn_name, fn_callback) {
|
||||
functions[fn_name] = fn_callback;
|
||||
};
|
||||
|
||||
var run = function (inline_prefix, row) {
|
||||
for (var fn_name in functions) {
|
||||
functions[fn_name](inline_prefix, row);
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
register: register,
|
||||
run: run
|
||||
};
|
||||
}();
|
||||
|
||||
// Backwards compatiblity
|
||||
SuitAfterInline = Suit.after_inline;
|
||||
|
||||
/**
|
||||
* Fixed submit buttons.
|
||||
*/
|
||||
$.fn.suit_fixed = function () {
|
||||
$(this).each(function () {
|
||||
// extra_offset: 70 (60 Footer height + 10 top offset)
|
||||
var $fixed_item = $(this), pos = $fixed_item.offset(), extra_offset = 70;
|
||||
$(window).bind('scroll.sl resize.sl load.sl', function (e) {
|
||||
var $win = $(this), scroll_top = $win.scrollTop();
|
||||
if ($fixed_item.height() < $win.height() &&
|
||||
scroll_top > (pos.top - 10) &&
|
||||
$fixed_item.height() < $win.height()) {
|
||||
!$fixed_item.hasClass('fixed') && $fixed_item.addClass('fixed');
|
||||
var max_top = Math.min(10, $(document).height() - $fixed_item.height() - scroll_top - extra_offset);
|
||||
$fixed_item.css('top', max_top + 'px');
|
||||
}
|
||||
else if (scroll_top <= (pos.top - 10) &&
|
||||
$fixed_item.hasClass('fixed')) {
|
||||
$fixed_item.removeClass('fixed');
|
||||
}
|
||||
});
|
||||
|
||||
$(window).trigger('scroll.sl');
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Search filters - submit only changed fields
|
||||
*/
|
||||
$.fn.suit_search_filters = function () {
|
||||
$(this).change(function () {
|
||||
var $field = $(this);
|
||||
var $option = $field.find('option:selected');
|
||||
var select_name = $option.data('name');
|
||||
if (select_name) {
|
||||
$field.attr('name', select_name);
|
||||
} else {
|
||||
$field.removeAttr('name');
|
||||
}
|
||||
// Handle additional values for date filters
|
||||
var additional = $option.data('additional');
|
||||
if (additional) {
|
||||
var hidden_id = $field.data('name') + '_add';
|
||||
var $hidden = $('#' + hidden_id);
|
||||
if (!$hidden.length) {
|
||||
$hidden = $('<input/>').attr('type', 'hidden').attr('id', hidden_id);
|
||||
$field.after($hidden);
|
||||
}
|
||||
additional = additional.split('=');
|
||||
$hidden.attr('name', additional[0]).val(additional[1])
|
||||
}
|
||||
});
|
||||
$(this).trigger('change');
|
||||
};
|
||||
|
||||
/**
|
||||
* Linked select - shows link to related item after Select
|
||||
*/
|
||||
$.fn.suit_linked_select = function () {
|
||||
|
||||
var get_link_name = function ($select) {
|
||||
var text = $select.find('option:selected').text();
|
||||
return text && $select.val() ? text + '' : '';
|
||||
};
|
||||
|
||||
var get_url = function ($add_link, $select) {
|
||||
var value = $select.val();
|
||||
return $add_link.attr('href').split('?')[0] + '../' + value + '/';
|
||||
};
|
||||
|
||||
var add_link = function ($select) {
|
||||
var $add_link = $select.next();
|
||||
if ($add_link.hasClass('add-another')) {
|
||||
var $link = $add_link.next('a');
|
||||
if (!$link.length) {
|
||||
$link = $('<a/>').addClass('linked-select-link');
|
||||
$add_link.after($link).after(' ');
|
||||
}
|
||||
$link.text(get_link_name($select));
|
||||
$link.attr('href', get_url($add_link, $select));
|
||||
}
|
||||
};
|
||||
|
||||
$(this).each(function () {
|
||||
add_link($(this));
|
||||
});
|
||||
|
||||
$(document).on('change', this.selector, function () {
|
||||
add_link($(this));
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Content tabs
|
||||
*/
|
||||
$.fn.suit_form_tabs = function () {
|
||||
|
||||
var $tabs = $(this);
|
||||
var tab_prefix = $tabs.data('tab-prefix');
|
||||
if (!tab_prefix)
|
||||
return;
|
||||
|
||||
var $tab_links = $tabs.find('a');
|
||||
|
||||
function tab_contents($link) {
|
||||
return $('.' + tab_prefix + '-' + $link.attr('href').replace('#', ''));
|
||||
}
|
||||
|
||||
function activate_tabs() {
|
||||
// Init tab by error, by url hash or init first tab
|
||||
if (window.location.hash) {
|
||||
var found_error;
|
||||
$tab_links.each(function () {
|
||||
var $link = $(this);
|
||||
if (tab_contents($link).find('.error').length != 0) {
|
||||
$link.addClass('error');
|
||||
$link.trigger('click');
|
||||
found_error = true;
|
||||
}
|
||||
});
|
||||
!found_error && $($tabs).find('a[href=\\' + window.location.hash + ']').click();
|
||||
} else {
|
||||
$tab_links.first().trigger('click');
|
||||
}
|
||||
}
|
||||
|
||||
$tab_links.click(function () {
|
||||
var $link = $(this);
|
||||
$link.parent().parent().find('.active').removeClass('active');
|
||||
$link.parent().addClass('active');
|
||||
$('.' + tab_prefix).removeClass('show').addClass('hide');
|
||||
tab_contents($link).removeClass('hide').addClass('show')
|
||||
});
|
||||
|
||||
activate_tabs();
|
||||
};
|
||||
|
||||
/**
|
||||
* Avoids double-submit issues in the change_form.
|
||||
*/
|
||||
$.fn.suit_form_debounce = function () {
|
||||
var $form = $(this),
|
||||
$saveButtons = $form.find('.submit-row button'),
|
||||
submitting = false;
|
||||
|
||||
$form.submit(function () {
|
||||
if (submitting) {
|
||||
return false;
|
||||
}
|
||||
|
||||
submitting = true;
|
||||
$saveButtons.addClass('disabled');
|
||||
|
||||
setTimeout(function () {
|
||||
$saveButtons.removeClass('disabled');
|
||||
submitting = false;
|
||||
}, 5000);
|
||||
});
|
||||
};
|
||||
|
||||
$(function () {
|
||||
|
||||
// Fixed submit buttons
|
||||
$('.inner-right-column').suit_fixed();
|
||||
|
||||
// Show link to related item after Select
|
||||
$('.linked-select').suit_linked_select();
|
||||
|
||||
// Handle change list filter null values
|
||||
$('.search-filter').suit_search_filters();
|
||||
|
||||
});
|
||||
|
||||
}(Suit.$));
|
||||
Reference in New Issue
Block a user