feature 3077 : fix addAlbum process when creating the first ever album, improve data API
git-svn-id: http://piwigo.org/svn/trunk@28555 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
parent
7b3783c981
commit
9a842dd86a
8 changed files with 84 additions and 63 deletions
|
|
@ -84,17 +84,20 @@
|
|||
|
||||
/*
|
||||
* Load Selectize with cache content
|
||||
* @param $target {jQuery}
|
||||
* @param $target {jQuery} may have some data attributes (create, default, value)
|
||||
* @param options {object}
|
||||
* - value (optional) list of preselected items (ids, or objects with "id" attribute")
|
||||
* - default (optional) default value which will be forced if the select is emptyed
|
||||
* - create (optional) allow item user creation
|
||||
* - filter (optional) function called for each select before applying the data
|
||||
* takes two parameters: cache data, options
|
||||
* must return new data
|
||||
*/
|
||||
AbstractSelectizer.prototype._selectize = function($target, options) {
|
||||
AbstractSelectizer.prototype._selectize = function($target, globalOptions) {
|
||||
this.get(function(data) {
|
||||
$target.each(function() {
|
||||
var filtered, value;
|
||||
var filtered, value, defaultValue,
|
||||
options = $.extend({}, globalOptions);
|
||||
|
||||
// apply filter function
|
||||
if (options.filter != undefined) {
|
||||
|
|
@ -105,10 +108,11 @@
|
|||
}
|
||||
|
||||
// active creation mode
|
||||
if (this.hasAttribute('data-selectize-create')) {
|
||||
this.selectize.settings.create = true;
|
||||
if (this.hasAttribute('data-create')) {
|
||||
options.create = true;
|
||||
}
|
||||
|
||||
this.selectize.settings.create = !!options.create;
|
||||
|
||||
// load options
|
||||
this.selectize.load(function(callback) {
|
||||
if ($.isEmptyObject(this.options)) {
|
||||
|
|
@ -118,6 +122,9 @@
|
|||
|
||||
// load items
|
||||
if ((value = $(this).data('value'))) {
|
||||
options.value = value;
|
||||
}
|
||||
if (options.value != undefined) {
|
||||
$.each(value, $.proxy(function(i, cat) {
|
||||
if ($.isNumeric(cat))
|
||||
this.selectize.addItem(cat);
|
||||
|
|
@ -126,6 +133,14 @@
|
|||
}, this));
|
||||
}
|
||||
|
||||
// set default
|
||||
if ((defaultValue = $(this).data('default'))) {
|
||||
options.default = defaultValue;
|
||||
}
|
||||
if (options.default == 'first') {
|
||||
options.default = filtered[0] ? filtered[0].id : undefined;
|
||||
}
|
||||
|
||||
if (options.default != undefined) {
|
||||
// add default item
|
||||
if (this.selectize.getValue() == '') {
|
||||
|
|
|
|||
|
|
@ -4,19 +4,23 @@ jQuery.fn.pwgAddAlbum = function(options) {
|
|||
}
|
||||
|
||||
var $popup = jQuery('#addAlbumForm');
|
||||
if (!$popup.data('init')) {
|
||||
$popup.find('[name="category_parent"]').selectize({
|
||||
valueField: 'id',
|
||||
labelField: 'fullname',
|
||||
sortField: 'global_rank',
|
||||
searchField: ['fullname'],
|
||||
plugins: ['remove_button'],
|
||||
onInitialize: function() {
|
||||
this.on('dropdown_close', function() {
|
||||
if (this.getValue() == '') {
|
||||
this.setValue(0);
|
||||
}
|
||||
|
||||
function init() {
|
||||
if ($popup.data('init')) {
|
||||
return;
|
||||
}
|
||||
$popup.data('init', true);
|
||||
|
||||
options.cache.selectize($popup.find('[name="category_parent"]'), {
|
||||
'default': 0,
|
||||
'filter': function(categories) {
|
||||
categories.push({
|
||||
id: 0,
|
||||
fullname: '------------',
|
||||
global_rank: 0
|
||||
});
|
||||
|
||||
return categories;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -47,10 +51,12 @@ jQuery.fn.pwgAddAlbum = function(options) {
|
|||
jQuery('[data-add-album="'+ target +'"]').colorbox.close();
|
||||
|
||||
var newAlbum = data.result.id,
|
||||
newAlbum_name = '';
|
||||
newAlbum_name = '',
|
||||
newAlbum_rank = '0';
|
||||
|
||||
if (parent_id != 0) {
|
||||
newAlbum_name = albumParent[0].selectize.options[parent_id].fullname +' / ';
|
||||
newAlbum_rank = albumParent[0].selectize.options[parent_id].global_rank +'.1';
|
||||
}
|
||||
newAlbum_name+= name;
|
||||
|
||||
|
|
@ -74,12 +80,24 @@ jQuery.fn.pwgAddAlbum = function(options) {
|
|||
}
|
||||
// target is selectize
|
||||
else {
|
||||
$albumSelect[0].selectize.addOption({
|
||||
id: newAlbum,
|
||||
fullname: newAlbum_name
|
||||
});
|
||||
var selectize = $albumSelect[0].selectize;
|
||||
|
||||
$albumSelect[0].selectize.setValue(newAlbum);
|
||||
if (jQuery.isEmptyObject(selectize.options)) {
|
||||
options.cache.clear();
|
||||
options.cache.selectize($albumSelect, {
|
||||
'default': newAlbum,
|
||||
'value': newAlbum
|
||||
});
|
||||
}
|
||||
else {
|
||||
$albumSelect[0].selectize.addOption({
|
||||
id: newAlbum,
|
||||
fullname: newAlbum_name,
|
||||
global_rank: newAlbum_rank
|
||||
});
|
||||
|
||||
$albumSelect[0].selectize.setValue(newAlbum);
|
||||
}
|
||||
}
|
||||
|
||||
albumParent.val('');
|
||||
|
|
@ -98,25 +116,9 @@ jQuery.fn.pwgAddAlbum = function(options) {
|
|||
href: '#addAlbumForm',
|
||||
width: 350, height: 300,
|
||||
onComplete: function() {
|
||||
var albumParent = $popup.find('[name="category_parent"]')[0];
|
||||
|
||||
init();
|
||||
$popup.data('target', jQuery(this).data('addAlbum'));
|
||||
|
||||
albumParent.selectize.clearOptions();
|
||||
|
||||
options.cache.get(function(categories) {
|
||||
categories.push({
|
||||
id: 0,
|
||||
fullname: '------------',
|
||||
global_rank: 0
|
||||
});
|
||||
|
||||
albumParent.selectize.load(function(callback) {
|
||||
callback(categories);
|
||||
});
|
||||
|
||||
albumParent.selectize.setValue(0);
|
||||
});
|
||||
$popup.find('[name=category_name]').focus();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,6 @@ jQuery(document).ready(function() {ldelim}
|
|||
return filtered;
|
||||
}
|
||||
else {
|
||||
options.default = categories[0].id;
|
||||
return categories;
|
||||
}
|
||||
}
|
||||
|
|
@ -603,7 +602,7 @@ $(document).ready(function() {
|
|||
<input type="checkbox" name="filter_category_use" class="useFilterCheckbox" {if isset($filter.category)}checked="checked"{/if}>
|
||||
{'Album'|@translate}
|
||||
<select data-selectize="categories" data-value="{$filter_category_selected|@json_encode|escape:html}"
|
||||
name="filter_category" style="width:400px"></select>
|
||||
data-default="first" name="filter_category" style="width:400px"></select>
|
||||
<label><input type="checkbox" name="filter_category_recursive" {if isset($filter.category_recursive)}checked="checked"{/if}> {'include child albums'|@translate}</label>
|
||||
</li>
|
||||
|
||||
|
|
@ -612,6 +611,7 @@ $(document).ready(function() {
|
|||
<input type="checkbox" name="filter_tags_use" class="useFilterCheckbox" {if isset($filter.tags)}checked="checked"{/if}>
|
||||
{'Tags'|@translate}
|
||||
<select data-selectize="tags" data-value="{$filter_tags|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="filter_tags[]" multiple style="width:400px;"></select>
|
||||
<label><span><input type="radio" name="tag_mode" value="AND" {if !isset($filter.tag_mode) or $filter.tag_mode eq 'AND'}checked="checked"{/if}> {'All tags'|@translate}</span></label>
|
||||
<label><span><input type="radio" name="tag_mode" value="OR" {if isset($filter.tag_mode) and $filter.tag_mode eq 'OR'}checked="checked"{/if}> {'Any tag'|@translate}</span></label>
|
||||
|
|
@ -811,14 +811,14 @@ UL.thumbnails SPAN.wrap2 {ldelim}
|
|||
|
||||
<!-- associate -->
|
||||
<div id="action_associate" class="bulkAction">
|
||||
<select data-selectize="categories" name="associate" style="width:400px"></select>
|
||||
<select data-selectize="categories" data-default="first" name="associate" style="width:400px"></select>
|
||||
<br>{'... or '|@translate}
|
||||
<a href="#" data-add-album="associate" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
</div>
|
||||
|
||||
<!-- move -->
|
||||
<div id="action_move" class="bulkAction">
|
||||
<select data-selectize="categories" name="move" style="width:400px"></select>
|
||||
<select data-selectize="categories" data-default="first" name="move" style="width:400px"></select>
|
||||
<br>{'... or '|@translate}
|
||||
<a href="#" data-add-album="move" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
</div>
|
||||
|
|
@ -826,19 +826,22 @@ UL.thumbnails SPAN.wrap2 {ldelim}
|
|||
|
||||
<!-- dissociate -->
|
||||
<div id="action_dissociate" class="bulkAction albumDissociate" style="display:none">
|
||||
<select data-selectize="categories" name="dissociate" style="width:400px"></select>
|
||||
<select data-selectize="categories" placeholder="{'Type in a search term'|translate}"
|
||||
name="dissociate" style="width:400px"></select>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- add_tags -->
|
||||
<div id="action_add_tags" class="bulkAction">
|
||||
<select data-selectize="tags" data-selectize-create name="add_tags[]" multiple style="width:400px;"></select>
|
||||
<select data-selectize="tags" data-create="true" placeholder="{'Type in a search term'|translate}"
|
||||
name="add_tags[]" multiple style="width:400px;"></select>
|
||||
</div>
|
||||
|
||||
<!-- del_tags -->
|
||||
<div id="action_del_tags" class="bulkAction">
|
||||
{if !empty($associated_tags)}
|
||||
<select data-selectize="tags" name="del_tags[]" multiple style="width:400px;">
|
||||
<select data-selectize="tags" name="del_tags[]" multiple style="width:400px;"
|
||||
placeholder="{'Type in a search term'|translate}">
|
||||
{foreach from=$associated_tags item=tag}
|
||||
<option value="{$tag.id}">{$tag.name}</option>
|
||||
{/foreach}
|
||||
|
|
|
|||
|
|
@ -98,7 +98,8 @@ $(".elementEdit img")
|
|||
<td><strong>{'Tags'|@translate}</strong></td>
|
||||
<td>
|
||||
<select data-selectize="tags" data-value="{$element.TAGS|@json_encode|escape:html}"
|
||||
name="tags-{$element.id}[]" multiple style="width:500px;" data-selectize-create></select>
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
data-create="true" name="tags-{$element.id}[]" multiple style="width:500px;"></select>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ jQuery("#selectStatus").change(function() {
|
|||
<strong>{'Permission granted for groups'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="groups" data-value="{$groups_selected|@json_encode|escape:html}"
|
||||
name="groups[]" multiple style="width:600px;"></select>
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="groups[]" multiple style="width:600px;"></select>
|
||||
{else}
|
||||
{'There is no group in this gallery.'|@translate} <a href="admin.php?page=group_list" class="externalLink">{'Group management'|@translate}</a>
|
||||
{/if}
|
||||
|
|
@ -82,7 +83,8 @@ jQuery("#selectStatus").change(function() {
|
|||
<strong>{'Permission granted for users'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="users" data-value="{$users_selected|@json_encode|escape:html}"
|
||||
name="users[]" multiple style="width:600px;"></select>
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="users[]" multiple style="width:600px;"></select>
|
||||
</p>
|
||||
|
||||
{if isset($nb_users_granted_indirect) && $nb_users_granted_indirect>0}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ categoriesCache.selectize(jQuery('[data-selectize=categories]'), {
|
|||
filter: function(categories, options) {
|
||||
if (categories.length > 0) {
|
||||
jQuery("#albumSelection, .selectFiles, .showFieldset").show();
|
||||
options.default = categories[0].id;
|
||||
}
|
||||
|
||||
return categories;
|
||||
|
|
@ -201,7 +200,7 @@ jQuery(document).ready(function(){
|
|||
|
||||
<span id="albumSelection" style="display:none">
|
||||
<select data-selectize="categories" data-value="{$selected_category|@json_encode|escape:html}"
|
||||
name="category" style="width:400px"></select>
|
||||
data-default="first" name="category" style="width:400px"></select>
|
||||
<br>{'... or '|@translate}</span>
|
||||
<a href="#" data-add-album="category" title="{'create a new album'|@translate}">{'create a new album'|@translate}</a>
|
||||
</fieldset>
|
||||
|
|
|
|||
|
|
@ -16,12 +16,7 @@ var categoriesCache = new CategoriesCache({
|
|||
rootUrl: '{$ROOT_URL}'
|
||||
});
|
||||
|
||||
categoriesCache.selectize(jQuery('[data-selectize=categories]'), { {if $STORAGE_ALBUM}
|
||||
filter: function(categories, options) {
|
||||
options.default = (this.name == 'associate[]') ? {$STORAGE_ALBUM} : undefined;
|
||||
return categories;
|
||||
}
|
||||
{/if} });
|
||||
categoriesCache.selectize(jQuery('[data-selectize=categories]'));
|
||||
|
||||
{* <!-- TAGS --> *}
|
||||
var tagsCache = new TagsCache({
|
||||
|
|
@ -109,13 +104,15 @@ jQuery(function(){ {* <!-- onLoad needed to wait localization loads --> *}
|
|||
<strong>{'Linked albums'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="categories" data-value="{$associated_albums|@json_encode|escape:html}"
|
||||
name="associate[]" multiple style="width:600px;"></select>
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
data-default="{$STORAGE_ALBUM}" name="associate[]" multiple style="width:600px;"></select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<strong>{'Representation of albums'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="categories" data-value="{$represented_albums|@json_encode|escape:html}"
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
name="represent[]" multiple style="width:600px;"></select>
|
||||
</p>
|
||||
|
||||
|
|
@ -123,7 +120,8 @@ jQuery(function(){ {* <!-- onLoad needed to wait localization loads --> *}
|
|||
<strong>{'Tags'|@translate}</strong>
|
||||
<br>
|
||||
<select data-selectize="tags" data-value="{$tag_selection|@json_encode|escape:html}"
|
||||
name="tags[]" multiple style="width:600px;" data-selectize-create></select>
|
||||
placeholder="{'Type in a search term'|translate}"
|
||||
data-create="true" name="tags[]" multiple style="width:600px;"</select>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
|
|||
|
|
@ -1104,7 +1104,8 @@ span.infos, span.errors {background-image:none; padding:2px 5px; margin:0;border
|
|||
<div class="userProperty"><label><input type="checkbox" name="enabled_high"<% if (user.enabled_high == 'true') { %> checked="checked"<% } %>> <strong>{'High definition enabled'|translate}</strong></label></div>
|
||||
|
||||
<div class="userProperty"><strong>{'Groups'|translate}</strong><br>
|
||||
<select data-selectize="groups" name="group_id[]" multiple style="width:340px;"></select>
|
||||
<select data-selectize="groups" placeholder="{'Type in a search term'|translate}"
|
||||
name="group_id[]" multiple style="width:340px;"></select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue