[freeside-commits] branch FREESIDE_4_BRANCH updated. 320d85eb78bededdd5c2446f8b4c211aa2961381

Ivan ivan at 420.am
Wed Oct 28 11:25:45 PDT 2015


The branch, FREESIDE_4_BRANCH has been updated
       via  320d85eb78bededdd5c2446f8b4c211aa2961381 (commit)
      from  69f59cebc302ad599f7e13fc214fcccd51808683 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 320d85eb78bededdd5c2446f8b4c211aa2961381
Author: Ivan Kohler <ivan at freeside.biz>
Date:   Wed Oct 28 11:24:27 2015 -0700

    restore ckeditor, RT#18830, RT#34331

diff --git a/httemplate/elements/ckeditor/plugins/blockprotect/plugin.js b/httemplate/elements/ckeditor/plugins/blockprotect/plugin.js
new file mode 100644
index 0000000..e4ef391
--- /dev/null
+++ b/httemplate/elements/ckeditor/plugins/blockprotect/plugin.js
@@ -0,0 +1,139 @@
+/**
+ * The "blockprotect" plugin.  Adapted from the "placeholder" plugin.
+ */
+
+(function() {
+        var delim_o = '{';
+        var delim_c = '}';
+
+        var create_block = function(content, inside) {
+          if (inside) return content;
+          // fix nbsp's
+          content = content.replace(/ /gi, ' ');
+          // escape the content
+          var el = document.createElement('SPAN');
+          // IE8 compat
+          if( typeof(el.textContent) != 'undefined' ) {
+            el.textContent = content;
+          } else if( typeof(el.innerText) != 'undefined' ) {
+            el.innerText = content;
+          }
+          el.setAttribute('class', 'cke_blockprotect');
+          return el.outerHTML;
+        };
+        var block_writeHtml = function( element ) {
+          // to unescape the element contents, write it out as HTML,
+          // stick that into a SPAN element, and then extract the text
+          // content of that.
+          var inner_writer = new CKEDITOR.htmlParser.basicWriter;
+          element.writeChildrenHtml(inner_writer);
+
+          var el = document.createElement('SPAN');
+          el.innerHTML = inner_writer.getHtml();
+          if( typeof(el.textContent) != 'undefined' ) {
+            return el.textContent;
+          } else if( typeof(el.innerText) != 'undefined' ) {
+            return el.innerText;
+          }
+        };
+        var to_protected_html = function(data) {
+          var depth = 0;
+          var chunk = '';
+          var out = '';
+          var in_tag = false;
+          var p = 0; // position in the string
+          while( 1 ) {
+            // find the next delimiter of either kind
+            var i = data.indexOf(delim_o, p);
+            var j = data.indexOf(delim_c, p);
+            if (i == -1 && j == -1) {
+              // then there are no more delimiters
+              break;
+            } else if ((i < j || j == -1) && i != -1) {
+              // next delimiter is an open
+              // push everything from current position to 
+              // the delimiter
+              if ( i > p ) chunk += data.substr(p, i - p);
+              p = i + 1;
+              if ( depth == 0 ) {
+                // we're in document text. find whether an HTML tag starts, 
+                // or ends, before the next delimiter, so that we know whether
+                // to output the next block in a SPAN or just as escaped text
+                for(var q = 0; q < chunk.length; q++ ) {
+                  if (chunk[q] == '<') in_tag = true;
+                  if (chunk[q] == '>') in_tag = false;
+                }
+
+                // then output the chunk, and go to the start of the 
+                // protected block
+                out += chunk;
+                chunk = '';
+              }
+              chunk += delim_o;
+              depth++;
+            } else if ((j < i || i == -1) && j != -1) {
+              // next delimiter is a close
+              if ( j > p ) chunk += data.substr(p, j - p);
+              p = j + 1;
+              depth--;
+              chunk += delim_c;
+              if ( depth == 0 ) {
+                // end of a protected block
+                out += create_block(chunk, in_tag);
+                chunk = '';
+              } else if ( depth < 0 ) {
+                depth = 0;
+              }
+            } else {
+              // can't happen
+            }
+          }
+          // append any text after the last delimiter
+          if ( depth ) {
+            out += create_block(data.substr(p), in_tag);
+          } else {
+            out += data.substr(p);
+          }
+          return out;
+        };
+
+	CKEDITOR.plugins.add( 'blockprotect', {
+		afterInit: function( editor ) {
+			CKEDITOR.addCss( '.cke_blockprotect' +
+			'{' +
+					'background-color: #ffff88;' +
+					( CKEDITOR.env.gecko ? 'cursor: default;' : '' ) +
+				'}'
+                        );
+                      
+                        // keep these from getting stripped out 
+                        editor.filter.allow('span(cke_blockprotect)',
+                                            'blockprotect', true);
+
+                        // add filter at the front of toHtml
+                        editor.on( 'toHtml',
+                          function( evt ) {
+                            evt.data.dataValue =
+                              to_protected_html(evt.data.dataValue);
+                            return evt;
+                          },
+                          this, null, 0
+                        );
+
+                        editor.dataProcessor.htmlFilter.addRules({
+                          elements: {
+                            span: function( element ) {
+                              if ( element.className = 'cke_blockprotect' ) {
+                                // defeat HTML escaping
+                                var content = block_writeHtml(element);
+                                element.writeHtml = function(writer, filter) {
+                                  writer.text(content);
+                                }
+                              }
+                            } // span function
+                          } // elements
+                        });
+                }
+        }); // plugins.add
+}) ();
+

-----------------------------------------------------------------------

Summary of changes:
 .../ckeditor/plugins/blockprotect/plugin.js        |  139 ++++++++++++++++++++
 1 file changed, 139 insertions(+)
 create mode 100644 httemplate/elements/ckeditor/plugins/blockprotect/plugin.js




More information about the freeside-commits mailing list