Skip to content

Commit

Permalink
Merge d49ccd5 into 6e48243
Browse files Browse the repository at this point in the history
  • Loading branch information
Johnny Mijnhout committed Jul 18, 2017
2 parents 6e48243 + d49ccd5 commit 585ce3c
Show file tree
Hide file tree
Showing 28 changed files with 15,225 additions and 551 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
Andrey Rusanov (@andreyrusanov)
Arjan Peddemors (@arpe)
Bas Koopmans (@baskoopmans)
Bart van der Waerden (@BartvdWaerden)
David Esteves (@David-Esteves)
Johnny Mijnhout (@johnnymijnhout)
Jose Moreira (@zemanel)
Expand Down
57 changes: 48 additions & 9 deletions arctic/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Basic mixins for generic class based views.
"""

from __future__ import (absolute_import, unicode_literals)
import importlib

from django.conf import settings
from django.contrib import messages
Expand All @@ -14,11 +14,23 @@

from arctic.loading import (get_role_model, get_user_role_model)
from arctic.utils import view_from_url
from arctic.widgets import SelectAutoComplete
from arctic.widgets import SelectizeAutoComplete

Role = get_role_model()
UserRole = get_user_role_model()

try:
ARCTIC_WIDGET_OVERLOADS = settings.ARCTIC_WIDGET_OVERLOADS
except AttributeError:
ARCTIC_WIDGET_OVERLOADS = {
'DateInput': 'arctic.widgets.DatePickerInput',
'DateTimeInput': 'arctic.widgets.DateTimePickerInput',
'TimeInput': 'arctic.widgets.TimePickerInput',
'Select': 'arctic.widgets.Selectize',
'SelectMultiple': 'arctic.widgets.SelectizeMultiple',
'MultipleChoiceField': 'arctic.widgets.Selectize',
}


class SuccessMessageMixin(object):
"""
Expand Down Expand Up @@ -78,6 +90,7 @@ class LayoutMixin(object):
|--> Rows
|--> Fields
"""
use_widget_overloads = True
layout = None
_fields = []
readonly_fields = None
Expand Down Expand Up @@ -201,8 +214,7 @@ def _return_fieldset(self, fieldset):
raise ImproperlyConfigured('The fieldset name does not '
'support more than one | sign. '
'It\'s meant to separate a '
'fieldset from its '
'description.')
'fieldset from its description.')

title = fieldset
if fieldset and fieldset[0] == '-':
Expand Down Expand Up @@ -261,8 +273,10 @@ def _return_field(self, field):
return None

def update_form_fields(self, form):
widgets_to_be_overloaded = ARCTIC_WIDGET_OVERLOADS.keys()
for field in form.fields:
if form.fields[field].__class__.__name__ == 'ModelChoiceField':
field_class_name = form.fields[field].__class__.__name__
if field_class_name == 'ModelChoiceField':
for key, values in settings.ARCTIC_AUTOCOMPLETE.items():
field_cls = '.'.join(values[0].lower().split('.')[-2:])
if field_cls == str(form.fields[field].queryset.
Expand All @@ -274,10 +288,35 @@ def update_form_fields(self, form):
'_id')
field_value = getattr(form.instance, field)
choices = ((field_id, field_value),)
form.fields[field].widget = SelectAutoComplete(
attrs={'url': url,
'class': 'js-selectize-autocomplete'},
choices=choices)
form.fields[field].widget = SelectizeAutoComplete(
attrs=form.fields[field].widget.attrs,
choices=choices,
url=url)
if self.use_widget_overloads:
widget_class = form.fields[field].widget.__class__.__name__
if widget_class in widgets_to_be_overloaded:
module, wdgt = ARCTIC_WIDGET_OVERLOADS[widget_class].\
rsplit('.', 1)
new_widget_module = importlib.import_module(module)
new_widget_class = getattr(new_widget_module, wdgt)
new_widget = None
if widget_class in ('Select', 'SelectMultiple',
'ToggleSelectWidget', 'LazySelect'):
new_widget = new_widget_class(
form.fields[field].widget.attrs,
form.fields[field].widget.choices)
elif widget_class in ('DateInput', 'DateTimeInput',
'TimeInput'):
new_widget = new_widget_class(
form.fields[field].widget.attrs,
form.fields[field].widget.format)
new_widget.supports_microseconds = \
form.fields[field].widget.supports_microseconds
else:
new_widget = new_widget_class(
form.fields[field].widget.attrs)
form.fields[field].widget = new_widget

if self.readonly_fields and field in self.readonly_fields:
form.fields[field].widget.attrs['readonly'] = True
return form
Expand Down
3 changes: 2 additions & 1 deletion arctic/static/arctic/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,14 @@ PATHS:

# Arctic JS deps
- "node_modules/selectize/dist/js/standalone/selectize.js"
#- "node_modules/sortablejs/Sortable.js"
- "node_modules/sortablejs/Sortable.js"

# Paths to your own project code are here
- "src/assets/js/utils/helpers.js"
- "src/assets/js/components/conditional-field.js"
- "src/assets/js/components/form.js"
- "src/assets/js/components/reveal-iframe.js"
- "src/assets/js/components/toggle_form.js"
- "src/assets/js/components/widgets.js"
- "src/assets/js/!(app).js"
- "src/assets/js/app.js"
4 changes: 2 additions & 2 deletions arctic/static/arctic/dist/assets/css/arctic.css

Large diffs are not rendered by default.

14,757 changes: 14,757 additions & 0 deletions arctic/static/arctic/dist/assets/js/app.js

Large diffs are not rendered by default.

134 changes: 1 addition & 133 deletions arctic/static/arctic/src/assets/js/app.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//Mobile menu controlss
//Mobile menu controls
$('#menu-button').click(function (e) {
$(this).toggleClass('is-active');
$('.row-offcanvas').toggleClass('active');
Expand All @@ -10,136 +10,6 @@ $(function () {
$('[data-toggle="tooltip"]').tooltip()
})

String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.split(search).join(replacement);
}

function lowerCaseKeys(dict) {
var key, keys = Object.keys(dict);
var n = keys.length;
var new_dict={}
while (n--) {
key = keys[n];
new_dict[key.toLowerCase()] = dict[key];
}
return new_dict;
}

// convert date format specification from the django/php syntax to the js
// datepicker spec
function django2datepicker(django_format) {
var translation_dict = {
'%': '',
'y': 'yy',
'Y': 'yyyy',
'm': 'mm',
'd': 'dd',
'H': 'hh',
'I': 'hh',
'M': 'ii',
'p': 'aa',
'S': ''
}

var datepicker_format = '';
for (var i = 0, len = django_format.length; i < len; i++) {
if (django_format[i] in translation_dict) {
datepicker_format += translation_dict[django_format[i]];
}
else {
datepicker_format += django_format[i];
}
}

if (datepicker_format.slice(-1) == ':') {
datepicker_format = datepicker_format.slice(0, -1);
}

return datepicker_format;
}

function set_input_widgets() {
var s = $('.js-selectize');
if ( s.length ) {
s.selectize(
{
allowEmptyOption: true,
highlight: false,
plugins: ['remove_button']
}
);
}


var s_tags = $('.js-selectize-tags');
if (s_tags.length) {
s_tags.selectize({
delimiter: ',',
persist: false,
plugins: ['remove_button'],
create: function(input) {
return {
value: input,
text: input
}
}
});
}

$('.js-selectize-autocomplete').each(function(index) {
var url = $(this).attr('url');
$(this).selectize({
valueField: 'value',
labelField: 'label',
searchField: 'label',
create: false,
load: function(query, callback) {
if (!query.length) return callback();
$.ajax({
url: url + encodeURIComponent(query),
type: 'GET',
error: function() {
callback();
},
success: function(res) {
callback(res.options);
}
});
}
});
});

$('.js-datepicker').each(function(index) {
$(this).datepicker({
todayButton: true,
language: 'en',
startDate: $(this).attr("date") == '' ? new Date() : new Date($(this).attr("date")),
dateFormat: django2datepicker(DATE_FORMAT)
});
});

$('.js-timepicker').each(function(index) {
$(this).datepicker({
onlyTimepicker: true,
language: 'en',
startDate: $(this).attr("date") == '' ? new Date() : new Date($(this).attr("date")),
timeFormat: django2datepicker(TIME_FORMAT),
timepicker: true
});
});

$('.js-datetimepicker').each(function(index) {
$(this).datepicker({
language: 'en',
todayButton: true,
startDate: $(this).attr("date") == '' ? new Date() : new Date($(this).attr("date")),
dateFormat: django2datepicker(DATE_FORMAT),
timeFormat: django2datepicker(TIME_FORMAT),
timepicker: true
});
});
}

// jquery stuff goes here
$(document).ready(function() {
Expand Down Expand Up @@ -180,6 +50,4 @@ $(document).ready(function() {
document.title = document.title.slice(2);
});
}

set_input_widgets();
});

0 comments on commit 585ce3c

Please sign in to comment.