Update compiled assets

This commit is contained in:
Daniel Supernault 2019-01-10 20:41:34 -07:00
parent e36f492d4d
commit a2db34c59d
No known key found for this signature in database
GPG Key ID: 0DEF1C662C9033F7
11 changed files with 6925 additions and 5 deletions

16
public/css/app.css vendored Normal file

File diff suppressed because one or more lines are too long

1
public/js/activity.js vendored Normal file
View File

@ -0,0 +1 @@
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=1)}({1:function(e,t,n){e.exports=n("hUgz")},hUgz:function(e,t){$(document).ready(function(){$(".pagination").hide();var e=document.querySelector(".notification-page .list-group");new InfiniteScroll(e,{path:".pagination__next",append:".notification-page .list-group",status:".page-load-status",history:!0})})}});

1
public/js/app.js vendored Normal file

File diff suppressed because one or more lines are too long

1
public/js/components.js vendored Normal file

File diff suppressed because one or more lines are too long

2221
public/js/croppie.js vendored Normal file

File diff suppressed because it is too large Load Diff

3542
public/js/emoji-picker/config.js vendored Normal file

File diff suppressed because it is too large Load Diff

139
public/js/emoji-picker/emoji-picker.js vendored Normal file
View File

@ -0,0 +1,139 @@
// Generated by CoffeeScript 1.12.5
(function() {
this.EmojiPicker = (function() {
function EmojiPicker(options) {
var ref, ref1;
if (options == null) {
options = {};
}
$.emojiarea.iconSize = (ref = options.iconSize) != null ? ref : 25;
$.emojiarea.assetsPath = (ref1 = options.assetsPath) != null ? ref1 : '';
this.generateEmojiIconSets(options);
if (!options.emojiable_selector) {
options.emojiable_selector = '[data-emojiable=true]';
}
this.options = options;
}
EmojiPicker.prototype.discover = function() {
var isiOS;
isiOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
if (isiOS) {
return;
}
return $(this.options.emojiable_selector).emojiarea($.extend({
emojiPopup: this,
norealTime: true
}, this.options));
};
EmojiPicker.prototype.generateEmojiIconSets = function(options) {
var column, dataItem, hex, i, icons, j, name, reverseIcons, row, totalColumns;
icons = {};
reverseIcons = {};
i = void 0;
j = void 0;
hex = void 0;
name = void 0;
dataItem = void 0;
row = void 0;
column = void 0;
totalColumns = void 0;
j = 0;
while (j < Config.EmojiCategories.length) {
totalColumns = Config.EmojiCategorySpritesheetDimens[j][1];
i = 0;
while (i < Config.EmojiCategories[j].length) {
dataItem = Config.Emoji[Config.EmojiCategories[j][i]];
name = dataItem[1][0];
row = Math.floor(i / totalColumns);
column = i % totalColumns;
icons[':' + name + ':'] = [j, row, column, ':' + name + ':'];
reverseIcons[name] = dataItem[0];
i++;
}
j++;
}
$.emojiarea.icons = icons;
return $.emojiarea.reverseIcons = reverseIcons;
};
EmojiPicker.prototype.colonToUnicode = function(input) {
if (!input) {
return '';
}
if (!Config.rx_colons) {
Config.init_unified();
}
return input.replace(Config.rx_colons, function(m) {
var val;
val = Config.mapcolon[m];
if (val) {
return val;
} else {
return '';
}
});
};
EmojiPicker.prototype.appendUnicodeAsImageToElement = function(element, input) {
var k, len, split_on_unicode, text, val;
if (!input) {
return '';
}
if (!Config.rx_codes) {
Config.init_unified();
}
split_on_unicode = input.split(Config.rx_codes);
for (k = 0, len = split_on_unicode.length; k < len; k++) {
text = split_on_unicode[k];
val = '';
if (Config.rx_codes.test(text)) {
val = Config.reversemap[text];
if (val) {
val = ':' + val + ':';
val = $.emojiarea.createIcon($.emojiarea.icons[val]);
}
} else {
val = document.createTextNode(text);
}
element.append(val);
}
return input.replace(Config.rx_codes, function(m) {
var $img;
val = Config.reversemap[m];
if (val) {
val = ':' + val + ':';
$img = $.emojiarea.createIcon($.emojiarea.icons[val]);
return $img;
} else {
return '';
}
});
};
EmojiPicker.prototype.colonToImage = function(input) {
if (!input) {
return '';
}
if (!Config.rx_colons) {
Config.init_unified();
}
return input.replace(Config.rx_colons, function(m) {
var $img;
if (m) {
$img = $.emojiarea.createIcon($.emojiarea.icons[m]);
return $img;
} else {
return '';
}
});
};
return EmojiPicker;
})();
}).call(this);
//# sourceMappingURL=emoji-picker.js.map

