update JSDoc and re-published to https://privatebin.info/jsdoc/
This commit is contained in:
parent
ee43557a4f
commit
5bf25f227e
246
js/privatebin.js
246
js/privatebin.js
@ -36,6 +36,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* static Helper methods
|
* static Helper methods
|
||||||
*
|
*
|
||||||
|
* @name Helper
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
var Helper = (function () {
|
var Helper = (function () {
|
||||||
@ -45,6 +46,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* character to HTML entity lookup table
|
* character to HTML entity lookup table
|
||||||
*
|
*
|
||||||
* @see {@link https://github.com/janl/mustache.js/blob/master/mustache.js#L60}
|
* @see {@link https://github.com/janl/mustache.js/blob/master/mustache.js#L60}
|
||||||
|
* @name Helper.entityMap
|
||||||
* @private
|
* @private
|
||||||
* @enum {Object}
|
* @enum {Object}
|
||||||
* @readonly
|
* @readonly
|
||||||
@ -63,6 +65,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* cache for script location
|
* cache for script location
|
||||||
*
|
*
|
||||||
|
* @name Helper.baseUri
|
||||||
* @private
|
* @private
|
||||||
* @enum {string|null}
|
* @enum {string|null}
|
||||||
*/
|
*/
|
||||||
@ -299,7 +302,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* resets state, used for unit testing
|
* resets state, used for unit testing
|
||||||
*
|
*
|
||||||
* @name Model.reset
|
* @name Helper.reset
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
me.reset = function()
|
me.reset = function()
|
||||||
@ -313,6 +316,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* internationalization module
|
* internationalization module
|
||||||
*
|
*
|
||||||
|
* @name I18n
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -323,6 +327,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* const for string of loaded language
|
* const for string of loaded language
|
||||||
*
|
*
|
||||||
|
* @name I18n.languageLoadedEvent
|
||||||
* @private
|
* @private
|
||||||
* @prop {string}
|
* @prop {string}
|
||||||
* @readonly
|
* @readonly
|
||||||
@ -332,6 +337,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* supported languages, minus the built in 'en'
|
* supported languages, minus the built in 'en'
|
||||||
*
|
*
|
||||||
|
* @name I18n.supportedLanguages
|
||||||
* @private
|
* @private
|
||||||
* @prop {string[]}
|
* @prop {string[]}
|
||||||
* @readonly
|
* @readonly
|
||||||
@ -341,6 +347,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* built in language
|
* built in language
|
||||||
*
|
*
|
||||||
|
* @name I18n.language
|
||||||
* @private
|
* @private
|
||||||
* @prop {string|null}
|
* @prop {string|null}
|
||||||
*/
|
*/
|
||||||
@ -349,15 +356,14 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* translation cache
|
* translation cache
|
||||||
*
|
*
|
||||||
|
* @name I18n.translations
|
||||||
* @private
|
* @private
|
||||||
* @enum {Object}
|
* @enum {Object}
|
||||||
*/
|
*/
|
||||||
var translations = {};
|
var translations = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* translate a string, alias for I18n.translate()
|
* translate a string, alias for I18n.translate
|
||||||
*
|
|
||||||
* for a full description see me.translate
|
|
||||||
*
|
*
|
||||||
* @name I18n._
|
* @name I18n._
|
||||||
* @function
|
* @function
|
||||||
@ -553,6 +559,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* handles everything related to en/decryption
|
* handles everything related to en/decryption
|
||||||
*
|
*
|
||||||
|
* @name CryptTool
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
var CryptTool = (function () {
|
var CryptTool = (function () {
|
||||||
@ -561,7 +568,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* compress a message (deflate compression), returns base64 encoded data
|
* compress a message (deflate compression), returns base64 encoded data
|
||||||
*
|
*
|
||||||
* @name cryptToolcompress
|
* @name CryptTool.compress
|
||||||
* @function
|
* @function
|
||||||
* @private
|
* @private
|
||||||
* @param {string} message
|
* @param {string} message
|
||||||
@ -575,7 +582,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* decompress a message compressed with cryptToolcompress()
|
* decompress a message compressed with cryptToolcompress()
|
||||||
*
|
*
|
||||||
* @name cryptTooldecompress
|
* @name CryptTool.decompress
|
||||||
* @function
|
* @function
|
||||||
* @private
|
* @private
|
||||||
* @param {string} data - base64 data
|
* @param {string} data - base64 data
|
||||||
@ -638,9 +645,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* checks whether the crypt tool is ready.
|
* checks whether the crypt tool has collected enough entropy
|
||||||
*
|
*
|
||||||
* @name CryptTool.isReady
|
* @name CryptTool.isEntropyReady
|
||||||
* @function
|
* @function
|
||||||
* @return {bool}
|
* @return {bool}
|
||||||
*/
|
*/
|
||||||
@ -650,9 +657,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* checks whether the crypt tool is ready.
|
* add a listener function, triggered when enough entropy is available
|
||||||
*
|
*
|
||||||
* @name CryptTool.isReady
|
* @name CryptTool.addEntropySeedListener
|
||||||
* @function
|
* @function
|
||||||
* @param {function} func
|
* @param {function} func
|
||||||
*/
|
*/
|
||||||
@ -673,29 +680,13 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
return sjcl.codec.base64.fromBits(sjcl.random.randomWords(8, 0), 0);
|
return sjcl.codec.base64.fromBits(sjcl.random.randomWords(8, 0), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* initialize crypt tool
|
|
||||||
*
|
|
||||||
* @name CryptTool.init
|
|
||||||
* @function
|
|
||||||
*/
|
|
||||||
me.init = function()
|
|
||||||
{
|
|
||||||
// will fail earlier as sjcl is already passed as a parameter
|
|
||||||
// if (typeof sjcl !== 'object') {
|
|
||||||
// Alert.showError(
|
|
||||||
// I18n._('The library %s is not available.', 'sjcl') +
|
|
||||||
// I18n._('Messages cannot be decrypted or encrypted.')
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
return me;
|
return me;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* (Model) Data source (aka MVC)
|
* (Model) Data source (aka MVC)
|
||||||
*
|
*
|
||||||
|
* @name Model
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
var Model = (function () {
|
var Model = (function () {
|
||||||
@ -857,6 +848,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
*
|
*
|
||||||
* everything directly UI-related, which fits nowhere else
|
* everything directly UI-related, which fits nowhere else
|
||||||
*
|
*
|
||||||
|
* @name UiHelper
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -869,6 +861,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
*
|
*
|
||||||
* currently this does only handle redirects to the home page.
|
* currently this does only handle redirects to the home page.
|
||||||
*
|
*
|
||||||
|
* @name UiHelper.historyChange
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
@ -902,8 +895,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* checks whether the element is currently visible in the viewport (so
|
* checks whether the element is currently visible in the viewport (so
|
||||||
* the user can actually see it)
|
* the user can actually see it)
|
||||||
*
|
*
|
||||||
* THanks to https://stackoverflow.com/a/40658647
|
* @see {@link https://stackoverflow.com/a/40658647}
|
||||||
*
|
|
||||||
* @name UiHelper.isVisible
|
* @name UiHelper.isVisible
|
||||||
* @function
|
* @function
|
||||||
* @param {jQuery} $element The link hash to move to.
|
* @param {jQuery} $element The link hash to move to.
|
||||||
@ -922,9 +914,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* scrolls to a specific element
|
* scrolls to a specific element
|
||||||
*
|
*
|
||||||
* Based on code by @hanoo: https://stackoverflow.com/questions/4198041/jquery-smooth-scroll-to-an-anchor#answer-12714767
|
* @see {@link https://stackoverflow.com/questions/4198041/jquery-smooth-scroll-to-an-anchor#answer-12714767}
|
||||||
*
|
|
||||||
* @name UiHelper.scrollTo
|
* @name UiHelper.scrollTo
|
||||||
|
* @function
|
||||||
* @param {jQuery} $element The link hash to move to.
|
* @param {jQuery} $element The link hash to move to.
|
||||||
* @param {(number|string)} animationDuration passed to jQuery .animate, when set to 0 the animation is skipped
|
* @param {(number|string)} animationDuration passed to jQuery .animate, when set to 0 the animation is skipped
|
||||||
* @param {string} animationEffect passed to jQuery .animate
|
* @param {string} animationEffect passed to jQuery .animate
|
||||||
@ -992,6 +984,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* Alert/error manager
|
* Alert/error manager
|
||||||
*
|
*
|
||||||
|
* @name Alert
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -1023,6 +1016,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* forwards a request to the i18n module and shows the element
|
* forwards a request to the i18n module and shows the element
|
||||||
*
|
*
|
||||||
|
* @name Alert.handleNotification
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {int} id - id of notification
|
* @param {int} id - id of notification
|
||||||
@ -1260,6 +1254,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* handles paste status/result
|
* handles paste status/result
|
||||||
*
|
*
|
||||||
|
* @name PasteStatus
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -1275,6 +1270,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* forward to URL shortener
|
* forward to URL shortener
|
||||||
*
|
*
|
||||||
|
* @name PasteStatus.sendToShortener
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
@ -1291,7 +1287,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* This is necessary as browsers will not reload the page when it is
|
* This is necessary as browsers will not reload the page when it is
|
||||||
* already loaded (which is fake as it is set via history.pushState()).
|
* already loaded (which is fake as it is set via history.pushState()).
|
||||||
*
|
*
|
||||||
* @name Controller.pasteLinkClick
|
* @name PasteStatus.pasteLinkClick
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
*/
|
*/
|
||||||
@ -1391,7 +1387,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
*
|
*
|
||||||
* preloads jQuery elements
|
* preloads jQuery elements
|
||||||
*
|
*
|
||||||
* @name Alert.init
|
* @name PasteStatus.init
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
me.init = function()
|
me.init = function()
|
||||||
@ -1411,6 +1407,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* password prompt
|
* password prompt
|
||||||
*
|
*
|
||||||
|
* @name Prompt
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -1424,10 +1421,31 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
|
|
||||||
var password = '';
|
var password = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* submit a password in the modal dialog
|
||||||
|
*
|
||||||
|
* @name Prompt.submitPasswordModal
|
||||||
|
* @private
|
||||||
|
* @function
|
||||||
|
* @param {Event} event
|
||||||
|
*/
|
||||||
|
function submitPasswordModal(event)
|
||||||
|
{
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
// get input
|
||||||
|
password = $passwordDecrypt.val();
|
||||||
|
|
||||||
|
// hide modal
|
||||||
|
$passwordModal.modal('hide');
|
||||||
|
|
||||||
|
PasteDecrypter.run();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ask the user for the password and set it
|
* ask the user for the password and set it
|
||||||
*
|
*
|
||||||
* @name Prompt.requestPassword()
|
* @name Prompt.requestPassword
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
me.requestPassword = function()
|
me.requestPassword = function()
|
||||||
@ -1469,33 +1487,12 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
return password;
|
return password;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* submit a password in the modal dialog
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @function
|
|
||||||
* @param {Event} event
|
|
||||||
*/
|
|
||||||
function submitPasswordModal(event)
|
|
||||||
{
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
// get input
|
|
||||||
password = $passwordDecrypt.val();
|
|
||||||
|
|
||||||
// hide modal
|
|
||||||
$passwordModal.modal('hide');
|
|
||||||
|
|
||||||
PasteDecrypter.run();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init status manager
|
* init status manager
|
||||||
*
|
*
|
||||||
* preloads jQuery elements
|
* preloads jQuery elements
|
||||||
*
|
*
|
||||||
* @name Controller.init
|
* @name Prompt.init
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
me.init = function()
|
me.init = function()
|
||||||
@ -1522,6 +1519,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
*
|
*
|
||||||
* Note that the actual preview is handled by PasteViewer.
|
* Note that the actual preview is handled by PasteViewer.
|
||||||
*
|
*
|
||||||
|
* @name Editor
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -1735,6 +1733,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* (view) Parse and show paste.
|
* (view) Parse and show paste.
|
||||||
*
|
*
|
||||||
|
* @name PasteViewer
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -1755,6 +1754,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* apply the set format on paste and displays it
|
* apply the set format on paste and displays it
|
||||||
*
|
*
|
||||||
|
* @name PasteViewer.parsePaste
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
@ -1809,6 +1809,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* displays the paste
|
* displays the paste
|
||||||
*
|
*
|
||||||
|
* @name PasteViewer.showPaste
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
@ -1860,7 +1861,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* returns the current format
|
* returns the current format
|
||||||
*
|
*
|
||||||
* @name PasteViewer.setFormat
|
* @name PasteViewer.getFormat
|
||||||
* @function
|
* @function
|
||||||
* @return {string}
|
* @return {string}
|
||||||
*/
|
*/
|
||||||
@ -1951,7 +1952,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
*
|
*
|
||||||
* preloads jQuery elements
|
* preloads jQuery elements
|
||||||
*
|
*
|
||||||
* @name Editor.init
|
* @name PasteViewer.init
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
me.init = function()
|
me.init = function()
|
||||||
@ -1985,6 +1986,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* (view) Show attachment and preview if possible
|
* (view) Show attachment and preview if possible
|
||||||
*
|
*
|
||||||
|
* @name AttachmentViewer
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -2065,9 +2067,9 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* hides the attachment
|
* hides the attachment
|
||||||
*
|
*
|
||||||
* This will not hide the preview {@see me.hideAttachmentPreview}
|
* This will not hide the preview (see AttachmentViewer.hideAttachmentPreview
|
||||||
* nor will it hide the attachment link if it was moved somewhere
|
* for that) nor will it hide the attachment link if it was moved somewhere
|
||||||
* else {@see moveAttachmentTo}.
|
* else (see AttachmentViewer.moveAttachmentTo).
|
||||||
*
|
*
|
||||||
* @name AttachmentViewer.hideAttachment
|
* @name AttachmentViewer.hideAttachment
|
||||||
* @function
|
* @function
|
||||||
@ -2119,7 +2121,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
*
|
*
|
||||||
* It is advisable to hide the attachment afterwards (AttachmentViewer.hideAttachment)
|
* It is advisable to hide the attachment afterwards (AttachmentViewer.hideAttachment)
|
||||||
*
|
*
|
||||||
* @name AttachmentViewer.setClonedAttachment
|
* @name AttachmentViewer.moveAttachmentTo
|
||||||
* @function
|
* @function
|
||||||
* @param {jQuery} $element - the wrapper/container element where this should be moved to
|
* @param {jQuery} $element - the wrapper/container element where this should be moved to
|
||||||
* @param {string} label - the text to show (%s will be replaced with the file name), will automatically be translated
|
* @param {string} label - the text to show (%s will be replaced with the file name), will automatically be translated
|
||||||
@ -2154,6 +2156,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* (view) Shows discussion thread and handles replies
|
* (view) Shows discussion thread and handles replies
|
||||||
*
|
*
|
||||||
|
* @name DiscussionViewer
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -2174,6 +2177,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* initializes the templates
|
* initializes the templates
|
||||||
*
|
*
|
||||||
|
* @name DiscussionViewer.initTemplates
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
@ -2188,6 +2192,35 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
$commentTail = Model.getTemplate('commenttail');
|
$commentTail = Model.getTemplate('commenttail');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* open the comment entry when clicking the "Reply" button of a comment
|
||||||
|
*
|
||||||
|
* @name DiscussionViewer.openReply
|
||||||
|
* @private
|
||||||
|
* @function
|
||||||
|
* @param {Event} event
|
||||||
|
*/
|
||||||
|
function openReply(event)
|
||||||
|
{
|
||||||
|
var $source = $(event.target);
|
||||||
|
|
||||||
|
// clear input
|
||||||
|
$replyMessage.val('');
|
||||||
|
$replyNickname.val('');
|
||||||
|
|
||||||
|
// get comment id from source element
|
||||||
|
replyCommentId = $source.parent().prop('id').split('_')[1];
|
||||||
|
|
||||||
|
// move to correct position
|
||||||
|
$source.after($reply);
|
||||||
|
|
||||||
|
// show
|
||||||
|
$reply.removeClass('hidden');
|
||||||
|
$replyMessage.focus();
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* custom handler for displaying notifications in own status message area
|
* custom handler for displaying notifications in own status message area
|
||||||
*
|
*
|
||||||
@ -2221,34 +2254,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
return $replyStatus;
|
return $replyStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* open the comment entry when clicking the "Reply" button of a comment
|
|
||||||
*
|
|
||||||
* @private
|
|
||||||
* @function
|
|
||||||
* @param {Event} event
|
|
||||||
*/
|
|
||||||
function openReply(event)
|
|
||||||
{
|
|
||||||
var $source = $(event.target);
|
|
||||||
|
|
||||||
// clear input
|
|
||||||
$replyMessage.val('');
|
|
||||||
$replyNickname.val('');
|
|
||||||
|
|
||||||
// get comment id from source element
|
|
||||||
replyCommentId = $source.parent().prop('id').split('_')[1];
|
|
||||||
|
|
||||||
// move to correct position
|
|
||||||
$source.after($reply);
|
|
||||||
|
|
||||||
// show
|
|
||||||
$reply.removeClass('hidden');
|
|
||||||
$replyMessage.focus();
|
|
||||||
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* adds another comment
|
* adds another comment
|
||||||
*
|
*
|
||||||
@ -2439,6 +2444,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* Manage top (navigation) bar
|
* Manage top (navigation) bar
|
||||||
*
|
*
|
||||||
|
* @name TopNav
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -2472,6 +2478,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* set the expiration on bootstrap templates in dropdown
|
* set the expiration on bootstrap templates in dropdown
|
||||||
*
|
*
|
||||||
* @name TopNav.updateExpiration
|
* @name TopNav.updateExpiration
|
||||||
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
*/
|
*/
|
||||||
@ -2491,6 +2498,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* set the format on bootstrap templates in dropdown
|
* set the format on bootstrap templates in dropdown
|
||||||
*
|
*
|
||||||
* @name TopNav.updateFormat
|
* @name TopNav.updateFormat
|
||||||
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
*/
|
*/
|
||||||
@ -2516,6 +2524,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* when "burn after reading" is checked, disable discussion
|
* when "burn after reading" is checked, disable discussion
|
||||||
*
|
*
|
||||||
* @name TopNav.changeBurnAfterReading
|
* @name TopNav.changeBurnAfterReading
|
||||||
|
* @private
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
function changeBurnAfterReading()
|
function changeBurnAfterReading()
|
||||||
@ -2535,6 +2544,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* when discussion is checked, disable "burn after reading"
|
* when discussion is checked, disable "burn after reading"
|
||||||
*
|
*
|
||||||
* @name TopNav.changeOpenDiscussion
|
* @name TopNav.changeOpenDiscussion
|
||||||
|
* @private
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
function changeOpenDiscussion()
|
function changeOpenDiscussion()
|
||||||
@ -2554,6 +2564,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* return raw text
|
* return raw text
|
||||||
*
|
*
|
||||||
* @name TopNav.rawText
|
* @name TopNav.rawText
|
||||||
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
*/
|
*/
|
||||||
@ -2588,6 +2599,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
* saves the language in a cookie and reloads the page
|
* saves the language in a cookie and reloads the page
|
||||||
*
|
*
|
||||||
* @name TopNav.setLanguage
|
* @name TopNav.setLanguage
|
||||||
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
*/
|
*/
|
||||||
@ -2600,6 +2612,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* hides all messages and creates a new paste
|
* hides all messages and creates a new paste
|
||||||
*
|
*
|
||||||
|
* @name TopNav.clickNewPaste
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
@ -2613,6 +2626,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* removes the existing attachment
|
* removes the existing attachment
|
||||||
*
|
*
|
||||||
|
* @name TopNav.removeAttachment
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
@ -2633,17 +2647,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Loads the default options for creating a paste.
|
|
||||||
*
|
|
||||||
* @name TopNav.loadDefaults
|
|
||||||
* @function
|
|
||||||
*/
|
|
||||||
me.loadDefaults = function()
|
|
||||||
{
|
|
||||||
// @TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows all elements belonging to viwing an existing pastes
|
* Shows all elements belonging to viwing an existing pastes
|
||||||
*
|
*
|
||||||
@ -2940,7 +2943,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
$burnAfterReading.change(changeBurnAfterReading);
|
$burnAfterReading.change(changeBurnAfterReading);
|
||||||
$openDiscussionOption.change(changeOpenDiscussion);
|
$openDiscussionOption.change(changeOpenDiscussion);
|
||||||
$newButton.click(clickNewPaste);
|
$newButton.click(clickNewPaste);
|
||||||
$sendButton.click(PasteEncrypter.submitPaste);
|
$sendButton.click(PasteEncrypter.sendPaste);
|
||||||
$cloneButton.click(Controller.clonePaste);
|
$cloneButton.click(Controller.clonePaste);
|
||||||
$rawTextButton.click(rawText);
|
$rawTextButton.click(rawText);
|
||||||
$fileRemoveButton.click(removeAttachment);
|
$fileRemoveButton.click(removeAttachment);
|
||||||
@ -2955,8 +2958,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
|
|
||||||
// get default value from template or fall back to set value
|
// get default value from template or fall back to set value
|
||||||
pasteExpiration = Model.getExpirationDefault() || pasteExpiration;
|
pasteExpiration = Model.getExpirationDefault() || pasteExpiration;
|
||||||
|
|
||||||
me.loadDefaults();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return me;
|
return me;
|
||||||
@ -2965,6 +2966,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* Responsible for AJAX requests, transparently handles encryption…
|
* Responsible for AJAX requests, transparently handles encryption…
|
||||||
*
|
*
|
||||||
|
* @name Uploader
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
var Uploader = (function () {
|
var Uploader = (function () {
|
||||||
@ -2980,6 +2982,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* public variable ('constant') for errors to prevent magic numbers
|
* public variable ('constant') for errors to prevent magic numbers
|
||||||
*
|
*
|
||||||
|
* @name Uploader.error
|
||||||
* @readonly
|
* @readonly
|
||||||
* @enum {Object}
|
* @enum {Object}
|
||||||
*/
|
*/
|
||||||
@ -2993,6 +2996,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* ajaxHeaders to send in AJAX requests
|
* ajaxHeaders to send in AJAX requests
|
||||||
*
|
*
|
||||||
|
* @name Uploader.ajaxHeaders
|
||||||
* @private
|
* @private
|
||||||
* @readonly
|
* @readonly
|
||||||
* @enum {Object}
|
* @enum {Object}
|
||||||
@ -3002,6 +3006,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* called after successful upload
|
* called after successful upload
|
||||||
*
|
*
|
||||||
|
* @name Uploader.checkCryptParameters
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @throws {string}
|
* @throws {string}
|
||||||
@ -3034,6 +3039,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* called after successful upload
|
* called after successful upload
|
||||||
*
|
*
|
||||||
|
* @name Uploader.success
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {int} status
|
* @param {int} status
|
||||||
@ -3053,6 +3059,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* called after a upload failure
|
* called after a upload failure
|
||||||
*
|
*
|
||||||
|
* @name Uploader.fail
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {int} status - internal code
|
* @param {int} status - internal code
|
||||||
@ -3267,7 +3274,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
*
|
*
|
||||||
* Does upload, encryption is done transparently by Uploader.
|
* Does upload, encryption is done transparently by Uploader.
|
||||||
*
|
*
|
||||||
* @name state
|
* @name PasteEncrypter
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
var PasteEncrypter = (function () {
|
var PasteEncrypter = (function () {
|
||||||
@ -3278,6 +3285,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* checks whether there is a suitable amount of entrophy
|
* checks whether there is a suitable amount of entrophy
|
||||||
*
|
*
|
||||||
|
* @name PasteEncrypter.checkRequirements
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {function} retryCallback - the callback to execute to retry the upload
|
* @param {function} retryCallback - the callback to execute to retry the upload
|
||||||
@ -3305,6 +3313,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* called after successful paste upload
|
* called after successful paste upload
|
||||||
*
|
*
|
||||||
|
* @name PasteEncrypter.showCreatedPaste
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {int} status
|
* @param {int} status
|
||||||
@ -3329,13 +3338,14 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
Editor.hide();
|
Editor.hide();
|
||||||
|
|
||||||
// parse and show text
|
// parse and show text
|
||||||
// (preparation already done in me.submitPaste())
|
// (preparation already done in me.sendPaste())
|
||||||
PasteViewer.run();
|
PasteViewer.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* called after successful comment upload
|
* called after successful comment upload
|
||||||
*
|
*
|
||||||
|
* @name PasteEncrypter.showUploadedComment
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {int} status
|
* @param {int} status
|
||||||
@ -3357,6 +3367,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* adds attachments to the Uploader
|
* adds attachments to the Uploader
|
||||||
*
|
*
|
||||||
|
* @name PasteEncrypter.encryptAttachments
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {File|null|undefined} file - optional, falls back to cloned attachment
|
* @param {File|null|undefined} file - optional, falls back to cloned attachment
|
||||||
@ -3476,10 +3487,10 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* sends a new paste to server
|
* sends a new paste to server
|
||||||
*
|
*
|
||||||
* @name PasteEncrypter.submitPaste
|
* @name PasteEncrypter.sendPaste
|
||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
me.submitPaste = function()
|
me.sendPaste = function()
|
||||||
{
|
{
|
||||||
// hide previous (error) messages
|
// hide previous (error) messages
|
||||||
Controller.hideStatusMessages();
|
Controller.hideStatusMessages();
|
||||||
@ -3506,7 +3517,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
|
|
||||||
// check entropy
|
// check entropy
|
||||||
if (!checkRequirements(function () {
|
if (!checkRequirements(function () {
|
||||||
me.submitPaste();
|
me.sendPaste();
|
||||||
})) {
|
})) {
|
||||||
return; // to prevent multiple executions
|
return; // to prevent multiple executions
|
||||||
}
|
}
|
||||||
@ -3570,7 +3581,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
*
|
*
|
||||||
* Only decryption, no download.
|
* Only decryption, no download.
|
||||||
*
|
*
|
||||||
* @name state
|
* @name PasteDecrypter
|
||||||
* @class
|
* @class
|
||||||
*/
|
*/
|
||||||
var PasteDecrypter = (function () {
|
var PasteDecrypter = (function () {
|
||||||
@ -3579,13 +3590,14 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* decrypt data or prompts for password in cvase of failure
|
* decrypt data or prompts for password in cvase of failure
|
||||||
*
|
*
|
||||||
|
* @name PasteDecrypter.decryptOrPromptPassword
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {string} key
|
* @param {string} key
|
||||||
* @param {string} password - optional, may be an empty string
|
* @param {string} password - optional, may be an empty string
|
||||||
* @param {string} cipherdata
|
* @param {string} cipherdata
|
||||||
* @throws {string}
|
* @throws {string}
|
||||||
* @return {false|string} - false, when unsuccessful or string (decrypted data)
|
* @return {false|string} false, when unsuccessful or string (decrypted data)
|
||||||
*/
|
*/
|
||||||
function decryptOrPromptPassword(key, password, cipherdata)
|
function decryptOrPromptPassword(key, password, cipherdata)
|
||||||
{
|
{
|
||||||
@ -3619,13 +3631,14 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* decrypt the actual paste text
|
* decrypt the actual paste text
|
||||||
*
|
*
|
||||||
|
* @name PasteDecrypter.decryptOrPromptPassword
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {object} paste - paste data in object form
|
* @param {object} paste - paste data in object form
|
||||||
* @param {string} key
|
* @param {string} key
|
||||||
* @param {string} password
|
* @param {string} password
|
||||||
* @param {bool} ignoreError - ignore decryption errors iof set to true
|
* @param {bool} ignoreError - ignore decryption errors iof set to true
|
||||||
* @return {bool} - whether action was successful
|
* @return {bool} whether action was successful
|
||||||
* @throws {string}
|
* @throws {string}
|
||||||
*/
|
*/
|
||||||
function decryptPaste(paste, key, password, ignoreError)
|
function decryptPaste(paste, key, password, ignoreError)
|
||||||
@ -3656,12 +3669,13 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* decrypts any attachment
|
* decrypts any attachment
|
||||||
*
|
*
|
||||||
|
* @name PasteDecrypter.decryptAttachment
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {object} paste - paste data in object form
|
* @param {object} paste - paste data in object form
|
||||||
* @param {string} key
|
* @param {string} key
|
||||||
* @param {string} password
|
* @param {string} password
|
||||||
* @return {bool} - whether action was successful
|
* @return {bool} whether action was successful
|
||||||
* @throws {string}
|
* @throws {string}
|
||||||
*/
|
*/
|
||||||
function decryptAttachment(paste, key, password)
|
function decryptAttachment(paste, key, password)
|
||||||
@ -3698,12 +3712,13 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* decrypts all comments and shows them
|
* decrypts all comments and shows them
|
||||||
*
|
*
|
||||||
|
* @name PasteDecrypter.decryptComments
|
||||||
* @private
|
* @private
|
||||||
* @function
|
* @function
|
||||||
* @param {object} paste - paste data in object form
|
* @param {object} paste - paste data in object form
|
||||||
* @param {string} key
|
* @param {string} key
|
||||||
* @param {string} password
|
* @param {string} password
|
||||||
* @return {bool} - whether action was successful
|
* @return {bool} whether action was successful
|
||||||
*/
|
*/
|
||||||
function decryptComments(paste, key, password)
|
function decryptComments(paste, key, password)
|
||||||
{
|
{
|
||||||
@ -3802,6 +3817,7 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
/**
|
/**
|
||||||
* (controller) main PrivateBin logic
|
* (controller) main PrivateBin logic
|
||||||
*
|
*
|
||||||
|
* @name Controller
|
||||||
* @param {object} window
|
* @param {object} window
|
||||||
* @param {object} document
|
* @param {object} document
|
||||||
* @class
|
* @class
|
||||||
@ -3840,7 +3856,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
Editor.show();
|
Editor.show();
|
||||||
Editor.focusInput();
|
Editor.focusInput();
|
||||||
|
|
||||||
TopNav.loadDefaults();
|
|
||||||
TopNav.showCreateButtons();
|
TopNav.showCreateButtons();
|
||||||
Alert.hideLoading();
|
Alert.hideLoading();
|
||||||
}
|
}
|
||||||
@ -3991,7 +4006,6 @@ jQuery.PrivateBin = function($, sjcl, Base64, RawDeflate) {
|
|||||||
Model.init();
|
Model.init();
|
||||||
|
|
||||||
AttachmentViewer.init();
|
AttachmentViewer.init();
|
||||||
CryptTool.init();
|
|
||||||
DiscussionViewer.init();
|
DiscussionViewer.init();
|
||||||
Editor.init();
|
Editor.init();
|
||||||
PasteDecrypter.init();
|
PasteDecrypter.init();
|
||||||
|
@ -69,7 +69,7 @@ if ($MARKDOWN):
|
|||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-hGJxoiUhU8ByJ5Q8QsnfUzrb202C8og2STIg8P/y+ZgEo7zUOZSSRvH9JT6p9TnEmgulqaLOZ16sQBBpLaTdpQ==" crossorigin="anonymous"></script>
|
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-GOaX9dYEiAHPJo3ce3YLGURq41BlQGBEeCVbeZ6EpDqKDaJDdPgNf5eYrRSAmEF+ZgkVbv3j5H6gbY5kDDSlcQ==" crossorigin="anonymous"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
@ -47,7 +47,7 @@ if ($MARKDOWN):
|
|||||||
<?php
|
<?php
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-hGJxoiUhU8ByJ5Q8QsnfUzrb202C8og2STIg8P/y+ZgEo7zUOZSSRvH9JT6p9TnEmgulqaLOZ16sQBBpLaTdpQ==" crossorigin="anonymous"></script>
|
<script type="text/javascript" src="js/privatebin.js?<?php echo rawurlencode($VERSION); ?>" integrity="sha512-GOaX9dYEiAHPJo3ce3YLGURq41BlQGBEeCVbeZ6EpDqKDaJDdPgNf5eYrRSAmEF+ZgkVbv3j5H6gbY5kDDSlcQ==" crossorigin="anonymous"></script>
|
||||||
<!--[if lt IE 10]>
|
<!--[if lt IE 10]>
|
||||||
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
<style type="text/css">body {padding-left:60px;padding-right:60px;} #ienotice {display:block;} #oldienotice {display:block;}</style>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
Loading…
Reference in New Issue
Block a user