mirror of
https://github.com/the-djmaze/snappymail.git
synced 2024-09-20 07:35:55 +08:00
Select2 replaced by inputosaurus + ui-autocomplete
+ a lot of small fixes.
This commit is contained in:
parent
ef3d4f8576
commit
afb7ec8c4e
18
Gruntfile.js
18
Gruntfile.js
|
@ -70,6 +70,14 @@ module.exports = function (grunt) {
|
|||
src: 'vendors/jquery-nanoscroller/jquery.nanoscroller.js',
|
||||
dest: 'vendors/jquery-nanoscroller/jquery.nanoscroller-0.7.min.js'
|
||||
},
|
||||
inputosaurus: {
|
||||
options: {
|
||||
banner: "/*! Inputosaurus Text v0.1.6 (c) 2013 Dan Kielp <dan@sproutsocial.com>; modified by RainLoop Team | MIT */\n",
|
||||
preserveComments: "false"
|
||||
},
|
||||
src: 'vendors/inputosaurus/inputosaurus.js',
|
||||
dest: 'vendors/inputosaurus/inputosaurus.min.js'
|
||||
},
|
||||
pace: {
|
||||
src: 'vendors/simple-pace/simple-pace.js',
|
||||
dest: 'vendors/simple-pace/simple-pace-1.0.min.js'
|
||||
|
@ -113,13 +121,13 @@ module.exports = function (grunt) {
|
|||
"vendors/jquery-lazyload/jquery.lazyload.min.js",
|
||||
"vendors/jquery-nanoscroller/jquery.nanoscroller-0.7.min.js",
|
||||
"vendors/jquery-wakeup/jquery.wakeup.min.js",
|
||||
"vendors/inputosaurus/inputosaurus.min.js",
|
||||
"vendors/moment/min/moment.min.js ",
|
||||
"vendors/routes/signals.min.js",
|
||||
"vendors/routes/hasher.min.js",
|
||||
"vendors/routes/crossroads.min.js",
|
||||
"vendors/knockout/knockout-3.0.0.js",
|
||||
"vendors/jua/jua.min.js",
|
||||
"vendors/select2-3.4.5/select2.min.js",
|
||||
"vendors/jquery-magnific-popup/jquery.magnific-popup.min.js",
|
||||
"vendors/bootstrap/js/bootstrap.min.js",
|
||||
"dev/Common/_LibsEnd.js"
|
||||
|
@ -298,15 +306,14 @@ module.exports = function (grunt) {
|
|||
css: {
|
||||
nonull: true,
|
||||
src: [
|
||||
"vendors/jquery-ui/css/no-theme/jquery-ui-1.10.3.custom.css",
|
||||
"vendors/jquery-ui/css/smoothness/jquery-ui-1.10.3.custom.css",
|
||||
"vendors/normalize/normalize.css",
|
||||
"vendors/icomoon/style.css",
|
||||
"vendors/select2-3.4.5/select2.css",
|
||||
"vendors/select2-3.4.5/select2-bootstrap.css",
|
||||
"vendors/jquery-nanoscroller/nanoscroller.css",
|
||||
"vendors/jquery-magnific-popup/magnific-popup.css",
|
||||
"vendors/jquery-magnific-popup/magnific-popup-animations.css",
|
||||
"vendors/simple-pace/styles.css",
|
||||
"vendors/inputosaurus/inputosaurus.css",
|
||||
"vendors/flags/flags-fixed.css",
|
||||
"rainloop/v/<%= cfg.devVersion %>/static/css/less.css"
|
||||
],
|
||||
|
@ -358,7 +365,7 @@ module.exports = function (grunt) {
|
|||
options: {
|
||||
nospawn: true
|
||||
},
|
||||
files: ['dev/**/*.js'],
|
||||
files: ['dev/**/*.js', 'vendors/**/*.js'],
|
||||
tasks: ['concat:js_libs', 'concat:js_admin', 'concat:js_app']
|
||||
},
|
||||
styles: {
|
||||
|
@ -428,6 +435,7 @@ module.exports = function (grunt) {
|
|||
grunt.registerTask('nano', ['uglify:nano']);
|
||||
grunt.registerTask('pace', ['uglify:pace']);
|
||||
grunt.registerTask('rl', ['uglify:rl']);
|
||||
grunt.registerTask('inputosaurus', ['uglify:inputosaurus']);
|
||||
grunt.registerTask('cookie', ['uglify:cookie']);
|
||||
// ---
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
function AdminSecurity()
|
||||
{
|
||||
this.csrfProtection = ko.observable(!!RL.settingsGet('UseTokenProtection'));
|
||||
this.usageStatistics = ko.observable(!!RL.settingsGet('UsageStatistics'));
|
||||
|
||||
this.adminLogin = ko.observable(RL.settingsGet('AdminLogin'));
|
||||
this.adminPassword = ko.observable('');
|
||||
|
@ -66,12 +65,6 @@ AdminSecurity.prototype.onBuild = function ()
|
|||
'TokenProtection': bValue ? '1' : '0'
|
||||
});
|
||||
});
|
||||
|
||||
this.usageStatistics.subscribe(function (bValue) {
|
||||
RL.remote().saveAdminConfig(Utils.emptyFunction, {
|
||||
'UsageStatistics': bValue ? '1' : '0'
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
AdminSecurity.prototype.onHide = function ()
|
||||
|
|
|
@ -204,10 +204,9 @@ AbstractApp.prototype.loginAndLogoutReload = function (bLogout, bClose)
|
|||
|
||||
/**
|
||||
* @param {string} sQuery
|
||||
* @param {number} iPage
|
||||
* @param {Function} fCallback
|
||||
*/
|
||||
AbstractApp.prototype.getAutocomplete = function (sQuery, iPage, fCallback)
|
||||
AbstractApp.prototype.getAutocomplete = function (sQuery, fCallback)
|
||||
{
|
||||
fCallback([], sQuery);
|
||||
};
|
||||
|
|
|
@ -17,11 +17,20 @@ function RainLoopApp()
|
|||
|
||||
this.quotaDebounce = _.debounce(this.quota, 1000 * 30);
|
||||
|
||||
$.wakeUp(function (iSleepTime) {
|
||||
RL.remote().jsInfo(Utils.emptyFunction, {
|
||||
'Version': RL.settingsGet('Version'),
|
||||
'WakeUpTime': Math.round(iSleepTime / 1000)
|
||||
}, true);
|
||||
$.wakeUp(function () {
|
||||
RL.remote().jsVersion(function (sResult, oData) {
|
||||
if (Enums.StorageResultType.Success === sResult && oData && !oData.Result)
|
||||
{
|
||||
if (window.parent && !!RL.settingsGet('InIframe'))
|
||||
{
|
||||
window.parent.location.reload();
|
||||
}
|
||||
else
|
||||
{
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
}, RL.settingsGet('Version'));
|
||||
}, {}, 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
@ -521,10 +530,9 @@ RainLoopApp.prototype.folderListOptionsBuilder = function (aSystem, aList, aDisa
|
|||
|
||||
/**
|
||||
* @param {string} sQuery
|
||||
* @param {number} iPage
|
||||
* @param {Function} fCallback
|
||||
*/
|
||||
RainLoopApp.prototype.getAutocomplete = function (sQuery, iPage, fCallback)
|
||||
RainLoopApp.prototype.getAutocomplete = function (sQuery, fCallback)
|
||||
{
|
||||
var
|
||||
aData = []
|
||||
|
@ -537,13 +545,13 @@ RainLoopApp.prototype.getAutocomplete = function (sQuery, iPage, fCallback)
|
|||
return aItem && aItem[0] ? new EmailModel(aItem[0], aItem[1]) : null;
|
||||
});
|
||||
|
||||
fCallback(_.compact(aData), !!oData.Result.More);
|
||||
fCallback(_.compact(aData));
|
||||
}
|
||||
else if (Enums.StorageResultType.Abort !== sResult)
|
||||
{
|
||||
fCallback([], false);
|
||||
fCallback([]);
|
||||
}
|
||||
}, sQuery, iPage);
|
||||
}, sQuery);
|
||||
};
|
||||
|
||||
RainLoopApp.prototype.emailsPicsHashes = function ()
|
||||
|
|
|
@ -476,167 +476,55 @@ ko.bindingHandlers.saveTrigger = {
|
|||
}
|
||||
};
|
||||
|
||||
ko.bindingHandlers.select2 = {
|
||||
ko.bindingHandlers.emailsTags = {
|
||||
'init': function(oElement, fValueAccessor) {
|
||||
|
||||
var
|
||||
iTimer = 0,
|
||||
iTimeout = 100,
|
||||
oMatch = null,
|
||||
oReg = new window.RegExp(/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/),
|
||||
oReg2 = new window.RegExp(/(.+) [<]?([^\s<@]+@[a-zA-Z0-9\.\-_]+)[>]?/),
|
||||
sEmptyTranslateFunction = function () {
|
||||
return '';
|
||||
},
|
||||
/**
|
||||
* @param {{term:string, callback:Function, matcher:Function}} oCall
|
||||
*/
|
||||
fLazyAutocomplete = function (oCall) {
|
||||
$oEl = $(oElement),
|
||||
fValue = fValueAccessor()
|
||||
;
|
||||
|
||||
RL.getAutocomplete(oCall['term'], oCall['page'], function (aData, bMore) {
|
||||
oCall.callback({
|
||||
'more': !!bMore,
|
||||
'results': _.map(aData, function (oEmailItem) {
|
||||
var sName = oEmailItem.toLine(false);
|
||||
return {
|
||||
'id': sName,
|
||||
'text': sName,
|
||||
'c': oEmailItem
|
||||
};
|
||||
})
|
||||
});
|
||||
$oEl.inputosaurus({
|
||||
'parseOnBlur': true,
|
||||
'inputDelimiters': [',', ';'],
|
||||
'autoCompleteSource': function (oData, fResponse) {
|
||||
RL.getAutocomplete(oData.term, function (aData) {
|
||||
fResponse(_.map(aData, function (oEmailItem) {
|
||||
return oEmailItem.toLine(false);
|
||||
}));
|
||||
});
|
||||
}
|
||||
;
|
||||
|
||||
$(oElement).addClass('ko-select2').select2({
|
||||
|
||||
/**
|
||||
* @param {{term:string, callback:Function, matcher:Function}} oCall
|
||||
*/
|
||||
'query': function (oCall) {
|
||||
if (!oCall)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// if (RL.isLocalAutocomplete && false)
|
||||
// {
|
||||
// fLazyAutocomplete(oCall);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
if (0 === iTimer)
|
||||
},
|
||||
'parseHook': function (aInput) {
|
||||
return _.map(aInput, function (sInputValue) {
|
||||
|
||||
var sValue = Utils.trim(sInputValue), oEmail = null;
|
||||
if ('' !== sValue)
|
||||
{
|
||||
fLazyAutocomplete(oCall);
|
||||
iTimer = window.setTimeout(Utils.emptyFunction, iTimeout);
|
||||
oEmail = new EmailModel();
|
||||
oEmail.mailsoParse(sValue);
|
||||
oEmail.clearDuplicateName();
|
||||
|
||||
// sValue = oEmail.toLine(false);
|
||||
// return sValue;
|
||||
return [oEmail.toLine(false), oEmail];
|
||||
}
|
||||
else
|
||||
{
|
||||
window.clearInterval(iTimer);
|
||||
iTimer = window.setTimeout(function () {
|
||||
fLazyAutocomplete(oCall);
|
||||
}, iTimeout);
|
||||
}
|
||||
// }
|
||||
|
||||
return [sValue, null];
|
||||
|
||||
});
|
||||
},
|
||||
'formatSelection': function (oItem, oContainer) {
|
||||
var sR = oItem && oItem.c ? oItem.c.select2Selection(oContainer) : oItem.text;
|
||||
if (null !== sR)
|
||||
{
|
||||
return sR;
|
||||
}
|
||||
},
|
||||
'formatResult': function (oItem, oContainer, oQuery, fEscapeMarkup) {
|
||||
var sR = oItem && oItem.c ? oItem.c.select2Result(oContainer) : '';
|
||||
return '' === sR ? fEscapeMarkup(oItem.text) : sR;
|
||||
},
|
||||
'createSearchChoice': function (sTerm, aList) {
|
||||
return 0 === aList.length && oReg.test(sTerm) ? {
|
||||
'id': sTerm,
|
||||
'text': sTerm
|
||||
} : null;
|
||||
},
|
||||
'formatNoMatches': sEmptyTranslateFunction,
|
||||
'formatSearching': function () {
|
||||
return Utils.i18n('SUGGESTIONS/SEARCHING_DESC');
|
||||
},
|
||||
'formatInputTooShort': sEmptyTranslateFunction,
|
||||
'formatSelectionTooBig': sEmptyTranslateFunction,
|
||||
'multiple': true,
|
||||
'tokenSeparators': [',', ';'],
|
||||
'minimumInputLength': 2,
|
||||
'selectOnBlur': false,
|
||||
'closeOnSelect': true,
|
||||
'openOnEnter': false
|
||||
'change': _.bind(function (oEvent) {
|
||||
$oEl.data('EmailsTagsValue', oEvent.target.value);
|
||||
fValue(oEvent.target.value);
|
||||
}, this)
|
||||
});
|
||||
|
||||
ko.utils.domNodeDisposal.addDisposeCallback(oElement, function() {
|
||||
$(oElement).select2('destroy');
|
||||
});
|
||||
|
||||
$(oElement).on('change', function () {
|
||||
|
||||
var
|
||||
aTags = $(this).select2('data'),
|
||||
iIndex = 0,
|
||||
iLen = aTags.length,
|
||||
oItem = null,
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
fValue.subscribe(function (sValue) {
|
||||
if ($oEl.data('EmailsTagsValue') !== sValue)
|
||||
{
|
||||
oItem = aTags[iIndex];
|
||||
if (oItem && oItem.id)
|
||||
{
|
||||
if (!oItem.c)
|
||||
{
|
||||
oItem.c = new EmailModel();
|
||||
oMatch = oReg2.exec(Utils.trim(oItem.id));
|
||||
if (oMatch && !Utils.isUnd(oMatch[2]))
|
||||
{
|
||||
oItem.c.name = oMatch[1];
|
||||
oItem.c.email = oMatch[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
oItem.c.email = oItem.id;
|
||||
}
|
||||
}
|
||||
|
||||
aResult.push(oItem.c);
|
||||
}
|
||||
$oEl.val(sValue);
|
||||
$oEl.inputosaurus('refresh');
|
||||
}
|
||||
|
||||
fValueAccessor()(aResult);
|
||||
});
|
||||
},
|
||||
|
||||
'update': function (oElement, fValueAccessor) {
|
||||
|
||||
var
|
||||
aTags = ko.utils.unwrapObservable(fValueAccessor()),
|
||||
iIndex = 0,
|
||||
iLen = aTags.length,
|
||||
oItem = null,
|
||||
sName = '',
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
{
|
||||
oItem = aTags[iIndex];
|
||||
sName = oItem.toLine(false);
|
||||
|
||||
aResult.push({
|
||||
'id': sName,
|
||||
'text': sName,
|
||||
'c': oItem
|
||||
});
|
||||
}
|
||||
|
||||
$(oElement).select2('data', aResult);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -157,10 +157,6 @@ Knoin.prototype.hideScreenPopup = function (ViewModelClassToHide)
|
|||
ViewModelClassToHide.__vm.modalVisibility(false);
|
||||
this.delegateRun(ViewModelClassToHide.__vm, 'onHide');
|
||||
this.popupVisibility(false);
|
||||
|
||||
_.defer(function () {
|
||||
ViewModelClassToHide.__dom.find('.ko-select2').select2('close');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -41,6 +41,13 @@ EmailModel.prototype.email = '';
|
|||
*/
|
||||
EmailModel.prototype.privateType = null;
|
||||
|
||||
EmailModel.prototype.clear = function ()
|
||||
{
|
||||
this.email = '';
|
||||
this.name = '';
|
||||
this.privateType = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
|
@ -101,6 +108,8 @@ EmailModel.prototype.search = function (sQuery)
|
|||
*/
|
||||
EmailModel.prototype.parse = function (sString)
|
||||
{
|
||||
this.clear();
|
||||
|
||||
sString = Utils.trim(sString);
|
||||
|
||||
var
|
||||
|
@ -144,18 +153,22 @@ EmailModel.prototype.initByJson = function (oJsonEmail)
|
|||
/**
|
||||
* @param {boolean} bFriendlyView
|
||||
* @param {boolean=} bWrapWithLink = false
|
||||
* @param {boolean=} bEncodeHtml = false
|
||||
* @return {string}
|
||||
*/
|
||||
EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink)
|
||||
EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink, bEncodeHtml)
|
||||
{
|
||||
var sResult = '';
|
||||
if ('' !== this.email)
|
||||
{
|
||||
bWrapWithLink = Utils.isUnd(bWrapWithLink) ? false : !!bWrapWithLink;
|
||||
bEncodeHtml = Utils.isUnd(bEncodeHtml) ? false : !!bEncodeHtml;
|
||||
|
||||
if (bFriendlyView && '' !== this.name)
|
||||
{
|
||||
sResult = bWrapWithLink ? '<a href="mailto:' + Utils.encodeHtml('"' + this.name + '" <' + this.email + '>') +
|
||||
'" target="_blank" tabindex="-1">' + Utils.encodeHtml(this.name) + '</a>' : this.name;
|
||||
'" target="_blank" tabindex="-1">' + Utils.encodeHtml(this.name) + '</a>' :
|
||||
(bEncodeHtml ? Utils.encodeHtml(this.name) : this.name);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -170,6 +183,10 @@ EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink)
|
|||
else
|
||||
{
|
||||
sResult = '"' + this.name + '" <' + sResult + '>';
|
||||
if (bEncodeHtml)
|
||||
{
|
||||
sResult = Utils.encodeHtml(sResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (bWrapWithLink)
|
||||
|
@ -238,3 +255,169 @@ EmailModel.prototype.select2Selection = function (oContainer)
|
|||
|
||||
return sResult;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} $sEmailAddress
|
||||
* @return {boolean}
|
||||
*/
|
||||
EmailModel.prototype.mailsoParse = function ($sEmailAddress)
|
||||
{
|
||||
$sEmailAddress = Utils.trim($sEmailAddress);
|
||||
if ('' === $sEmailAddress)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var
|
||||
substr = function (str, start, len) {
|
||||
str += '';
|
||||
var end = str.length;
|
||||
|
||||
if (start < 0) {
|
||||
start += end;
|
||||
}
|
||||
|
||||
end = typeof len === 'undefined' ? end : (len < 0 ? len + end : len + start);
|
||||
|
||||
return start >= str.length || start < 0 || start > end ? false : str.slice(start, end);
|
||||
},
|
||||
|
||||
substr_replace = function (str, replace, start, length) {
|
||||
if (start < 0) {
|
||||
start = start + str.length;
|
||||
}
|
||||
length = length !== undefined ? length : str.length;
|
||||
if (length < 0) {
|
||||
length = length + str.length - start;
|
||||
}
|
||||
return str.slice(0, start) + replace.substr(0, length) + replace.slice(length) + str.slice(start + length);
|
||||
},
|
||||
|
||||
$sName = '',
|
||||
$sEmail = '',
|
||||
$sComment = '',
|
||||
|
||||
$bInName = false,
|
||||
$bInAddress = false,
|
||||
$bInComment = false,
|
||||
|
||||
$aRegs = null,
|
||||
|
||||
$iStartIndex = 0,
|
||||
$iEndIndex = 0,
|
||||
$iCurrentIndex = 0
|
||||
;
|
||||
|
||||
while ($iCurrentIndex < $sEmailAddress.length)
|
||||
{
|
||||
switch ($sEmailAddress.substr($iCurrentIndex, 1))
|
||||
{
|
||||
case '"':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$bInName = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
else if ((!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sName = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInName = false;
|
||||
}
|
||||
break;
|
||||
case '<':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
if ($iCurrentIndex > 0 && $sName.length === 0)
|
||||
{
|
||||
$sName = substr($sEmailAddress, 0, $iCurrentIndex);
|
||||
}
|
||||
|
||||
$bInAddress = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
break;
|
||||
case '>':
|
||||
if ($bInAddress)
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sEmail = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInAddress = false;
|
||||
}
|
||||
break;
|
||||
case '(':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$bInComment = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
break;
|
||||
case ')':
|
||||
if ($bInComment)
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sComment = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInComment = false;
|
||||
}
|
||||
break;
|
||||
case '\\':
|
||||
$iCurrentIndex++;
|
||||
break;
|
||||
}
|
||||
|
||||
$iCurrentIndex++;
|
||||
}
|
||||
|
||||
if ($sEmail.length === 0)
|
||||
{
|
||||
$aRegs = $sEmailAddress.match(/[^@\s]+@\S+/i);
|
||||
if ($aRegs && $aRegs[0])
|
||||
{
|
||||
$sEmail = $aRegs[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sName = $sEmailAddress;
|
||||
}
|
||||
}
|
||||
|
||||
if ($sEmail.length > 0 && $sName.length === 0 && $sComment.length === 0)
|
||||
{
|
||||
$sName = $sEmailAddress.replace($sEmail, '');
|
||||
}
|
||||
|
||||
$sEmail = Utils.trim($sEmail).replace(/^[<]+/, '').replace(/[>]+$/, '');
|
||||
$sName = Utils.trim($sName).replace(/^["']+/, '').replace(/["']+$/, '');
|
||||
$sComment = Utils.trim($sComment).replace(/^[(]+/, '').replace(/[)]+$/, '');
|
||||
|
||||
// Remove backslash
|
||||
$sName = $sName.replace(/\\\\(.)/, '$1');
|
||||
$sComment = $sComment.replace(/\\\\(.)/, '$1');
|
||||
|
||||
this.name = $sName;
|
||||
this.email = $sEmail;
|
||||
|
||||
this.clearDuplicateName();
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
EmailModel.prototype.inputoTagLine = function ()
|
||||
{
|
||||
return 0 < this.name.length ? this.name + ' (' + this.email + ')' : this.email;
|
||||
};
|
||||
|
|
|
@ -262,3 +262,14 @@ AbstractAjaxRemoteStorage.prototype.jsInfo = function (fCallback, sType, mData,
|
|||
'IsError': (Utils.isUnd(bIsError) ? false : !!bIsError) ? '1' : '0'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {?Function} fCallback
|
||||
* @param {string} sVersion
|
||||
*/
|
||||
AbstractAjaxRemoteStorage.prototype.jsVersion = function (fCallback, sVersion)
|
||||
{
|
||||
this.defaultRequest(fCallback, 'Version', {
|
||||
'Version': sVersion
|
||||
});
|
||||
};
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
@import "_IcoMoonToBoot.less";
|
||||
@import "_BootstrapFix.less";
|
||||
@import "_Select2Fix.less";
|
||||
@import "_InputosaurusFix.less";
|
||||
|
||||
@import "Ui.less";
|
||||
@import "Main.less";
|
||||
|
|
|
@ -57,16 +57,10 @@
|
|||
border-bottom: 1px dashed #555;
|
||||
}
|
||||
}
|
||||
|
||||
.e-row {
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
.e-delimiter-row {
|
||||
line-height: 2px;
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
.e-label {
|
||||
text-align: right;
|
||||
width: 1%;
|
||||
|
@ -84,9 +78,6 @@
|
|||
textarea {
|
||||
height: 40px;
|
||||
}
|
||||
.select2-container {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.error-desc {
|
||||
|
|
57
dev/Styles/_InputosaurusFix.less
Normal file
57
dev/Styles/_InputosaurusFix.less
Normal file
|
@ -0,0 +1,57 @@
|
|||
|
||||
.inputosaurus-container {
|
||||
width: 99%;
|
||||
line-height: 20px;
|
||||
padding: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
border-radius: 3px;
|
||||
|
||||
.box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.075));
|
||||
.transition(~"border linear .2s, box-shadow linear .2s");
|
||||
|
||||
li {
|
||||
max-width: 500px;
|
||||
background-color: #eee;
|
||||
border: 1px solid #aaa;
|
||||
line-height: 18px;
|
||||
padding: 2px 4px;
|
||||
margin: 2px 2px 2px;
|
||||
color: #555;
|
||||
|
||||
a {
|
||||
color: #999;
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
|
||||
&:hover {
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
|
||||
&.inputosaurus-selected {
|
||||
background-color: #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
.inputosaurus-fake-span {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -5000px;
|
||||
}
|
||||
|
||||
.inputosaurus-input {
|
||||
|
||||
margin: 2px 10px 2px 0px;
|
||||
height: 22px;
|
||||
|
||||
input {
|
||||
border: 0px;
|
||||
height : 21px;
|
||||
padding-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ui-autocomplete {
|
||||
z-index: 2000;
|
||||
}
|
|
@ -20,22 +20,6 @@ function PopupsComposeViewModel()
|
|||
var
|
||||
self = this,
|
||||
oRainLoopData = RL.data(),
|
||||
fEmailArrayToStringLineHelper = function (aList) {
|
||||
|
||||
var
|
||||
iIndex = 0,
|
||||
iLen = aList.length,
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
{
|
||||
aResult.push(aList[iIndex].toLine(false));
|
||||
}
|
||||
|
||||
return aResult.join(', ');
|
||||
},
|
||||
|
||||
fCcAndBccCheckHelper = function (aValue) {
|
||||
if (false === this.showCcAndBcc() && 0 < aValue.length)
|
||||
{
|
||||
|
@ -46,9 +30,9 @@ function PopupsComposeViewModel()
|
|||
|
||||
this.resizer = ko.observable(false).extend({'throttle': 50});
|
||||
|
||||
this.to = ko.observableArray([]);
|
||||
this.cc = ko.observableArray([]);
|
||||
this.bcc = ko.observableArray([]);
|
||||
this.to = ko.observable('');
|
||||
this.cc = ko.observable('');
|
||||
this.bcc = ko.observable('');
|
||||
|
||||
this.replyTo = ko.observable('');
|
||||
this.subject = ko.observable('');
|
||||
|
@ -233,12 +217,12 @@ function PopupsComposeViewModel()
|
|||
|
||||
this.sendCommand = Utils.createCommand(this, function () {
|
||||
var
|
||||
aTo = this.to(),
|
||||
sTo = this.to(),
|
||||
sSentFolder = RL.data().sentFolder(),
|
||||
aFlagsCache = []
|
||||
;
|
||||
|
||||
if (0 === aTo.length)
|
||||
if (0 === sTo.length)
|
||||
{
|
||||
this.emptyToError(true);
|
||||
}
|
||||
|
@ -293,9 +277,9 @@ function PopupsComposeViewModel()
|
|||
this.draftID(),
|
||||
sSentFolder,
|
||||
this.currentIdentityResultEmail(),
|
||||
fEmailArrayToStringLineHelper(aTo),
|
||||
fEmailArrayToStringLineHelper(this.cc()),
|
||||
fEmailArrayToStringLineHelper(this.bcc()),
|
||||
sTo,
|
||||
this.cc(),
|
||||
this.bcc(),
|
||||
this.subject(),
|
||||
this.oEditor.isHtml(),
|
||||
this.oEditor.getTextForRequest(),
|
||||
|
@ -329,9 +313,9 @@ function PopupsComposeViewModel()
|
|||
this.draftID(),
|
||||
RL.data().draftFolder(),
|
||||
this.currentIdentityResultEmail(),
|
||||
fEmailArrayToStringLineHelper(this.to()),
|
||||
fEmailArrayToStringLineHelper(this.cc()),
|
||||
fEmailArrayToStringLineHelper(this.bcc()),
|
||||
this.to(),
|
||||
this.cc(),
|
||||
this.bcc(),
|
||||
this.subject(),
|
||||
this.oEditor.isHtml(),
|
||||
this.oEditor.getTextForRequest(),
|
||||
|
@ -451,7 +435,7 @@ PopupsComposeViewModel.prototype.findIdentityIdByMessage = function (sComposeTyp
|
|||
case Enums.ComposeType.ReplyAll:
|
||||
case Enums.ComposeType.Forward:
|
||||
case Enums.ComposeType.ForwardAsAttachment:
|
||||
_.find(_.union(oMessage.to, oMessage.сс, oMessage.bсс), fFindHelper);
|
||||
_.find(_.union(oMessage.to, oMessage.cc, oMessage.bcc), fFindHelper);
|
||||
break;
|
||||
case Enums.ComposeType.Draft:
|
||||
_.find(_.union(oMessage.from, oMessage.replyTo), fFindHelper);
|
||||
|
@ -602,7 +586,22 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
aDraftInfo = null,
|
||||
oMessage = null,
|
||||
bFocusOnBody = false,
|
||||
sComposeType = sType || Enums.ComposeType.Empty
|
||||
sComposeType = sType || Enums.ComposeType.Empty,
|
||||
fEmailArrayToStringLineHelper = function (aList) {
|
||||
|
||||
var
|
||||
iIndex = 0,
|
||||
iLen = aList.length,
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
{
|
||||
aResult.push(aList[iIndex].toLine(false));
|
||||
}
|
||||
|
||||
return aResult.join(', ');
|
||||
}
|
||||
;
|
||||
|
||||
oMessageOrArray = oMessageOrArray || null;
|
||||
|
@ -622,7 +621,7 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
|
||||
if (Utils.isNonEmptyArray(aToEmails))
|
||||
{
|
||||
this.to(aToEmails);
|
||||
this.to(fEmailArrayToStringLineHelper(aToEmails));
|
||||
}
|
||||
|
||||
if ('' !== sComposeType && oMessage)
|
||||
|
@ -640,7 +639,7 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
case Enums.ComposeType.Empty:
|
||||
break;
|
||||
case Enums.ComposeType.Reply:
|
||||
this.to(oMessage.replyEmails(oExcludeEmail));
|
||||
this.to(fEmailArrayToStringLineHelper(oMessage.replyEmails(oExcludeEmail)));
|
||||
this.subject(Utils.replySubjectAdd('Re', sSubject));
|
||||
this.prepearMessageAttachments(oMessage, sComposeType);
|
||||
this.aDraftInfo = ['reply', oMessage.uid, oMessage.folderFullNameRaw];
|
||||
|
@ -651,8 +650,8 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
|
||||
case Enums.ComposeType.ReplyAll:
|
||||
aResplyAllParts = oMessage.replyAllEmails(oExcludeEmail);
|
||||
this.to(aResplyAllParts[0]);
|
||||
this.cc(aResplyAllParts[1]);
|
||||
this.to(fEmailArrayToStringLineHelper(aResplyAllParts[0]));
|
||||
this.cc(fEmailArrayToStringLineHelper(aResplyAllParts[1]));
|
||||
this.subject(Utils.replySubjectAdd('Re', sSubject));
|
||||
this.prepearMessageAttachments(oMessage, sComposeType);
|
||||
this.aDraftInfo = ['reply', oMessage.uid, oMessage.folderFullNameRaw];
|
||||
|
@ -678,9 +677,9 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
break;
|
||||
|
||||
case Enums.ComposeType.Draft:
|
||||
this.to(oMessage.to);
|
||||
this.cc(oMessage.cc);
|
||||
this.bcc(oMessage.bcc);
|
||||
this.to(fEmailArrayToStringLineHelper(oMessage.to));
|
||||
this.cc(fEmailArrayToStringLineHelper(oMessage.cc));
|
||||
this.bcc(fEmailArrayToStringLineHelper(oMessage.bcc));
|
||||
|
||||
this.bFromDraft = true;
|
||||
|
||||
|
@ -744,7 +743,7 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
self.addMessageAsAttachment(oMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
aDownloads = this.getAttachmentsDownloadsForUpload();
|
||||
if (Utils.isNonEmptyArray(aDownloads))
|
||||
{
|
||||
|
@ -1322,9 +1321,10 @@ PopupsComposeViewModel.prototype.isEmptyForm = function (bIncludeAttachmentInPro
|
|||
|
||||
PopupsComposeViewModel.prototype.reset = function ()
|
||||
{
|
||||
this.to([]);
|
||||
this.cc([]);
|
||||
this.bcc([]);
|
||||
this.to('');
|
||||
this.cc('');
|
||||
this.bcc('');
|
||||
this.replyTo('');
|
||||
this.subject('');
|
||||
|
||||
this.aDraftInfo = null;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"name": "RainLoop",
|
||||
"title": "RainLoop Webmail",
|
||||
"version": "1.4.1",
|
||||
"release": "517",
|
||||
"version": "1.4.2",
|
||||
"release": "524",
|
||||
"description": "Simple, modern & fast web-based email client",
|
||||
"homepage": "http://rainloop.net",
|
||||
"main": "Gruntfile.js",
|
||||
|
|
|
@ -13,6 +13,9 @@ LANG_PL_PL = "Polski"
|
|||
LANG_RU = "Русский"
|
||||
LANG_RU_RU = "Русский"
|
||||
|
||||
LANG_UA = "Українська"
|
||||
LANG_UA_UA = "Українська"
|
||||
|
||||
LANG_DE = "Deutsch"
|
||||
LANG_DE_DE = "Deutsch"
|
||||
|
||||
|
@ -60,6 +63,9 @@ LANG_PL_PL = "Polish"
|
|||
LANG_RU = "Russian"
|
||||
LANG_RU_RU = "Russian"
|
||||
|
||||
LANG_UA = "Ukrainian"
|
||||
LANG_UA_UA = "Ukrainian"
|
||||
|
||||
LANG_DE = "German"
|
||||
LANG_DE_DE = "German"
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ class Email
|
|||
case '<':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
if ($iCurrentIndex > 0 && \strlen($sName) == 0)
|
||||
if ($iCurrentIndex > 0 && \strlen($sName) === 0)
|
||||
{
|
||||
$sName = \substr($sEmailAddress, 0, $iCurrentIndex);
|
||||
}
|
||||
|
@ -157,7 +157,7 @@ class Email
|
|||
$iCurrentIndex++;
|
||||
}
|
||||
|
||||
if (strlen($sEmail) == 0)
|
||||
if (\strlen($sEmail) === 0)
|
||||
{
|
||||
$aRegs = array('');
|
||||
if (\preg_match('/[^@\s]+@\S+/i', $sEmailAddress, $aRegs) && isset($aRegs[0]))
|
||||
|
@ -170,7 +170,7 @@ class Email
|
|||
}
|
||||
}
|
||||
|
||||
if ((\strlen($sEmail) > 0) && (\strlen($sName) == 0) && (strlen($sComment) == 0))
|
||||
if ((\strlen($sEmail) > 0) && (\strlen($sName) == 0) && (\strlen($sComment) == 0))
|
||||
{
|
||||
$sName = \str_replace($sEmail, '', $sEmailAddress);
|
||||
}
|
||||
|
|
|
@ -188,10 +188,11 @@ class Actions
|
|||
|
||||
/**
|
||||
* @param string $sName
|
||||
* @param \RainLoop\Account $oAccount = null
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
private function fabrica($sName)
|
||||
private function fabrica($sName, $oAccount = null)
|
||||
{
|
||||
$oResult = null;
|
||||
$this->Plugins()->RunHook('main.fabrica', array($sName, &$oResult), false);
|
||||
|
@ -952,7 +953,6 @@ class Actions
|
|||
$aResult['AdminLogin'] = $oConfig->Get('security', 'admin_login', '');
|
||||
$aResult['AdminDomain'] = APP_SITE;
|
||||
$aResult['UseTokenProtection'] = (bool) $oConfig->Get('security', 'csrf_protection', true);
|
||||
$aResult['UsageStatistics'] = (bool) $oConfig->Get('labs', 'usage_statistics', true);
|
||||
$aResult['EnabledPlugins'] = (bool) $oConfig->Get('plugins', 'enable', false);
|
||||
|
||||
$aResult['AllowGoogleSocial'] = (bool) $oConfig->Get('social', 'google_enable', false);
|
||||
|
@ -1632,7 +1632,6 @@ class Actions
|
|||
|
||||
$bMainCache = false;
|
||||
$bFilesCache = false;
|
||||
$bActivity = false;
|
||||
$bPing = false;
|
||||
|
||||
$iOneDay1 = 60 * 60 * 23;
|
||||
|
@ -1645,8 +1644,7 @@ class Actions
|
|||
|
||||
$iMainCacheTime = !empty($aTimers[0]) && \is_numeric($aTimers[0]) ? (int) $aTimers[0] : 0;
|
||||
$iFilesCacheTime = !empty($aTimers[1]) && \is_numeric($aTimers[1]) ? (int) $aTimers[1] : 0;
|
||||
$iActivityTime = !empty($aTimers[2]) && \is_numeric($aTimers[2]) ? (int) $aTimers[2] : 0;
|
||||
$iPingTime = !empty($aTimers[3]) && \is_numeric($aTimers[3]) ? (int) $aTimers[3] : 0;
|
||||
$iPingTime = !empty($aTimers[2]) && \is_numeric($aTimers[2]) ? (int) $aTimers[2] : 0;
|
||||
|
||||
if (0 === $iMainCacheTime || $iMainCacheTime + $iOneDay1 < \time())
|
||||
{
|
||||
|
@ -1660,25 +1658,19 @@ class Actions
|
|||
$iFilesCacheTime = \time();
|
||||
}
|
||||
|
||||
if (0 === $iActivityTime || $iActivityTime + $iOneDay1 < \time())
|
||||
{
|
||||
$bActivity = true;
|
||||
$iActivityTime = \time();
|
||||
}
|
||||
|
||||
if (0 === $iPingTime || $iPingTime + $iOneDay1 < \time())
|
||||
{
|
||||
$bPing = true;
|
||||
$iPingTime = \time();
|
||||
}
|
||||
|
||||
if ($bMainCache || $bFilesCache || $bActivity || $bPing)
|
||||
if ($bMainCache || $bFilesCache || $bPing)
|
||||
{
|
||||
if (!$this->StorageProvider()->Put(null,
|
||||
\RainLoop\Providers\Storage\Enumerations\StorageType::NOBODY, 'Cache/Timers',
|
||||
\implode(',', array($iMainCacheTime, $iFilesCacheTime, $iActivityTime, $iPingTime))))
|
||||
\implode(',', array($iMainCacheTime, $iFilesCacheTime, $iPingTime))))
|
||||
{
|
||||
$bMainCache = $bFilesCache = $bActivity = $bPing = false;
|
||||
$bMainCache = $bFilesCache = $bPing = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1696,13 +1688,6 @@ class Actions
|
|||
$this->Logger()->Write('Files GC: End');
|
||||
}
|
||||
|
||||
if ($bActivity && $this->Config()->Get('labs', 'usage_statistics', true))
|
||||
{
|
||||
$this->KeenIO('Statistic', array(
|
||||
'rainloop' => $this->setupInformation()
|
||||
));
|
||||
}
|
||||
|
||||
if ($bPing)
|
||||
{
|
||||
$this->KeenIO('Ping');
|
||||
|
@ -1842,7 +1827,6 @@ class Actions
|
|||
$this->setConfigFromParams($oConfig, 'LoadingDescription', 'webmail', 'loading_description', 'string');
|
||||
|
||||
$this->setConfigFromParams($oConfig, 'TokenProtection', 'security', 'csrf_protection', 'bool');
|
||||
$this->setConfigFromParams($oConfig, 'UsageStatistics', 'labs', 'usage_statistics', 'bool');
|
||||
$this->setConfigFromParams($oConfig, 'EnabledPlugins', 'plugins', 'enable', 'bool');
|
||||
|
||||
$this->setConfigFromParams($oConfig, 'GoogleEnable', 'social', 'google_enable', 'bool');
|
||||
|
@ -2246,11 +2230,25 @@ class Actions
|
|||
$aRep = null;
|
||||
|
||||
$sRep = '';
|
||||
$sRepoType = \strtolower(\trim($this->Config()->Get('labs', 'repo_type', 'stable')));
|
||||
$sRepoFile = 'repository.json';
|
||||
$iRepTime = 0;
|
||||
|
||||
switch ($sRepoType) {
|
||||
case 'dev':
|
||||
case 'nightly':
|
||||
case 'beta':
|
||||
$sRepoFile = 'beta.repository.json';
|
||||
break;
|
||||
case 'stable':
|
||||
default:
|
||||
$sRepoFile = 'repository.json';
|
||||
break;
|
||||
}
|
||||
|
||||
$oHttp = \MailSo\Base\Http::SingletonInstance();
|
||||
|
||||
$sCacheKey = 'UPDATER/('.$sRepo.')/repository.json';
|
||||
$sCacheKey = 'UPDATER/('.$sRepo.')/'.$sRepoFile;
|
||||
$sRep = $this->Cacher()->Get($sCacheKey);
|
||||
if ('' !== $sRep)
|
||||
{
|
||||
|
@ -2261,8 +2259,8 @@ class Actions
|
|||
{
|
||||
$iCode = 0;
|
||||
$sContentType = '';
|
||||
|
||||
$sRepPath = $sRepo.'repository.json';
|
||||
|
||||
$sRepPath = $sRepo.$sRepoFile;
|
||||
$sRep = '' !== $sRepo ? $oHttp->GetUrlAsString($sRepPath, 'RainLoop', $sContentType, $iCode, $this->Logger()) : false;
|
||||
if (false !== $sRep)
|
||||
{
|
||||
|
@ -2990,6 +2988,15 @@ class Actions
|
|||
return $this->DefaultResponse(__FUNCTION__, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function DoVersion()
|
||||
{
|
||||
return $this->DefaultResponse(__FUNCTION__,
|
||||
APP_VERSION === (string) $this->GetActionParam('Version', ''));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
|
@ -4063,6 +4070,63 @@ class Actions
|
|||
{
|
||||
$oAccount = $this->getAccountFromToken();
|
||||
|
||||
$sQuery = \trim($this->GetActionParam('Query', ''));
|
||||
|
||||
$aResult = array();
|
||||
if (0 < \strlen($sQuery) && $this->ContactsProvider()->IsActive())
|
||||
{
|
||||
$mResult = $this->ContactsProvider()->GetContacts($oAccount, 0, RL_CONTACTS_PER_PAGE, $sQuery);
|
||||
if (\is_array($mResult) && 0 < \count($mResult))
|
||||
{
|
||||
$mResult = \array_slice($mResult, 0, RL_CONTACTS_PER_PAGE);
|
||||
|
||||
foreach ($mResult as $oItem)
|
||||
{
|
||||
/* @var $oItem \RainLoop\Providers\Contacts\Classes\Contact */
|
||||
$aEmails = $oItem->Emails;
|
||||
if (0 < \count($aEmails))
|
||||
{
|
||||
foreach ($aEmails as $sEmail)
|
||||
{
|
||||
if (0 < \strlen($sEmail))
|
||||
{
|
||||
$aResult[] = array($sEmail, $oItem->Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this->DefaultResponse(__FUNCTION__, array(
|
||||
'More' => false,
|
||||
'List' => $aResult
|
||||
));
|
||||
|
||||
// $oAccount = $this->getAccountFromToken();
|
||||
//
|
||||
// $aResult = array();
|
||||
// $sQuery = \trim($this->GetActionParam('Query', ''));
|
||||
// if (0 < \strlen($sQuery) && $oAccount)
|
||||
// {
|
||||
// $aResult = $this->SuggestionsProvider()->Process($oAccount, $sQuery);
|
||||
//
|
||||
// if (0 === count($aResult) && false !== \strpos(strtolower($oAccount->Email()), \strtolower($sQuery)))
|
||||
// {
|
||||
// $aResult[] = array($oAccount->Email(), $oAccount->Name());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// return $this->DefaultResponse(__FUNCTION__, $aResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function DoSuggestionsDep()
|
||||
{
|
||||
$oAccount = $this->getAccountFromToken();
|
||||
|
||||
$sQuery = \trim($this->GetActionParam('Query', ''));
|
||||
$iPage = (int) $this->GetActionParam('Page', 0);
|
||||
|
||||
|
@ -5165,74 +5229,6 @@ class Actions
|
|||
return \RainLoop\Utils::ClearHtmlOutput($sHtml);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function setupInformation()
|
||||
{
|
||||
$aResult = array(
|
||||
'version-full' => APP_VERSION,
|
||||
);
|
||||
|
||||
$sV = APP_VERSION;
|
||||
$aMatch = array();
|
||||
if (\preg_match('/([\d]+\.[\d]+\.[\d]+).*/', APP_VERSION, $aMatch) && !empty($aMatch[1]))
|
||||
{
|
||||
$sV = $aMatch[1];
|
||||
}
|
||||
|
||||
$mPdoDrivers = \class_exists('PDO') ? \PDO::getAvailableDrivers() : null;
|
||||
|
||||
$aResult['version'] = $sV;
|
||||
$aResult['software'] = array(
|
||||
'mailso' => \MailSo\Version::AppVersion(),
|
||||
'capa' => array(
|
||||
'pdo' => \is_array($mPdoDrivers),
|
||||
'pdo-sqlite' => \is_array($mPdoDrivers) ? \in_array('sqlite', $mPdoDrivers) : false,
|
||||
'pdo-mysql' => \is_array($mPdoDrivers) ? \in_array('mysql', $mPdoDrivers) : false
|
||||
),
|
||||
'php' => PHP_VERSION
|
||||
);
|
||||
|
||||
$aResult['domains'] = $this->DomainProvider()->Count();
|
||||
$aResult['multiply'] = !!APP_MULTIPLY;
|
||||
$aResult['settings'] = array(
|
||||
'lang' => $this->Config()->Get('webmail', 'language', ''),
|
||||
'theme' => $this->Config()->Get('webmail', 'theme', ''),
|
||||
'cache' => $this->Config()->Get('cache', 'fast_cache_driver', ''),
|
||||
'social' => array(
|
||||
'google' => !!$this->Config()->Get('social', 'google_enable', false) &&
|
||||
0 < \strlen($this->Config()->Get('social', 'google_client_id', '')) &&
|
||||
0 < \strlen($this->Config()->Get('social', 'google_client_secret', '')),
|
||||
'twitter' => !!$this->Config()->Get('social', 'twitter_enable', false) &&
|
||||
0 < \strlen($this->Config()->Get('social', 'twitter_consumer_key', '')) &&
|
||||
0 < \strlen($this->Config()->Get('social', 'twitter_consumer_secret', '')),
|
||||
'facebook' => !!$this->Config()->Get('social', 'fb_enable', false) &&
|
||||
0 < \strlen($this->Config()->Get('social', 'fb_app_id', '')) &&
|
||||
0 < \strlen($this->Config()->Get('social', 'fb_app_secret', '')),
|
||||
'dropbox' => !!$this->Config()->Get('social', 'dropbox_enable', false) &&
|
||||
0 < \strlen($this->Config()->Get('social', 'dropbox_api_key', ''))
|
||||
)
|
||||
);
|
||||
|
||||
$aResult['plugins'] = array();
|
||||
$aResult['plugins']['@enabled'] = !!$this->Config()->Get('plugins', 'enable', false);
|
||||
|
||||
$aEnabledPlugins = \explode(',', \strtolower($this->Config()->Get('plugins', 'enabled_list', '')));
|
||||
$aEnabledPlugins = \array_map('trim', $aEnabledPlugins);
|
||||
|
||||
$aList = $this->Plugins()->InstalledPlugins();
|
||||
foreach ($aList as $aItem)
|
||||
{
|
||||
if (!empty($aItem[0]))
|
||||
{
|
||||
$aResult['plugins'][$aItem[0]] = \in_array(\strtolower($aItem[0]), $aEnabledPlugins) ? true : false;
|
||||
}
|
||||
}
|
||||
|
||||
return $aResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* @staticvar bool $bOnce
|
||||
* @param string $sName
|
||||
|
@ -5498,14 +5494,13 @@ class Actions
|
|||
*/
|
||||
private function hashFolderFullName($sFolderFullName)
|
||||
{
|
||||
return \in_array(\strtolower($sFolderFullName), array('inbox', 'sent', 'send', 'drafts', 'spam', 'junk', 'bin', 'trash')) ?
|
||||
\ucfirst(\strtolower($sFolderFullName)) : \md5($sFolderFullName);
|
||||
|
||||
// return \in_array(\strtolower($sFolderFullName), array('inbox', 'sent', 'send', 'drafts', 'spam', 'junk', 'bin', 'trash')) ?
|
||||
// \ucfirst(\strtolower($sFolderFullName)) :
|
||||
// \RainLoop\Utils::CustomBaseConvert(\sprintf('%u', \crc32(md5($sFolderFullName).$sFolderFullName)), '0123456789',
|
||||
// '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
|
||||
|
||||
return \in_array(\strtolower($sFolderFullName), array('inbox', 'sent', 'send', 'drafts', 'spam', 'junk', 'bin', 'trash')) ?
|
||||
\ucfirst(\strtolower($sFolderFullName)) : \md5($sFolderFullName);
|
||||
|
||||
// return \preg_match('/^[a-zA-Z0-9]+$/', $sFolderFullName) ? $sFolderFullName : \md5($sFolderFullName);
|
||||
// return \preg_match('/^[a-zA-Z0-9]+$/', $sFolderFullName) ? $sFolderFullName : \rtrim(\base_convert(\md5($sFolderFullName), 16, 32), '0');
|
||||
// return 'INBOX' === $sFolderFullName ? $sFolderFullName : \base_convert(\sprintf('%u', \crc32(\md5($sFolderFullName))), 10, 32);
|
||||
|
|
|
@ -68,7 +68,7 @@ class Application extends \RainLoop\Config\AbstractConfig
|
|||
'allow_languages_on_settings' => array(true, 'Allow language selection on settings screen'),
|
||||
|
||||
'allow_additional_accounts' => array(true, ''),
|
||||
'allow_identities' => array(false, ''),
|
||||
'allow_identities' => array(true, ''),
|
||||
|
||||
'use_preview_pane' => array(true, 'Whether message preview pane should be used'),
|
||||
|
||||
|
@ -205,6 +205,7 @@ Enables caching in the system'),
|
|||
'use_imap_thread' => array(true),
|
||||
'use_imap_move' => array(true),
|
||||
'use_imap_auth_plain' => array(false),
|
||||
'repo_type' => array('stable'),
|
||||
'custom_repo' => array(''),
|
||||
'additional_repo' => array(''),
|
||||
'cdn_static_domain' => array(''),
|
||||
|
@ -217,7 +218,6 @@ Enables caching in the system'),
|
|||
'fast_cache_memcache_host' => array('127.0.0.1'),
|
||||
'fast_cache_memcache_port' => array(11211),
|
||||
'fast_cache_memcache_expire' => array(43200),
|
||||
'usage_statistics' => array(true),
|
||||
'dev_email' => array(''),
|
||||
'dev_login' => array(''),
|
||||
'dev_password' => array('')
|
||||
|
|
|
@ -95,8 +95,7 @@ class Service
|
|||
$this->oActions->ParseQueryAuthString();
|
||||
|
||||
if (defined('APP_INSTALLED_START') && defined('APP_INSTALLED_VERSION') &&
|
||||
APP_INSTALLED_START && !APP_INSTALLED_VERSION &&
|
||||
$this->oActions->Config()->Get('labs', 'usage_statistics', true))
|
||||
APP_INSTALLED_START && !APP_INSTALLED_VERSION)
|
||||
{
|
||||
$this->oActions->KeenIO('Install');
|
||||
}
|
||||
|
|
|
@ -12,15 +12,6 @@
|
|||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<label data-bind="click: function () { usageStatistics(!usageStatistics()); }">
|
||||
<i data-bind="css: usageStatistics() ? 'icon-checkbox-checked' : 'icon-checkbox-unchecked'"></i>
|
||||
|
||||
Automatically send usage statistics to RainLoop team (It does not include any personal information)
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<a href="#" target="_blank" class="g-ui-link" data-bind="link: phpInfoLink()">Show PHP information</a>
|
||||
|
|
|
@ -57,19 +57,18 @@
|
|||
</label>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" data-bind="select2: to" />
|
||||
<input type="text" data-bind="emailsTags: to" />
|
||||
<span class="help-block error-desc" data-bind="visible: emptyToError">
|
||||
<span class="i18n" data-i18n-text="COMPOSE/EMPTY_TO_ERROR_DESC"></span>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-delimiter-row" data-bind="visible: showCcAndBcc"> </div>
|
||||
<div class="e-row cc-row" data-bind="visible: showCcAndBcc">
|
||||
<div class="e-cell e-label">
|
||||
<span class="i18n" data-i18n-text="COMPOSE/TITLE_CC"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" data-bind="select2: cc" />
|
||||
<input type="text" data-bind="emailsTags: cc" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row bcc-row" data-bind="visible: showCcAndBcc">
|
||||
|
@ -77,7 +76,7 @@
|
|||
<span class="i18n" data-i18n-text="COMPOSE/TITLE_BCC"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" data-bind="select2: bcc" />
|
||||
<input type="text" data-bind="emailsTags: bcc" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row reply-to-row" data-bind="visible: false">
|
||||
|
@ -85,7 +84,7 @@
|
|||
<span class="i18n" data-i18n-text="COMPOSE/TITLE_REPLY_TO"></span>
|
||||
</div>
|
||||
<div class="e-cell e-value">
|
||||
<input type="text" data-bind="value: replyTo" />
|
||||
<input type="text" data-bind="emailsTags: replyTo" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="e-row">
|
||||
|
|
|
@ -395,9 +395,13 @@ PHP_EXSTENSIONS_ERROR_DESC = "Notwendige PHP-Erweiterungen sind in Ihrer PHP-Kon
|
|||
PHP_VERSION_ERROR_DESC = "Ihre PHP Version (%VERSION%) ist älter als die notwendige Version: 5.3.0!"
|
||||
|
||||
NO_SCRIPT_TITLE = "Diese Anwendung benötigt JavaScript."
|
||||
NO_SCRIPT_DESC = "Ihr Browser unterstützt JavaScript nicht. Aktivieren Sie bitte die Javascript-Unterstützung in Ihrem Browser und versuchen Sie es noch einmal."
|
||||
NO_SCRIPT_DESC = "Ihr Browser unterstützt JavaScript nicht.
|
||||
Aktivieren Sie bitte die Javascript-Unterstützung in Ihrem Browser und versuchen Sie es noch einmal."
|
||||
|
||||
NO_COOKIE_TITLE = "Diese Anwendung benötigt Cookies."
|
||||
NO_COOKIE_DESC = "Ihr Browser unterstützt Cookies nicht. Aktivieren Sie bitte die Cookie-Unterstützung in Ihrem Browser und versuchen Sie es noch einmal."
|
||||
NO_COOKIE_DESC = "Ihr Browser unterstützt Cookies nicht.
|
||||
Aktivieren Sie bitte die Cookie-Unterstützung in Ihrem Browser und versuchen Sie es noch einmal."
|
||||
|
||||
BAD_BROWSER_TITLE = "Ihr Browser ist veraltet."
|
||||
BAD_BROWSER_DESC = "Um alle Features dieser Anwendung nutzen zu können, sollten Sie wirklich einen aktuellen Browser installieren!"
|
||||
BAD_BROWSER_DESC = "Um alle Features dieser Anwendung nutzen zu können,
|
||||
sollten Sie wirklich einen aktuellen Browser installieren!"
|
||||
|
|
|
@ -142,6 +142,7 @@ TITLE_FROM = "Od"
|
|||
TITLE_TO = "Do"
|
||||
TITLE_CC = "CC"
|
||||
TITLE_BCC = "BCC"
|
||||
TITLE_REPLY_TO = "Reply To"
|
||||
TITLE_SUBJECT = "Temat"
|
||||
LINK_SHOW_INPUTS = "pokaż wszystkie pola"
|
||||
BUTTON_SEND = "Wyslij"
|
||||
|
@ -249,13 +250,15 @@ LABEL_PERSONAL_NAME = "Osobiste"
|
|||
LABEL_GENERAL_NAME = "Ogólne"
|
||||
LABEL_FOLDERS_NAME = "Foldery"
|
||||
LABEL_ACCOUNTS_NAME = "Konta"
|
||||
LABEL_IDENTITY_NAME = "Identity"
|
||||
LABEL_IDENTITIES_NAME = "Identities"
|
||||
LABEL_SOCIAL_NAME = "Media Społecznościowe"
|
||||
LABEL_THEMES_NAME = "Wygląd"
|
||||
LABEL_CHANGE_PASSWORD_NAME = "Hasło"
|
||||
BUTTON_BACK = "Wstecz"
|
||||
|
||||
[SETTINGS_PERSONAL]
|
||||
LEGEND_PERSONAL = "Dane osobiste"
|
||||
[SETTINGS_IDENTITY]
|
||||
LEGEND_IDENTITY = "Identity"
|
||||
LABEL_DISPLAY_NAME = "Imie"
|
||||
LABEL_REPLY_TO = "Zwrotny adres e-mail"
|
||||
LABEL_SIGNATURE = "Sygnatura"
|
||||
|
@ -266,6 +269,10 @@ LABEL_LANGUAGE = "Język"
|
|||
LABEL_EDITOR = "Domyślny edytor tekstu"
|
||||
LABEL_EDITOR_HTML_AS_DEFAULT = "Html"
|
||||
LABEL_EDITOR_PLAIN_AS_DEFAULT = "Zwykły tekst"
|
||||
LABEL_ANIMATION = "Interface animation"
|
||||
LABEL_ANIMATION_FULL = "Full"
|
||||
LABEL_ANIMATION_NORMAL = "Normal"
|
||||
LABEL_ANIMATION_NONE = "None"
|
||||
LABEL_VIEW_OPTIONS = "Opcje wyświetlania"
|
||||
LABEL_USE_PREVIEW_PANE = "Wyświetl okno podglądu"
|
||||
LABEL_USE_CHECKBOXES_IN_LIST = "Wyświetl checkboxy w listach"
|
||||
|
@ -352,6 +359,7 @@ SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "To społecznościowe ID nie jest powiąz
|
|||
SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "To społecznościowe ID nie jest powiązane z żadnym kontem pocztowym. W związku z tym zaloguj się używając danych swojego konta e-mail i skonfiguruj tą opcję w Ustawieniach."
|
||||
SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "To społecznościowe ID nie jest powiązane z żadnym kontem pocztowym. W związku z tym zaloguj się używając danych swojego konta e-mail i skonfiguruj tą opcję w Ustawieniach."
|
||||
DOMAIN_NOT_ALLOWED = "Domena nie jest dozwolona"
|
||||
ACCOUNT_NOT_ALLOWED = "Account is not allowed"
|
||||
CANT_GET_MESSAGE_LIST = "Nie jest możliwe pobranie listy wiadomości"
|
||||
CANT_GET_MESSAGE = "Nie jest możliwe pobranie wiadomości"
|
||||
CANT_DELETE_MESSAGE = "Nie jest możliwe usunięcie wiadomości"
|
||||
|
|
|
@ -359,6 +359,7 @@ SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para q
|
|||
SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entrar usando credenciais de e-mail e adicione ativar esse recurso em configurações de conta."
|
||||
SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entrar usando credenciais de e-mail e adicione ativar esse recurso em configurações de conta."
|
||||
DOMAIN_NOT_ALLOWED = "Este domínio não é permitido"
|
||||
ACCOUNT_NOT_ALLOWED = "Account is not allowed"
|
||||
CANT_GET_MESSAGE_LIST = "Não é possível obter a lista de mensagens"
|
||||
CANT_GET_MESSAGE = "Não é possível obter a mensagem"
|
||||
CANT_DELETE_MESSAGE = "Não é possível excluir a mensagem"
|
||||
|
|
|
@ -359,6 +359,7 @@ SOCIAL_FACEBOOK_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para q
|
|||
SOCIAL_TWITTER_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entrar usando credenciais de e-mail e adicione ativar esse recurso em configurações de conta."
|
||||
SOCIAL_GOOGLE_LOGIN_ACCESS_DISABLE = "Esta ID social não é atribuído para qualquer conta de e-mail ainda. Entrar usando credenciais de e-mail e adicione ativar esse recurso em configurações de conta."
|
||||
DOMAIN_NOT_ALLOWED = "Este domínio não é permitido"
|
||||
ACCOUNT_NOT_ALLOWED = "Account is not allowed"
|
||||
CANT_GET_MESSAGE_LIST = "Não é possível obter a lista de mensagens"
|
||||
CANT_GET_MESSAGE = "Não é possível obter a mensagem"
|
||||
CANT_DELETE_MESSAGE = "Não é possível excluir a mensagem"
|
||||
|
|
File diff suppressed because it is too large
Load diff
6
rainloop/v/0.0.0/static/css/app.min.css
vendored
6
rainloop/v/0.0.0/static/css/app.min.css
vendored
File diff suppressed because one or more lines are too long
|
@ -3449,61 +3449,56 @@ html.no-rgba .modal {
|
|||
.picker.picker-dialog {
|
||||
z-index: 2001 !important;
|
||||
}
|
||||
.select2-container-multi .select2-choices {
|
||||
background-image: none;
|
||||
border: 1px solid #cccccc;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice {
|
||||
line-height: 15px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.select2-container-multi.select2-container-active .select2-choices {
|
||||
border: 1px solid #999999;
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.select2-drop {
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.select2-drop .select2-subname {
|
||||
color: #777;
|
||||
}
|
||||
.select2-drop .select2-highlighted .select2-subname {
|
||||
color: #eee;
|
||||
}
|
||||
.select2-results {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
max-height: 400px;
|
||||
}
|
||||
.select2-results .select2-searching {
|
||||
padding: 1px 4px;
|
||||
}
|
||||
.select2-icon {
|
||||
.inputosaurus-container {
|
||||
width: 99%;
|
||||
line-height: 20px;
|
||||
padding: 0 0 0 7px;
|
||||
padding: 2px;
|
||||
border: 1px solid #cccccc;
|
||||
border-radius: 3px;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||
-webkit-transition: border linear .2s, box-shadow linear .2s;
|
||||
-moz-transition: border linear .2s, box-shadow linear .2s;
|
||||
-o-transition: border linear .2s, box-shadow linear .2s;
|
||||
transition: border linear .2s, box-shadow linear .2s;
|
||||
}
|
||||
.select2-icon-result {
|
||||
line-height: 40px;
|
||||
.inputosaurus-container li {
|
||||
max-width: 500px;
|
||||
background-color: #eee;
|
||||
border: 1px solid #aaa;
|
||||
line-height: 18px;
|
||||
padding: 2px 4px;
|
||||
margin: 2px 2px 2px;
|
||||
color: #555;
|
||||
}
|
||||
.select2-result-label {
|
||||
margin: 0px !important;
|
||||
padding: 5px !important;
|
||||
font-size: 16px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
.inputosaurus-container li a {
|
||||
color: #999;
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
}
|
||||
.select2-result-label .select2-user-pic {
|
||||
display: inline-block;
|
||||
height: 40px;
|
||||
width: 40px;
|
||||
margin-right: 10px;
|
||||
.inputosaurus-container li a:hover {
|
||||
color: #666;
|
||||
}
|
||||
.inputosaurus-container li.inputosaurus-selected {
|
||||
background-color: #ddd;
|
||||
}
|
||||
.inputosaurus-container .inputosaurus-fake-span {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: -5000px;
|
||||
}
|
||||
.inputosaurus-container .inputosaurus-input {
|
||||
margin: 2px 10px 2px 0px;
|
||||
height: 22px;
|
||||
}
|
||||
.inputosaurus-container .inputosaurus-input input {
|
||||
border: 0px;
|
||||
height: 21px;
|
||||
padding-left: 0;
|
||||
}
|
||||
.ui-autocomplete {
|
||||
z-index: 2000;
|
||||
}
|
||||
.g-ui-user-select-none {
|
||||
-webkit-user-select: none;
|
||||
|
@ -5206,10 +5201,6 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull {
|
|||
.b-compose .b-header .e-row {
|
||||
line-height: 30px;
|
||||
}
|
||||
.b-compose .b-header .e-delimiter-row {
|
||||
line-height: 2px;
|
||||
height: 5px;
|
||||
}
|
||||
.b-compose .b-header .e-label {
|
||||
text-align: right;
|
||||
width: 1%;
|
||||
|
@ -5226,9 +5217,6 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull {
|
|||
.b-compose .b-header .e-value textarea {
|
||||
height: 40px;
|
||||
}
|
||||
.b-compose .b-header .e-value .select2-container {
|
||||
width: 100%;
|
||||
}
|
||||
.b-compose .b-header .error-desc {
|
||||
color: red;
|
||||
}
|
||||
|
|
|
@ -2524,167 +2524,55 @@ ko.bindingHandlers.saveTrigger = {
|
|||
}
|
||||
};
|
||||
|
||||
ko.bindingHandlers.select2 = {
|
||||
ko.bindingHandlers.emailsTags = {
|
||||
'init': function(oElement, fValueAccessor) {
|
||||
|
||||
var
|
||||
iTimer = 0,
|
||||
iTimeout = 100,
|
||||
oMatch = null,
|
||||
oReg = new window.RegExp(/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/),
|
||||
oReg2 = new window.RegExp(/(.+) [<]?([^\s<@]+@[a-zA-Z0-9\.\-_]+)[>]?/),
|
||||
sEmptyTranslateFunction = function () {
|
||||
return '';
|
||||
},
|
||||
/**
|
||||
* @param {{term:string, callback:Function, matcher:Function}} oCall
|
||||
*/
|
||||
fLazyAutocomplete = function (oCall) {
|
||||
$oEl = $(oElement),
|
||||
fValue = fValueAccessor()
|
||||
;
|
||||
|
||||
RL.getAutocomplete(oCall['term'], oCall['page'], function (aData, bMore) {
|
||||
oCall.callback({
|
||||
'more': !!bMore,
|
||||
'results': _.map(aData, function (oEmailItem) {
|
||||
var sName = oEmailItem.toLine(false);
|
||||
return {
|
||||
'id': sName,
|
||||
'text': sName,
|
||||
'c': oEmailItem
|
||||
};
|
||||
})
|
||||
});
|
||||
$oEl.inputosaurus({
|
||||
'parseOnBlur': true,
|
||||
'inputDelimiters': [',', ';'],
|
||||
'autoCompleteSource': function (oData, fResponse) {
|
||||
RL.getAutocomplete(oData.term, function (aData) {
|
||||
fResponse(_.map(aData, function (oEmailItem) {
|
||||
return oEmailItem.toLine(false);
|
||||
}));
|
||||
});
|
||||
}
|
||||
;
|
||||
|
||||
$(oElement).addClass('ko-select2').select2({
|
||||
|
||||
/**
|
||||
* @param {{term:string, callback:Function, matcher:Function}} oCall
|
||||
*/
|
||||
'query': function (oCall) {
|
||||
if (!oCall)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// if (RL.isLocalAutocomplete && false)
|
||||
// {
|
||||
// fLazyAutocomplete(oCall);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
if (0 === iTimer)
|
||||
},
|
||||
'parseHook': function (aInput) {
|
||||
return _.map(aInput, function (sInputValue) {
|
||||
|
||||
var sValue = Utils.trim(sInputValue), oEmail = null;
|
||||
if ('' !== sValue)
|
||||
{
|
||||
fLazyAutocomplete(oCall);
|
||||
iTimer = window.setTimeout(Utils.emptyFunction, iTimeout);
|
||||
oEmail = new EmailModel();
|
||||
oEmail.mailsoParse(sValue);
|
||||
oEmail.clearDuplicateName();
|
||||
|
||||
// sValue = oEmail.toLine(false);
|
||||
// return sValue;
|
||||
return [oEmail.toLine(false), oEmail];
|
||||
}
|
||||
else
|
||||
{
|
||||
window.clearInterval(iTimer);
|
||||
iTimer = window.setTimeout(function () {
|
||||
fLazyAutocomplete(oCall);
|
||||
}, iTimeout);
|
||||
}
|
||||
// }
|
||||
|
||||
return [sValue, null];
|
||||
|
||||
});
|
||||
},
|
||||
'formatSelection': function (oItem, oContainer) {
|
||||
var sR = oItem && oItem.c ? oItem.c.select2Selection(oContainer) : oItem.text;
|
||||
if (null !== sR)
|
||||
{
|
||||
return sR;
|
||||
}
|
||||
},
|
||||
'formatResult': function (oItem, oContainer, oQuery, fEscapeMarkup) {
|
||||
var sR = oItem && oItem.c ? oItem.c.select2Result(oContainer) : '';
|
||||
return '' === sR ? fEscapeMarkup(oItem.text) : sR;
|
||||
},
|
||||
'createSearchChoice': function (sTerm, aList) {
|
||||
return 0 === aList.length && oReg.test(sTerm) ? {
|
||||
'id': sTerm,
|
||||
'text': sTerm
|
||||
} : null;
|
||||
},
|
||||
'formatNoMatches': sEmptyTranslateFunction,
|
||||
'formatSearching': function () {
|
||||
return Utils.i18n('SUGGESTIONS/SEARCHING_DESC');
|
||||
},
|
||||
'formatInputTooShort': sEmptyTranslateFunction,
|
||||
'formatSelectionTooBig': sEmptyTranslateFunction,
|
||||
'multiple': true,
|
||||
'tokenSeparators': [',', ';'],
|
||||
'minimumInputLength': 2,
|
||||
'selectOnBlur': false,
|
||||
'closeOnSelect': true,
|
||||
'openOnEnter': false
|
||||
'change': _.bind(function (oEvent) {
|
||||
$oEl.data('EmailsTagsValue', oEvent.target.value);
|
||||
fValue(oEvent.target.value);
|
||||
}, this)
|
||||
});
|
||||
|
||||
ko.utils.domNodeDisposal.addDisposeCallback(oElement, function() {
|
||||
$(oElement).select2('destroy');
|
||||
});
|
||||
|
||||
$(oElement).on('change', function () {
|
||||
|
||||
var
|
||||
aTags = $(this).select2('data'),
|
||||
iIndex = 0,
|
||||
iLen = aTags.length,
|
||||
oItem = null,
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
fValue.subscribe(function (sValue) {
|
||||
if ($oEl.data('EmailsTagsValue') !== sValue)
|
||||
{
|
||||
oItem = aTags[iIndex];
|
||||
if (oItem && oItem.id)
|
||||
{
|
||||
if (!oItem.c)
|
||||
{
|
||||
oItem.c = new EmailModel();
|
||||
oMatch = oReg2.exec(Utils.trim(oItem.id));
|
||||
if (oMatch && !Utils.isUnd(oMatch[2]))
|
||||
{
|
||||
oItem.c.name = oMatch[1];
|
||||
oItem.c.email = oMatch[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
oItem.c.email = oItem.id;
|
||||
}
|
||||
}
|
||||
|
||||
aResult.push(oItem.c);
|
||||
}
|
||||
$oEl.val(sValue);
|
||||
$oEl.inputosaurus('refresh');
|
||||
}
|
||||
|
||||
fValueAccessor()(aResult);
|
||||
});
|
||||
},
|
||||
|
||||
'update': function (oElement, fValueAccessor) {
|
||||
|
||||
var
|
||||
aTags = ko.utils.unwrapObservable(fValueAccessor()),
|
||||
iIndex = 0,
|
||||
iLen = aTags.length,
|
||||
oItem = null,
|
||||
sName = '',
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
{
|
||||
oItem = aTags[iIndex];
|
||||
sName = oItem.toLine(false);
|
||||
|
||||
aResult.push({
|
||||
'id': sName,
|
||||
'text': sName,
|
||||
'c': oItem
|
||||
});
|
||||
}
|
||||
|
||||
$(oElement).select2('data', aResult);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -3696,10 +3584,6 @@ Knoin.prototype.hideScreenPopup = function (ViewModelClassToHide)
|
|||
ViewModelClassToHide.__vm.modalVisibility(false);
|
||||
this.delegateRun(ViewModelClassToHide.__vm, 'onHide');
|
||||
this.popupVisibility(false);
|
||||
|
||||
_.defer(function () {
|
||||
ViewModelClassToHide.__dom.find('.ko-select2').select2('close');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -3961,6 +3845,13 @@ EmailModel.prototype.email = '';
|
|||
*/
|
||||
EmailModel.prototype.privateType = null;
|
||||
|
||||
EmailModel.prototype.clear = function ()
|
||||
{
|
||||
this.email = '';
|
||||
this.name = '';
|
||||
this.privateType = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
|
@ -4021,6 +3912,8 @@ EmailModel.prototype.search = function (sQuery)
|
|||
*/
|
||||
EmailModel.prototype.parse = function (sString)
|
||||
{
|
||||
this.clear();
|
||||
|
||||
sString = Utils.trim(sString);
|
||||
|
||||
var
|
||||
|
@ -4064,18 +3957,22 @@ EmailModel.prototype.initByJson = function (oJsonEmail)
|
|||
/**
|
||||
* @param {boolean} bFriendlyView
|
||||
* @param {boolean=} bWrapWithLink = false
|
||||
* @param {boolean=} bEncodeHtml = false
|
||||
* @return {string}
|
||||
*/
|
||||
EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink)
|
||||
EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink, bEncodeHtml)
|
||||
{
|
||||
var sResult = '';
|
||||
if ('' !== this.email)
|
||||
{
|
||||
bWrapWithLink = Utils.isUnd(bWrapWithLink) ? false : !!bWrapWithLink;
|
||||
bEncodeHtml = Utils.isUnd(bEncodeHtml) ? false : !!bEncodeHtml;
|
||||
|
||||
if (bFriendlyView && '' !== this.name)
|
||||
{
|
||||
sResult = bWrapWithLink ? '<a href="mailto:' + Utils.encodeHtml('"' + this.name + '" <' + this.email + '>') +
|
||||
'" target="_blank" tabindex="-1">' + Utils.encodeHtml(this.name) + '</a>' : this.name;
|
||||
'" target="_blank" tabindex="-1">' + Utils.encodeHtml(this.name) + '</a>' :
|
||||
(bEncodeHtml ? Utils.encodeHtml(this.name) : this.name);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -4090,6 +3987,10 @@ EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink)
|
|||
else
|
||||
{
|
||||
sResult = '"' + this.name + '" <' + sResult + '>';
|
||||
if (bEncodeHtml)
|
||||
{
|
||||
sResult = Utils.encodeHtml(sResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (bWrapWithLink)
|
||||
|
@ -4158,6 +4059,172 @@ EmailModel.prototype.select2Selection = function (oContainer)
|
|||
|
||||
return sResult;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} $sEmailAddress
|
||||
* @return {boolean}
|
||||
*/
|
||||
EmailModel.prototype.mailsoParse = function ($sEmailAddress)
|
||||
{
|
||||
$sEmailAddress = Utils.trim($sEmailAddress);
|
||||
if ('' === $sEmailAddress)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var
|
||||
substr = function (str, start, len) {
|
||||
str += '';
|
||||
var end = str.length;
|
||||
|
||||
if (start < 0) {
|
||||
start += end;
|
||||
}
|
||||
|
||||
end = typeof len === 'undefined' ? end : (len < 0 ? len + end : len + start);
|
||||
|
||||
return start >= str.length || start < 0 || start > end ? false : str.slice(start, end);
|
||||
},
|
||||
|
||||
substr_replace = function (str, replace, start, length) {
|
||||
if (start < 0) {
|
||||
start = start + str.length;
|
||||
}
|
||||
length = length !== undefined ? length : str.length;
|
||||
if (length < 0) {
|
||||
length = length + str.length - start;
|
||||
}
|
||||
return str.slice(0, start) + replace.substr(0, length) + replace.slice(length) + str.slice(start + length);
|
||||
},
|
||||
|
||||
$sName = '',
|
||||
$sEmail = '',
|
||||
$sComment = '',
|
||||
|
||||
$bInName = false,
|
||||
$bInAddress = false,
|
||||
$bInComment = false,
|
||||
|
||||
$aRegs = null,
|
||||
|
||||
$iStartIndex = 0,
|
||||
$iEndIndex = 0,
|
||||
$iCurrentIndex = 0
|
||||
;
|
||||
|
||||
while ($iCurrentIndex < $sEmailAddress.length)
|
||||
{
|
||||
switch ($sEmailAddress.substr($iCurrentIndex, 1))
|
||||
{
|
||||
case '"':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$bInName = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
else if ((!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sName = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInName = false;
|
||||
}
|
||||
break;
|
||||
case '<':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
if ($iCurrentIndex > 0 && $sName.length === 0)
|
||||
{
|
||||
$sName = substr($sEmailAddress, 0, $iCurrentIndex);
|
||||
}
|
||||
|
||||
$bInAddress = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
break;
|
||||
case '>':
|
||||
if ($bInAddress)
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sEmail = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInAddress = false;
|
||||
}
|
||||
break;
|
||||
case '(':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$bInComment = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
break;
|
||||
case ')':
|
||||
if ($bInComment)
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sComment = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInComment = false;
|
||||
}
|
||||
break;
|
||||
case '\\':
|
||||
$iCurrentIndex++;
|
||||
break;
|
||||
}
|
||||
|
||||
$iCurrentIndex++;
|
||||
}
|
||||
|
||||
if ($sEmail.length === 0)
|
||||
{
|
||||
$aRegs = $sEmailAddress.match(/[^@\s]+@\S+/i);
|
||||
if ($aRegs && $aRegs[0])
|
||||
{
|
||||
$sEmail = $aRegs[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sName = $sEmailAddress;
|
||||
}
|
||||
}
|
||||
|
||||
if ($sEmail.length > 0 && $sName.length === 0 && $sComment.length === 0)
|
||||
{
|
||||
$sName = $sEmailAddress.replace($sEmail, '');
|
||||
}
|
||||
|
||||
$sEmail = Utils.trim($sEmail).replace(/^[<]+/, '').replace(/[>]+$/, '');
|
||||
$sName = Utils.trim($sName).replace(/^["']+/, '').replace(/["']+$/, '');
|
||||
$sComment = Utils.trim($sComment).replace(/^[(]+/, '').replace(/[)]+$/, '');
|
||||
|
||||
// Remove backslash
|
||||
$sName = $sName.replace(/\\\\(.)/, '$1');
|
||||
$sComment = $sComment.replace(/\\\\(.)/, '$1');
|
||||
|
||||
this.name = $sName;
|
||||
this.email = $sEmail;
|
||||
|
||||
this.clearDuplicateName();
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
EmailModel.prototype.inputoTagLine = function ()
|
||||
{
|
||||
return 0 < this.name.length ? this.name + ' (' + this.email + ')' : this.email;
|
||||
};
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
|
@ -5032,7 +5099,6 @@ AdminDomains.prototype.onDomainListChangeRequest = function ()
|
|||
function AdminSecurity()
|
||||
{
|
||||
this.csrfProtection = ko.observable(!!RL.settingsGet('UseTokenProtection'));
|
||||
this.usageStatistics = ko.observable(!!RL.settingsGet('UsageStatistics'));
|
||||
|
||||
this.adminLogin = ko.observable(RL.settingsGet('AdminLogin'));
|
||||
this.adminPassword = ko.observable('');
|
||||
|
@ -5092,12 +5158,6 @@ AdminSecurity.prototype.onBuild = function ()
|
|||
'TokenProtection': bValue ? '1' : '0'
|
||||
});
|
||||
});
|
||||
|
||||
this.usageStatistics.subscribe(function (bValue) {
|
||||
RL.remote().saveAdminConfig(Utils.emptyFunction, {
|
||||
'UsageStatistics': bValue ? '1' : '0'
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
AdminSecurity.prototype.onHide = function ()
|
||||
|
@ -5828,6 +5888,17 @@ AbstractAjaxRemoteStorage.prototype.jsInfo = function (fCallback, sType, mData,
|
|||
'IsError': (Utils.isUnd(bIsError) ? false : !!bIsError) ? '1' : '0'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {?Function} fCallback
|
||||
* @param {string} sVersion
|
||||
*/
|
||||
AbstractAjaxRemoteStorage.prototype.jsVersion = function (fCallback, sVersion)
|
||||
{
|
||||
this.defaultRequest(fCallback, 'Version', {
|
||||
'Version': sVersion
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
|
@ -6557,10 +6628,9 @@ AbstractApp.prototype.loginAndLogoutReload = function (bLogout, bClose)
|
|||
|
||||
/**
|
||||
* @param {string} sQuery
|
||||
* @param {number} iPage
|
||||
* @param {Function} fCallback
|
||||
*/
|
||||
AbstractApp.prototype.getAutocomplete = function (sQuery, iPage, fCallback)
|
||||
AbstractApp.prototype.getAutocomplete = function (sQuery, fCallback)
|
||||
{
|
||||
fCallback([], sQuery);
|
||||
};
|
||||
|
|
6
rainloop/v/0.0.0/static/js/admin.min.js
vendored
6
rainloop/v/0.0.0/static/js/admin.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -2524,167 +2524,55 @@ ko.bindingHandlers.saveTrigger = {
|
|||
}
|
||||
};
|
||||
|
||||
ko.bindingHandlers.select2 = {
|
||||
ko.bindingHandlers.emailsTags = {
|
||||
'init': function(oElement, fValueAccessor) {
|
||||
|
||||
var
|
||||
iTimer = 0,
|
||||
iTimeout = 100,
|
||||
oMatch = null,
|
||||
oReg = new window.RegExp(/[a-zA-Z0-9\.\-_]+@[a-zA-Z0-9\.\-_]+/),
|
||||
oReg2 = new window.RegExp(/(.+) [<]?([^\s<@]+@[a-zA-Z0-9\.\-_]+)[>]?/),
|
||||
sEmptyTranslateFunction = function () {
|
||||
return '';
|
||||
},
|
||||
/**
|
||||
* @param {{term:string, callback:Function, matcher:Function}} oCall
|
||||
*/
|
||||
fLazyAutocomplete = function (oCall) {
|
||||
$oEl = $(oElement),
|
||||
fValue = fValueAccessor()
|
||||
;
|
||||
|
||||
RL.getAutocomplete(oCall['term'], oCall['page'], function (aData, bMore) {
|
||||
oCall.callback({
|
||||
'more': !!bMore,
|
||||
'results': _.map(aData, function (oEmailItem) {
|
||||
var sName = oEmailItem.toLine(false);
|
||||
return {
|
||||
'id': sName,
|
||||
'text': sName,
|
||||
'c': oEmailItem
|
||||
};
|
||||
})
|
||||
});
|
||||
$oEl.inputosaurus({
|
||||
'parseOnBlur': true,
|
||||
'inputDelimiters': [',', ';'],
|
||||
'autoCompleteSource': function (oData, fResponse) {
|
||||
RL.getAutocomplete(oData.term, function (aData) {
|
||||
fResponse(_.map(aData, function (oEmailItem) {
|
||||
return oEmailItem.toLine(false);
|
||||
}));
|
||||
});
|
||||
}
|
||||
;
|
||||
|
||||
$(oElement).addClass('ko-select2').select2({
|
||||
|
||||
/**
|
||||
* @param {{term:string, callback:Function, matcher:Function}} oCall
|
||||
*/
|
||||
'query': function (oCall) {
|
||||
if (!oCall)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// if (RL.isLocalAutocomplete && false)
|
||||
// {
|
||||
// fLazyAutocomplete(oCall);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
if (0 === iTimer)
|
||||
},
|
||||
'parseHook': function (aInput) {
|
||||
return _.map(aInput, function (sInputValue) {
|
||||
|
||||
var sValue = Utils.trim(sInputValue), oEmail = null;
|
||||
if ('' !== sValue)
|
||||
{
|
||||
fLazyAutocomplete(oCall);
|
||||
iTimer = window.setTimeout(Utils.emptyFunction, iTimeout);
|
||||
oEmail = new EmailModel();
|
||||
oEmail.mailsoParse(sValue);
|
||||
oEmail.clearDuplicateName();
|
||||
|
||||
// sValue = oEmail.toLine(false);
|
||||
// return sValue;
|
||||
return [oEmail.toLine(false), oEmail];
|
||||
}
|
||||
else
|
||||
{
|
||||
window.clearInterval(iTimer);
|
||||
iTimer = window.setTimeout(function () {
|
||||
fLazyAutocomplete(oCall);
|
||||
}, iTimeout);
|
||||
}
|
||||
// }
|
||||
|
||||
return [sValue, null];
|
||||
|
||||
});
|
||||
},
|
||||
'formatSelection': function (oItem, oContainer) {
|
||||
var sR = oItem && oItem.c ? oItem.c.select2Selection(oContainer) : oItem.text;
|
||||
if (null !== sR)
|
||||
{
|
||||
return sR;
|
||||
}
|
||||
},
|
||||
'formatResult': function (oItem, oContainer, oQuery, fEscapeMarkup) {
|
||||
var sR = oItem && oItem.c ? oItem.c.select2Result(oContainer) : '';
|
||||
return '' === sR ? fEscapeMarkup(oItem.text) : sR;
|
||||
},
|
||||
'createSearchChoice': function (sTerm, aList) {
|
||||
return 0 === aList.length && oReg.test(sTerm) ? {
|
||||
'id': sTerm,
|
||||
'text': sTerm
|
||||
} : null;
|
||||
},
|
||||
'formatNoMatches': sEmptyTranslateFunction,
|
||||
'formatSearching': function () {
|
||||
return Utils.i18n('SUGGESTIONS/SEARCHING_DESC');
|
||||
},
|
||||
'formatInputTooShort': sEmptyTranslateFunction,
|
||||
'formatSelectionTooBig': sEmptyTranslateFunction,
|
||||
'multiple': true,
|
||||
'tokenSeparators': [',', ';'],
|
||||
'minimumInputLength': 2,
|
||||
'selectOnBlur': false,
|
||||
'closeOnSelect': true,
|
||||
'openOnEnter': false
|
||||
'change': _.bind(function (oEvent) {
|
||||
$oEl.data('EmailsTagsValue', oEvent.target.value);
|
||||
fValue(oEvent.target.value);
|
||||
}, this)
|
||||
});
|
||||
|
||||
ko.utils.domNodeDisposal.addDisposeCallback(oElement, function() {
|
||||
$(oElement).select2('destroy');
|
||||
});
|
||||
|
||||
$(oElement).on('change', function () {
|
||||
|
||||
var
|
||||
aTags = $(this).select2('data'),
|
||||
iIndex = 0,
|
||||
iLen = aTags.length,
|
||||
oItem = null,
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
fValue.subscribe(function (sValue) {
|
||||
if ($oEl.data('EmailsTagsValue') !== sValue)
|
||||
{
|
||||
oItem = aTags[iIndex];
|
||||
if (oItem && oItem.id)
|
||||
{
|
||||
if (!oItem.c)
|
||||
{
|
||||
oItem.c = new EmailModel();
|
||||
oMatch = oReg2.exec(Utils.trim(oItem.id));
|
||||
if (oMatch && !Utils.isUnd(oMatch[2]))
|
||||
{
|
||||
oItem.c.name = oMatch[1];
|
||||
oItem.c.email = oMatch[2];
|
||||
}
|
||||
else
|
||||
{
|
||||
oItem.c.email = oItem.id;
|
||||
}
|
||||
}
|
||||
|
||||
aResult.push(oItem.c);
|
||||
}
|
||||
$oEl.val(sValue);
|
||||
$oEl.inputosaurus('refresh');
|
||||
}
|
||||
|
||||
fValueAccessor()(aResult);
|
||||
});
|
||||
},
|
||||
|
||||
'update': function (oElement, fValueAccessor) {
|
||||
|
||||
var
|
||||
aTags = ko.utils.unwrapObservable(fValueAccessor()),
|
||||
iIndex = 0,
|
||||
iLen = aTags.length,
|
||||
oItem = null,
|
||||
sName = '',
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
{
|
||||
oItem = aTags[iIndex];
|
||||
sName = oItem.toLine(false);
|
||||
|
||||
aResult.push({
|
||||
'id': sName,
|
||||
'text': sName,
|
||||
'c': oItem
|
||||
});
|
||||
}
|
||||
|
||||
$(oElement).select2('data', aResult);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -5116,10 +5004,6 @@ Knoin.prototype.hideScreenPopup = function (ViewModelClassToHide)
|
|||
ViewModelClassToHide.__vm.modalVisibility(false);
|
||||
this.delegateRun(ViewModelClassToHide.__vm, 'onHide');
|
||||
this.popupVisibility(false);
|
||||
|
||||
_.defer(function () {
|
||||
ViewModelClassToHide.__dom.find('.ko-select2').select2('close');
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -5381,6 +5265,13 @@ EmailModel.prototype.email = '';
|
|||
*/
|
||||
EmailModel.prototype.privateType = null;
|
||||
|
||||
EmailModel.prototype.clear = function ()
|
||||
{
|
||||
this.email = '';
|
||||
this.name = '';
|
||||
this.privateType = null;
|
||||
};
|
||||
|
||||
/**
|
||||
* @returns {boolean}
|
||||
*/
|
||||
|
@ -5441,6 +5332,8 @@ EmailModel.prototype.search = function (sQuery)
|
|||
*/
|
||||
EmailModel.prototype.parse = function (sString)
|
||||
{
|
||||
this.clear();
|
||||
|
||||
sString = Utils.trim(sString);
|
||||
|
||||
var
|
||||
|
@ -5484,18 +5377,22 @@ EmailModel.prototype.initByJson = function (oJsonEmail)
|
|||
/**
|
||||
* @param {boolean} bFriendlyView
|
||||
* @param {boolean=} bWrapWithLink = false
|
||||
* @param {boolean=} bEncodeHtml = false
|
||||
* @return {string}
|
||||
*/
|
||||
EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink)
|
||||
EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink, bEncodeHtml)
|
||||
{
|
||||
var sResult = '';
|
||||
if ('' !== this.email)
|
||||
{
|
||||
bWrapWithLink = Utils.isUnd(bWrapWithLink) ? false : !!bWrapWithLink;
|
||||
bEncodeHtml = Utils.isUnd(bEncodeHtml) ? false : !!bEncodeHtml;
|
||||
|
||||
if (bFriendlyView && '' !== this.name)
|
||||
{
|
||||
sResult = bWrapWithLink ? '<a href="mailto:' + Utils.encodeHtml('"' + this.name + '" <' + this.email + '>') +
|
||||
'" target="_blank" tabindex="-1">' + Utils.encodeHtml(this.name) + '</a>' : this.name;
|
||||
'" target="_blank" tabindex="-1">' + Utils.encodeHtml(this.name) + '</a>' :
|
||||
(bEncodeHtml ? Utils.encodeHtml(this.name) : this.name);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -5510,6 +5407,10 @@ EmailModel.prototype.toLine = function (bFriendlyView, bWrapWithLink)
|
|||
else
|
||||
{
|
||||
sResult = '"' + this.name + '" <' + sResult + '>';
|
||||
if (bEncodeHtml)
|
||||
{
|
||||
sResult = Utils.encodeHtml(sResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (bWrapWithLink)
|
||||
|
@ -5578,6 +5479,172 @@ EmailModel.prototype.select2Selection = function (oContainer)
|
|||
|
||||
return sResult;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} $sEmailAddress
|
||||
* @return {boolean}
|
||||
*/
|
||||
EmailModel.prototype.mailsoParse = function ($sEmailAddress)
|
||||
{
|
||||
$sEmailAddress = Utils.trim($sEmailAddress);
|
||||
if ('' === $sEmailAddress)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var
|
||||
substr = function (str, start, len) {
|
||||
str += '';
|
||||
var end = str.length;
|
||||
|
||||
if (start < 0) {
|
||||
start += end;
|
||||
}
|
||||
|
||||
end = typeof len === 'undefined' ? end : (len < 0 ? len + end : len + start);
|
||||
|
||||
return start >= str.length || start < 0 || start > end ? false : str.slice(start, end);
|
||||
},
|
||||
|
||||
substr_replace = function (str, replace, start, length) {
|
||||
if (start < 0) {
|
||||
start = start + str.length;
|
||||
}
|
||||
length = length !== undefined ? length : str.length;
|
||||
if (length < 0) {
|
||||
length = length + str.length - start;
|
||||
}
|
||||
return str.slice(0, start) + replace.substr(0, length) + replace.slice(length) + str.slice(start + length);
|
||||
},
|
||||
|
||||
$sName = '',
|
||||
$sEmail = '',
|
||||
$sComment = '',
|
||||
|
||||
$bInName = false,
|
||||
$bInAddress = false,
|
||||
$bInComment = false,
|
||||
|
||||
$aRegs = null,
|
||||
|
||||
$iStartIndex = 0,
|
||||
$iEndIndex = 0,
|
||||
$iCurrentIndex = 0
|
||||
;
|
||||
|
||||
while ($iCurrentIndex < $sEmailAddress.length)
|
||||
{
|
||||
switch ($sEmailAddress.substr($iCurrentIndex, 1))
|
||||
{
|
||||
case '"':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$bInName = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
else if ((!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sName = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInName = false;
|
||||
}
|
||||
break;
|
||||
case '<':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
if ($iCurrentIndex > 0 && $sName.length === 0)
|
||||
{
|
||||
$sName = substr($sEmailAddress, 0, $iCurrentIndex);
|
||||
}
|
||||
|
||||
$bInAddress = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
break;
|
||||
case '>':
|
||||
if ($bInAddress)
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sEmail = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInAddress = false;
|
||||
}
|
||||
break;
|
||||
case '(':
|
||||
if ((!$bInName) && (!$bInAddress) && (!$bInComment))
|
||||
{
|
||||
$bInComment = true;
|
||||
$iStartIndex = $iCurrentIndex;
|
||||
}
|
||||
break;
|
||||
case ')':
|
||||
if ($bInComment)
|
||||
{
|
||||
$iEndIndex = $iCurrentIndex;
|
||||
$sComment = substr($sEmailAddress, $iStartIndex + 1, $iEndIndex - $iStartIndex - 1);
|
||||
$sEmailAddress = substr_replace($sEmailAddress, '', $iStartIndex, $iEndIndex - $iStartIndex + 1);
|
||||
$iEndIndex = 0;
|
||||
$iCurrentIndex = 0;
|
||||
$iStartIndex = 0;
|
||||
$bInComment = false;
|
||||
}
|
||||
break;
|
||||
case '\\':
|
||||
$iCurrentIndex++;
|
||||
break;
|
||||
}
|
||||
|
||||
$iCurrentIndex++;
|
||||
}
|
||||
|
||||
if ($sEmail.length === 0)
|
||||
{
|
||||
$aRegs = $sEmailAddress.match(/[^@\s]+@\S+/i);
|
||||
if ($aRegs && $aRegs[0])
|
||||
{
|
||||
$sEmail = $aRegs[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
$sName = $sEmailAddress;
|
||||
}
|
||||
}
|
||||
|
||||
if ($sEmail.length > 0 && $sName.length === 0 && $sComment.length === 0)
|
||||
{
|
||||
$sName = $sEmailAddress.replace($sEmail, '');
|
||||
}
|
||||
|
||||
$sEmail = Utils.trim($sEmail).replace(/^[<]+/, '').replace(/[>]+$/, '');
|
||||
$sName = Utils.trim($sName).replace(/^["']+/, '').replace(/["']+$/, '');
|
||||
$sComment = Utils.trim($sComment).replace(/^[(]+/, '').replace(/[)]+$/, '');
|
||||
|
||||
// Remove backslash
|
||||
$sName = $sName.replace(/\\\\(.)/, '$1');
|
||||
$sComment = $sComment.replace(/\\\\(.)/, '$1');
|
||||
|
||||
this.name = $sName;
|
||||
this.email = $sEmail;
|
||||
|
||||
this.clearDuplicateName();
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* @return {string}
|
||||
*/
|
||||
EmailModel.prototype.inputoTagLine = function ()
|
||||
{
|
||||
return 0 < this.name.length ? this.name + ' (' + this.email + ')' : this.email;
|
||||
};
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
|
@ -7516,22 +7583,6 @@ function PopupsComposeViewModel()
|
|||
var
|
||||
self = this,
|
||||
oRainLoopData = RL.data(),
|
||||
fEmailArrayToStringLineHelper = function (aList) {
|
||||
|
||||
var
|
||||
iIndex = 0,
|
||||
iLen = aList.length,
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
{
|
||||
aResult.push(aList[iIndex].toLine(false));
|
||||
}
|
||||
|
||||
return aResult.join(', ');
|
||||
},
|
||||
|
||||
fCcAndBccCheckHelper = function (aValue) {
|
||||
if (false === this.showCcAndBcc() && 0 < aValue.length)
|
||||
{
|
||||
|
@ -7542,9 +7593,9 @@ function PopupsComposeViewModel()
|
|||
|
||||
this.resizer = ko.observable(false).extend({'throttle': 50});
|
||||
|
||||
this.to = ko.observableArray([]);
|
||||
this.cc = ko.observableArray([]);
|
||||
this.bcc = ko.observableArray([]);
|
||||
this.to = ko.observable('');
|
||||
this.cc = ko.observable('');
|
||||
this.bcc = ko.observable('');
|
||||
|
||||
this.replyTo = ko.observable('');
|
||||
this.subject = ko.observable('');
|
||||
|
@ -7729,12 +7780,12 @@ function PopupsComposeViewModel()
|
|||
|
||||
this.sendCommand = Utils.createCommand(this, function () {
|
||||
var
|
||||
aTo = this.to(),
|
||||
sTo = this.to(),
|
||||
sSentFolder = RL.data().sentFolder(),
|
||||
aFlagsCache = []
|
||||
;
|
||||
|
||||
if (0 === aTo.length)
|
||||
if (0 === sTo.length)
|
||||
{
|
||||
this.emptyToError(true);
|
||||
}
|
||||
|
@ -7789,9 +7840,9 @@ function PopupsComposeViewModel()
|
|||
this.draftID(),
|
||||
sSentFolder,
|
||||
this.currentIdentityResultEmail(),
|
||||
fEmailArrayToStringLineHelper(aTo),
|
||||
fEmailArrayToStringLineHelper(this.cc()),
|
||||
fEmailArrayToStringLineHelper(this.bcc()),
|
||||
sTo,
|
||||
this.cc(),
|
||||
this.bcc(),
|
||||
this.subject(),
|
||||
this.oEditor.isHtml(),
|
||||
this.oEditor.getTextForRequest(),
|
||||
|
@ -7825,9 +7876,9 @@ function PopupsComposeViewModel()
|
|||
this.draftID(),
|
||||
RL.data().draftFolder(),
|
||||
this.currentIdentityResultEmail(),
|
||||
fEmailArrayToStringLineHelper(this.to()),
|
||||
fEmailArrayToStringLineHelper(this.cc()),
|
||||
fEmailArrayToStringLineHelper(this.bcc()),
|
||||
this.to(),
|
||||
this.cc(),
|
||||
this.bcc(),
|
||||
this.subject(),
|
||||
this.oEditor.isHtml(),
|
||||
this.oEditor.getTextForRequest(),
|
||||
|
@ -7947,7 +7998,7 @@ PopupsComposeViewModel.prototype.findIdentityIdByMessage = function (sComposeTyp
|
|||
case Enums.ComposeType.ReplyAll:
|
||||
case Enums.ComposeType.Forward:
|
||||
case Enums.ComposeType.ForwardAsAttachment:
|
||||
_.find(_.union(oMessage.to, oMessage.сс, oMessage.bсс), fFindHelper);
|
||||
_.find(_.union(oMessage.to, oMessage.cc, oMessage.bcc), fFindHelper);
|
||||
break;
|
||||
case Enums.ComposeType.Draft:
|
||||
_.find(_.union(oMessage.from, oMessage.replyTo), fFindHelper);
|
||||
|
@ -8098,7 +8149,22 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
aDraftInfo = null,
|
||||
oMessage = null,
|
||||
bFocusOnBody = false,
|
||||
sComposeType = sType || Enums.ComposeType.Empty
|
||||
sComposeType = sType || Enums.ComposeType.Empty,
|
||||
fEmailArrayToStringLineHelper = function (aList) {
|
||||
|
||||
var
|
||||
iIndex = 0,
|
||||
iLen = aList.length,
|
||||
aResult = []
|
||||
;
|
||||
|
||||
for (; iIndex < iLen; iIndex++)
|
||||
{
|
||||
aResult.push(aList[iIndex].toLine(false));
|
||||
}
|
||||
|
||||
return aResult.join(', ');
|
||||
}
|
||||
;
|
||||
|
||||
oMessageOrArray = oMessageOrArray || null;
|
||||
|
@ -8118,7 +8184,7 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
|
||||
if (Utils.isNonEmptyArray(aToEmails))
|
||||
{
|
||||
this.to(aToEmails);
|
||||
this.to(fEmailArrayToStringLineHelper(aToEmails));
|
||||
}
|
||||
|
||||
if ('' !== sComposeType && oMessage)
|
||||
|
@ -8136,7 +8202,7 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
case Enums.ComposeType.Empty:
|
||||
break;
|
||||
case Enums.ComposeType.Reply:
|
||||
this.to(oMessage.replyEmails(oExcludeEmail));
|
||||
this.to(fEmailArrayToStringLineHelper(oMessage.replyEmails(oExcludeEmail)));
|
||||
this.subject(Utils.replySubjectAdd('Re', sSubject));
|
||||
this.prepearMessageAttachments(oMessage, sComposeType);
|
||||
this.aDraftInfo = ['reply', oMessage.uid, oMessage.folderFullNameRaw];
|
||||
|
@ -8147,8 +8213,8 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
|
||||
case Enums.ComposeType.ReplyAll:
|
||||
aResplyAllParts = oMessage.replyAllEmails(oExcludeEmail);
|
||||
this.to(aResplyAllParts[0]);
|
||||
this.cc(aResplyAllParts[1]);
|
||||
this.to(fEmailArrayToStringLineHelper(aResplyAllParts[0]));
|
||||
this.cc(fEmailArrayToStringLineHelper(aResplyAllParts[1]));
|
||||
this.subject(Utils.replySubjectAdd('Re', sSubject));
|
||||
this.prepearMessageAttachments(oMessage, sComposeType);
|
||||
this.aDraftInfo = ['reply', oMessage.uid, oMessage.folderFullNameRaw];
|
||||
|
@ -8174,9 +8240,9 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
break;
|
||||
|
||||
case Enums.ComposeType.Draft:
|
||||
this.to(oMessage.to);
|
||||
this.cc(oMessage.cc);
|
||||
this.bcc(oMessage.bcc);
|
||||
this.to(fEmailArrayToStringLineHelper(oMessage.to));
|
||||
this.cc(fEmailArrayToStringLineHelper(oMessage.cc));
|
||||
this.bcc(fEmailArrayToStringLineHelper(oMessage.bcc));
|
||||
|
||||
this.bFromDraft = true;
|
||||
|
||||
|
@ -8240,7 +8306,7 @@ PopupsComposeViewModel.prototype.onShow = function (sType, oMessageOrArray, aToE
|
|||
self.addMessageAsAttachment(oMessage);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
aDownloads = this.getAttachmentsDownloadsForUpload();
|
||||
if (Utils.isNonEmptyArray(aDownloads))
|
||||
{
|
||||
|
@ -8818,9 +8884,10 @@ PopupsComposeViewModel.prototype.isEmptyForm = function (bIncludeAttachmentInPro
|
|||
|
||||
PopupsComposeViewModel.prototype.reset = function ()
|
||||
{
|
||||
this.to([]);
|
||||
this.cc([]);
|
||||
this.bcc([]);
|
||||
this.to('');
|
||||
this.cc('');
|
||||
this.bcc('');
|
||||
this.replyTo('');
|
||||
this.subject('');
|
||||
|
||||
this.aDraftInfo = null;
|
||||
|
@ -13600,6 +13667,17 @@ AbstractAjaxRemoteStorage.prototype.jsInfo = function (fCallback, sType, mData,
|
|||
'IsError': (Utils.isUnd(bIsError) ? false : !!bIsError) ? '1' : '0'
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {?Function} fCallback
|
||||
* @param {string} sVersion
|
||||
*/
|
||||
AbstractAjaxRemoteStorage.prototype.jsVersion = function (fCallback, sVersion)
|
||||
{
|
||||
this.defaultRequest(fCallback, 'Version', {
|
||||
'Version': sVersion
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* @constructor
|
||||
|
@ -15231,10 +15309,9 @@ AbstractApp.prototype.loginAndLogoutReload = function (bLogout, bClose)
|
|||
|
||||
/**
|
||||
* @param {string} sQuery
|
||||
* @param {number} iPage
|
||||
* @param {Function} fCallback
|
||||
*/
|
||||
AbstractApp.prototype.getAutocomplete = function (sQuery, iPage, fCallback)
|
||||
AbstractApp.prototype.getAutocomplete = function (sQuery, fCallback)
|
||||
{
|
||||
fCallback([], sQuery);
|
||||
};
|
||||
|
@ -15267,11 +15344,20 @@ function RainLoopApp()
|
|||
|
||||
this.quotaDebounce = _.debounce(this.quota, 1000 * 30);
|
||||
|
||||
$.wakeUp(function (iSleepTime) {
|
||||
RL.remote().jsInfo(Utils.emptyFunction, {
|
||||
'Version': RL.settingsGet('Version'),
|
||||
'WakeUpTime': Math.round(iSleepTime / 1000)
|
||||
}, true);
|
||||
$.wakeUp(function () {
|
||||
RL.remote().jsVersion(function (sResult, oData) {
|
||||
if (Enums.StorageResultType.Success === sResult && oData && !oData.Result)
|
||||
{
|
||||
if (window.parent && !!RL.settingsGet('InIframe'))
|
||||
{
|
||||
window.parent.location.reload();
|
||||
}
|
||||
else
|
||||
{
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
}, RL.settingsGet('Version'));
|
||||
}, {}, 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
|
@ -15771,10 +15857,9 @@ RainLoopApp.prototype.folderListOptionsBuilder = function (aSystem, aList, aDisa
|
|||
|
||||
/**
|
||||
* @param {string} sQuery
|
||||
* @param {number} iPage
|
||||
* @param {Function} fCallback
|
||||
*/
|
||||
RainLoopApp.prototype.getAutocomplete = function (sQuery, iPage, fCallback)
|
||||
RainLoopApp.prototype.getAutocomplete = function (sQuery, fCallback)
|
||||
{
|
||||
var
|
||||
aData = []
|
||||
|
@ -15787,13 +15872,13 @@ RainLoopApp.prototype.getAutocomplete = function (sQuery, iPage, fCallback)
|
|||
return aItem && aItem[0] ? new EmailModel(aItem[0], aItem[1]) : null;
|
||||
});
|
||||
|
||||
fCallback(_.compact(aData), !!oData.Result.More);
|
||||
fCallback(_.compact(aData));
|
||||
}
|
||||
else if (Enums.StorageResultType.Abort !== sResult)
|
||||
{
|
||||
fCallback([], false);
|
||||
fCallback([]);
|
||||
}
|
||||
}, sQuery, iPage);
|
||||
}, sQuery);
|
||||
};
|
||||
|
||||
RainLoopApp.prototype.emailsPicsHashes = function ()
|
||||
|
|
14
rainloop/v/0.0.0/static/js/app.min.js
vendored
14
rainloop/v/0.0.0/static/js/app.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
vendors/flags/flags-fixed.css
vendored
1
vendors/flags/flags-fixed.css
vendored
|
@ -19,6 +19,7 @@
|
|||
.flag.flag-nl, .flag.flag-nl-nl {background-position: -80px -110px}
|
||||
.flag.flag-pl, .flag.flag-pl-pl {background-position: -32px -121px}
|
||||
.flag.flag-ru, .flag.flag-ru-ru {background-position: -224px -121px}
|
||||
.flag.flag-ua, .flag.flag-ua-ua {background-position: -96px -154px}
|
||||
.flag.flag-de, .flag.flag-de-de {background-position: -80px -33px}
|
||||
.flag.flag-it, .flag.flag-it-it {background-position: -208px -66px}
|
||||
.flag.flag-is, .flag.flag-is-is {background-position: -192px -66px}
|
||||
|
|
67
vendors/inputosaurus/inputosaurus.css
vendored
Normal file
67
vendors/inputosaurus/inputosaurus.css
vendored
Normal file
|
@ -0,0 +1,67 @@
|
|||
.inputosaurus-container {
|
||||
background-color:#fff;
|
||||
border:1px solid #bcbec0;
|
||||
margin:0 5px 0 0;
|
||||
padding:0 3px;
|
||||
display : inline-block;
|
||||
cursor:text;
|
||||
font-size : 14px;
|
||||
font-family : "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
}
|
||||
.inputosaurus-container li {
|
||||
display : block;
|
||||
float : left;
|
||||
overflow: hidden;
|
||||
margin : 2px 2px 0;
|
||||
padding : 2px 3px;
|
||||
white-space : nowrap;
|
||||
overflow : hidden;
|
||||
text-overflow:ellipsis;
|
||||
-o-text-overflow:ellipsis;
|
||||
-ms-text-overflow:ellipsis;
|
||||
background-color:#e5eff7;
|
||||
border:#a9cae4 solid 1px;
|
||||
-webkit-border-radius:2px;
|
||||
-moz-border-radius:2px;
|
||||
border-radius:2px;
|
||||
color:#5b9bcd;
|
||||
-webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.75) inset;
|
||||
-moz-box-shadow: 0 1px 0 rgba(255,255,255,0.75) inset;
|
||||
box-shadow: 0 1px 0 rgba(255,255,255,0.75) inset;
|
||||
line-height : 20px;
|
||||
cursor: default;
|
||||
}
|
||||
.inputosaurus-container li.inputosaurus-selected { background-color:#bdd6eb; }
|
||||
.inputosaurus-container li a {
|
||||
font-size:16px;
|
||||
color:#5b9bcd;
|
||||
padding : 1px;
|
||||
text-decoration : none;
|
||||
outline : none;
|
||||
}
|
||||
.inputosaurus-container .inputosaurus-input {
|
||||
border:none;
|
||||
box-shadow: none;
|
||||
background-color:#fff;
|
||||
margin-top : 3px;
|
||||
}
|
||||
.inputosaurus-container .inputosaurus-input input {
|
||||
border:none;
|
||||
height : 23px;
|
||||
font-size : 14px;
|
||||
line-height : 20px;
|
||||
color : #555;
|
||||
margin : 0;
|
||||
outline : none;
|
||||
padding : 0 0 1px 1px;
|
||||
width : 25px;
|
||||
-webkit-box-shadow:none;
|
||||
-moz-box-shadow:none;
|
||||
box-shadow:none;
|
||||
}
|
||||
.inputosaurus-container .inputosaurus-input input:hover {
|
||||
-webkit-box-shadow:none;
|
||||
-moz-box-shadow:none;
|
||||
box-shadow:none;
|
||||
}
|
||||
.inputosaurus-input-hidden { display:none; }
|
571
vendors/inputosaurus/inputosaurus.js
vendored
Normal file
571
vendors/inputosaurus/inputosaurus.js
vendored
Normal file
|
@ -0,0 +1,571 @@
|
|||
/**
|
||||
* Inputosaurus Text
|
||||
*
|
||||
* Must be instantiated on an <input> element
|
||||
* Allows multiple input items. Each item is represented with a removable tag that appears to be inside the input area.
|
||||
*
|
||||
* @requires:
|
||||
*
|
||||
* jQuery 1.7+
|
||||
* jQueryUI 1.8+ Core
|
||||
*
|
||||
* @version 0.1.6
|
||||
* @author Dan Kielp <dan@sproutsocial.com>
|
||||
* @created October 3,2012
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
(function($) {
|
||||
|
||||
var inputosaurustext = {
|
||||
|
||||
version: "0.1.6",
|
||||
|
||||
eventprefix: "inputosaurus",
|
||||
|
||||
options: {
|
||||
|
||||
// bindable events
|
||||
//
|
||||
// 'change' - triggered whenever a tag is added or removed (should be similar to binding the the change event of the instantiated input
|
||||
// 'keyup' - keyup event on the newly created input
|
||||
|
||||
// while typing, the user can separate values using these delimiters
|
||||
// the value tags are created on the fly when an inputDelimiter is detected
|
||||
inputDelimiters : [',', ';'],
|
||||
|
||||
// this separator is used to rejoin all input items back to the value of the original <input>
|
||||
outputDelimiter : ',',
|
||||
|
||||
allowDuplicates : false,
|
||||
|
||||
parseOnBlur : false,
|
||||
|
||||
// optional wrapper for widget
|
||||
wrapperElement : null,
|
||||
|
||||
width : null,
|
||||
|
||||
// simply passing an autoComplete source (array, string or function) will instantiate autocomplete functionality
|
||||
autoCompleteSource : '',
|
||||
|
||||
// When forcing users to select from the autocomplete list, allow them to press 'Enter' to select an item if it's the only option left.
|
||||
activateFinalResult : false,
|
||||
|
||||
// manipulate and return the input value after parseInput() parsing
|
||||
// the array of tag names is passed and expected to be returned as an array after manipulation
|
||||
parseHook : null,
|
||||
|
||||
// define a placeholder to display when the input is empty
|
||||
placeholder: null
|
||||
},
|
||||
|
||||
_create: function() {
|
||||
var widget = this,
|
||||
els = {},
|
||||
o = widget.options,
|
||||
placeholder = o.placeholder || this.element.attr('placeholder') || null;
|
||||
|
||||
this._chosenValues = [];
|
||||
|
||||
// Create the elements
|
||||
els.ul = $('<ul class="inputosaurus-container"></ul>');
|
||||
els.fakeSpan = $('<span class="inputosaurus-fake-span"></span>');
|
||||
els.input = $('<input type="text" />');
|
||||
els.inputCont = $('<li class="inputosaurus-input inputosaurus-required"></li>');
|
||||
els.origInputCont = $('<li class="inputosaurus-input-hidden inputosaurus-required"></li>');
|
||||
els.lastEdit = '';
|
||||
|
||||
// define starting placeholder
|
||||
if (placeholder) {
|
||||
o.placeholder = placeholder;
|
||||
els.input.attr('placeholder', o.placeholder);
|
||||
if (o.width) {
|
||||
els.input.css('min-width', o.width - 50);
|
||||
}
|
||||
}
|
||||
|
||||
o.wrapperElement && o.wrapperElement.append(els.ul);
|
||||
this.element.replaceWith(o.wrapperElement || els.ul);
|
||||
els.origInputCont.append(this.element).hide();
|
||||
|
||||
els.inputCont.append(els.input);
|
||||
els.ul.append(els.inputCont);
|
||||
els.ul.append(els.origInputCont);
|
||||
els.ul.append(els.fakeSpan);
|
||||
|
||||
o.width && els.ul.css('width', o.width);
|
||||
|
||||
this.elements = els;
|
||||
|
||||
widget._attachEvents();
|
||||
|
||||
// if instantiated input already contains a value, parse that junk
|
||||
if($.trim(this.element.val())){
|
||||
els.input.val( this.element.val() );
|
||||
this.parseInput();
|
||||
}
|
||||
|
||||
this._instAutocomplete();
|
||||
|
||||
// els.ul.sortable({
|
||||
// 'connectWith': '.inputosaurus-container.ui-sortable'
|
||||
// });
|
||||
},
|
||||
|
||||
_instAutocomplete : function() {
|
||||
if(this.options.autoCompleteSource){
|
||||
var widget = this;
|
||||
|
||||
this.elements.input.autocomplete({
|
||||
position : {
|
||||
of : this.elements.ul
|
||||
},
|
||||
source : this.options.autoCompleteSource,
|
||||
minLength : 1,
|
||||
select : function(ev, ui){
|
||||
ev.preventDefault();
|
||||
widget.elements.input.val(ui.item.value);
|
||||
widget.parseInput();
|
||||
},
|
||||
open : function() {
|
||||
var menu = $(this).data('ui-autocomplete').menu,
|
||||
$menuItems;
|
||||
|
||||
menu.element.width(widget.elements.ul.outerWidth());
|
||||
|
||||
// auto-activate the result if it's the only one
|
||||
if(widget.options.activateFinalResult){
|
||||
$menuItems = menu.element.find('li');
|
||||
|
||||
// activate single item to allow selection upon pressing 'Enter'
|
||||
if($menuItems.size() === 1){
|
||||
menu[menu.activate ? 'activate' : 'focus']($.Event('click'), $menuItems);
|
||||
}
|
||||
}
|
||||
},
|
||||
focus: function () {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_autoCompleteMenuPosition : function() {
|
||||
var widget;
|
||||
if(this.options.autoCompleteSource){
|
||||
widget = this.elements.input.data('ui-autocomplete');
|
||||
widget && widget.menu.element.position({
|
||||
of: this.elements.ul,
|
||||
my: 'left top',
|
||||
at: 'left bottom',
|
||||
collision: 'none'
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/*_closeAutoCompleteMenu : function() {
|
||||
if(this.options.autoCompleteSource){
|
||||
this.elements.input.autocomplete('close');
|
||||
}
|
||||
},*/
|
||||
|
||||
parseInput : function(ev) {
|
||||
var widget = (ev && ev.data.widget) || this,
|
||||
val,
|
||||
delimiterFound = false,
|
||||
values = [];
|
||||
|
||||
val = widget.elements.input.val();
|
||||
|
||||
val && (delimiterFound = widget._containsDelimiter(val));
|
||||
|
||||
if(delimiterFound !== false){
|
||||
values = val.split(delimiterFound);
|
||||
} else if(!ev || ev.which === $.ui.keyCode.ENTER && !$('.ui-menu-item .ui-state-focus').size() && !$('#ui-active-menuitem').size()){
|
||||
values.push(val);
|
||||
ev && ev.preventDefault();
|
||||
|
||||
// prevent autoComplete menu click from causing a false 'blur'
|
||||
} else if(ev.type === 'blur' && !$('#ui-active-menuitem').size()){
|
||||
values.push(val);
|
||||
}
|
||||
|
||||
$.isFunction(widget.options.parseHook) && (values = widget.options.parseHook(values));
|
||||
|
||||
if(values.length){
|
||||
widget._setChosen(values);
|
||||
widget.elements.input.val('');
|
||||
widget._resizeInput();
|
||||
}
|
||||
|
||||
widget._resetPlaceholder();
|
||||
},
|
||||
|
||||
_inputFocus : function(ev) {
|
||||
var widget = ev.data.widget || this;
|
||||
|
||||
widget.elements.input.value || (widget.options.autoCompleteSource.length && widget.elements.input.autocomplete('search', ''));
|
||||
},
|
||||
|
||||
_inputKeypress : function(ev) {
|
||||
var widget = ev.data.widget || this;
|
||||
|
||||
ev.type === 'keyup' && widget._trigger('keyup', ev, widget);
|
||||
|
||||
switch(ev.which){
|
||||
case $.ui.keyCode.BACKSPACE:
|
||||
ev.type === 'keydown' && widget._inputBackspace(ev);
|
||||
break;
|
||||
|
||||
case $.ui.keyCode.LEFT:
|
||||
ev.type === 'keydown' && widget._inputBackspace(ev);
|
||||
break;
|
||||
|
||||
default :
|
||||
widget.parseInput(ev);
|
||||
widget._resizeInput(ev);
|
||||
}
|
||||
|
||||
// reposition autoComplete menu as <ul> grows and shrinks vertically
|
||||
if(widget.options.autoCompleteSource){
|
||||
setTimeout(function(){widget._autoCompleteMenuPosition.call(widget);}, 200);
|
||||
}
|
||||
},
|
||||
|
||||
// the input dynamically resizes based on the length of its value
|
||||
_resizeInput : function(ev) {
|
||||
var
|
||||
mixWidth = 50,
|
||||
maxWidth = 400,
|
||||
widget = (ev && ev.data.widget) || this,
|
||||
// maxWidth = widget.elements.ul.width(),
|
||||
txtWidth = 0
|
||||
;
|
||||
|
||||
widget.elements.fakeSpan.text(widget.elements.input.val());
|
||||
txtWidth = 20 + widget.elements.fakeSpan.width();
|
||||
|
||||
txtWidth = txtWidth < maxWidth ? txtWidth : maxWidth;
|
||||
txtWidth = txtWidth < mixWidth ? mixWidth : txtWidth;
|
||||
|
||||
widget.elements.input.width(txtWidth);
|
||||
},
|
||||
|
||||
// resets placeholder on representative input
|
||||
_resetPlaceholder: function () {
|
||||
var placeholder = this.options.placeholder,
|
||||
input = this.elements.input,
|
||||
width = this.options.width || 'inherit';
|
||||
if (placeholder && this.element.val().length === 0) {
|
||||
input.attr('placeholder', placeholder).css('min-width', width - 50)
|
||||
}else {
|
||||
input.attr('placeholder', '').css('min-width', 'inherit')
|
||||
}
|
||||
},
|
||||
|
||||
// if our input contains no value and backspace has been pressed, select the last tag
|
||||
_inputBackspace : function(ev) {
|
||||
var widget = (ev && ev.data.widget) || this,
|
||||
lastTag = widget.elements.ul.find('li:not(.inputosaurus-required):last');
|
||||
|
||||
// IE goes back in history if the event isn't stopped
|
||||
ev.stopPropagation();
|
||||
|
||||
if((!$(ev.currentTarget).val() || (('selectionStart' in ev.currentTarget) && ev.currentTarget.selectionStart === 0 && ev.currentTarget.selectionEnd === 0)) && lastTag.size()){
|
||||
ev.preventDefault();
|
||||
lastTag.find('a').focus();
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
_editTag : function(ev) {
|
||||
var widget = (ev && ev.data.widget) || this,
|
||||
tagName = '',
|
||||
$li = $(ev.currentTarget).closest('li'),
|
||||
tagKey = $li.data('inputosaurus');
|
||||
|
||||
if(!tagKey){
|
||||
return true;
|
||||
}
|
||||
|
||||
ev.preventDefault();
|
||||
|
||||
var
|
||||
oPrev = null,
|
||||
next = false
|
||||
;
|
||||
|
||||
$.each(widget._chosenValues, function(i,v) {
|
||||
if (v.key === tagKey)
|
||||
{
|
||||
tagName = v.value;
|
||||
next = true;
|
||||
}
|
||||
else if (next && !oPrev)
|
||||
{
|
||||
oPrev = v;
|
||||
}
|
||||
});
|
||||
|
||||
if (oPrev)
|
||||
{
|
||||
widget.elements.lastEdit = oPrev.value;
|
||||
}
|
||||
|
||||
$li.after(widget.elements.inputCont);
|
||||
|
||||
widget.elements.input.val(tagName);
|
||||
widget.elements.input.select();
|
||||
|
||||
widget._removeTag(ev);
|
||||
widget._resizeInput(ev);
|
||||
},
|
||||
|
||||
_tagKeypress : function(ev) {
|
||||
var widget = ev.data.widget;
|
||||
switch(ev.which){
|
||||
|
||||
case $.ui.keyCode.DELETE:
|
||||
case $.ui.keyCode.BACKSPACE:
|
||||
ev && ev.preventDefault();
|
||||
ev && ev.stopPropagation();
|
||||
$(ev.currentTarget).trigger('click');
|
||||
break;
|
||||
|
||||
// 'e' - edit tag (removes tag and places value into visible input
|
||||
case 69:
|
||||
// case $.ui.keyCode.ENTER:
|
||||
widget._editTag(ev);
|
||||
break;
|
||||
|
||||
case $.ui.keyCode.LEFT:
|
||||
ev.type === 'keydown' && widget._prevTag(ev);
|
||||
break;
|
||||
|
||||
case $.ui.keyCode.RIGHT:
|
||||
ev.type === 'keydown' && widget._nextTag(ev);
|
||||
break;
|
||||
|
||||
case $.ui.keyCode.DOWN:
|
||||
ev.type === 'keydown' && widget._focus(ev);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
// select the previous tag or input if no more tags exist
|
||||
_prevTag : function(ev) {
|
||||
var widget = (ev && ev.data.widget) || this,
|
||||
tag = $(ev.currentTarget).closest('li'),
|
||||
previous = tag.prev();
|
||||
|
||||
if(previous.is('li')){
|
||||
previous.find('a').focus();
|
||||
} else {
|
||||
widget._focus();
|
||||
}
|
||||
},
|
||||
|
||||
// select the next tag or input if no more tags exist
|
||||
_nextTag : function(ev) {
|
||||
var widget = (ev && ev.data.widget) || this,
|
||||
tag = $(ev.currentTarget).closest('li'),
|
||||
next = tag.next();
|
||||
|
||||
if(next.is('li:not(.inputosaurus-input)')){
|
||||
next.find('a').focus();
|
||||
} else {
|
||||
widget._focus();
|
||||
}
|
||||
},
|
||||
|
||||
// return the inputDelimiter that was detected or false if none were found
|
||||
_containsDelimiter : function(tagStr) {
|
||||
|
||||
var found = false;
|
||||
|
||||
$.each(this.options.inputDelimiters, function(k,v) {
|
||||
if(tagStr.indexOf(v) !== -1){
|
||||
found = v;
|
||||
}
|
||||
});
|
||||
|
||||
return found;
|
||||
},
|
||||
|
||||
_setChosen : function(valArr) {
|
||||
var self = this;
|
||||
|
||||
if(!$.isArray(valArr)){
|
||||
return false;
|
||||
}
|
||||
|
||||
$.each(valArr, function(k,a) {
|
||||
var v = '', exists = false,
|
||||
lastIndex = -1,
|
||||
obj = {
|
||||
key : '',
|
||||
obj : null,
|
||||
value : ''
|
||||
};
|
||||
|
||||
v = $.trim(a[0]);
|
||||
|
||||
$.each(self._chosenValues, function(kk,vv) {
|
||||
if (vv.value === self.elements.lastEdit)
|
||||
{
|
||||
lastIndex = kk;
|
||||
}
|
||||
|
||||
vv.value === v && (exists = true);
|
||||
});
|
||||
|
||||
if(v !== '' && (!exists || self.options.allowDuplicates)){
|
||||
|
||||
obj.key = 'mi_' + Math.random().toString( 16 ).slice( 2, 10 );
|
||||
obj.value = v;
|
||||
obj.obj = a[1];
|
||||
|
||||
if (-1 < lastIndex)
|
||||
{
|
||||
self._chosenValues.splice(lastIndex, 0, obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
self._chosenValues.push(obj);
|
||||
}
|
||||
|
||||
self.elements.lastEdit = '';
|
||||
self._renderTags();
|
||||
}
|
||||
});
|
||||
self._setValue(self._buildValue());
|
||||
},
|
||||
|
||||
_buildValue : function() {
|
||||
var widget = this,
|
||||
value = '';
|
||||
|
||||
$.each(this._chosenValues, function(k,v) {
|
||||
value += value.length ? widget.options.outputDelimiter + v.value : v.value;
|
||||
});
|
||||
|
||||
return value;
|
||||
},
|
||||
|
||||
_setValue : function(value) {
|
||||
var val = this.element.val();
|
||||
|
||||
if(val !== value){
|
||||
this.element.val(value);
|
||||
this._trigger('change');
|
||||
}
|
||||
},
|
||||
|
||||
// @name text for tag
|
||||
// @className optional className for <li>
|
||||
_createTag : function(name, key, obj) {
|
||||
if (name !== undefined && obj) {
|
||||
return $('<li data-inputosaurus="' + key + '" title="' + obj.toLine(false, false, true) +
|
||||
'"><a href="javascript:void(0);" class="ficon">✖</a><span>' + obj.toLine(true, false, true) + '</span></li>');
|
||||
}
|
||||
},
|
||||
|
||||
_renderTags : function() {
|
||||
var self = this ;
|
||||
|
||||
this.elements.ul.find('li:not(.inputosaurus-required)').remove();
|
||||
|
||||
$.each(this._chosenValues, function(k, v) {
|
||||
var el = self._createTag(v.value, v.key, v.obj);
|
||||
self.elements.ul.find('li.inputosaurus-input').before(el);
|
||||
});
|
||||
},
|
||||
|
||||
_removeTag : function(ev) {
|
||||
var key = $(ev.currentTarget).closest('li').data('inputosaurus'),
|
||||
indexFound = false,
|
||||
widget = (ev && ev.data.widget) || this;
|
||||
|
||||
|
||||
$.each(widget._chosenValues, function(k,v) {
|
||||
if(key === v.key){
|
||||
indexFound = k;
|
||||
}
|
||||
});
|
||||
|
||||
indexFound !== false && widget._chosenValues.splice(indexFound, 1);
|
||||
|
||||
widget._setValue(widget._buildValue());
|
||||
|
||||
$(ev.currentTarget).closest('li').remove();
|
||||
widget.elements.input.focus();
|
||||
},
|
||||
|
||||
_focus : function(ev) {
|
||||
var
|
||||
widget = (ev && ev.data.widget) || this,
|
||||
li = (ev && ev.target) ? $(ev.target).closest('li') : null
|
||||
;
|
||||
|
||||
if (li && li.is('li')) {
|
||||
li.find('a').focus();
|
||||
}
|
||||
if (!ev || !$(ev.target).closest('li').data('inputosaurus')) {
|
||||
widget.elements.input.focus();
|
||||
}
|
||||
},
|
||||
|
||||
_tagFocus : function(ev) {
|
||||
$(ev.currentTarget).parent()[ev.type === 'focusout' ? 'removeClass' : 'addClass']('inputosaurus-selected');
|
||||
},
|
||||
|
||||
refresh : function() {
|
||||
var delim = this.options.outputDelimiter,
|
||||
val = this.element.val(),
|
||||
values = [];
|
||||
|
||||
values.push(val);
|
||||
delim && (values = val.split(delim));
|
||||
|
||||
if(values.length){
|
||||
this._chosenValues = [];
|
||||
|
||||
$.isFunction(this.options.parseHook) && (values = this.options.parseHook(values));
|
||||
|
||||
this._setChosen(values);
|
||||
this._renderTags();
|
||||
this.elements.input.val('');
|
||||
this._resizeInput();
|
||||
}
|
||||
},
|
||||
|
||||
_attachEvents : function() {
|
||||
var widget = this;
|
||||
|
||||
this.elements.input.on('keyup.inputosaurus', {widget : widget}, this._inputKeypress);
|
||||
this.elements.input.on('keydown.inputosaurus', {widget : widget}, this._inputKeypress);
|
||||
this.elements.input.on('change.inputosaurus', {widget : widget}, this._inputKeypress);
|
||||
this.elements.input.on('focus.inputosaurus', {widget : widget}, this._inputFocus);
|
||||
this.options.parseOnBlur && this.elements.input.on('blur.inputosaurus', {widget : widget}, this.parseInput);
|
||||
|
||||
this.elements.ul.on('click.inputosaurus', {widget : widget}, this._focus);
|
||||
this.elements.ul.on('click.inputosaurus', 'a', {widget : widget}, this._removeTag);
|
||||
this.elements.ul.on('dblclick.inputosaurus', 'li', {widget : widget}, this._editTag);
|
||||
this.elements.ul.on('focus.inputosaurus', 'a', {widget : widget}, this._tagFocus);
|
||||
this.elements.ul.on('blur.inputosaurus', 'a', {widget : widget}, this._tagFocus);
|
||||
this.elements.ul.on('keydown.inputosaurus', 'a', {widget : widget}, this._tagKeypress);
|
||||
},
|
||||
|
||||
_destroy: function() {
|
||||
this.elements.input.unbind('.inputosaurus');
|
||||
|
||||
this.elements.ul.replaceWith(this.element);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
$.widget("ui.inputosaurus", inputosaurustext);
|
||||
})(jQuery);
|
||||
|
2
vendors/inputosaurus/inputosaurus.min.js
vendored
Normal file
2
vendors/inputosaurus/inputosaurus.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -253,6 +253,7 @@
|
|||
.ui-widget-content {
|
||||
border: 1px solid #aaaaaa;
|
||||
/*background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;*/
|
||||
background: #ffffff;
|
||||
color: #222222;
|
||||
}
|
||||
.ui-widget-content a {
|
||||
|
@ -261,6 +262,7 @@
|
|||
.ui-widget-header {
|
||||
border: 1px solid #aaaaaa;
|
||||
/*background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;*/
|
||||
background: #cccccc;
|
||||
color: #222222;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
@ -309,7 +311,7 @@
|
|||
.ui-widget-header .ui-state-active {
|
||||
border: 1px solid #aaaaaa;
|
||||
/*background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;*/
|
||||
background: #ffffff;
|
||||
background: #fff;
|
||||
font-weight: normal;
|
||||
color: #212121;
|
||||
}
|
||||
|
@ -621,7 +623,7 @@
|
|||
/* Overlays */
|
||||
.ui-widget-overlay {
|
||||
/*background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;*/
|
||||
background: #aaaaaa;
|
||||
background: #aaa;
|
||||
opacity: .3;
|
||||
filter: Alpha(Opacity=30);
|
||||
}
|
||||
|
@ -629,7 +631,7 @@
|
|||
margin: -8px 0 0 -8px;
|
||||
padding: 8px;
|
||||
/*background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;*/
|
||||
background: #aaaaaa;
|
||||
background: #aaa;
|
||||
opacity: .3;
|
||||
filter: Alpha(Opacity=30);
|
||||
border-radius: 8px;
|
||||
|
|
18
vendors/select2-3.4.5/LICENSE
vendored
18
vendors/select2-3.4.5/LICENSE
vendored
|
@ -1,18 +0,0 @@
|
|||
Copyright 2012 Igor Vaynberg
|
||||
|
||||
Version: @@ver@@ Timestamp: @@timestamp@@
|
||||
|
||||
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
|
||||
General Public License version 2 (the "GPL License"). You may choose either license to govern your
|
||||
use of this software only upon the condition that you accept all of the terms of either the Apache
|
||||
License or the GPL License.
|
||||
|
||||
You may obtain a copy of the Apache License and the GPL License at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the Apache License
|
||||
or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
either express or implied. See the Apache License and the GPL License for the specific language governing
|
||||
permissions and limitations under the Apache License and the GPL License.
|
83
vendors/select2-3.4.5/README.md
vendored
83
vendors/select2-3.4.5/README.md
vendored
|
@ -1,83 +0,0 @@
|
|||
Select2
|
||||
=======
|
||||
|
||||
Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.
|
||||
|
||||
To get started, checkout examples and documentation at http://ivaynberg.github.com/select2
|
||||
|
||||
Use cases
|
||||
---------
|
||||
|
||||
* Enhancing native selects with search.
|
||||
* Enhancing native selects with a better multi-select interface.
|
||||
* Loading data from JavaScript: easily load items via ajax and have them searchable.
|
||||
* Nesting optgroups: native selects only support one level of nested. Select2 does not have this restriction.
|
||||
* Tagging: ability to add new items on the fly.
|
||||
* Working with large, remote datasets: ability to partially load a dataset based on the search term.
|
||||
* Paging of large datasets: easy support for loading more pages when the results are scrolled to the end.
|
||||
* Templating: support for custom rendering of results and selections.
|
||||
|
||||
Browser compatibility
|
||||
---------------------
|
||||
* IE 8+
|
||||
* Chrome 8+
|
||||
* Firefox 10+
|
||||
* Safari 3+
|
||||
* Opera 10.6+
|
||||
|
||||
Integrations
|
||||
------------
|
||||
|
||||
* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / [Apache Wicket](http://wicket.apache.org))
|
||||
* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails)
|
||||
* [AngularUI](http://angular-ui.github.com/#directives-select2) ([AngularJS](angularjs.org))
|
||||
* [Django](https://github.com/applegrew/django-select2)
|
||||
* [Symfony](https://github.com/19Gerhard85/sfSelect2WidgetsPlugin)
|
||||
* [Bootstrap](https://github.com/t0m/select2-bootstrap-css) (CSS skin)
|
||||
* [Yii](https://github.com/tonybolzan/yii-select2)
|
||||
|
||||
Internationalization (i18n)
|
||||
---------------------------
|
||||
|
||||
Select2 supports multiple languages by simply including the right
|
||||
language JS file (`select2_locale_it.js`, `select2_locale_nl.js`, etc.).
|
||||
|
||||
Missing a language? Just copy `select2_locale_en.js.template`, translate
|
||||
it, and make a pull request back to Select2 here on GitHub.
|
||||
|
||||
Bug tracker
|
||||
-----------
|
||||
|
||||
Have a bug? Please create an issue here on GitHub!
|
||||
|
||||
https://github.com/ivaynberg/select2/issues
|
||||
|
||||
Mailing list
|
||||
------------
|
||||
|
||||
Have a question? Ask on our mailing list!
|
||||
|
||||
select2@googlegroups.com
|
||||
|
||||
https://groups.google.com/d/forum/select2
|
||||
|
||||
|
||||
Copyright and license
|
||||
---------------------
|
||||
|
||||
Copyright 2012 Igor Vaynberg
|
||||
|
||||
This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
|
||||
General Public License version 2 (the "GPL License"). You may choose either license to govern your
|
||||
use of this software only upon the condition that you accept all of the terms of either the Apache
|
||||
License or the GPL License.
|
||||
|
||||
You may obtain a copy of the Apache License and the GPL License in the LICENSE file, or at:
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
http://www.gnu.org/licenses/gpl-2.0.html
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the Apache License
|
||||
or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
either express or implied. See the Apache License and the GPL License for the specific language governing
|
||||
permissions and limitations under the Apache License and the GPL License.
|
8
vendors/select2-3.4.5/bower.json
vendored
8
vendors/select2-3.4.5/bower.json
vendored
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"name": "select2",
|
||||
"version": "3.4.5",
|
||||
"main": ["select2.js", "select2.css", "select2.png", "select2x2.png", "select2-spinner.gif"],
|
||||
"dependencies": {
|
||||
"jquery": ">= 1.7.1"
|
||||
}
|
||||
}
|
73
vendors/select2-3.4.5/release.sh
vendored
73
vendors/select2-3.4.5/release.sh
vendored
|
@ -1,73 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo -n "Enter the version for this release: "
|
||||
|
||||
read ver
|
||||
|
||||
if [ ! $ver ]; then
|
||||
echo "Invalid version."
|
||||
exit
|
||||
fi
|
||||
|
||||
name="select2"
|
||||
js="$name.js"
|
||||
mini="$name.min.js"
|
||||
css="$name.css"
|
||||
release="$name-$ver"
|
||||
tag="$ver"
|
||||
branch="build-$ver"
|
||||
curbranch=`git branch | grep "*" | sed "s/* //"`
|
||||
timestamp=$(date)
|
||||
tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g"
|
||||
remote="github"
|
||||
|
||||
echo "Pulling from origin"
|
||||
|
||||
git pull
|
||||
|
||||
echo "Updating Version Identifiers"
|
||||
|
||||
sed -E -e "s/\"version\": \"([0-9\.]+)\",/\"version\": \"$ver\",/g" -i "" bower.json select2.jquery.json
|
||||
git add bower.json
|
||||
git add select2.jquery.json
|
||||
git commit -m "modified version identifiers in descriptors for release $ver"
|
||||
git push
|
||||
|
||||
git branch "$branch"
|
||||
git checkout "$branch"
|
||||
|
||||
echo "Tokenizing..."
|
||||
|
||||
find . -name "$js" | xargs -I{} sed -e "$tokens" -i "" {}
|
||||
find . -name "$css" | xargs -I{} sed -e "$tokens" -i "" {}
|
||||
sed -e "s/latest/$ver/g" -i "" bower.json
|
||||
|
||||
git add "$js"
|
||||
git add "$css"
|
||||
|
||||
echo "Minifying..."
|
||||
|
||||
echo "/*" > "$mini"
|
||||
cat LICENSE | sed "$tokens" >> "$mini"
|
||||
echo "*/" >> "$mini"
|
||||
|
||||
curl -s \
|
||||
--data-urlencode "js_code@$js" \
|
||||
http://marijnhaverbeke.nl/uglifyjs \
|
||||
>> "$mini"
|
||||
|
||||
git add "$mini"
|
||||
|
||||
git commit -m "release $ver"
|
||||
|
||||
echo "Tagging..."
|
||||
git tag -a "$tag" -m "tagged version $ver"
|
||||
git push "$remote" --tags
|
||||
|
||||
echo "Cleaning Up..."
|
||||
|
||||
git checkout "$curbranch"
|
||||
git branch -D "$branch"
|
||||
|
||||
echo "Done"
|
87
vendors/select2-3.4.5/select2-bootstrap.css
vendored
87
vendors/select2-3.4.5/select2-bootstrap.css
vendored
|
@ -1,87 +0,0 @@
|
|||
.form-control .select2-choice {
|
||||
border: 0;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.form-control .select2-choice .select2-arrow {
|
||||
border-radius: 0 2px 2px 0;
|
||||
}
|
||||
|
||||
.form-control.select2-container {
|
||||
height: auto !important;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.form-control.select2-container.select2-dropdown-open {
|
||||
border-color: #5897FB;
|
||||
border-radius: 3px 3px 0 0;
|
||||
}
|
||||
|
||||
.form-control .select2-container.select2-dropdown-open .select2-choices {
|
||||
border-radius: 3px 3px 0 0;
|
||||
}
|
||||
|
||||
.form-control.select2-container .select2-choices {
|
||||
border: 0 !important;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.control-group.warning .select2-container .select2-choice,
|
||||
.control-group.warning .select2-container .select2-choices,
|
||||
.control-group.warning .select2-container-active .select2-choice,
|
||||
.control-group.warning .select2-container-active .select2-choices,
|
||||
.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice,
|
||||
.control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices,
|
||||
.control-group.warning .select2-container-multi.select2-container-active .select2-choices {
|
||||
border: 1px solid #C09853 !important;
|
||||
}
|
||||
|
||||
.control-group.warning .select2-container .select2-choice div {
|
||||
border-left: 1px solid #C09853 !important;
|
||||
background: #FCF8E3 !important;
|
||||
}
|
||||
|
||||
.control-group.error .select2-container .select2-choice,
|
||||
.control-group.error .select2-container .select2-choices,
|
||||
.control-group.error .select2-container-active .select2-choice,
|
||||
.control-group.error .select2-container-active .select2-choices,
|
||||
.control-group.error .select2-dropdown-open.select2-drop-above .select2-choice,
|
||||
.control-group.error .select2-dropdown-open.select2-drop-above .select2-choices,
|
||||
.control-group.error .select2-container-multi.select2-container-active .select2-choices {
|
||||
border: 1px solid #B94A48 !important;
|
||||
}
|
||||
|
||||
.control-group.error .select2-container .select2-choice div {
|
||||
border-left: 1px solid #B94A48 !important;
|
||||
background: #F2DEDE !important;
|
||||
}
|
||||
|
||||
.control-group.info .select2-container .select2-choice,
|
||||
.control-group.info .select2-container .select2-choices,
|
||||
.control-group.info .select2-container-active .select2-choice,
|
||||
.control-group.info .select2-container-active .select2-choices,
|
||||
.control-group.info .select2-dropdown-open.select2-drop-above .select2-choice,
|
||||
.control-group.info .select2-dropdown-open.select2-drop-above .select2-choices,
|
||||
.control-group.info .select2-container-multi.select2-container-active .select2-choices {
|
||||
border: 1px solid #3A87AD !important;
|
||||
}
|
||||
|
||||
.control-group.info .select2-container .select2-choice div {
|
||||
border-left: 1px solid #3A87AD !important;
|
||||
background: #D9EDF7 !important;
|
||||
}
|
||||
|
||||
.control-group.success .select2-container .select2-choice,
|
||||
.control-group.success .select2-container .select2-choices,
|
||||
.control-group.success .select2-container-active .select2-choice,
|
||||
.control-group.success .select2-container-active .select2-choices,
|
||||
.control-group.success .select2-dropdown-open.select2-drop-above .select2-choice,
|
||||
.control-group.success .select2-dropdown-open.select2-drop-above .select2-choices,
|
||||
.control-group.success .select2-container-multi.select2-container-active .select2-choices {
|
||||
border: 1px solid #468847 !important;
|
||||
}
|
||||
|
||||
.control-group.success .select2-container .select2-choice div {
|
||||
border-left: 1px solid #468847 !important;
|
||||
background: #DFF0D8 !important;
|
||||
}
|
BIN
vendors/select2-3.4.5/select2-spinner.gif
vendored
BIN
vendors/select2-3.4.5/select2-spinner.gif
vendored
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB |
615
vendors/select2-3.4.5/select2.css
vendored
615
vendors/select2-3.4.5/select2.css
vendored
|
@ -1,615 +0,0 @@
|
|||
/*
|
||||
Version: 3.4.5 Timestamp: Mon Nov 4 08:22:42 PST 2013
|
||||
*/
|
||||
.select2-container {
|
||||
margin: 0;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
/* inline-block for ie7 */
|
||||
zoom: 1;
|
||||
*display: inline;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.select2-container,
|
||||
.select2-drop,
|
||||
.select2-search,
|
||||
.select2-search input {
|
||||
/*
|
||||
Force border-box so that % widths fit the parent
|
||||
container without overlap because of margin/padding.
|
||||
|
||||
More Info : http://www.quirksmode.org/css/box.html
|
||||
*/
|
||||
-webkit-box-sizing: border-box; /* webkit */
|
||||
-moz-box-sizing: border-box; /* firefox */
|
||||
box-sizing: border-box; /* css3 */
|
||||
}
|
||||
|
||||
.select2-container .select2-choice {
|
||||
display: block;
|
||||
height: 26px;
|
||||
padding: 0 0 0 8px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
white-space: nowrap;
|
||||
line-height: 26px;
|
||||
color: #444;
|
||||
text-decoration: none;
|
||||
|
||||
border-radius: 4px;
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
background-color: #fff;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
|
||||
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
||||
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
|
||||
background-image: linear-gradient(top, #fff 0%, #eee 50%);
|
||||
}
|
||||
|
||||
.select2-container.select2-drop-above .select2-choice {
|
||||
border-bottom-color: #aaa;
|
||||
|
||||
border-radius: 0 0 4px 4px;
|
||||
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
|
||||
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
||||
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
|
||||
background-image: linear-gradient(top, #eee 0%, #fff 90%);
|
||||
}
|
||||
|
||||
.select2-container.select2-allowclear .select2-choice .select2-chosen {
|
||||
margin-right: 42px;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice > .select2-chosen {
|
||||
margin-right: 26px;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
white-space: nowrap;
|
||||
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice abbr {
|
||||
display: none;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
position: absolute;
|
||||
right: 24px;
|
||||
top: 8px;
|
||||
|
||||
font-size: 1px;
|
||||
text-decoration: none;
|
||||
|
||||
border: 0;
|
||||
background: url('select2.png') right top no-repeat;
|
||||
cursor: pointer;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.select2-container.select2-allowclear .select2-choice abbr {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice abbr:hover {
|
||||
background-position: right -11px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.select2-drop-mask {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
min-height: 100%;
|
||||
min-width: 100%;
|
||||
height: auto;
|
||||
width: auto;
|
||||
opacity: 0;
|
||||
z-index: 9998;
|
||||
/* styles required for IE to work */
|
||||
background-color: #fff;
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
|
||||
.select2-drop {
|
||||
width: 100%;
|
||||
margin-top: -1px;
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
top: 100%;
|
||||
|
||||
background: #fff;
|
||||
color: #000;
|
||||
border: 1px solid #aaa;
|
||||
border-top: 0;
|
||||
|
||||
border-radius: 0 0 4px 4px;
|
||||
|
||||
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.select2-drop-auto-width {
|
||||
border-top: 1px solid #aaa;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.select2-drop-auto-width .select2-search {
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above {
|
||||
margin-top: 1px;
|
||||
border-top: 1px solid #aaa;
|
||||
border-bottom: 0;
|
||||
|
||||
border-radius: 4px 4px 0 0;
|
||||
|
||||
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
||||
}
|
||||
|
||||
.select2-drop-active {
|
||||
border: 1px solid #5897fb;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above.select2-drop-active {
|
||||
border-top: 1px solid #5897fb;
|
||||
}
|
||||
|
||||
.select2-container .select2-choice .select2-arrow {
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
|
||||
border-left: 1px solid #aaa;
|
||||
border-radius: 0 4px 4px 0;
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
background: #ccc;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
|
||||
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
||||
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
|
||||
background-image: linear-gradient(top, #ccc 0%, #eee 60%);
|
||||
}
|
||||
|
||||
.select2-container .select2-choice .select2-arrow b {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: url('select2.png') no-repeat 0 1px;
|
||||
}
|
||||
|
||||
.select2-search {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
min-height: 26px;
|
||||
margin: 0;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
|
||||
position: relative;
|
||||
z-index: 10000;
|
||||
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.select2-search input {
|
||||
width: 100%;
|
||||
height: auto !important;
|
||||
min-height: 26px;
|
||||
padding: 4px 20px 4px 5px;
|
||||
margin: 0;
|
||||
|
||||
outline: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
border-radius: 0;
|
||||
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
|
||||
background: #fff url('select2.png') no-repeat 100% -22px;
|
||||
background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
||||
background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #fff 85%, #eee 99%);
|
||||
}
|
||||
|
||||
.select2-drop.select2-drop-above .select2-search input {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.select2-search input.select2-active {
|
||||
background: #fff url('select2-spinner.gif') no-repeat 100%;
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
||||
background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(top, #fff 85%, #eee 99%);
|
||||
}
|
||||
|
||||
.select2-container-active .select2-choice,
|
||||
.select2-container-active .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
outline: none;
|
||||
|
||||
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
|
||||
.select2-dropdown-open .select2-choice {
|
||||
border-bottom-color: transparent;
|
||||
-webkit-box-shadow: 0 1px 0 #fff inset;
|
||||
box-shadow: 0 1px 0 #fff inset;
|
||||
|
||||
border-bottom-left-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
|
||||
background-color: #eee;
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
|
||||
background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
||||
background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
||||
background-image: linear-gradient(top, #fff 0%, #eee 50%);
|
||||
}
|
||||
|
||||
.select2-dropdown-open.select2-drop-above .select2-choice,
|
||||
.select2-dropdown-open.select2-drop-above .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
border-top-color: transparent;
|
||||
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
|
||||
background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
|
||||
background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
||||
background-image: linear-gradient(bottom, #fff 0%, #eee 50%);
|
||||
}
|
||||
|
||||
.select2-dropdown-open .select2-choice .select2-arrow {
|
||||
background: transparent;
|
||||
border-left: none;
|
||||
filter: none;
|
||||
}
|
||||
.select2-dropdown-open .select2-choice .select2-arrow b {
|
||||
background-position: -18px 1px;
|
||||
}
|
||||
|
||||
/* results */
|
||||
.select2-results {
|
||||
max-height: 200px;
|
||||
padding: 0 0 0 4px;
|
||||
margin: 4px 4px 4px 0;
|
||||
position: relative;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
.select2-results ul.select2-result-sub {
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px }
|
||||
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }
|
||||
|
||||
.select2-results li {
|
||||
list-style: none;
|
||||
display: list-item;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.select2-results li.select2-result-with-children > .select2-result-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.select2-results .select2-result-label {
|
||||
padding: 3px 7px 4px;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
|
||||
min-height: 1em;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted {
|
||||
background: #3875d7;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.select2-results li em {
|
||||
background: #feffde;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted em {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.select2-results .select2-highlighted ul {
|
||||
background: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
|
||||
.select2-results .select2-no-results,
|
||||
.select2-results .select2-searching,
|
||||
.select2-results .select2-selection-limit {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/*
|
||||
disabled look for disabled choices in the results dropdown
|
||||
*/
|
||||
.select2-results .select2-disabled.select2-highlighted {
|
||||
color: #666;
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
cursor: default;
|
||||
}
|
||||
.select2-results .select2-disabled {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-results .select2-selected {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select2-more-results.select2-active {
|
||||
background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
|
||||
}
|
||||
|
||||
.select2-more-results {
|
||||
background: #f4f4f4;
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* disabled styles */
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border: 1px solid #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice .select2-arrow {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
.select2-container.select2-container-disabled .select2-choice abbr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* multiselect */
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
height: auto !important;
|
||||
height: 1%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: relative;
|
||||
|
||||
border: 1px solid #aaa;
|
||||
cursor: text;
|
||||
overflow: hidden;
|
||||
|
||||
background-color: #fff;
|
||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
|
||||
background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
|
||||
background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
|
||||
background-image: linear-gradient(top, #eee 1%, #fff 15%);
|
||||
}
|
||||
|
||||
.select2-locked {
|
||||
padding: 3px 5px 3px 5px !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices {
|
||||
min-height: 26px;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-active .select2-choices {
|
||||
border: 1px solid #5897fb;
|
||||
outline: none;
|
||||
|
||||
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
||||
}
|
||||
.select2-container-multi .select2-choices li {
|
||||
float: left;
|
||||
list-style: none;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-field {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-field input {
|
||||
padding: 5px;
|
||||
margin: 1px 0;
|
||||
|
||||
font-family: sans-serif;
|
||||
font-size: 100%;
|
||||
color: #666;
|
||||
outline: 0;
|
||||
border: 0;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
|
||||
background: #fff url('select2-spinner.gif') no-repeat 100% !important;
|
||||
}
|
||||
|
||||
.select2-default {
|
||||
color: #999 !important;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice {
|
||||
padding: 3px 5px 3px 18px;
|
||||
margin: 3px 0 3px 5px;
|
||||
position: relative;
|
||||
|
||||
line-height: 13px;
|
||||
color: #333;
|
||||
cursor: default;
|
||||
border: 1px solid #aaaaaa;
|
||||
|
||||
border-radius: 3px;
|
||||
|
||||
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
||||
|
||||
background-clip: padding-box;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
background-color: #e4e4e4;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
|
||||
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
|
||||
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
|
||||
cursor: default;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice-focus {
|
||||
background: #d4d4d4;
|
||||
}
|
||||
|
||||
.select2-search-choice-close {
|
||||
display: block;
|
||||
width: 12px;
|
||||
height: 13px;
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
top: 4px;
|
||||
|
||||
font-size: 1px;
|
||||
outline: none;
|
||||
background: url('select2.png') right top no-repeat;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-search-choice-close {
|
||||
left: 3px;
|
||||
}
|
||||
|
||||
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
|
||||
background-position: right -11px;
|
||||
}
|
||||
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
|
||||
background-position: right -11px;
|
||||
}
|
||||
|
||||
/* disabled styles */
|
||||
.select2-container-multi.select2-container-disabled .select2-choices {
|
||||
background-color: #f4f4f4;
|
||||
background-image: none;
|
||||
border: 1px solid #ddd;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
|
||||
padding: 3px 5px 3px 5px;
|
||||
border: 1px solid #ddd;
|
||||
background-image: none;
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
|
||||
background: none;
|
||||
}
|
||||
/* end multiselect */
|
||||
|
||||
|
||||
.select2-result-selectable .select2-match,
|
||||
.select2-result-unselectable .select2-match {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.select2-offscreen, .select2-offscreen:focus {
|
||||
clip: rect(0 0 0 0) !important;
|
||||
width: 1px !important;
|
||||
height: 1px !important;
|
||||
border: 0 !important;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
overflow: hidden !important;
|
||||
position: absolute !important;
|
||||
outline: 0 !important;
|
||||
left: 0px !important;
|
||||
top: 0px !important;
|
||||
}
|
||||
|
||||
.select2-display-none {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.select2-measure-scrollbar {
|
||||
position: absolute;
|
||||
top: -10000px;
|
||||
left: -10000px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
overflow: scroll;
|
||||
}
|
||||
/* Retina-ize icons */
|
||||
|
||||
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) {
|
||||
.select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice .select2-arrow b {
|
||||
background-image: url('select2x2.png') !important;
|
||||
background-repeat: no-repeat !important;
|
||||
background-size: 60px 40px !important;
|
||||
}
|
||||
.select2-search input {
|
||||
background-position: 100% -21px !important;
|
||||
}
|
||||
}
|
36
vendors/select2-3.4.5/select2.jquery.json
vendored
36
vendors/select2-3.4.5/select2.jquery.json
vendored
|
@ -1,36 +0,0 @@
|
|||
{
|
||||
"name": "select2",
|
||||
"title": "Select2",
|
||||
"description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.",
|
||||
"keywords": [
|
||||
"select",
|
||||
"autocomplete",
|
||||
"typeahead",
|
||||
"dropdown",
|
||||
"multiselect",
|
||||
"tag",
|
||||
"tagging"
|
||||
],
|
||||
"version": "3.4.5",
|
||||
"author": {
|
||||
"name": "Igor Vaynberg",
|
||||
"url": "https://github.com/ivaynberg"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "Apache",
|
||||
"url": "http://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"type": "GPL v2",
|
||||
"url": "http://www.gnu.org/licenses/gpl-2.0.html"
|
||||
}
|
||||
],
|
||||
"bugs": "https://github.com/ivaynberg/select2/issues",
|
||||
"homepage": "http://ivaynberg.github.com/select2",
|
||||
"docs": "http://ivaynberg.github.com/select2/",
|
||||
"download": "https://github.com/ivaynberg/select2/tags",
|
||||
"dependencies": {
|
||||
"jquery": ">=1.7.1"
|
||||
}
|
||||
}
|
3255
vendors/select2-3.4.5/select2.js
vendored
3255
vendors/select2-3.4.5/select2.js
vendored
File diff suppressed because one or more lines are too long
22
vendors/select2-3.4.5/select2.min.js
vendored
22
vendors/select2-3.4.5/select2.min.js
vendored
File diff suppressed because one or more lines are too long
BIN
vendors/select2-3.4.5/select2.png
vendored
BIN
vendors/select2-3.4.5/select2.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 613 B |
17
vendors/select2-3.4.5/select2_locale_ar.js
vendored
17
vendors/select2-3.4.5/select2_locale_ar.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Arabic translation.
|
||||
*
|
||||
* Author: Your Name <amedhat3@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "لا توجد نتائج"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "من فضلك أدخل " + n + " حروف أكثر"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "من فضلك أحذف " + n + " حروف"; },
|
||||
formatSelectionTooBig: function (limit) { return "يمكنك ان تختار " + limit + " أختيارات فقط"; },
|
||||
formatLoadMore: function (pageNumber) { return "تحمل المذيد من النتائج ..."; },
|
||||
formatSearching: function () { return "جاري البحث ..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_bg.js
vendored
17
vendors/select2-3.4.5/select2_locale_bg.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 <Language> translation.
|
||||
*
|
||||
* Author: Lubomir Vikev <lubomirvikev@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Няма намерени съвпадения"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Моля въведете още " + n + " символ" + (n == 1 ? "" : "а"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Моля въведете с " + n + " по-малко символ" + (n == 1? "" : "а"); },
|
||||
formatSelectionTooBig: function (limit) { return "Можете да направите до " + limit + (limit == 1 ? " избор" : " избора"); },
|
||||
formatLoadMore: function (pageNumber) { return "Зареждат се още..."; },
|
||||
formatSearching: function () { return "Търсене..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_ca.js
vendored
17
vendors/select2-3.4.5/select2_locale_ca.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Catalan translation.
|
||||
*
|
||||
* Author: David Planella <david.planella@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "No s'ha trobat cap coincidència"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduïu " + n + " caràcter" + (n == 1 ? "" : "s") + " més"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Introduïu " + n + " caràcter" + (n == 1? "" : "s") + "menys"; },
|
||||
formatSelectionTooBig: function (limit) { return "Només podeu seleccionar " + limit + " element" + (limit == 1 ? "" : "s"); },
|
||||
formatLoadMore: function (pageNumber) { return "S'estan carregant més resultats..."; },
|
||||
formatSearching: function () { return "S'està cercant..."; }
|
||||
});
|
||||
})(jQuery);
|
49
vendors/select2-3.4.5/select2_locale_cs.js
vendored
49
vendors/select2-3.4.5/select2_locale_cs.js
vendored
|
@ -1,49 +0,0 @@
|
|||
/**
|
||||
* Select2 Czech translation.
|
||||
*
|
||||
* Author: Michal Marek <ahoj@michal-marek.cz>
|
||||
* Author - sklonovani: David Vallner <david@vallner.net>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
// use text for the numbers 2 through 4
|
||||
var smallNumbers = {
|
||||
2: function(masc) { return (masc ? "dva" : "dvě"); },
|
||||
3: function() { return "tři"; },
|
||||
4: function() { return "čtyři"; }
|
||||
}
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Nenalezeny žádné položky"; },
|
||||
formatInputTooShort: function (input, min) {
|
||||
var n = min - input.length;
|
||||
if (n == 1) {
|
||||
return "Prosím zadejte ještě jeden znak";
|
||||
} else if (n <= 4) {
|
||||
return "Prosím zadejte ještě další "+smallNumbers[n](true)+" znaky";
|
||||
} else {
|
||||
return "Prosím zadejte ještě dalších "+n+" znaků";
|
||||
}
|
||||
},
|
||||
formatInputTooLong: function (input, max) {
|
||||
var n = input.length - max;
|
||||
if (n == 1) {
|
||||
return "Prosím zadejte o jeden znak méně";
|
||||
} else if (n <= 4) {
|
||||
return "Prosím zadejte o "+smallNumbers[n](true)+" znaky méně";
|
||||
} else {
|
||||
return "Prosím zadejte o "+n+" znaků méně";
|
||||
}
|
||||
},
|
||||
formatSelectionTooBig: function (limit) {
|
||||
if (limit == 1) {
|
||||
return "Můžete zvolit jen jednu položku";
|
||||
} else if (limit <= 4) {
|
||||
return "Můžete zvolit maximálně "+smallNumbers[limit](false)+" položky";
|
||||
} else {
|
||||
return "Můžete zvolit maximálně "+limit+" položek";
|
||||
}
|
||||
},
|
||||
formatLoadMore: function (pageNumber) { return "Načítají se další výsledky..."; },
|
||||
formatSearching: function () { return "Vyhledávání..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_da.js
vendored
17
vendors/select2-3.4.5/select2_locale_da.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Danish translation.
|
||||
*
|
||||
* Author: Anders Jenbo <anders@jenbo.dk>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Ingen resultater fundet"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Angiv venligst " + n + " tegn mere"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Angiv venligst " + n + " tegn mindre"; },
|
||||
formatSelectionTooBig: function (limit) { return "Du kan kun vælge " + limit + " emne" + (limit === 1 ? "" : "r"); },
|
||||
formatLoadMore: function (pageNumber) { return "Indlæser flere resultater…"; },
|
||||
formatSearching: function () { return "Søger…"; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_de.js
vendored
15
vendors/select2-3.4.5/select2_locale_de.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 German translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Keine Übereinstimmungen gefunden"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Bitte " + n + " Zeichen mehr eingeben"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Bitte " + n + " Zeichen weniger eingeben"; },
|
||||
formatSelectionTooBig: function (limit) { return "Sie können nur " + limit + " Eintr" + (limit === 1 ? "ag" : "äge") + " auswählen"; },
|
||||
formatLoadMore: function (pageNumber) { return "Lade mehr Ergebnisse..."; },
|
||||
formatSearching: function () { return "Suche..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_el.js
vendored
17
vendors/select2-3.4.5/select2_locale_el.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 <Language> translation.
|
||||
*
|
||||
* Author: Your Name <your@email>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Δεν βρέθηκαν αποτελέσματα"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερο" + (n == 1 ? "" : "υς") + " χαρακτήρ" + (n == 1 ? "α" : "ες"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρ" + (n == 1 ? "α" : "ες"); },
|
||||
formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμεν" + (limit == 1 ? "ο" : "α"); },
|
||||
formatLoadMore: function (pageNumber) { return "Φόρτωση περισσότερων..."; },
|
||||
formatSearching: function () { return "Αναζήτηση..."; }
|
||||
});
|
||||
})(jQuery);
|
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 <Language> translation.
|
||||
*
|
||||
* Author: Your Name <your@email>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "No matches found"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " more character" + (n == 1 ? "" : "s"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); },
|
||||
formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); },
|
||||
formatLoadMore: function (pageNumber) { return "Loading more results..."; },
|
||||
formatSearching: function () { return "Searching..."; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_es.js
vendored
15
vendors/select2-3.4.5/select2_locale_es.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Spanish translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "No se encontraron resultados"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Por favor, introduzca " + n + " car" + (n == 1? "á" : "a") + "cter" + (n == 1? "" : "es"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Por favor, elimine " + n + " car" + (n == 1? "á" : "a") + "cter" + (n == 1? "" : "es"); },
|
||||
formatSelectionTooBig: function (limit) { return "Sólo puede seleccionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
|
||||
formatLoadMore: function (pageNumber) { return "Cargando más resultados..."; },
|
||||
formatSearching: function () { return "Buscando..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_et.js
vendored
17
vendors/select2-3.4.5/select2_locale_et.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Estonian translation.
|
||||
*
|
||||
* Author: Kuldar Kalvik <kuldar@kalvik.ee>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Tulemused puuduvad"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Sisesta " + n + " täht" + (n == 1 ? "" : "e") + " rohkem"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Sisesta " + n + " täht" + (n == 1? "" : "e") + " vähem"; },
|
||||
formatSelectionTooBig: function (limit) { return "Saad vaid " + limit + " tulemus" + (limit == 1 ? "e" : "t") + " valida"; },
|
||||
formatLoadMore: function (pageNumber) { return "Laen tulemusi.."; },
|
||||
formatSearching: function () { return "Otsin.."; }
|
||||
});
|
||||
})(jQuery);
|
43
vendors/select2-3.4.5/select2_locale_eu.js
vendored
43
vendors/select2-3.4.5/select2_locale_eu.js
vendored
|
@ -1,43 +0,0 @@
|
|||
/**
|
||||
* Select2 Basque translation.
|
||||
*
|
||||
* Author: Julen Ruiz Aizpuru <julenx at gmail dot com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () {
|
||||
return "Ez da bat datorrenik aurkitu";
|
||||
},
|
||||
formatInputTooShort: function (input, min) {
|
||||
var n = min - input.length;
|
||||
if (n === 1) {
|
||||
return "Idatzi karaktere bat gehiago";
|
||||
} else {
|
||||
return "Idatzi " + n + " karaktere gehiago";
|
||||
}
|
||||
},
|
||||
formatInputTooLong: function (input, max) {
|
||||
var n = input.length - max;
|
||||
if (n === 1) {
|
||||
return "Idatzi karaktere bat gutxiago";
|
||||
} else {
|
||||
return "Idatzi " + n + " karaktere gutxiago";
|
||||
}
|
||||
},
|
||||
formatSelectionTooBig: function (limit) {
|
||||
if (limit === 1 ) {
|
||||
return "Elementu bakarra hauta dezakezu";
|
||||
} else {
|
||||
return limit + " elementu hauta ditzakezu soilik";
|
||||
}
|
||||
},
|
||||
formatLoadMore: function (pageNumber) {
|
||||
return "Emaitza gehiago kargatzen...";
|
||||
},
|
||||
formatSearching: function () {
|
||||
return "Bilatzen...";
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_fa.js
vendored
17
vendors/select2-3.4.5/select2_locale_fa.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 <fa> translation.
|
||||
*
|
||||
* Author: Ali Choopan <choopan@arsh.co>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "نتیجهای یافت نشد."; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return " لطفا بیش از"+n+"کاراکتر وارد نمایید "; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return " لطفا" + n + " کاراکتر را حذف کنید."; },
|
||||
formatSelectionTooBig: function (limit) { return "شما فقط میتوانید " + limit + " مورد را انتخاب کنید"; },
|
||||
formatLoadMore: function (pageNumber) { return "در حال بارگذاری موارد بیشتر ..."; },
|
||||
formatSearching: function () { return "در حال جستجو"; }
|
||||
});
|
||||
})(jQuery);
|
28
vendors/select2-3.4.5/select2_locale_fi.js
vendored
28
vendors/select2-3.4.5/select2_locale_fi.js
vendored
|
@ -1,28 +0,0 @@
|
|||
/**
|
||||
* Select2 Finnish translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () {
|
||||
return "Ei tuloksia";
|
||||
},
|
||||
formatInputTooShort: function (input, min) {
|
||||
var n = min - input.length;
|
||||
return "Ole hyvä ja anna " + n + " merkkiä lisää";
|
||||
},
|
||||
formatInputTooLong: function (input, max) {
|
||||
var n = input.length - max;
|
||||
return "Ole hyvä ja anna " + n + " merkkiä vähemmän";
|
||||
},
|
||||
formatSelectionTooBig: function (limit) {
|
||||
return "Voit valita ainoastaan " + limit + " kpl";
|
||||
},
|
||||
formatLoadMore: function (pageNumber) {
|
||||
return "Ladataan lisää tuloksia...";
|
||||
},
|
||||
formatSearching: function () {
|
||||
return "Etsitään...";
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_fr.js
vendored
15
vendors/select2-3.4.5/select2_locale_fr.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 French translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Aucun résultat trouvé"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Merci de saisir " + n + " caractère" + (n == 1? "" : "s") + " de plus"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Merci de supprimer " + n + " caractère" + (n == 1? "" : "s"); },
|
||||
formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); },
|
||||
formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires..."; },
|
||||
formatSearching: function () { return "Recherche en cours..."; }
|
||||
});
|
||||
})(jQuery);
|
43
vendors/select2-3.4.5/select2_locale_gl.js
vendored
43
vendors/select2-3.4.5/select2_locale_gl.js
vendored
|
@ -1,43 +0,0 @@
|
|||
/**
|
||||
* Select2 Galician translation
|
||||
*
|
||||
* Author: Leandro Regueiro <leandro.regueiro@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () {
|
||||
return "Non se atoparon resultados";
|
||||
},
|
||||
formatInputTooShort: function (input, min) {
|
||||
var n = min - input.length;
|
||||
if (n === 1) {
|
||||
return "Engada un carácter";
|
||||
} else {
|
||||
return "Engada " + n + " caracteres";
|
||||
}
|
||||
},
|
||||
formatInputTooLong: function (input, max) {
|
||||
var n = input.length - max;
|
||||
if (n === 1) {
|
||||
return "Elimine un carácter";
|
||||
} else {
|
||||
return "Elimine " + n + " caracteres";
|
||||
}
|
||||
},
|
||||
formatSelectionTooBig: function (limit) {
|
||||
if (limit === 1 ) {
|
||||
return "Só pode seleccionar un elemento";
|
||||
} else {
|
||||
return "Só pode seleccionar " + limit + " elementos";
|
||||
}
|
||||
},
|
||||
formatLoadMore: function (pageNumber) {
|
||||
return "Cargando máis resultados...";
|
||||
},
|
||||
formatSearching: function () {
|
||||
return "Buscando...";
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_he.js
vendored
17
vendors/select2-3.4.5/select2_locale_he.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Hebrew translation.
|
||||
*
|
||||
* Author: Yakir Sitbon <http://www.yakirs.net/>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "לא נמצאו התאמות"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "נא להזין עוד " + n + " תווים נוספים"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "נא להזין פחות " + n + " תווים"; },
|
||||
formatSelectionTooBig: function (limit) { return "ניתן לבחור " + limit + " פריטים"; },
|
||||
formatLoadMore: function (pageNumber) { return "טוען תוצאות נוספות..."; },
|
||||
formatSearching: function () { return "מחפש..."; }
|
||||
});
|
||||
})(jQuery);
|
42
vendors/select2-3.4.5/select2_locale_hr.js
vendored
42
vendors/select2-3.4.5/select2_locale_hr.js
vendored
|
@ -1,42 +0,0 @@
|
|||
/**
|
||||
* Select2 Croatian translation.
|
||||
*
|
||||
* Author: Edi Modrić <edi.modric@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
var specialNumbers = {
|
||||
1: function(n) { return (n % 100 != 11 ? "znak" : "znakova"); },
|
||||
2: function(n) { return (n % 100 != 12 ? "znaka" : "znakova"); },
|
||||
3: function(n) { return (n % 100 != 13 ? "znaka" : "znakova"); },
|
||||
4: function(n) { return (n % 100 != 14 ? "znaka" : "znakova"); }
|
||||
};
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Nema rezultata"; },
|
||||
formatInputTooShort: function (input, min) {
|
||||
var n = min - input.length;
|
||||
var nMod10 = n % 10;
|
||||
|
||||
if (nMod10 > 0 && nMod10 < 5) {
|
||||
return "Unesite još " + n + " " + specialNumbers[nMod10](n);
|
||||
}
|
||||
|
||||
return "Unesite još " + n + " znakova";
|
||||
},
|
||||
formatInputTooLong: function (input, max) {
|
||||
var n = input.length - max;
|
||||
var nMod10 = n % 10;
|
||||
|
||||
if (nMod10 > 0 && nMod10 < 5) {
|
||||
return "Unesite " + n + " " + specialNumbers[nMod10](n) + " manje";
|
||||
}
|
||||
|
||||
return "Unesite " + n + " znakova manje";
|
||||
},
|
||||
formatSelectionTooBig: function (limit) { return "Maksimalan broj odabranih stavki je " + limit; },
|
||||
formatLoadMore: function (pageNumber) { return "Učitavanje rezultata..."; },
|
||||
formatSearching: function () { return "Pretraga..."; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_hu.js
vendored
15
vendors/select2-3.4.5/select2_locale_hu.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Hungarian translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Nincs találat."; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " kerekterrel több mint kellene."; },
|
||||
formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; },
|
||||
formatLoadMore: function (pageNumber) { return "Töltés..."; },
|
||||
formatSearching: function () { return "Keresés..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_id.js
vendored
17
vendors/select2-3.4.5/select2_locale_id.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Indonesian translation.
|
||||
*
|
||||
* Author: Ibrahim Yusuf <ibrahim7usuf@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Tidak ada data yang sesuai"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Masukkan " + n + " huruf lagi" + (n == 1 ? "" : "s"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Hapus " + n + " huruf" + (n == 1 ? "" : "s"); },
|
||||
formatSelectionTooBig: function (limit) { return "Anda hanya dapat memilih " + limit + " pilihan" + (limit == 1 ? "" : "s"); },
|
||||
formatLoadMore: function (pageNumber) { return "Mengambil data..."; },
|
||||
formatSearching: function () { return "Mencari..."; }
|
||||
});
|
||||
})(jQuery);
|
16
vendors/select2-3.4.5/select2_locale_is.js
vendored
16
vendors/select2-3.4.5/select2_locale_is.js
vendored
|
@ -1,16 +0,0 @@
|
|||
/**
|
||||
* Select2 Icelandic translation.
|
||||
*
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Ekkert fannst"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vinsamlegast skrifið " + n + " staf" + (n == 1 ? "" : "i") + " í viðbót"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Vinsamlegast styttið texta um " + n + " staf" + (n == 1 ? "" : "i"); },
|
||||
formatSelectionTooBig: function (limit) { return "Þú getur aðeins valið " + limit + " atriði"; },
|
||||
formatLoadMore: function (pageNumber) { return "Sæki fleiri niðurstöður..."; },
|
||||
formatSearching: function () { return "Leita..."; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_it.js
vendored
15
vendors/select2-3.4.5/select2_locale_it.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Italian translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Nessuna corrispondenza trovata"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; },
|
||||
formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); },
|
||||
formatLoadMore: function (pageNumber) { return "Caricamento in corso..."; },
|
||||
formatSearching: function () { return "Ricerca..."; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_ja.js
vendored
15
vendors/select2-3.4.5/select2_locale_ja.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Japanese translation.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "該当なし"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "後" + n + "文字入れてください"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "検索文字列が" + n + "文字長すぎます"; },
|
||||
formatSelectionTooBig: function (limit) { return "最多で" + limit + "項目までしか選択できません"; },
|
||||
formatLoadMore: function (pageNumber) { return "読込中・・・"; },
|
||||
formatSearching: function () { return "検索中・・・"; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_ko.js
vendored
17
vendors/select2-3.4.5/select2_locale_ko.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 <Language> translation.
|
||||
*
|
||||
* Author: Swen Mun <longfinfunnel@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "결과 없음"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "너무 짧습니다. "+n+"글자 더 입력해주세요."; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "너무 깁니다. "+n+"글자 지워주세요."; },
|
||||
formatSelectionTooBig: function (limit) { return "최대 "+limit+"개까지만 선택하실 수 있습니다."; },
|
||||
formatLoadMore: function (pageNumber) { return "불러오는 중…"; },
|
||||
formatSearching: function () { return "검색 중…"; }
|
||||
});
|
||||
})(jQuery);
|
29
vendors/select2-3.4.5/select2_locale_lt.js
vendored
29
vendors/select2-3.4.5/select2_locale_lt.js
vendored
|
@ -1,29 +0,0 @@
|
|||
/**
|
||||
* Select2 lithuanian translation.
|
||||
*
|
||||
* Author: CRONUS Karmalakas <cronus dot karmalakas at gmail dot com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Atitikmenų nerasta"; },
|
||||
formatInputTooShort: function (input, min) {
|
||||
var n = min - input.length,
|
||||
suffix = (n % 10 == 1) && (n % 100 != 11) ? 'į' : (((n % 10 >= 2) && ((n % 100 < 10) || (n % 100 >= 20))) ? 'ius' : 'ių');
|
||||
return "Įrašykite dar " + n + " simbol" + suffix;
|
||||
},
|
||||
formatInputTooLong: function (input, max) {
|
||||
var n = input.length - max,
|
||||
suffix = (n % 10 == 1) && (n % 100 != 11) ? 'į' : (((n % 10 >= 2) && ((n % 100 < 10) || (n % 100 >= 20))) ? 'ius' : 'ių');
|
||||
return "Pašalinkite " + n + " simbol" + suffix;
|
||||
},
|
||||
formatSelectionTooBig: function (limit) {
|
||||
var n = limit,
|
||||
suffix = (n % 10 == 1) && (n % 100 != 11) ? 'ą' : (((n % 10 >= 2) && ((n % 100 < 10) || (n % 100 >= 20))) ? 'us' : 'ų');
|
||||
return "Jūs galite pasirinkti tik " + limit + " element" + suffix;
|
||||
},
|
||||
formatLoadMore: function (pageNumber) { return "Kraunama daugiau rezultatų..."; },
|
||||
formatSearching: function () { return "Ieškoma..."; }
|
||||
});
|
||||
})(jQuery);
|
16
vendors/select2-3.4.5/select2_locale_lv.js
vendored
16
vendors/select2-3.4.5/select2_locale_lv.js
vendored
|
@ -1,16 +0,0 @@
|
|||
/**
|
||||
* Select2 Latvian translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Sakritību nav"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Lūdzu ievadiet vēl " + n + " simbol" + (n == 11 ? "us" : (/^\d*[1]$/im.test(n)? "u" : "us")); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Lūdzu ievadiet par " + n + " simbol" + (n == 11 ? "iem" : (/^\d*[1]$/im.test(n)? "u" : "iem")) + " mazāk"; },
|
||||
formatSelectionTooBig: function (limit) { return "Jūs varat izvēlēties ne vairāk kā " + limit + " element" + (limit == 11 ? "us" : (/^\d*[1]$/im.test(limit)? "u" : "us")); },
|
||||
formatLoadMore: function (pageNumber) { return "Datu ielāde..."; },
|
||||
formatSearching: function () { return "Meklēšana..."; }
|
||||
});
|
||||
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_mk.js
vendored
17
vendors/select2-3.4.5/select2_locale_mk.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Macedonian translation.
|
||||
*
|
||||
* Author: Marko Aleksic <psybaron@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Нема пронајдено совпаѓања"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Ве молиме внесете уште " + n + " карактер" + (n == 1 ? "" : "и"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Ве молиме внесете " + n + " помалку карактер" + (n == 1? "" : "и"); },
|
||||
formatSelectionTooBig: function (limit) { return "Можете да изберете само " + limit + " ставк" + (limit == 1 ? "а" : "и"); },
|
||||
formatLoadMore: function (pageNumber) { return "Вчитување резултати..."; },
|
||||
formatSearching: function () { return "Пребарување..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_ms.js
vendored
17
vendors/select2-3.4.5/select2_locale_ms.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Malay translation.
|
||||
*
|
||||
* Author: Kepoweran <kepoweran@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Tiada padanan yang ditemui"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Sila masukkan " + n + " aksara lagi"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Sila hapuskan " + n + " aksara"; },
|
||||
formatSelectionTooBig: function (limit) { return "Anda hanya boleh memilih " + limit + " pilihan"; },
|
||||
formatLoadMore: function (pageNumber) { return "Sedang memuatkan keputusan..."; },
|
||||
formatSearching: function () { return "Mencari..."; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_nl.js
vendored
15
vendors/select2-3.4.5/select2_locale_nl.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Dutch translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Geen resultaten gevonden"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul " + n + " karakter" + (n == 1? "" : "s") + " meer in"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Vul " + n + " karakter" + (n == 1? "" : "s") + " minder in"; },
|
||||
formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; },
|
||||
formatLoadMore: function (pageNumber) { return "Meer resultaten laden..."; },
|
||||
formatSearching: function () { return "Zoeken..."; }
|
||||
});
|
||||
})(jQuery);
|
18
vendors/select2-3.4.5/select2_locale_no.js
vendored
18
vendors/select2-3.4.5/select2_locale_no.js
vendored
|
@ -1,18 +0,0 @@
|
|||
/**
|
||||
* Select2 Norwegian translation.
|
||||
*
|
||||
* Author: Torgeir Veimo <torgeir.veimo@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Ingen treff"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vennligst skriv inn " + n + (n>1 ? " flere tegn" : " tegn til"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Vennligst fjern " + n + " tegn"; },
|
||||
formatSelectionTooBig: function (limit) { return "Du kan velge maks " + limit + " elementer"; },
|
||||
formatLoadMore: function (pageNumber) { return "Laster flere resultater..."; },
|
||||
formatSearching: function () { return "Søker..."; }
|
||||
});
|
||||
})(jQuery);
|
||||
|
37
vendors/select2-3.4.5/select2_locale_pl.js
vendored
37
vendors/select2-3.4.5/select2_locale_pl.js
vendored
|
@ -1,37 +0,0 @@
|
|||
/**
|
||||
* Select2 Polish translation.
|
||||
*
|
||||
* Author: Jan Kondratowicz <jan@kondratowicz.pl>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
var pl_suffix = function(n) {
|
||||
if(n == 1) return "";
|
||||
if((n%100 > 1 && n%100 < 5) || (n%100 > 20 && n%10 > 1 && n%10 < 5)) return "i";
|
||||
return "ów";
|
||||
};
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () {
|
||||
return "Brak wyników.";
|
||||
},
|
||||
formatInputTooShort: function (input, min) {
|
||||
var n = min - input.length;
|
||||
return "Wpisz jeszcze " + n + " znak" + pl_suffix(n) + ".";
|
||||
},
|
||||
formatInputTooLong: function (input, max) {
|
||||
var n = input.length - max;
|
||||
return "Wpisana fraza jest za długa o " + n + " znak" + pl_suffix(n) + ".";
|
||||
},
|
||||
formatSelectionTooBig: function (limit) {
|
||||
return "Możesz zaznaczyć najwyżej " + limit + " element" + pl_suffix(limit) + ".";
|
||||
},
|
||||
formatLoadMore: function (pageNumber) {
|
||||
return "Ładowanie wyników...";
|
||||
},
|
||||
formatSearching: function () {
|
||||
return "Szukanie...";
|
||||
}
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_pt-BR.js
vendored
15
vendors/select2-3.4.5/select2_locale_pt-BR.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Brazilian Portuguese translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Nenhum resultado encontrado"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Informe " + n + " caractere" + (n == 1? "" : "s"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caractere" + (n == 1? "" : "s"); },
|
||||
formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
|
||||
formatLoadMore: function (pageNumber) { return "Carregando mais resultados..."; },
|
||||
formatSearching: function () { return "Buscando..."; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_pt-PT.js
vendored
15
vendors/select2-3.4.5/select2_locale_pt-PT.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Portuguese (Portugal) translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Nenhum resultado encontrado"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduza " + n + " car" + (n == 1 ? "ácter" : "acteres"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " car" + (n == 1 ? "ácter" : "acteres"); },
|
||||
formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
|
||||
formatLoadMore: function (pageNumber) { return "A carregar mais resultados..."; },
|
||||
formatSearching: function () { return "A pesquisar..."; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_ro.js
vendored
15
vendors/select2-3.4.5/select2_locale_ro.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Romanian translation.
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Nu a fost găsit nimic"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vă rugăm să introduceți incă " + n + " caracter" + (n == 1 ? "" : "e"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Vă rugăm să introduceți mai puțin de " + n + " caracter" + (n == 1? "" : "e"); },
|
||||
formatSelectionTooBig: function (limit) { return "Aveți voie să selectați cel mult " + limit + " element" + (limit == 1 ? "" : "e"); },
|
||||
formatLoadMore: function (pageNumber) { return "Se încarcă..."; },
|
||||
formatSearching: function () { return "Căutare..."; }
|
||||
});
|
||||
})(jQuery);
|
15
vendors/select2-3.4.5/select2_locale_ru.js
vendored
15
vendors/select2-3.4.5/select2_locale_ru.js
vendored
|
@ -1,15 +0,0 @@
|
|||
/**
|
||||
* Select2 Russian translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Совпадений не найдено"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Пожалуйста, введите еще " + n + " символ" + (n == 1 ? "" : ((n > 1)&&(n < 5) ? "а" : "ов")); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Пожалуйста, введите на " + n + " символ" + (n == 1 ? "" : ((n > 1)&&(n < 5)? "а" : "ов")) + " меньше"; },
|
||||
formatSelectionTooBig: function (limit) { return "Вы можете выбрать не более " + limit + " элемент" + (limit == 1 ? "а" : "ов"); },
|
||||
formatLoadMore: function (pageNumber) { return "Загрузка данных..."; },
|
||||
formatSearching: function () { return "Поиск..."; }
|
||||
});
|
||||
})(jQuery);
|
48
vendors/select2-3.4.5/select2_locale_sk.js
vendored
48
vendors/select2-3.4.5/select2_locale_sk.js
vendored
|
@ -1,48 +0,0 @@
|
|||
/**
|
||||
* Select2 Slovak translation.
|
||||
*
|
||||
* Author: David Vallner <david@vallner.net>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
// use text for the numbers 2 through 4
|
||||
var smallNumbers = {
|
||||
2: function(masc) { return (masc ? "dva" : "dve"); },
|
||||
3: function() { return "tri"; },
|
||||
4: function() { return "štyri"; }
|
||||
}
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Nenašli sa žiadne položky"; },
|
||||
formatInputTooShort: function (input, min) {
|
||||
var n = min - input.length;
|
||||
if (n == 1) {
|
||||
return "Prosím zadajte ešte jeden znak";
|
||||
} else if (n <= 4) {
|
||||
return "Prosím zadajte ešte ďalšie "+smallNumbers[n](true)+" znaky";
|
||||
} else {
|
||||
return "Prosím zadajte ešte ďalších "+n+" znakov";
|
||||
}
|
||||
},
|
||||
formatInputTooLong: function (input, max) {
|
||||
var n = input.length - max;
|
||||
if (n == 1) {
|
||||
return "Prosím zadajte o jeden znak menej";
|
||||
} else if (n <= 4) {
|
||||
return "Prosím zadajte o "+smallNumbers[n](true)+" znaky menej";
|
||||
} else {
|
||||
return "Prosím zadajte o "+n+" znakov menej";
|
||||
}
|
||||
},
|
||||
formatSelectionTooBig: function (limit) {
|
||||
if (limit == 1) {
|
||||
return "Môžete zvoliť len jednu položku";
|
||||
} else if (limit <= 4) {
|
||||
return "Môžete zvoliť najviac "+smallNumbers[limit](false)+" položky";
|
||||
} else {
|
||||
return "Môžete zvoliť najviac "+limit+" položiek";
|
||||
}
|
||||
},
|
||||
formatLoadMore: function (pageNumber) { return "Načítavajú sa ďalšie výsledky..."; },
|
||||
formatSearching: function () { return "Vyhľadávanie..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_sv.js
vendored
17
vendors/select2-3.4.5/select2_locale_sv.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Swedish translation.
|
||||
*
|
||||
* Author: Jens Rantil <jens.rantil@telavox.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Inga träffar"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; },
|
||||
formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; },
|
||||
formatLoadMore: function (pageNumber) { return "Laddar fler resultat..."; },
|
||||
formatSearching: function () { return "Söker..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_th.js
vendored
17
vendors/select2-3.4.5/select2_locale_th.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Thai translation.
|
||||
*
|
||||
* Author: Atsawin Chaowanakritsanakul <joke@nakhon.net>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "ไม่พบข้อมูล"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "โปรดพิมพ์เพิ่มอีก " + n + " ตัวอักษร"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "โปรดลบออก " + n + " ตัวอักษร"; },
|
||||
formatSelectionTooBig: function (limit) { return "คุณสามารถเลือกได้ไม่เกิน " + limit + " รายการ"; },
|
||||
formatLoadMore: function (pageNumber) { return "กำลังค้นข้อมูลเพิ่ม..."; },
|
||||
formatSearching: function () { return "กำลังค้นข้อมูล..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_tr.js
vendored
17
vendors/select2-3.4.5/select2_locale_tr.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 Turkish translation.
|
||||
*
|
||||
* Author: Salim KAYABAŞI <salim.kayabasi@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Sonuç bulunamadı"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "En az " + n + " karakter daha girmelisiniz"; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return n + " karakter azaltmalısınız"; },
|
||||
formatSelectionTooBig: function (limit) { return "Sadece " + limit + " seçim yapabilirsiniz"; },
|
||||
formatLoadMore: function (pageNumber) { return "Daha fazla..."; },
|
||||
formatSearching: function () { return "Aranıyor..."; }
|
||||
});
|
||||
})(jQuery);
|
17
vendors/select2-3.4.5/select2_locale_ua.js
vendored
17
vendors/select2-3.4.5/select2_locale_ua.js
vendored
|
@ -1,17 +0,0 @@
|
|||
/**
|
||||
* Select2 <Language> translation.
|
||||
*
|
||||
* Author: bigmihail <bigmihail@bigmir.net>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Нічого не знайдено"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length, s = ["", "и", "ів"], p = [2,0,1,1,1,2]; return "Введіть буль ласка ще " + n + " символ" + s[ (n%100>4 && n%100<=20)? 2 : p[Math.min(n%10, 5)] ]; },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max, s = ["", "и", "ів"], p = [2,0,1,1,1,2]; return "Введіть буль ласка на " + n + " символ" + s[ (n%100>4 && n%100<=20)? 2 : p[Math.min(n%10, 5)] ] + " менше"; },
|
||||
formatSelectionTooBig: function (limit) {var s = ["", "и", "ів"], p = [2,0,1,1,1,2]; return "Ви можете вибрати лише " + limit + " елемент" + s[ (limit%100>4 && limit%100<=20)? 2 : p[Math.min(limit%10, 5)] ]; },
|
||||
formatLoadMore: function (pageNumber) { return "Завантаження даних..."; },
|
||||
formatSearching: function () { return "Пошук..."; }
|
||||
});
|
||||
})(jQuery);
|
18
vendors/select2-3.4.5/select2_locale_vi.js
vendored
18
vendors/select2-3.4.5/select2_locale_vi.js
vendored
|
@ -1,18 +0,0 @@
|
|||
/**
|
||||
* Select2 Vietnamese translation.
|
||||
*
|
||||
* Author: Long Nguyen <olragon@gmail.com>
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "Không tìm thấy kết quả"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "Vui lòng nhập nhiều hơn " + n + " ký tự" + (n == 1 ? "" : "s"); },
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "Vui lòng nhập ít hơn " + n + " ký tự" + (n == 1? "" : "s"); },
|
||||
formatSelectionTooBig: function (limit) { return "Chỉ có thể chọn được " + limit + " tùy chọn" + (limit == 1 ? "" : "s"); },
|
||||
formatLoadMore: function (pageNumber) { return "Đang lấy thêm kết quả..."; },
|
||||
formatSearching: function () { return "Đang tìm..."; }
|
||||
});
|
||||
})(jQuery);
|
||||
|
14
vendors/select2-3.4.5/select2_locale_zh-CN.js
vendored
14
vendors/select2-3.4.5/select2_locale_zh-CN.js
vendored
|
@ -1,14 +0,0 @@
|
|||
/**
|
||||
* Select2 Chinese translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "没有找到匹配项"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";},
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";},
|
||||
formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; },
|
||||
formatLoadMore: function (pageNumber) { return "加载结果中..."; },
|
||||
formatSearching: function () { return "搜索中..."; }
|
||||
});
|
||||
})(jQuery);
|
14
vendors/select2-3.4.5/select2_locale_zh-TW.js
vendored
14
vendors/select2-3.4.5/select2_locale_zh-TW.js
vendored
|
@ -1,14 +0,0 @@
|
|||
/**
|
||||
* Select2 Traditional Chinese translation
|
||||
*/
|
||||
(function ($) {
|
||||
"use strict";
|
||||
$.extend($.fn.select2.defaults, {
|
||||
formatNoMatches: function () { return "沒有找到相符的項目"; },
|
||||
formatInputTooShort: function (input, min) { var n = min - input.length; return "請再輸入" + n + "個字元";},
|
||||
formatInputTooLong: function (input, max) { var n = input.length - max; return "請刪掉" + n + "個字元";},
|
||||
formatSelectionTooBig: function (limit) { return "你只能選擇最多" + limit + "項"; },
|
||||
formatLoadMore: function (pageNumber) { return "載入中..."; },
|
||||
formatSearching: function () { return "搜尋中..."; }
|
||||
});
|
||||
})(jQuery);
|
BIN
vendors/select2-3.4.5/select2x2.png
vendored
BIN
vendors/select2-3.4.5/select2x2.png
vendored
Binary file not shown.
Before Width: | Height: | Size: 845 B |
Loading…
Reference in a new issue