View File

@ -0,0 +1,773 @@
/**
* emojiarea - A rich textarea control that supports emojis, WYSIWYG-style.
* Copyright (c) 2012 DIY Co
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the License at:
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
* ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*
* @author Brian Reavis <brian@diy.org>
*/
/**
* This file also contains some modifications by Igor Zhukov in order to add
* custom scrollbars to EmojiMenu See keyword `MODIFICATION` in source code.
*/
(function($, window, document) {
var ELEMENT_NODE = 1;
var TEXT_NODE = 3;
var TAGS_BLOCK = [ 'p', 'div', 'pre', 'form' ];
var KEY_ESC = 27;
var KEY_TAB = 9;
/* Keys that are not intercepted and canceled when the textbox has reached its max length:
Backspace, Tab, Ctrl, Alt, Left Arrow, Up Arrow, Right Arrow, Down Arrow, Cmd Key, Delete
*/
var MAX_LENGTH_ALLOWED_KEYS = [8, 9, 17, 18, 37, 38, 39, 40, 91, 46];
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/*
* ! MODIFICATION START Options 'spritesheetPath', 'spritesheetDimens',
* 'iconSize' added by Andre Staltz.
*/
$.emojiarea = {
assetsPath : '',
spriteSheetPath: '',
blankGifPath: '',
iconSize : 25,
icons : {},
};
var defaultRecentEmojis = ':joy:,:kissing_heart:,:heart:,:heart_eyes:,:blush:,:grin:,:+1:,:relaxed:,:pensive:,:smile:,:sob:,:kiss:,:unamused:,:flushed:,:stuck_out_tongue_winking_eye:,:see_no_evil:,:wink:,:smiley:,:cry:,:stuck_out_tongue_closed_eyes:,:scream:,:rage:,:smirk:,:disappointed:,:sweat_smile:,:kissing_closed_eyes:,:speak_no_evil:,:relieved:,:grinning:,:yum:,:laughing:,:ok_hand:,:neutral_face:,:confused:'
.split(',');
/* ! MODIFICATION END */
$.fn.emojiarea = function(options) {
options = $.extend({}, options);
return this
.each(function () {
var originalInput = $(this);
if ('contentEditable' in document.body
&& options.wysiwyg !== false) {
var id = getGuid();
new EmojiArea_WYSIWYG(originalInput, id, $.extend({}, options));
} else {
var id = getGuid();
new EmojiArea_Plain(originalInput, id, options);
}
originalInput.attr(
{
'data-emojiable': 'converted',
'data-id': id,
'data-type': 'original-input'
});
});
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
var util = {};
util.restoreSelection = (function() {
if (window.getSelection) {
return function(savedSelection) {
var sel = window.getSelection();
sel.removeAllRanges();
for (var i = 0, len = savedSelection.length; i < len; ++i) {
sel.addRange(savedSelection[i]);
}
};
} else if (document.selection && document.selection.createRange) {
return function(savedSelection) {
if (savedSelection) {
savedSelection.select();
}
};
}
})();
util.saveSelection = (function() {
if (window.getSelection) {
return function() {
var sel = window.getSelection(), ranges = [];
if (sel.rangeCount) {
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
ranges.push(sel.getRangeAt(i));
}
}
return ranges;
};
} else if (document.selection && document.selection.createRange) {
return function() {
var sel = document.selection;
return (sel.type.toLowerCase() !== 'none') ? sel.createRange()
: null;
};
}
})();
util.replaceSelection = (function() {
if (window.getSelection) {
return function(content) {
var range, sel = window.getSelection();
var node = typeof content === 'string' ? document
.createTextNode(content) : content;
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
//range.insertNode(document.createTextNode(''));
range.insertNode(node);
range.setStart(node, 0);
window.setTimeout(function() {
range = document.createRange();
range.setStartAfter(node);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}, 0);
}
}
} else if (document.selection && document.selection.createRange) {
return function(content) {
var range = document.selection.createRange();
if (typeof content === 'string') {
range.text = content;
} else {
range.pasteHTML(content.outerHTML);
}
}
}
})();
util.insertAtCursor = function(text, el) {
text = ' ' + text;
var val = el.value, endIndex, startIndex, range;
if (typeof el.selectionStart != 'undefined'
&& typeof el.selectionEnd != 'undefined') {
startIndex = el.selectionStart;
endIndex = el.selectionEnd;
el.value = val.substring(0, startIndex) + text
+ val.substring(el.selectionEnd);
el.selectionStart = el.selectionEnd = startIndex + text.length;
} else if (typeof document.selection != 'undefined'
&& typeof document.selection.createRange != 'undefined') {
el.focus();
range = document.selection.createRange();
range.text = text;
range.select();
}
};
util.extend = function(a, b) {
if (typeof a === 'undefined' || !a) {
a = {};
}
if (typeof b === 'object') {
for ( var key in b) {
if (b.hasOwnProperty(key)) {
a[key] = b[key];
}
}
}
return a;
};
util.escapeRegex = function(str) {
return (str + '').replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
};
util.htmlEntities = function(str) {
return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;')
.replace(/>/g, '&gt;').replace(/"/g, '&quot;');
};
/*
* ! MODIFICATION START This function was added by Igor Zhukov to save
* recent used emojis.
*/
util.emojiInserted = function(emojiKey, menu) {
ConfigStorage.get('emojis_recent', function(curEmojis) {
curEmojis = curEmojis || defaultRecentEmojis || [];
var pos = curEmojis.indexOf(emojiKey);
if (!pos) {
return false;
}
if (pos != -1) {
curEmojis.splice(pos, 1);
}
curEmojis.unshift(emojiKey);
if (curEmojis.length > 42) {
curEmojis = curEmojis.slice(42);
}
ConfigStorage.set({
emojis_recent : curEmojis
});
})
};
/* ! MODIFICATION END */
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
var EmojiArea = function() {
};
EmojiArea.prototype.setup = function() {
var self = this;
this.$editor.on('focus', function() {
self.hasFocus = true;
});
this.$editor.on('blur', function() {
self.hasFocus = false;
});
// Assign a unique instance of an emojiMenu to
self.emojiMenu = new EmojiMenu(self);
this.setupButton();
};
EmojiArea.prototype.setupButton = function() {
var self = this;
var $button = $('[data-id=' + this.id + '][data-type=picker]');
$button.on('click', function(e) {
self.emojiMenu.show(self);
});
this.$button = $button;
this.$dontHideOnClick = 'emoji-picker';
};
/*
* ! MODIFICATION START This function was modified by Andre Staltz so that
* the icon is created from a spritesheet.
*/
EmojiArea.createIcon = function(emoji, menu) {
var category = emoji[0];
var row = emoji[1];
var column = emoji[2];
var name = emoji[3];
var filename = $.emojiarea.spriteSheetPath ? $.emojiarea.spriteSheetPath : $.emojiarea.assetsPath + '/emoji_spritesheet_!.png';
var blankGifPath = $.emojiarea.blankGifPath ? $.emojiarea.blankGifPath : $.emojiarea.assetsPath + '/blank.gif';
var iconSize = menu && Config.Mobile ? 26 : $.emojiarea.iconSize
var xoffset = -(iconSize * column);
var yoffset = -(iconSize * row);
var scaledWidth = (Config.EmojiCategorySpritesheetDimens[category][1] * iconSize);
var scaledHeight = (Config.EmojiCategorySpritesheetDimens[category][0] * iconSize);
var style = 'display:inline-block;';
style += 'width:' + iconSize + 'px;';
style += 'height:' + iconSize + 'px;';
style += 'background:url(\'' + filename.replace('!', category) + '\') '
+ xoffset + 'px ' + yoffset + 'px no-repeat;';
style += 'background-size:' + scaledWidth + 'px ' + scaledHeight
+ 'px;';
return '<img src="' + blankGifPath + '" class="img" style="'
+ style + '" alt="' + util.htmlEntities(name) + '">';
};
$.emojiarea.createIcon = EmojiArea.createIcon;
/* ! MODIFICATION END */
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/**
* Editor (plain-text)
*
* @constructor
* @param {object}
* $textarea
* @param {object}
* options
*/
var EmojiArea_Plain = function($textarea, id, options) {
this.options = options;
this.$textarea = $textarea;
this.$editor = $textarea;
this.id = id;
this.setup();
};
EmojiArea_Plain.prototype.insert = function(emoji) {
if (!$.emojiarea.icons.hasOwnProperty(emoji))
return;
util.insertAtCursor(emoji, this.$textarea[0]);
/*
* MODIFICATION: Following line was added by Igor Zhukov, in order to
* save recent emojis
*/
util.emojiInserted(emoji, this.menu);
this.$textarea.trigger('change');
};
EmojiArea_Plain.prototype.val = function() {
if (this.$textarea == '\n')
return '';
return this.$textarea.val();
};
util.extend(EmojiArea_Plain.prototype, EmojiArea.prototype);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/**
* Editor (rich)
*
* @constructor
* @param {object}
* $textarea
* @param {object}
* options
*/
var EmojiArea_WYSIWYG = function($textarea, id, options) {
var self = this;
this.options = options || {};
if ($($textarea).attr('data-emoji-input') === 'unicode')
this.options.inputMethod = 'unicode';
else
this.options.inputMethod = 'image';
this.id = id;
this.$textarea = $textarea;
this.emojiPopup = options.emojiPopup;
this.$editor = $('<div>').addClass('emoji-wysiwyg-editor').addClass($($textarea)[0].className);
this.$editor.data('self', this);
if ($textarea.attr('maxlength')) {
this.$editor.attr('maxlength', $textarea.attr('maxlength'));
}
this.$editor.height($textarea.outerHeight()); //auto adjust height
this.emojiPopup.appendUnicodeAsImageToElement(this.$editor, $textarea.val());
this.$editor.attr({
'data-id': id,
'data-type': 'input',
'placeholder': $textarea.attr('placeholder'),
'contenteditable': 'true',
});
/*
* ! MODIFICATION START Following code was modified by Igor Zhukov, in
* order to improve rich text paste
*/
var changeEvents = 'blur change';
if (!this.options.norealTime) {
changeEvents += ' keyup';
}
this.$editor.on(changeEvents, function(e) {
return self.onChange.apply(self, [ e ]);
});
/* ! MODIFICATION END */
this.$editor.on('mousedown focus', function() {
document.execCommand('enableObjectResizing', false, false);
});
this.$editor.on('blur', function() {
document.execCommand('enableObjectResizing', true, true);
});
var editorDiv = this.$editor;
this.$editor.on("change keydown keyup resize scroll", function(e) {
if(MAX_LENGTH_ALLOWED_KEYS.indexOf(e.which) == -1 &&
!((e.ctrlKey || e.metaKey) && e.which == 65) && // Ctrl + A
!((e.ctrlKey || e.metaKey) && e.which == 67) && // Ctrl + C
editorDiv.text().length + editorDiv.find('img').length >= editorDiv.attr('maxlength'))
{
e.preventDefault();
}
self.updateBodyPadding(editorDiv);
});
this.$editor.on("paste", function (e) {
e.preventDefault();
var content;
var charsRemaining = editorDiv.attr('maxlength') - (editorDiv.text().length + editorDiv.find('img').length);
if ((e.originalEvent || e).clipboardData) {
content = (e.originalEvent || e).clipboardData.getData('text/plain');
if (self.options.onPaste) {
content = self.options.onPaste(content);
}
if (charsRemaining < content.length) {
content = content.substring(0, charsRemaining);
}
document.execCommand('insertText', false, content);
}
else if (window.clipboardData) {
content = window.clipboardData.getData('Text');
if (self.options.onPaste) {
content = self.options.onPaste(content);
}
if (charsRemaining < content.length) {
content = content.substring(0, charsRemaining);
}
document.selection.createRange().pasteHTML(content);
}
editorDiv.scrollTop(editorDiv[0].scrollHeight);
});
$textarea.after("<i class='emoji-picker-icon emoji-picker " + this.options.popupButtonClasses + "' data-id='" + id + "' data-type='picker'></i>");
$textarea.hide().after(this.$editor);
this.setup();
/*
* MODIFICATION: Following line was modified by Igor Zhukov, in order to
* improve emoji insert behaviour
*/
$(document.body).on('mousedown', function() {
if (self.hasFocus) {
self.selection = util.saveSelection();
}
});
};
EmojiArea_WYSIWYG.prototype.updateBodyPadding = function(target) {
var emojiPicker = $('[data-id=' + this.id + '][data-type=picker]');
if ($(target).hasScrollbar()) {
if (!(emojiPicker.hasClass('parent-has-scroll')))
emojiPicker.addClass('parent-has-scroll');
if (!($(target).hasClass('parent-has-scroll')))
$(target).addClass('parent-has-scroll');
} else {
if ((emojiPicker.hasClass('parent-has-scroll')))
emojiPicker.removeClass('parent-has-scroll');
if (($(target).hasClass('parent-has-scroll')))
$(target).removeClass('parent-has-scroll');
}
};
EmojiArea_WYSIWYG.prototype.onChange = function(e) {
var event = new CustomEvent('input', { bubbles: true });
this.$textarea.val(this.val())[0].dispatchEvent(event);
};
EmojiArea_WYSIWYG.prototype.insert = function(emoji) {
var content;
/*
* MODIFICATION: Following line was modified by Andre Staltz, to use new
* implementation of createIcon function.
*/
var insertionContent = '';
if (this.options.inputMethod == 'unicode') {
insertionContent = this.emojiPopup.colonToUnicode(emoji);
} else {
var $img = $(EmojiArea.createIcon($.emojiarea.icons[emoji]));
if ($img[0].attachEvent) {
$img[0].attachEvent('onresizestart', function(e) {
e.returnValue = false;
}, false);
}
insertionContent = $img[0];
}
this.$editor.trigger('focus');
if (this.selection) {
util.restoreSelection(this.selection);
}
try {
util.replaceSelection(insertionContent);
} catch (e) {
}
/*
* MODIFICATION: Following line was added by Igor Zhukov, in order to
* save recent emojis
*/
util.emojiInserted(emoji, this.menu);
this.onChange();
};
EmojiArea_WYSIWYG.prototype.val = function() {
var lines = [];
var line = [];
var emojiPopup = this.emojiPopup;
var flush = function() {
lines.push(line.join(''));
line = [];
};
var sanitizeNode = function(node) {
if (node.nodeType === TEXT_NODE) {
line.push(node.nodeValue);
} else if (node.nodeType === ELEMENT_NODE) {
var tagName = node.tagName.toLowerCase();
var isBlock = TAGS_BLOCK.indexOf(tagName) !== -1;
if (isBlock && line.length)
flush();
if (tagName === 'img') {
var alt = node.getAttribute('alt') || '';
if (alt) {
line.push(alt);
}
return;
} else if (tagName === 'br') {
flush();
}
var children = node.childNodes;
for (var i = 0; i < children.length; i++) {
sanitizeNode(children[i]);
}
if (isBlock && line.length)
flush();
}
};
var children = this.$editor[0].childNodes;
for (var i = 0; i < children.length; i++) {
sanitizeNode(children[i]);
}
if (line.length)
flush();
var returnValue = lines.join('\n');
return emojiPopup.colonToUnicode(returnValue);
};
util.extend(EmojiArea_WYSIWYG.prototype, EmojiArea.prototype);
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
jQuery.fn.hasScrollbar = function() {
var scrollHeight = this.get(0).scrollHeight;
//safari's scrollHeight includes padding
//if ($.browser.safari)
// scrollHeight -= parseInt(this.css('padding-top')) + parseInt(this.css('padding-bottom'));
if (this.outerHeight() < scrollHeight)
return true;
else
return false;
}
/**
* Emoji Dropdown Menu
*
* @constructor
* @param {object}
* emojiarea
*/
var EmojiMenu = function(emojiarea) {
var self = this;
self.id = emojiarea.id;
var $body = $(document.body);
var $window = $(window);
this.visible = false;
this.emojiarea = emojiarea;
EmojiMenu.menuZIndex = 5000;
this.$menu = $('<div>');
this.$menu.addClass('emoji-menu');
this.$menu.attr('data-id', self.id);
this.$menu.attr('data-type', 'menu');
this.$menu.hide();
this.$itemsTailWrap = $('<div class="emoji-items-wrap1"></div>')
.appendTo(this.$menu);
this.$categoryTabs = $(
'<table class="emoji-menu-tabs"><tr>'
+ '<td><a class="emoji-menu-tab icon-recent" ></a></td>'
+ '<td><a class="emoji-menu-tab icon-smile" ></a></td>'
+ '<td><a class="emoji-menu-tab icon-flower"></a></td>'
+ '<td><a class="emoji-menu-tab icon-bell"></a></td>'
+ '<td><a class="emoji-menu-tab icon-car"></a></td>'
+ '<td><a class="emoji-menu-tab icon-grid"></a></td>'
+ '</tr></table>').appendTo(this.$itemsTailWrap);
this.$itemsWrap = $(
'<div class="emoji-items-wrap mobile_scrollable_wrap"></div>')
.appendTo(this.$itemsTailWrap);
this.$items = $('<div class="emoji-items">').appendTo(
this.$itemsWrap);
this.emojiarea.$editor.after(this.$menu)
$body.on('keydown', function(e) {
if (e.keyCode === KEY_ESC || e.keyCode === KEY_TAB) {
self.hide();
}
});
/*
* ! MODIFICATION: Following 3 lines were added by Igor Zhukov, in order
* to hide menu on message submit with keyboard
*/
$body.on('message_send', function(e) {
self.hide();
});
$body.on('mouseup', function(e) {
e = e.originalEvent || e;
var target = e.target || window;
if ($(target).hasClass(self.emojiarea.$dontHideOnClick)) {
return;
}
while (target && target != window) {
target = target.parentNode;
if (target == self.$menu[0] || self.emojiarea
&& target == self.emojiarea.$button[0]) {
return;
}
}
self.hide();
});
this.$menu.on('mouseup', 'a', function(e) {
e.stopPropagation();
return false;
});
this.$menu.on('click', 'a', function(e) {
self.emojiarea.updateBodyPadding(self.emojiarea.$editor);
if ($(this).hasClass('emoji-menu-tab')) {
if (self.getTabIndex(this) !== self.currentCategory) {
self.selectCategory(self.getTabIndex(this));
}
return false;
}
var emoji = $('.label', $(this)).text();
window.setTimeout(function() {
self.onItemSelected(emoji);
if (e.ctrlKey || e.metaKey) {
self.hide();
}
}, 0);
e.stopPropagation();
return false;
});
this.selectCategory(0);
};
/*
* ! MODIFICATION START Following code was added by Andre Staltz, to
* implement category selection.
*/
EmojiMenu.prototype.getTabIndex = function(tab) {
return this.$categoryTabs.find('.emoji-menu-tab').index(tab);
};
EmojiMenu.prototype.selectCategory = function(category) {
var self = this;
this.$categoryTabs.find('.emoji-menu-tab').each(function(index) {
if (index === category) {
this.className += '-selected';
} else {
this.className = this.className.replace('-selected', '');
}
});
this.currentCategory = category;
this.load(category);
};
/* ! MODIFICATION END */
EmojiMenu.prototype.onItemSelected = function(emoji) {
if(this.emojiarea.$editor.text().length + this.emojiarea.$editor.find('img').length >= this.emojiarea.$editor.attr('maxlength'))
{
return;
}
this.emojiarea.insert(emoji);
};
/*
* MODIFICATION: The following function argument was modified by Andre
* Staltz, in order to load only icons from a category. Also function was
* modified by Igor Zhukov in order to display recent emojis from
* localStorage
*/
EmojiMenu.prototype.load = function(category) {
var html = [];
var options = $.emojiarea.icons;
var path = $.emojiarea.assetsPath;
var self = this;
if (path.length && path.charAt(path.length - 1) !== '/') {
path += '/';
}
/*
* ! MODIFICATION: Following function was added by Igor Zhukov, in order
* to add scrollbars to EmojiMenu
*/
var updateItems = function() {
self.$items.html(html.join(''));
}
if (category > 0) {
for ( var key in options) {
/*
* MODIFICATION: The following 2 lines were modified by Andre
* Staltz, in order to load only icons from the specified
* category.
*/
if (options.hasOwnProperty(key)
&& options[key][0] === (category - 1)) {
html.push('<a href="javascript:void(0)" title="'
+ util.htmlEntities(key) + '">'
+ EmojiArea.createIcon(options[key], true)
+ '<span class="label">' + util.htmlEntities(key)
+ '</span></a>');
}
}
updateItems();
} else {
ConfigStorage.get('emojis_recent', function(curEmojis) {
curEmojis = curEmojis || defaultRecentEmojis || [];
var key, i;
for (i = 0; i < curEmojis.length; i++) {
key = curEmojis[i]
if (options[key]) {
html.push('<a href="javascript:void(0)" title="'
+ util.htmlEntities(key) + '">'
+ EmojiArea.createIcon(options[key], true)
+ '<span class="label">'
+ util.htmlEntities(key) + '</span></a>');
}
}
updateItems();
});
}
};
EmojiMenu.prototype.hide = function(callback) {
this.visible = false;
this.$menu.hide("fast");
};
EmojiMenu.prototype.show = function(emojiarea) {
/*
* MODIFICATION: Following line was modified by Igor Zhukov, in order to
* improve EmojiMenu behaviour
*/
if (this.visible)
return this.hide();
$(this.$menu).css('z-index', ++EmojiMenu.menuZIndex);
this.$menu.show("fast");
/*
* MODIFICATION: Following 3 lines were added by Igor Zhukov, in order
* to update EmojiMenu contents
*/
if (!this.currentCategory) {
this.load(0);
}
this.visible = true;
};
})(jQuery, window, document);

