diff --git a/controllers/LookupController.php b/controllers/LookupController.php new file mode 100644 index 0000000..a4eca05 --- /dev/null +++ b/controllers/LookupController.php @@ -0,0 +1,114 @@ +_hasParam('partial')) { + $this->_setParam('partial', ''); + } + if (!$this->_hasParam('item_type')) { + $this->_setParam('item_type', -1); + } + if (!$this->_hasParam('sort')) { + $this->_setParam('sort', 'mod_desc'); + } + if (!$this->_hasParam('page')) { + $this->_setParam('page', 0); + } + if (!$this->_hasParam('per_page')) { + $this->_setParam('per_page', 15); + } + + $partial = preg_replace('/[^ \.,\!\?\p{L}\p{N}\p{Mc}]/ui', '', $this->_getParam('partial')); + $where_text = ''; + if (strlen($partial) > 0) { + $where_text = "AND text RLIKE '$partial'"; + } + + $item_type = intval($this->_getParam('item_type')); + $where_item_type = ''; + if ($item_type > 0) { + $where_item_type = "AND items.item_type_id = $item_type"; + } + + $per_page = intval($this->_getParam('per_page')); + $page = intval($this->_getParam('page')); + $offset = $page * $per_page; + + $order_clause = 'ORDER BY items.item_type_id ASC, text ASC'; + switch ($this->_getParam('sort')) { + case 'mod_desc': + $order_clause = 'ORDER BY UNIX_TIMESTAMP(modified) DESC, items.item_type_id ASC, text ASC'; + break; + case 'mod_asc': + $order_clause = 'ORDER BY UNIX_TIMESTAMP(modified) ASC, items.item_type_id ASC, text ASC'; + break; + case 'alpha_desc': + $order_clause = 'ORDER BY items.item_type_id ASC, text DESC'; + break; + case 'alpha_asc': + $order_clause = 'ORDER BY items.item_type_id ASC, text ASC'; + break; + default: + /* do nothing */ + break; + } + + $title = 50; + $db = get_db(); + $query = <<Item} items +LEFT JOIN {$db->Element_Texts} elementtexts +ON (items.id = elementtexts.record_id) +WHERE elementtexts.element_id = $title +$where_item_type +$where_text +GROUP BY elementtexts.record_id +QCOUNT; + $m_count = count($db->fetchAll($query)); + + $max_page = floor($m_count / $per_page); + if ($page > $max_page) { + $page = $max_page; + $offset = $page * $per_page; + } + + $query = <<Item} items +LEFT JOIN {$db->Element_Texts} elementtexts +ON (items.id = elementtexts.record_id) +WHERE elementtexts.element_id = $title +$where_item_type +$where_text +GROUP BY elementtexts.record_id +$order_clause +LIMIT $per_page +OFFSET $offset +QUERY; + $items = $db->fetchAll($query); + $m_items = array(); + + foreach ($items as $item) { + $m_items[] = array( + 'value' => $item['id'], + 'label' => $item['text'], + ); + } + + $this->view->metadata = array( + 'count' => $m_count, + 'items' => $m_items, + ); + } +} diff --git a/item_relations_form.php b/item_relations_form.php index 5ee0fda..ba7d8fa 100644 --- a/item_relations_form.php +++ b/item_relations_form.php @@ -20,7 +20,7 @@ - + @@ -28,30 +28,78 @@ - + - - - formSelect('item_relations_property_id[]', null, array('multiple' => false), $formSelectProperties); ?> - formText('item_relations_item_relation_object_item_id[]', null, array('size' => 8)); ?> - n/a + + + + . + - + + + +Item_Types} ORDER BY id"; +$itemtypes = $db->fetchAll($sql); +$m = array( + '-1' => __('All'), +); +foreach ($itemtypes as $type) { + $m[$type['id']] = $type['name']; +} +?> +
+

+ + + formSelect('new_relation_property_id', null, array('multiple' => false), $formSelectProperties); ?>
+ +

+ formSelect('new_relation_object_item_type_id', null, array('multiple' => false), $m); ?>

+ +

+ : +

+ + + + + +
+

+ +

:

+ + + + + +
+
    +
  • <
  • +
  • >
  • +
+
+ +
    +
