]> git.mxchange.org Git - friendica.git/commitdiff
move some js to have more structure
authorrabuzarus <>
Fri, 6 May 2016 14:48:06 +0000 (16:48 +0200)
committerrabuzarus <>
Fri, 6 May 2016 14:48:06 +0000 (16:48 +0200)
js/hovercard.js
js/modal.js [new file with mode: 0644]
js/theme.js
php/modes/default.php

index 72273ba19bbc71025a5a7f8794cac78ef7bc7605..9b326dcd3e0775ac312e187bcce50a2a1c1e72dc 100644 (file)
@@ -163,148 +163,6 @@ function getContactData(purl, url, actionOnSuccess) {
 }
 getContactData.cache = {};
 
-// current time in milliseconds, to send each request to make sure
-// we 're not getting 304 response
-function timeNow() {
-       return new Date().getTime();
-}
-
-String.prototype.normalizeLink = function () {
-       var ret = this.replace('https:', 'http:');
-       var ret = ret.replace('//www', '//');
-       return ret.rtrim();
-};
-
-
-
-function cleanContactUrl(url) {
-       var parts = parseUrl(url);
-
-       if(! ("scheme" in parts) || ! ("host" in parts)) {
-               return url;
-       }
-
-       var newUrl =parts["scheme"] + "://" + parts["host"];
-
-       if("port" in parts) {
-               newUrl += ":" + parts["port"];
-       }
-
-       if("path" in parts) {
-               newUrl += parts["path"];
-       }
-
-//     if(url != newUrl) {
-//             console.log("Cleaned contact url " + url + " to " + newUrl);
-//     }
-
-       return newUrl;
-}
-
-function parseUrl (str, component) { // eslint-disable-line camelcase
-       //       discuss at: http://locutusjs.io/php/parse_url/
-       //      original by: Steven Levithan (http://blog.stevenlevithan.com)
-       // reimplemented by: Brett Zamir (http://brett-zamir.me)
-       //         input by: Lorenzo Pisani
-       //         input by: Tony
-       //      improved by: Brett Zamir (http://brett-zamir.me)
-       //           note 1: original by http://stevenlevithan.com/demo/parseuri/js/assets/parseuri.js
-       //           note 1: blog post at http://blog.stevenlevithan.com/archives/parseuri
-       //           note 1: demo at http://stevenlevithan.com/demo/parseuri/js/assets/parseuri.js
-       //           note 1: Does not replace invalid characters with '_' as in PHP,
-       //           note 1: nor does it return false with
-       //           note 1: a seriously malformed URL.
-       //           note 1: Besides function name, is essentially the same as parseUri as
-       //           note 1: well as our allowing
-       //           note 1: an extra slash after the scheme/protocol (to allow file:/// as in PHP)
-       //        example 1: parse_url('http://user:pass@host/path?a=v#a')
-       //        returns 1: {scheme: 'http', host: 'host', user: 'user', pass: 'pass', path: '/path', query: 'a=v', fragment: 'a'}
-       //        example 2: parse_url('http://en.wikipedia.org/wiki/%22@%22_%28album%29')
-       //        returns 2: {scheme: 'http', host: 'en.wikipedia.org', path: '/wiki/%22@%22_%28album%29'}
-       //        example 3: parse_url('https://host.domain.tld/a@b.c/folder')
-       //        returns 3: {scheme: 'https', host: 'host.domain.tld', path: '/a@b.c/folder'}
-       //        example 4: parse_url('https://gooduser:secretpassword@www.example.com/a@b.c/folder?foo=bar')
-       //        returns 4: { scheme: 'https', host: 'www.example.com', path: '/a@b.c/folder', query: 'foo=bar', user: 'gooduser', pass: 'secretpassword' }
-
-       var query
-
-       var mode = (typeof require !== 'undefined' ? require('../info/ini_get')('locutus.parse_url.mode') : undefined) || 'php'
-
-       var key = [
-               'source',
-               'scheme',
-               'authority',
-               'userInfo',
-               'user',
-               'pass',
-               'host',
-               'port',
-               'relative',
-               'path',
-               'directory',
-               'file',
-               'query',
-               'fragment'
-       ]
-
-       // For loose we added one optional slash to post-scheme to catch file:/// (should restrict this)
-       var parser = {
-               php: new RegExp([
-                       '(?:([^:\\/?#]+):)?',
-                       '(?:\\/\\/()(?:(?:()(?:([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?))?',
-                       '()',
-                       '(?:(()(?:(?:[^?#\\/]*\\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)'
-               ].join('')),
-               strict: new RegExp([
-                       '(?:([^:\\/?#]+):)?',
-                       '(?:\\/\\/((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?))?',
-                       '((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)'
-               ].join('')),
-               loose: new RegExp([
-                       '(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?',
-                       '(?:\\/\\/\\/?)?',
-                       '((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?)',
-                       '(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))',
-                       '(?:\\?([^#]*))?(?:#(.*))?)'
-               ].join(''))
-       }
-
-       var m = parser[mode].exec(str)
-       var uri = {}
-       var i = 14
-
-       while (i--) {
-               if (m[i]) {
-                       uri[key[i]] = m[i]
-               }
-       }
-
-       if (component) {
-               return uri[component.replace('PHP_URL_', '').toLowerCase()]
-       }
-
-       if (mode !== 'php') {
-               var name = (typeof require !== 'undefined' ? require('../info/ini_get')('locutus.parse_url.queryKey') : undefined) || 'queryKey'
-               parser = /(?:^|&)([^&=]*)=?([^&]*)/g
-               uri[name] = {}
-               query = uri[key[12]] || ''
-               query.replace(parser, function ($0, $1, $2) {
-                       if ($1) {
-                               uri[name][$1] = $2
-                       }
-               })
-       }
-
-       delete uri.source
-       return uri
-}
-
-// trim function to replace whithespace after the string
-String.prototype.rtrim = function() {
-       var trimmed = this.replace(/\s+$/g, '');
-       return trimmed;
-};
-
 // Get hover-card template data and the contact-data and transform it with
 // the help of jSmart. At the end we have full html content of the hovercard
 function getHoverCardContent(purl, url, callback) {
diff --git a/js/modal.js b/js/modal.js
new file mode 100644 (file)
index 0000000..a27b3d1
--- /dev/null
@@ -0,0 +1,127 @@
+/* 
+ * @brief contains functions for bootstrap modal handling
+ */
+
+// Clear bs modal on close
+// We need this to prevent that the modal displays old content
+$('body').on('hidden.bs.modal', '.modal', function () {
+       $(this).removeData('bs.modal');
+       $("#modal-title").empty();
+       $('#modal-body').empty();
+});
+
+/**
+ * @brief Add first h3 element as modal title
+ * 
+ * Note: this should be really done in the template
+ * and is the solution where we havent done it until this
+ * moment or where it isn't possible because of design
+ */
+function loadModalTitle() {
+       // clear the text of the title
+       //$("#modal-title").empty();
+
+       // hide the first h3 child element of the modal body
+       $("#modal-body > h3").first().hide();
+
+       // get the text of the first h3 child element
+       var title = $("#modal-body > h3").first().text();
+
+       // and append it to modal title
+       if (title!=="") {
+               $("#modal-title").append(title);
+       }
+}
+
+
+function addToModal(url) {
+       var char = qOrAmp(url);
+
+       var url = url + char + 'mode=modal';
+       var modal = $('#modal').modal();
+
+       modal
+               .find('#modal-body')
+               .load(url, function (responseText, textStatus) {
+                       if ( textStatus === 'success' || 
+                               textStatus === 'notmodified') 
+                       {
+                               modal.show();
+
+                               //Get first h3 element and use it as title
+                               loadModalTitle();
+                       }
+               });
+};
+
+function editpost(url) {
+       var modal = $('#jot-modal').modal();
+       var url = url + " #profile-jot-form";
+       //var rand_num = random_digits(12);
+       $("#jot-perms-lnk").hide();
+
+       // rename the the original div jot-preview-content because the edit function
+       // does load the content for the modal from another source and preview won't work
+       // if this div would exist twice
+       // $("#jot-content #profile-jot-form").attr("id","#profile-jot-form-renamed");
+       // $("#jot-content #jot-preview-content").attr("id","#jot-preview-content-renamed");
+
+       // For editpost we load the modal html form the edit page. So we would have two jot forms in
+       // the page html. To avoid js conflicts we move the original jot to the end of the page
+       // so the editpost jot would be the first jot in html structure.
+       // After closing the modal we move the original jot back to it's orginal position in the html structure.
+       // 
+       // Note: For now it seems to work but this isn't optimal because we have doubled ID names for the jot div's.
+       // We need to have a better solution for this in the future. 
+       $("section #jot-content #profile-jot-form").appendTo("footer #cache-container");
+
+       jotreset();
+
+       modal
+               .find('#jot-modal-body')
+               .load(url, function (responseText, textStatus) {
+                       if ( textStatus === 'success' || 
+                               textStatus === 'notmodified') 
+                       {
+                               // get the item type and hide the input for title and category if it isn't needed
+                               var type = $(responseText).find("#profile-jot-form input[name='type']").val();
+                               if(type === "wall-comment" || type === "remote-comment")
+                               {
+                                       $("#profile-jot-form #jot-title-wrap").hide();
+                                       $("#profile-jot-form #jot-category-wrap").hide();
+                               }
+
+                               modal.show();
+                               $("#jot-popup").show();
+                       }
+               });
+}
+
+function jotreset() {
+       // Clear bs modal on close
+       // We need this to prevent that the modal displays old content
+       $('body').on('hidden.bs.modal', '#jot-modal', function () {
+               $(this).removeData('bs.modal');
+               $("#jot-perms-lnk").show();
+               $("#profile-jot-form #jot-title-wrap").show();
+               $("#profile-jot-form #jot-category-wrap").show();
+
+               // the following was commented out because it is needed anymore
+               // because we changed the behavior at an other place
+//             var rand_num = random_digits(12);
+//             $('#jot-title, #jot-category, #profile-jot-text').val("");
+//             $( "#profile-jot-form input[name='type']" ).val("wall");
+//             $( "#profile-jot-form input[name='post_id']" ).val("");
+//             $( "#profile-jot-form input[name='post_id_random']" ).val(rand_num);
+               $("#jot-modal-body").empty();
+
+               // rename the div #jot-preview-content-renamed back to it's original
+               // name. Have a look at function editpost() for further explanation
+               //$("#jot-content #profile-jot-form-renamed").attr("id","#profile-jot-form");
+               //$("#jot-content #jot-preview-content-renamed").attr("id","#jot-preview-content");
+
+               // Move the original jot back to it's old place in the html structure
+               // For explaination have a look at function editpost()
+               $("footer #cache-container #profile-jot-form").appendTo("section #jot-content");
+       });
+}
index 18b6105a02067865e4771ec96cbdece91b56b73f..07e574d3ee5ffc7c936ef5d967daacd575a4a046 100644 (file)
@@ -16,14 +16,6 @@ $(document).ready(function(){
                return false;
        });
 
-       // Clear bs modal on close
-       // We need this to prevent that the modal displays old content
-       $('body').on('hidden.bs.modal', '.modal', function () {
-               $(this).removeData('bs.modal');
-               $("#modal-title").empty();
-               $('#modal-body').empty();
-       });
-
        // add the class "selected" to group widges li if li > a does have the class group-selected
        if( $("#sidebar-group-ul li a").hasClass("group-selected")) {
                $("#sidebar-group-ul li a.group-selected").parent("li").addClass("selected");
@@ -267,122 +259,6 @@ function loadScript(url, callback) {
        head.appendChild(script);
 }
 
-/**
- * @brief Add first h3 element as modal title
- * 
- * Note: this should be really done in the template
- * and is the solution where we havent done it until this
- * moment or where it isn't possible because of design
- */
-function loadModalTitle() {
-       // clear the text of the title
-       //$("#modal-title").empty();
-
-       // hide the first h3 child element of the modal body
-       $("#modal-body > h3").first().hide();
-
-       // get the text of the first h3 child element
-       var title = $("#modal-body > h3").first().text();
-
-       // and append it to modal title
-       if (title!=="") {
-               $("#modal-title").append(title);
-       }
-}
-
-
-function addToModal(url) {
-       var char = qOrAmp(url);
-
-       var url = url + char + 'mode=modal';
-       var modal = $('#modal').modal();
-
-       modal
-               .find('#modal-body')
-               .load(url, function (responseText, textStatus) {
-                       if ( textStatus === 'success' || 
-                               textStatus === 'notmodified') 
-                       {
-                               modal.show();
-
-                               //Get first h3 element and use it as title
-                               loadModalTitle();
-                       }
-               });
-};
-
-function editpost(url) {
-       var modal = $('#jot-modal').modal();
-       var url = url + " #profile-jot-form";
-       //var rand_num = random_digits(12);
-       $("#jot-perms-lnk").hide();
-
-       // rename the the original div jot-preview-content because the edit function
-       // does load the content for the modal from another source and preview won't work
-       // if this div would exist twice
-       // $("#jot-content #profile-jot-form").attr("id","#profile-jot-form-renamed");
-       // $("#jot-content #jot-preview-content").attr("id","#jot-preview-content-renamed");
-
-       // For editpost we load the modal html form the edit page. So we would have two jot forms in
-       // the page html. To avoid js conflicts we move the original jot to the end of the page
-       // so the editpost jot would be the first jot in html structure.
-       // After closing the modal we move the original jot back to it's orginal position in the html structure.
-       // 
-       // Note: For now it seems to work but this isn't optimal because we have doubled ID names for the jot div's.
-       // We need to have a better solution for this in the future. 
-       $("section #jot-content #profile-jot-form").appendTo("footer #cache-container");
-
-       jotreset();
-
-       modal
-               .find('#jot-modal-body')
-               .load(url, function (responseText, textStatus) {
-                       if ( textStatus === 'success' || 
-                               textStatus === 'notmodified') 
-                       {
-                               // get the item type and hide the input for title and category if it isn't needed
-                               var type = $(responseText).find("#profile-jot-form input[name='type']").val();
-                               if(type === "wall-comment" || type === "remote-comment")
-                               {
-                                       $("#profile-jot-form #jot-title-wrap").hide();
-                                       $("#profile-jot-form #jot-category-wrap").hide();
-                               }
-
-                               modal.show();
-                               $("#jot-popup").show();
-                       }
-               });
-}
-
-function jotreset() {
-       // Clear bs modal on close
-       // We need this to prevent that the modal displays old content
-       $('body').on('hidden.bs.modal', '#jot-modal', function () {
-               $(this).removeData('bs.modal');
-               $("#jot-perms-lnk").show();
-               $("#profile-jot-form #jot-title-wrap").show();
-               $("#profile-jot-form #jot-category-wrap").show();
-
-               // the following was commented out because it is needed anymore
-               // because we changed the behavior at an other place
-//             var rand_num = random_digits(12);
-//             $('#jot-title, #jot-category, #profile-jot-text').val("");
-//             $( "#profile-jot-form input[name='type']" ).val("wall");
-//             $( "#profile-jot-form input[name='post_id']" ).val("");
-//             $( "#profile-jot-form input[name='post_id_random']" ).val(rand_num);
-               $("#jot-modal-body").empty();
-
-               // rename the div #jot-preview-content-renamed back to it's original
-               // name. Have a look at function editpost() for further explanation
-               //$("#jot-content #profile-jot-form-renamed").attr("id","#profile-jot-form");
-               //$("#jot-content #jot-preview-content-renamed").attr("id","#jot-preview-content");
-
-               // Move the original jot back to it's old place in the html structure
-               // For explaination have a look at function editpost()
-               $("footer #cache-container #profile-jot-form").appendTo("section #jot-content");
-       });
-}
-
 function random_digits(digits) {
        var rn = "";
        var rnd = "";
@@ -509,3 +385,144 @@ function filter_replace(item) {
                a.on('textComplete:select', function(e, value, strategy) { $(".dropdown-menu.textcomplete-dropdown.media-list").show(); });
        };
 })( jQuery );
+
+
+// current time in milliseconds, to send each request to make sure
+// we 're not getting 304 response
+function timeNow() {
+       return new Date().getTime();
+}
+
+String.prototype.normalizeLink = function () {
+       var ret = this.replace('https:', 'http:');
+       var ret = ret.replace('//www', '//');
+       return ret.rtrim();
+};
+
+function cleanContactUrl(url) {
+       var parts = parseUrl(url);
+
+       if(! ("scheme" in parts) || ! ("host" in parts)) {
+               return url;
+       }
+
+       var newUrl =parts["scheme"] + "://" + parts["host"];
+
+       if("port" in parts) {
+               newUrl += ":" + parts["port"];
+       }
+
+       if("path" in parts) {
+               newUrl += parts["path"];
+       }
+
+//     if(url != newUrl) {
+//             console.log("Cleaned contact url " + url + " to " + newUrl);
+//     }
+
+       return newUrl;
+}
+
+function parseUrl (str, component) { // eslint-disable-line camelcase
+       //       discuss at: http://locutusjs.io/php/parse_url/
+       //      original by: Steven Levithan (http://blog.stevenlevithan.com)
+       // reimplemented by: Brett Zamir (http://brett-zamir.me)
+       //         input by: Lorenzo Pisani
+       //         input by: Tony
+       //      improved by: Brett Zamir (http://brett-zamir.me)
+       //           note 1: original by http://stevenlevithan.com/demo/parseuri/js/assets/parseuri.js
+       //           note 1: blog post at http://blog.stevenlevithan.com/archives/parseuri
+       //           note 1: demo at http://stevenlevithan.com/demo/parseuri/js/assets/parseuri.js
+       //           note 1: Does not replace invalid characters with '_' as in PHP,
+       //           note 1: nor does it return false with
+       //           note 1: a seriously malformed URL.
+       //           note 1: Besides function name, is essentially the same as parseUri as
+       //           note 1: well as our allowing
+       //           note 1: an extra slash after the scheme/protocol (to allow file:/// as in PHP)
+       //        example 1: parse_url('http://user:pass@host/path?a=v#a')
+       //        returns 1: {scheme: 'http', host: 'host', user: 'user', pass: 'pass', path: '/path', query: 'a=v', fragment: 'a'}
+       //        example 2: parse_url('http://en.wikipedia.org/wiki/%22@%22_%28album%29')
+       //        returns 2: {scheme: 'http', host: 'en.wikipedia.org', path: '/wiki/%22@%22_%28album%29'}
+       //        example 3: parse_url('https://host.domain.tld/a@b.c/folder')
+       //        returns 3: {scheme: 'https', host: 'host.domain.tld', path: '/a@b.c/folder'}
+       //        example 4: parse_url('https://gooduser:secretpassword@www.example.com/a@b.c/folder?foo=bar')
+       //        returns 4: { scheme: 'https', host: 'www.example.com', path: '/a@b.c/folder', query: 'foo=bar', user: 'gooduser', pass: 'secretpassword' }
+
+       var query
+
+       var mode = (typeof require !== 'undefined' ? require('../info/ini_get')('locutus.parse_url.mode') : undefined) || 'php'
+
+       var key = [
+               'source',
+               'scheme',
+               'authority',
+               'userInfo',
+               'user',
+               'pass',
+               'host',
+               'port',
+               'relative',
+               'path',
+               'directory',
+               'file',
+               'query',
+               'fragment'
+       ]
+
+       // For loose we added one optional slash to post-scheme to catch file:/// (should restrict this)
+       var parser = {
+               php: new RegExp([
+                       '(?:([^:\\/?#]+):)?',
+                       '(?:\\/\\/()(?:(?:()(?:([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?))?',
+                       '()',
+                       '(?:(()(?:(?:[^?#\\/]*\\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)'
+               ].join('')),
+               strict: new RegExp([
+                       '(?:([^:\\/?#]+):)?',
+                       '(?:\\/\\/((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?))?',
+                       '((((?:[^?#\\/]*\\/)*)([^?#]*))(?:\\?([^#]*))?(?:#(.*))?)'
+               ].join('')),
+               loose: new RegExp([
+                       '(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?',
+                       '(?:\\/\\/\\/?)?',
+                       '((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?)',
+                       '(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))',
+                       '(?:\\?([^#]*))?(?:#(.*))?)'
+               ].join(''))
+       }
+
+       var m = parser[mode].exec(str)
+       var uri = {}
+       var i = 14
+
+       while (i--) {
+               if (m[i]) {
+                       uri[key[i]] = m[i]
+               }
+       }
+
+       if (component) {
+               return uri[component.replace('PHP_URL_', '').toLowerCase()]
+       }
+
+       if (mode !== 'php') {
+               var name = (typeof require !== 'undefined' ? require('../info/ini_get')('locutus.parse_url.queryKey') : undefined) || 'queryKey'
+               parser = /(?:^|&)([^&=]*)=?([^&]*)/g
+               uri[name] = {}
+               query = uri[key[12]] || ''
+               query.replace(parser, function ($0, $1, $2) {
+                       if ($1) {
+                               uri[name][$1] = $2
+                       }
+               })
+       }
+
+       delete uri.source
+       return uri
+}
+
+// trim function to replace whithespace after the string
+String.prototype.rtrim = function() {
+       var trimmed = this.replace(/\s+$/g, '');
+       return trimmed;
+};
index 5bceaee9c111a7362257314da729a7617fd552c9..182dcfa9830e8704cf87905f8d9ef26f3bc97059 100644 (file)
@@ -160,6 +160,7 @@ $("nav").bind('nav-update', function(e,data)
 <script src="<?=$frio?>/frameworks/flexMenu/flexmenu.custom.js"></script>
 <script src="<?=$frio?>/frameworks/jsmart/jsmart.custom.js"></script>
 <script src="<?=$frio?>/js/theme.js"></script>
+<script src="<?=$frio?>/js/modal.js"></script>
 <script src="<?=$frio?>/js/hovercard.js"></script>