225
public/js/emoji-picker/util.js vendored Normal file
View File

@ -0,0 +1,225 @@
'use strict';
function cancelEvent (event) {
event = event || window.event;
if (event) {
event = event.originalEvent || event;
if (event.stopPropagation) event.stopPropagation();
if (event.preventDefault) event.preventDefault();
}
return false;
}
function getGuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
}
//ConfigStorage
(function(window)
{
var keyPrefix = '';
var noPrefix = false;
var cache = {};
var useCs = !!(window.chrome && chrome.storage && chrome.storage.local);
var useLs = !useCs && !!window.localStorage;
function storageSetPrefix(newPrefix)
{
keyPrefix = newPrefix;
}
function storageSetNoPrefix()
{
noPrefix = true;
}
function storageGetPrefix()
{
if (noPrefix)
{
noPrefix = false;
return '';
}
return keyPrefix;
}
function storageGetValue()
{
var keys = Array.prototype.slice.call(arguments),
callback = keys.pop(),
result = [],
single = keys.length == 1,
value,
allFound = true,
prefix = storageGetPrefix(),
i, key;
for (i = 0; i < keys.length; i++)
{
key = keys[i] = prefix + keys[i];
if (key.substr(0, 3) != 'xt_' && cache[key] !== undefined)
{
result.push(cache[key]);
}
else if (useLs)
{
try
{
value = localStorage.getItem(key);
}
catch (e)
{
useLs = false;
}
try
{
value = (value === undefined || value === null) ? false : JSON.parse(value);
}
catch (e)
{
value = false;
}
result.push(cache[key] = value);
}
else if (!useCs)
{
result.push(cache[key] = false);
}
else
{
allFound = false;
}
}
if (allFound)
{
return callback(single ? result[0] : result);
}
chrome.storage.local.get(keys, function(resultObj)
{
var value;
result = [];
for (i = 0; i < keys.length; i++)
{
key = keys[i];
value = resultObj[key];
value = value === undefined || value === null ? false : JSON.parse(value);
result.push(cache[key] = value);
}
callback(single ? result[0] : result);
});
};
function storageSetValue(obj, callback)
{
var keyValues = {},
prefix = storageGetPrefix(),
key, value;
for (key in obj)
{
if (obj.hasOwnProperty(key))
{
value = obj[key];
key = prefix + key;
cache[key] = value;
value = JSON.stringify(value);
if (useLs)
{
try
{
localStorage.setItem(key, value);
}
catch (e)
{
useLs = false;
}
}
else
{
keyValues[key] = value;
}
}
}
if (useLs || !useCs)
{
if (callback)
{
callback();
}
return;
}
chrome.storage.local.set(keyValues, callback);
};
function storageRemoveValue()
{
var keys = Array.prototype.slice.call(arguments),
prefix = storageGetPrefix(),
i, key, callback;
if (typeof keys[keys.length - 1] === 'function')
{
callback = keys.pop();
}
for (i = 0; i < keys.length; i++)
{
key = keys[i] = prefix + keys[i];
delete cache[key];
if (useLs)
{
try
{
localStorage.removeItem(key);
}
catch (e)
{
useLs = false;
}
}
}
if (useCs)
{
chrome.storage.local.remove(keys, callback);
}
else if (callback)
{
callback();
}
};
window.ConfigStorage = {
prefix: storageSetPrefix,
noPrefix: storageSetNoPrefix,
get: storageGetValue,
set: storageSetValue,
remove: storageRemoveValue
};
})(this);
// Pollyfill for IE 9 support of CustomEvent
(function () {
if ( typeof window.CustomEvent === "function" ) return false;
function CustomEvent ( event, params ) {
params = params || { bubbles: false, cancelable: false, detail: undefined };
var evt = document.createEvent( 'CustomEvent' );
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail );
return evt;
}
CustomEvent.prototype = window.Event.prototype;
window.CustomEvent = CustomEvent;
})();