+ + +
+ + + + + diff --git a/item_relations_script.js b/item_relations_script.js new file mode 100644 index 0000000..b8522f8 --- /dev/null +++ b/item_relations_script.js @@ -0,0 +1,127 @@ +jQuery(document).ready(function () { + var $ = jQuery; + var options = {}; + + function resetOptions() { + options['partial'] = ''; + options['item_type'] = -1; + options['sort'] = 'mod_desc'; + options['page'] = 0; + options['per_page'] = 15; + options = { + partial: '', + item_type: -1, + sort: 'mod_desc', + page: 0, + per_page: 15, + max_page: 0 + }; + } + + resetOptions(); + updateChoices(); + + function updateChoices() { + options['partial'] = $('#partial_object_title').val(); + options['item_type'] = $('#new_relation_object_item_type_id').val(); + if ($('input[name=itemsListSort]:checked').val() === 'timestamp') { + options['sort'] = 'mod_desc'; + } + else { + options['sort'] = 'alpha_asc'; + } + if (options['page'] < 0) { + options['page'] = 0; + } + if (options['page'] > options['max_page']) { + options['page'] = options['max_page']; + } + $.ajax({ + url: url, + dataType: 'json', + data: options, + success: function (data) { + var i; + var items = []; + + /* options */ + $('#lookup-results').find('li').remove(); + for (i = 0; i < data['items'].length; ++i) { + items.push('
  • ' + data['items'][i]['label'] + '
  • '); + } + $('#lookup-results').append(items.join('')); + + /* pagination */ + options['max_page'] = Math.floor(data['count'] / options['per_page']); + + if (0 < options['page']) { + $('#selector-previous-page').removeClass('pg_disabled'); + } + else { + $('#selector-previous-page').addClass('pg_disabled'); + } + + if (options['page'] < options['max_page']) { + $('#selector-next-page').removeClass('pg_disabled'); + } + else { + $('#selector-next-page').addClass('pg_disabled'); + } + } + }); + } + + $('#add-relation').click(function () { + var oldRow = $('.item-relations-entry').last(); + var newRow = oldRow.clone(); + newRow.toggleClass('hidden'); + newRow.find('.item-relations-property').html($('#new_relation_property_id').find(':selected').html()); + var new_url = newRow.find('.item-relations-object a').attr('href'); + newRow.find('.item-relations-object a').attr('href', new_url + $('#new_relation_object_item_id').val()); + newRow.find('.item-relations-object a').text($('#object_title').text()); + var hidden = []; + hidden.push(''); + hidden.push(''); + newRow.find('.item-relations-hidden').html(hidden.join('')); + oldRow.before(newRow); + }); + + $('#lookup-results').on('click', 'li', function () { + $('#new_relation_object_item_id').val($(this).attr('data-value')); + $('#object_title').html($(this).html()); + }); + + $('#selector-previous-page').click(function () { + if (0 < options['page']) { + options['page']--; + updateChoices(); + } + }); + + $('#selector-next-page').click(function () { + if (options['page'] < options['max_page']) { + options['page']++; + updateChoices(); + } + }); + + $('#new_relation_object_item_type_id').change(function () { + updateChoices(); + }); + + $('#new_selectObjectSortTimestamp').click(function () { + updateChoices(); + }); + + $('#new_selectObjectSortName').click(function () { + updateChoices(); + }); + + $('#partial_object_title').on('input', function () { + updateChoices(); + }); +} ); diff --git a/item_relations_styles.css b/item_relations_styles.css new file mode 100644 index 0000000..61b48e4 --- /dev/null +++ b/item_relations_styles.css @@ -0,0 +1,7 @@ +.pg_disabled { + visibility: hidden; +} + +.hidden { + display: none; +} diff --git a/lity/lity.css b/lity/lity.css new file mode 100644 index 0000000..105b4af --- /dev/null +++ b/lity/lity.css @@ -0,0 +1,160 @@ +/*! Lity - v1.2.0 - 2015-05-15 +* http://sorgalla.com/lity/ +* Copyright (c) 2015 Jan Sorgalla; Licensed MIT */ +.lity { + z-index: 9990; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + white-space: nowrap; + background: #0b0b0b; + background: rgba(0, 0, 0, 0.9); + outline: none !important; + opacity: 0; + -webkit-transition: opacity 0.2s ease; + -o-transition: opacity 0.2s ease; + transition: opacity 0.2s ease; +} +.lity.lity-opened { + opacity: 1; +} +.lity.lity-closed { + opacity: 0; +} +.lity * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.lity-wrap { + z-index: 9990; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + text-align: center; + outline: none !important; +} +.lity-wrap:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; + margin-right: -0.25em; +} +.lity-loader { + z-index: 9991; + color: #fff; + position: absolute; + top: 50%; + margin-top: -0.8em; + width: 100%; + text-align: center; + font-size: 14px; + font-family: Arial, Helvetica, sans-serif; + opacity: 0; + -webkit-transition: opacity 0.2s ease; + -o-transition: opacity 0.2s ease; + transition: opacity 0.2s ease; +} +.lity-loading .lity-loader { + opacity: 1; +} +.lity-container { + z-index: 9992; + position: relative; + text-align: left; + vertical-align: middle; + display: inline-block; + white-space: normal; + max-width: 100%; + max-height: 100%; + outline: none !important; + opacity: 1; + -webkit-transition: opacity 0.2s ease; + -o-transition: opacity 0.2s ease; + transition: opacity 0.2s ease; +} +.lity-loading .lity-container { + opacity: 0; +} +.lity-container:after { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 0; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); +} +.lity-content { + z-index: 9993; + width: 100%; +} +.lity-close { + z-index: 9994; + width: 35px; + height: 35px; + line-height: 35px; + position: fixed; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + padding: 0; + color: #fff; + font-style: normal; + font-size: 35px; + font-family: Arial, Baskerville, monospace; + text-shadow: 0px 1px 2px rgba(0, 0, 0, 0.6); + border: 0; + background: transparent; + outline: none !important; + -webkit-box-shadow: none; + box-shadow: none; + -webkit-appearance: none; + cursor: pointer; +} +.lity-close:active { + top: 1px; +} +/* Image */ +.lity-image img { + max-width: 100%; + display: block; + line-height: 0; + border: 0; +} +/* iFrame */ +.lity-iframe .lity-container { + width: 100%; + max-width: 964px; +} +.lity-iframe-container { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; +} +.lity-iframe-container iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #000; +} +.lity-hide { + display: none; +} diff --git a/lity/lity.js b/lity/lity.js new file mode 100644 index 0000000..aea33f7 --- /dev/null +++ b/lity/lity.js @@ -0,0 +1,373 @@ +/*! Lity - v1.2.0 - 2015-05-15 +* http://sorgalla.com/lity/ +* Copyright (c) 2015 Jan Sorgalla; Licensed MIT */ +(function(window, factory) { + if (typeof define === 'function' && define.amd) { + define(['jquery'], function($) { + return factory(window, $); + }); + } else if (typeof module === 'object' && typeof module.exports === 'object') { + module.exports = factory(window, require('jquery')); + } else { + window.lity = factory(window, window.jQuery || window.Zepto); + } +}(window, function(window, $) { + 'use strict'; + + var document = window.document; + + var _win = $(window); + + var _imageRegexp = /\.(png|jpg|jpeg|gif|tiff|bmp)(\?\S*)?$/i; + var _youtubeIdRegex = /v=([^&]+)/; + var _vimeoIdRegex = /\/([^\?&]+)$/; + + var _defaultHandlers = { + image: imageHandler, + inline: inlineHandler, + iframe: iframeHandler + }; + + var _defaultOptions = { + esc: true + }; + + var transitionEndEvent = (function() { + var el = document.createElement('div'); + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + }; + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return transEndEventNames[name]; + } + } + + return false; + })(); + + function transitionEnd(element) { + var deferred = $.Deferred(); + + if (!transitionEndEvent) { + deferred.resolve(); + } else { + element.one(transitionEndEvent, deferred.resolve); + setTimeout(deferred.reject, 500); + } + + return deferred.promise(); + } + + var _html = '\ +
    \ +
    \ +
    Loading...
    \ +
    \ +
    \ + \ +
    \ +
    \ +
    '; + + function settings(settings, key, value) { + if (arguments.length === 1) { + return $.extend({}, settings); + } + + if (typeof key === 'string') { + if (typeof value === 'undefined') { + return typeof settings[key] === 'undefined' ? + null : + settings[key]; + } + settings[key] = value; + } else { + $.extend(settings, key); + } + + return this; + } + + function protocol() { + return 'file:' === window.location.protocol ? 'http:' : ''; + } + + function error(msg) { + return $('').append(msg); + } + + function imageHandler(target) { + if (!_imageRegexp.test(target)) { + return false; + } + + var img = $(''); + var deferred = $.Deferred(); + var failed = function() { + deferred.reject(error('Failed loading image')); + }; + + img + .on('load', function() { + if (this.naturalWidth === 0) { + return failed(); + } + + deferred.resolve(img); + }) + .on('error', failed) + ; + + return deferred.promise(); + } + + function inlineHandler(target) { + try { + var el = $(target); + } catch (e) { + return false; + } + + var placeholder = $(''); + + return el + .after(placeholder) + .on('lity:ready', function(e, instance) { + instance.one('lity:close', function() { + placeholder + .before(el.addClass('lity-hide')) + .remove() + ; + }); + }) + ; + } + + function iframeHandler(target) { + var id; + + if (target.indexOf('youtube.') > -1 && target.indexOf('/embed') < 0) { + id = _youtubeIdRegex.exec(target)[1]; + target = protocol() + '//www.youtube.com/embed/' + id + '?autoplay=1'; + } + + if (target.indexOf('vimeo.') > -1 && target.indexOf('player.vimeo.') < 0) { + id = _vimeoIdRegex.exec(target.split('//')[1])[1]; + target = protocol() + '//player.vimeo.com/video/' + id + '?autoplay=1'; + } + + if (target.indexOf('//maps.google.') > -1 && target.indexOf('output=embed') < 0) { + target += '&output=embed'; + } + + return '
    '; + } + + function lity(options) { + var _options = $.extend({}, _defaultOptions), + _handlers = $.extend({}, _defaultHandlers), + _instance, + _content, + _ready = $.Deferred().resolve(); + + function keyup(e) { + if (e.keyCode === 27) { + close() + } + } + + function resize() { + var height = document.documentElement.clientHeight ? document.documentElement.clientHeight : Math.round(_win.height()); + + _content + .css('max-height', Math.floor(height) + 'px') + .trigger('lity:resize', [_instance, popup]) + ; + } + + function ready(content) { + if (!_instance) { + return; + } + + _content = $(content); + + _win.on('resize', resize); + resize(); + + _instance + .find('.lity-loader') + .each(function() { + var el = $(this); + transitionEnd(el).always(function() { + el.remove(); + }); + }) + ; + + _instance + .removeClass('lity-loading') + .find('.lity-content') + .empty() + .append(_content) + ; + + _content + .removeClass('lity-hide') + .trigger('lity:ready', [_instance, popup]) + ; + + _ready.resolve(); + } + + function init(handler, content, options) { + _instance = $(_html).appendTo('body'); + + if (!!options.esc) { + _win.one('keyup', keyup); + } + + setTimeout(function() { + _instance + .addClass('lity-opened lity-' + handler) + .on('click', '[data-lity-close]', function(e) { + $(e.target).is('[data-lity-close]') && close(); + }) + .trigger('lity:open', [_instance, popup]) + ; + + $.when(content).always(ready); + }, 0); + } + + function open(target, options) { + var handler, content; + + if (options.handler && _handlers[options.handler]) { + content = _handlers[options.handler](target, instance, popup); + handler = options.handler; + } else { + var handlers = $.extend({}, _handlers), lateHandlers = {}; + + // Run inline and iframe handlers after all other handlers + $.each(['inline', 'iframe'], function(i, name) { + if (handlers[name]) { + lateHandlers[name] = handlers[name]; + } + + delete handlers[name]; + }); + + var call = function(name, callback) { + // Handler might be "removed" by setting callback to null + if (!callback) { + return true; + } + + content = callback(target, popup); + + if (!!content) { + handler = name; + return false; + } + }; + + $.each(handlers, call); + !handler && $.each(lateHandlers, call); + } + + if (content) { + _ready = $.Deferred(); + $.when(close()).done($.proxy(init, null, handler, content, options)); + } + + return !!content; + } + + function close() { + if (!_instance) { + return; + } + + var deferred = $.Deferred(); + + _ready.done(function() { + _win + .off('resize', resize) + .off('keyup', keyup) + ; + + _content && _content + .trigger('lity:close', [_instance, popup]) + ; + + _instance + .removeClass('lity-opened') + .addClass('lity-closed') + ; + + var instance = _instance; + _instance = null; + _content = null; + + transitionEnd(instance).always(function() { + instance.remove(); + deferred.resolve(); + }); + }); + + return deferred.promise(); + } + + function popup(event) { + // If not an event, act as alias of popup.open + if (!event.preventDefault) { + return popup.open(event); + } + + var el = $(this); + var target = el.data('lity-target') || el.attr('href') || el.attr('src'); + + if (!target) { + return; + } + + var options = $.extend( + {}, + _options, + el.data('lity-options') || el.data('lity') + ); + + open(target, options) && event.preventDefault(); + } + + popup.handlers = $.proxy(settings, popup, _handlers); + popup.options = $.proxy(settings, popup, _options); + + popup.open = function(target) { + open(target, _options); + return popup; + }; + + popup.close = function() { + close(); + return popup; + }; + + return popup.options(options); + } + + lity.version = '1.2.0'; + lity.handlers = $.proxy(settings, lity, _defaultHandlers); + lity.options = $.proxy(settings, lity, _defaultOptions); + + $(document).on('click', '[data-lity]', lity()); + + return lity; +})); diff --git a/lity/lity.min.css b/lity/lity.min.css new file mode 100644 index 0000000..bd8aeeb --- /dev/null +++ b/lity/lity.min.css @@ -0,0 +1,3 @@ +/*! Lity - v1.2.0 - 2015-05-15 +* http://sorgalla.com/lity/ +* Copyright (c) 2015 Jan Sorgalla; Licensed MIT */.lity{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;white-space:nowrap;background:#0b0b0b;background:rgba(0,0,0,0.9);outline:none !important;opacity:0;-webkit-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease}.lity.lity-opened{opacity:1}.lity.lity-closed{opacity:0}.lity *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lity-wrap{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;outline:none !important}.lity-wrap:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-0.25em}.lity-loader{z-index:9991;color:#fff;position:absolute;top:50%;margin-top:-0.8em;width:100%;text-align:center;font-size:14px;font-family:Arial,Helvetica,sans-serif;opacity:0;-webkit-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease}.lity-loading .lity-loader{opacity:1}.lity-container{z-index:9992;position:relative;text-align:left;vertical-align:middle;display:inline-block;white-space:normal;max-width:100%;max-height:100%;outline:none !important;opacity:1;-webkit-transition:opacity .2s ease;-o-transition:opacity .2s ease;transition:opacity .2s ease}.lity-loading .lity-container{opacity:0}.lity-container:after{content:'';position:absolute;left:0;top:0;bottom:0;display:block;right:0;width:auto;height:auto;z-index:-1;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6)}.lity-content{z-index:9993;width:100%}.lity-close{z-index:9994;width:35px;height:35px;line-height:35px;position:fixed;right:0;top:0;text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:transparent;outline:none !important;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;cursor:pointer}.lity-close:active{top:1px}.lity-image img{max-width:100%;display:block;line-height:0;border:0}.lity-iframe .lity-container{width:100%;max-width:964px}.lity-iframe-container{width:100%;height:0;overflow:hidden;padding-top:56.25%}.lity-iframe-container iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}.lity-hide{display:none} \ No newline at end of file diff --git a/lity/lity.min.js b/lity/lity.min.js new file mode 100644 index 0000000..30eb307 --- /dev/null +++ b/lity/lity.min.js @@ -0,0 +1,4 @@ +/*! Lity - v1.2.0 - 2015-05-15 +* http://sorgalla.com/lity/ +* Copyright (c) 2015 Jan Sorgalla; Licensed MIT */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof module&&"object"==typeof module.exports?module.exports=b(a,require("jquery")):a.lity=b(a,a.jQuery||a.Zepto)}(window,function(a,b){"use strict";function c(a){var c=b.Deferred();return r?(a.one(r,c.resolve),setTimeout(c.reject,500)):c.resolve(),c.promise()}function d(a,c,d){if(1===arguments.length)return b.extend({},a);if("string"==typeof c){if("undefined"==typeof d)return"undefined"==typeof a[c]?null:a[c];a[c]=d}else b.extend(a,c);return this}function e(){return"file:"===a.location.protocol?"http:":""}function f(a){return b('').append(a)}function g(a){if(!m.test(a))return!1;var c=b(''),d=b.Deferred(),e=function(){d.reject(f("Failed loading image"))};return c.on("load",function(){return 0===this.naturalWidth?e():void d.resolve(c)}).on("error",e),d.promise()}function h(a){try{var c=b(a)}catch(d){return!1}var e=b('');return c.after(e).on("lity:ready",function(a,b){b.one("lity:close",function(){e.before(c.addClass("lity-hide")).remove()})})}function i(a){var b;return a.indexOf("youtube.")>-1&&a.indexOf("/embed")<0&&(b=n.exec(a)[1],a=e()+"//www.youtube.com/embed/"+b+"?autoplay=1"),a.indexOf("vimeo.")>-1&&a.indexOf("player.vimeo.")<0&&(b=o.exec(a.split("//")[1])[1],a=e()+"//player.vimeo.com/video/"+b+"?autoplay=1"),a.indexOf("//maps.google.")>-1&&a.indexOf("output=embed")<0&&(a+="&output=embed"),'
    '}function j(a){function e(a){27===a.keyCode&&j()}function f(){var a=k.documentElement.clientHeight?k.documentElement.clientHeight:Math.round(l.height());o.css("max-height",Math.floor(a)+"px").trigger("lity:resize",[n,m])}function g(a){n&&(o=b(a),l.on("resize",f),f(),n.find(".lity-loader").each(function(){var a=b(this);c(a).always(function(){a.remove()})}),n.removeClass("lity-loading").find(".lity-content").empty().append(o),o.removeClass("lity-hide").trigger("lity:ready",[n,m]),u.resolve())}function h(a,c,d){n=b(s).appendTo("body"),d.esc&&l.one("keyup",e),setTimeout(function(){n.addClass("lity-opened lity-"+a).on("click","[data-lity-close]",function(a){b(a.target).is("[data-lity-close]")&&j()}).trigger("lity:open",[n,m]),b.when(c).always(g)},0)}function i(a,c){var d,e;if(c.handler&&t[c.handler])e=t[c.handler](a,instance,m),d=c.handler;else{var f=b.extend({},t),g={};b.each(["inline","iframe"],function(a,b){f[b]&&(g[b]=f[b]),delete f[b]});var i=function(b,c){return c?(e=c(a,m),e?(d=b,!1):void 0):!0};b.each(f,i),!d&&b.each(g,i)}return e&&(u=b.Deferred(),b.when(j()).done(b.proxy(h,null,d,e,c))),!!e}function j(){if(n){var a=b.Deferred();return u.done(function(){l.off("resize",f).off("keyup",e),o&&o.trigger("lity:close",[n,m]),n.removeClass("lity-opened").addClass("lity-closed");var b=n;n=null,o=null,c(b).always(function(){b.remove(),a.resolve()})}),a.promise()}}function m(a){if(!a.preventDefault)return m.open(a);var c=b(this),d=c.data("lity-target")||c.attr("href")||c.attr("src");if(d){var e=b.extend({},r,c.data("lity-options")||c.data("lity"));i(d,e)&&a.preventDefault()}}var n,o,r=b.extend({},q),t=b.extend({},p),u=b.Deferred().resolve();return m.handlers=b.proxy(d,m,t),m.options=b.proxy(d,m,r),m.open=function(a){return i(a,r),m},m.close=function(){return j(),m},m.options(a)}var k=a.document,l=b(a),m=/\.(png|jpg|jpeg|gif|tiff|bmp)(\?\S*)?$/i,n=/v=([^&]+)/,o=/\/([^\?&]+)$/,p={image:g,inline:h,iframe:i},q={esc:!0},r=function(){var a=k.createElement("div"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return!1}(),s='
    Loading...
    ';return j.version="1.2.0",j.handlers=b.proxy(d,j,p),j.options=b.proxy(d,j,q),b(k).on("click","[data-lity]",j()),j}); \ No newline at end of file diff --git a/models/Table/ItemRelationsProperty.php b/models/Table/ItemRelationsProperty.php index 09f22d9..7c3c9c2 100644 --- a/models/Table/ItemRelationsProperty.php +++ b/models/Table/ItemRelationsProperty.php @@ -31,7 +31,7 @@ public function getSelect() 'vocabulary_namespace_uri' => 'namespace_uri' ) ) - ->order('custom DESC'); + ->order('custom DESC')->order('name ASC')->order('label ASC'); } /** diff --git a/views/admin/lookup/index.php b/views/admin/lookup/index.php new file mode 100644 index 0000000..866ddc2 --- /dev/null +++ b/views/admin/lookup/index.php @@ -0,0 +1,3 @@ +metadata); +?>