1
public/js/timeline.js vendored Normal file
View File

@ -0,0 +1 @@
!function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=3)}({3:function(e,t,n){e.exports=n("KqaD")},KqaD:function(e,t){$(document).ready(function(){$(".pagination").hide(),$(".container.timeline-container").removeClass("d-none");var e=document.querySelector(".timeline-feed"),t=e.getAttribute("data-timeline");$('.timeline-sidenav .nav-link[data-type="'+t+'"]').addClass("active"),pixelfed.readmore(),pixelfed.fetchLikes(),$("video").on("play",function(){activated=this,$("video").each(function(){this!=activated&&this.pause()})}),new InfiniteScroll(e,{path:".pagination__next",append:".timeline-feed",status:".page-load-status",history:!1}).on("append",function(e,t,n){pixelfed.hydrateLikes(),$(".status-card > .card-footer").each(function(){var e=$(this);e.hasClass("d-none")||e.find('input[name="comment"]').val()||$(this).addClass("d-none")}),$("video").on("play",function(){activated=this,$("video").each(function(){this!=activated&&this.pause()})})})}),$(document).on("DOMContentLoaded",function(){var e=!1,t=function(){if(pixelfed.readmore(),!1===e){e=!0;var t=[].slice.call(document.querySelectorAll("img.lazy"));t.forEach(function(e){e.getBoundingClientRect().top<=window.innerHeight&&e.getBoundingClientRect().bottom>=0&&"none"!==getComputedStyle(e).display&&(e.src=e.dataset.src,e.srcset=e.dataset.srcset,e.classList.remove("lazy"),t=t.filter(function(t){return t!==e}))}),e=!1}};document.addEventListener("scroll",t),window.addEventListener("resize",t),window.addEventListener("orientationchange",t)})}});

View File

@ -1,7 +1,7 @@
{
"/js/components.js": "/js/components.js?id=e2f19ce19c3be557c4d8",
"/js/app.js": "/js/app.js?id=64e1dbb38f4fbf6202e4",
"/css/app.css": "/css/app.css?id=f222eb0627d08ba55261",
"/js/timeline.js": "/js/timeline.js?id=21dfbf9e0a261c9a77b7",
"/js/activity.js": "/js/activity.js?id=2b27ba75791b911c6691"
"/js/activity.js": "/js/activity.js?id=7915246c3bc2b7e9770e",
"/js/app.js": "/js/app.js?id=ea57709b5a7ef8657ff4",
"/css/app.css": "/css/app.css?id=e8047f495e5dfbca1445",
"/js/components.js": "/js/components.js?id=0968269f096caeb14dff",
"/js/timeline.js": "/js/timeline.js?id=83c85c7144756ee9a72e"
}