diff --git a/common/js/plugins/handlebars.runtime/handlebars.runtime.min.js b/common/js/plugins/handlebars.runtime/handlebars.runtime.min.js new file mode 100644 index 000000000..032e9badc --- /dev/null +++ b/common/js/plugins/handlebars.runtime/handlebars.runtime.min.js @@ -0,0 +1,2 @@ +!function(a,b){"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?module.exports=b():a.Handlebars=a.Handlebars||b()}(this,function(){var a=function(){"use strict";function a(a){this.string=a}var b;return a.prototype.toString=function(){return""+this.string},b=a}(),b=function(a){"use strict";function b(a){return i[a]}function c(a){for(var b=1;b":">",'"':""","'":"'","`":"`"},j=/[&<>"'`]/g,k=/[&<>"'`]/;g.extend=c;var l=Object.prototype.toString;g.toString=l;var m=function(a){return"function"==typeof a};m(/x/)&&(m=function(a){return"function"==typeof a&&"[object Function]"===l.call(a)});var m;g.isFunction=m;var n=Array.isArray||function(a){return a&&"object"==typeof a?"[object Array]"===l.call(a):!1};return g.isArray=n,g.escapeExpression=d,g.isEmpty=e,g.appendContextPath=f,g}(a),c=function(){"use strict";function a(a,b){var d;b&&b.firstLine&&(d=b.firstLine,a+=" - "+d+":"+b.firstColumn);for(var e=Error.prototype.constructor.call(this,a),f=0;f0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):d(this);if(c.data&&c.ids){var g=q(c.data);g.contextPath=f.appendContextPath(c.data.contextPath,c.name),c={data:g}}return e(b,c)}),a.registerHelper("each",function(a,b){if(!b)throw new g("Must pass iterator to #each");var c,d,e=b.fn,h=b.inverse,i=0,j="";if(b.data&&b.ids&&(d=f.appendContextPath(b.data.contextPath,b.ids[0])+"."),l(a)&&(a=a.call(this)),b.data&&(c=q(b.data)),a&&"object"==typeof a)if(k(a))for(var m=a.length;m>i;i++)c&&(c.index=i,c.first=0===i,c.last=i===a.length-1,d&&(c.contextPath=d+i)),j+=e(a[i],{data:c});else for(var n in a)a.hasOwnProperty(n)&&(c&&(c.key=n,c.index=i,c.first=0===i,d&&(c.contextPath=d+n)),j+=e(a[n],{data:c}),i++);return 0===i&&(j=h(this)),j}),a.registerHelper("if",function(a,b){return l(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||f.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})}),a.registerHelper("with",function(a,b){l(a)&&(a=a.call(this));var c=b.fn;if(f.isEmpty(a))return b.inverse(this);if(b.data&&b.ids){var d=q(b.data);d.contextPath=f.appendContextPath(b.data.contextPath,b.ids[0]),b={data:d}}return c(a,b)}),a.registerHelper("log",function(b,c){var d=c.data&&null!=c.data.level?parseInt(c.data.level,10):1;a.log(d,b)}),a.registerHelper("lookup",function(a,b){return a&&a[b]})}var e={},f=a,g=b,h="2.0.0";e.VERSION=h;var i=6;e.COMPILER_REVISION=i;var j={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1"};e.REVISION_CHANGES=j;var k=f.isArray,l=f.isFunction,m=f.toString,n="[object Object]";e.HandlebarsEnvironment=c,c.prototype={constructor:c,logger:o,log:p,registerHelper:function(a,b){if(m.call(a)===n){if(b)throw new g("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){m.call(a)===n?f.extend(this.partials,a):this.partials[a]=b},unregisterPartial:function(a){delete this.partials[a]}};var o={methodMap:{0:"debug",1:"info",2:"warn",3:"error"},DEBUG:0,INFO:1,WARN:2,ERROR:3,level:3,log:function(a,b){if(o.level<=a){var c=o.methodMap[a];"undefined"!=typeof console&&console[c]&&console[c].call(console,b)}}};e.logger=o;var p=o.log;e.log=p;var q=function(a){var b=f.extend({},a);return b._parent=a,b};return e.createFrame=q,e}(b,c),e=function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=m;if(b!==c){if(c>b){var d=n[c],e=n[b];throw new l("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new l("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){if(!b)throw new l("No environment passed to template");if(!a||!a.main)throw new l("Unknown template object: "+typeof a);b.VM.checkRevision(a.compiler);var c=function(c,d,e,f,g,h,i,j,m){g&&(f=k.extend({},f,g));var n=b.VM.invokePartial.call(this,c,e,f,h,i,j,m);if(null==n&&b.compile){var o={helpers:h,partials:i,data:j,depths:m};i[e]=b.compile(c,{data:void 0!==j,compat:a.compat},b),n=i[e](f,o)}if(null!=n){if(d){for(var p=n.split("\n"),q=0,r=p.length;r>q&&(p[q]||q+1!==r);q++)p[q]=d+p[q];n=p.join("\n")}return n}throw new l("The partial "+e+" could not be compiled when running in runtime-only mode")},d={lookup:function(a,b){for(var c=a.length,d=0;c>d;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:k.escapeExpression,invokePartial:c,fn:function(b){return a[b]},programs:[],program:function(a,b,c){var d=this.programs[a],e=this.fn(a);return b||c?d=f(this,a,e,b,c):d||(d=this.programs[a]=f(this,a,e)),d},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=k.extend({},b,a)),c},noop:b.VM.noop,compilerInfo:a.compiler},e=function(b,c){c=c||{};var f=c.data;e._setup(c),!c.partial&&a.useData&&(f=i(b,f));var g;return a.useDepths&&(g=c.depths?[b].concat(c.depths):[b]),a.main.call(d,b,d.helpers,d.partials,f,g)};return e.isTop=!0,e._setup=function(c){c.partial?(d.helpers=c.helpers,d.partials=c.partials):(d.helpers=d.merge(c.helpers,b.helpers),a.usePartial&&(d.partials=d.merge(c.partials,b.partials)))},e._child=function(b,c,e){if(a.useDepths&&!e)throw new l("must pass parent depths");return f(d,b,a[b],c,e)},e}function f(a,b,c,d,e){var f=function(b,f){return f=f||{},c.call(a,b,a.helpers,a.partials,f.data||d,e&&[b].concat(e))};return f.program=b,f.depth=e?e.length:0,f}function g(a,b,c,d,e,f,g){var h={partial:!0,helpers:d,partials:e,data:f,depths:g};if(void 0===a)throw new l("The partial "+b+" could not be found");return a instanceof Function?a(c,h):void 0}function h(){return""}function i(a,b){return b&&"root"in b||(b=b?o(b):{},b.root=a),b}var j={},k=a,l=b,m=c.COMPILER_REVISION,n=c.REVISION_CHANGES,o=c.createFrame;return j.checkRevision=d,j.template=e,j.program=f,j.invokePartial=g,j.noop=h,j}(b,c,d),f=function(a,b,c,d,e){"use strict";var f,g=a,h=b,i=c,j=d,k=e,l=function(){var a=new g.HandlebarsEnvironment;return j.extend(a,g),a.SafeString=h,a.Exception=i,a.Utils=j,a.escapeExpression=j.escapeExpression,a.VM=k,a.template=function(b){return k.template(b,a)},a},m=l();return m.create=l,m["default"]=m,f=m}(d,a,c,b,e);return f}); +//# sourceMappingURL=handlebars.runtime.min.map \ No newline at end of file diff --git a/common/js/plugins/handlebars.runtime/handlebars.runtime.min.map b/common/js/plugins/handlebars.runtime/handlebars.runtime.min.map new file mode 100644 index 000000000..e38598a2f --- /dev/null +++ b/common/js/plugins/handlebars.runtime/handlebars.runtime.min.map @@ -0,0 +1 @@ +{"version":3,"file":"handlebars.runtime.min.js","sources":["handlebars.runtime.js"],"names":["root","factory","define","amd","exports","module","Handlebars","this","__module3__","SafeString","string","__exports__","prototype","toString","__module2__","__dependency1__","escapeChar","chr","escape","extend","obj","i","arguments","length","key","Object","hasOwnProperty","call","escapeExpression","possible","test","replace","badChars","isEmpty","value","isArray","appendContextPath","contextPath","id","&","<",">","\"","'","`","isFunction","Array","__module4__","Exception","message","node","line","firstLine","firstColumn","tmp","Error","constructor","idx","errorProps","lineNumber","column","__module1__","__dependency2__","HandlebarsEnvironment","helpers","partials","registerDefaultHelpers","instance","registerHelper","undefined","name","context","options","inverse","fn","ids","each","data","createFrame","Utils","ret","j","index","first","last","conditional","hash","includeZero","level","parseInt","log","field","VERSION","COMPILER_REVISION","REVISION_CHANGES",1,2,3,4,5,6,"objectType","logger","unregisterHelper","registerPartial","partial","unregisterPartial","methodMap","DEBUG","INFO","WARN","ERROR","method","console","object","frame","_parent","__module5__","__dependency3__","checkRevision","compilerInfo","compilerRevision","currentRevision","runtimeVersions","compilerVersions","template","templateSpec","env","main","VM","compiler","invokePartialWrapper","indent","depths","result","invokePartial","compile","compat","lines","split","l","join","container","lookup","len","lambda","current","programs","program","programWrapper","depth","merge","param","common","noop","_setup","useData","initData","useDepths","concat","isTop","usePartial","_child","prog","Function","__module0__","__dependency4__","__dependency5__","base","runtime","create","hb","spec"],"mappings":"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"} \ No newline at end of file diff --git a/common/js/plugins/handlebars/handlebars.min.js b/common/js/plugins/handlebars/handlebars.min.js new file mode 100644 index 000000000..151e8065e --- /dev/null +++ b/common/js/plugins/handlebars/handlebars.min.js @@ -0,0 +1,3 @@ +!function(a,b){"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?module.exports=b():a.Handlebars=a.Handlebars||b()}(this,function(){var a=function(){"use strict";function a(a){this.string=a}var b;return a.prototype.toString=function(){return""+this.string},b=a}(),b=function(a){"use strict";function b(a){return i[a]}function c(a){for(var b=1;b":">",'"':""","'":"'","`":"`"},j=/[&<>"'`]/g,k=/[&<>"'`]/;g.extend=c;var l=Object.prototype.toString;g.toString=l;var m=function(a){return"function"==typeof a};m(/x/)&&(m=function(a){return"function"==typeof a&&"[object Function]"===l.call(a)});var m;g.isFunction=m;var n=Array.isArray||function(a){return a&&"object"==typeof a?"[object Array]"===l.call(a):!1};return g.isArray=n,g.escapeExpression=d,g.isEmpty=e,g.appendContextPath=f,g}(a),c=function(){"use strict";function a(a,b){var d;b&&b.firstLine&&(d=b.firstLine,a+=" - "+d+":"+b.firstColumn);for(var e=Error.prototype.constructor.call(this,a),f=0;f0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):d(this);if(c.data&&c.ids){var g=q(c.data);g.contextPath=f.appendContextPath(c.data.contextPath,c.name),c={data:g}}return e(b,c)}),a.registerHelper("each",function(a,b){if(!b)throw new g("Must pass iterator to #each");var c,d,e=b.fn,h=b.inverse,i=0,j="";if(b.data&&b.ids&&(d=f.appendContextPath(b.data.contextPath,b.ids[0])+"."),l(a)&&(a=a.call(this)),b.data&&(c=q(b.data)),a&&"object"==typeof a)if(k(a))for(var m=a.length;m>i;i++)c&&(c.index=i,c.first=0===i,c.last=i===a.length-1,d&&(c.contextPath=d+i)),j+=e(a[i],{data:c});else for(var n in a)a.hasOwnProperty(n)&&(c&&(c.key=n,c.index=i,c.first=0===i,d&&(c.contextPath=d+n)),j+=e(a[n],{data:c}),i++);return 0===i&&(j=h(this)),j}),a.registerHelper("if",function(a,b){return l(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||f.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})}),a.registerHelper("with",function(a,b){l(a)&&(a=a.call(this));var c=b.fn;if(f.isEmpty(a))return b.inverse(this);if(b.data&&b.ids){var d=q(b.data);d.contextPath=f.appendContextPath(b.data.contextPath,b.ids[0]),b={data:d}}return c(a,b)}),a.registerHelper("log",function(b,c){var d=c.data&&null!=c.data.level?parseInt(c.data.level,10):1;a.log(d,b)}),a.registerHelper("lookup",function(a,b){return a&&a[b]})}var e={},f=a,g=b,h="2.0.0";e.VERSION=h;var i=6;e.COMPILER_REVISION=i;var j={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1"};e.REVISION_CHANGES=j;var k=f.isArray,l=f.isFunction,m=f.toString,n="[object Object]";e.HandlebarsEnvironment=c,c.prototype={constructor:c,logger:o,log:p,registerHelper:function(a,b){if(m.call(a)===n){if(b)throw new g("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){m.call(a)===n?f.extend(this.partials,a):this.partials[a]=b},unregisterPartial:function(a){delete this.partials[a]}};var o={methodMap:{0:"debug",1:"info",2:"warn",3:"error"},DEBUG:0,INFO:1,WARN:2,ERROR:3,level:3,log:function(a,b){if(o.level<=a){var c=o.methodMap[a];"undefined"!=typeof console&&console[c]&&console[c].call(console,b)}}};e.logger=o;var p=o.log;e.log=p;var q=function(a){var b=f.extend({},a);return b._parent=a,b};return e.createFrame=q,e}(b,c),e=function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=m;if(b!==c){if(c>b){var d=n[c],e=n[b];throw new l("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new l("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){if(!b)throw new l("No environment passed to template");if(!a||!a.main)throw new l("Unknown template object: "+typeof a);b.VM.checkRevision(a.compiler);var c=function(c,d,e,f,g,h,i,j,m){g&&(f=k.extend({},f,g));var n=b.VM.invokePartial.call(this,c,e,f,h,i,j,m);if(null==n&&b.compile){var o={helpers:h,partials:i,data:j,depths:m};i[e]=b.compile(c,{data:void 0!==j,compat:a.compat},b),n=i[e](f,o)}if(null!=n){if(d){for(var p=n.split("\n"),q=0,r=p.length;r>q&&(p[q]||q+1!==r);q++)p[q]=d+p[q];n=p.join("\n")}return n}throw new l("The partial "+e+" could not be compiled when running in runtime-only mode")},d={lookup:function(a,b){for(var c=a.length,d=0;c>d;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:k.escapeExpression,invokePartial:c,fn:function(b){return a[b]},programs:[],program:function(a,b,c){var d=this.programs[a],e=this.fn(a);return b||c?d=f(this,a,e,b,c):d||(d=this.programs[a]=f(this,a,e)),d},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=k.extend({},b,a)),c},noop:b.VM.noop,compilerInfo:a.compiler},e=function(b,c){c=c||{};var f=c.data;e._setup(c),!c.partial&&a.useData&&(f=i(b,f));var g;return a.useDepths&&(g=c.depths?[b].concat(c.depths):[b]),a.main.call(d,b,d.helpers,d.partials,f,g)};return e.isTop=!0,e._setup=function(c){c.partial?(d.helpers=c.helpers,d.partials=c.partials):(d.helpers=d.merge(c.helpers,b.helpers),a.usePartial&&(d.partials=d.merge(c.partials,b.partials)))},e._child=function(b,c,e){if(a.useDepths&&!e)throw new l("must pass parent depths");return f(d,b,a[b],c,e)},e}function f(a,b,c,d,e){var f=function(b,f){return f=f||{},c.call(a,b,a.helpers,a.partials,f.data||d,e&&[b].concat(e))};return f.program=b,f.depth=e?e.length:0,f}function g(a,b,c,d,e,f,g){var h={partial:!0,helpers:d,partials:e,data:f,depths:g};if(void 0===a)throw new l("The partial "+b+" could not be found");return a instanceof Function?a(c,h):void 0}function h(){return""}function i(a,b){return b&&"root"in b||(b=b?o(b):{},b.root=a),b}var j={},k=a,l=b,m=c.COMPILER_REVISION,n=c.REVISION_CHANGES,o=c.createFrame;return j.checkRevision=d,j.template=e,j.program=f,j.invokePartial=g,j.noop=h,j}(b,c,d),f=function(a,b,c,d,e){"use strict";var f,g=a,h=b,i=c,j=d,k=e,l=function(){var a=new g.HandlebarsEnvironment;return j.extend(a,g),a.SafeString=h,a.Exception=i,a.Utils=j,a.escapeExpression=j.escapeExpression,a.VM=k,a.template=function(b){return k.template(b,a)},a},m=l();return m.create=l,m["default"]=m,f=m}(d,a,c,b,e),g=function(a){"use strict";function b(a){a=a||{},this.firstLine=a.first_line,this.firstColumn=a.first_column,this.lastColumn=a.last_column,this.lastLine=a.last_line}var c,d=a,e={ProgramNode:function(a,c,d){b.call(this,d),this.type="program",this.statements=a,this.strip=c},MustacheNode:function(a,c,d,f,g){if(b.call(this,g),this.type="mustache",this.strip=f,null!=d&&d.charAt){var h=d.charAt(3)||d.charAt(2);this.escaped="{"!==h&&"&"!==h}else this.escaped=!!d;this.sexpr=a instanceof e.SexprNode?a:new e.SexprNode(a,c),this.id=this.sexpr.id,this.params=this.sexpr.params,this.hash=this.sexpr.hash,this.eligibleHelper=this.sexpr.eligibleHelper,this.isHelper=this.sexpr.isHelper},SexprNode:function(a,c,d){b.call(this,d),this.type="sexpr",this.hash=c;var e=this.id=a[0],f=this.params=a.slice(1);this.isHelper=!(!f.length&&!c),this.eligibleHelper=this.isHelper||e.isSimple},PartialNode:function(a,c,d,e,f){b.call(this,f),this.type="partial",this.partialName=a,this.context=c,this.hash=d,this.strip=e,this.strip.inlineStandalone=!0},BlockNode:function(a,c,d,e,f){b.call(this,f),this.type="block",this.mustache=a,this.program=c,this.inverse=d,this.strip=e,d&&!c&&(this.isInverse=!0)},RawBlockNode:function(a,c,f,g){if(b.call(this,g),a.sexpr.id.original!==f)throw new d(a.sexpr.id.original+" doesn't match "+f,this);c=new e.ContentNode(c,g),this.type="block",this.mustache=a,this.program=new e.ProgramNode([c],{},g)},ContentNode:function(a,c){b.call(this,c),this.type="content",this.original=this.string=a},HashNode:function(a,c){b.call(this,c),this.type="hash",this.pairs=a},IdNode:function(a,c){b.call(this,c),this.type="ID";for(var e="",f=[],g=0,h="",i=0,j=a.length;j>i;i++){var k=a[i].part;if(e+=(a[i].separator||"")+k,".."===k||"."===k||"this"===k){if(f.length>0)throw new d("Invalid path: "+e,this);".."===k?(g++,h+="../"):this.isScoped=!0}else f.push(k)}this.original=e,this.parts=f,this.string=f.join("."),this.depth=g,this.idName=h+this.string,this.isSimple=1===a.length&&!this.isScoped&&0===g,this.stringModeValue=this.string},PartialNameNode:function(a,c){b.call(this,c),this.type="PARTIAL_NAME",this.name=a.original},DataNode:function(a,c){b.call(this,c),this.type="DATA",this.id=a,this.stringModeValue=a.stringModeValue,this.idName="@"+a.stringModeValue},StringNode:function(a,c){b.call(this,c),this.type="STRING",this.original=this.string=this.stringModeValue=a},NumberNode:function(a,c){b.call(this,c),this.type="NUMBER",this.original=this.number=a,this.stringModeValue=Number(a)},BooleanNode:function(a,c){b.call(this,c),this.type="BOOLEAN",this.bool=a,this.stringModeValue="true"===a},CommentNode:function(a,c){b.call(this,c),this.type="comment",this.comment=a,this.strip={inlineStandalone:!0}}};return c=e}(c),h=function(){"use strict";var a,b=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,CONTENT:12,COMMENT:13,openRawBlock:14,END_RAW_BLOCK:15,OPEN_RAW_BLOCK:16,sexpr:17,CLOSE_RAW_BLOCK:18,openBlock:19,block_option0:20,closeBlock:21,openInverse:22,block_option1:23,OPEN_BLOCK:24,CLOSE:25,OPEN_INVERSE:26,inverseAndProgram:27,INVERSE:28,OPEN_ENDBLOCK:29,path:30,OPEN:31,OPEN_UNESCAPED:32,CLOSE_UNESCAPED:33,OPEN_PARTIAL:34,partialName:35,param:36,partial_option0:37,partial_option1:38,sexpr_repetition0:39,sexpr_option0:40,dataName:41,STRING:42,NUMBER:43,BOOLEAN:44,OPEN_SEXPR:45,CLOSE_SEXPR:46,hash:47,hash_repetition_plus0:48,hashSegment:49,ID:50,EQUALS:51,DATA:52,pathSegments:53,SEP:54,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",12:"CONTENT",13:"COMMENT",15:"END_RAW_BLOCK",16:"OPEN_RAW_BLOCK",18:"CLOSE_RAW_BLOCK",24:"OPEN_BLOCK",25:"CLOSE",26:"OPEN_INVERSE",28:"INVERSE",29:"OPEN_ENDBLOCK",31:"OPEN",32:"OPEN_UNESCAPED",33:"CLOSE_UNESCAPED",34:"OPEN_PARTIAL",42:"STRING",43:"NUMBER",44:"BOOLEAN",45:"OPEN_SEXPR",46:"CLOSE_SEXPR",50:"ID",51:"EQUALS",52:"DATA",54:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[10,3],[14,3],[9,4],[9,4],[19,3],[22,3],[27,2],[21,3],[8,3],[8,3],[11,5],[11,4],[17,3],[17,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,3],[47,1],[49,3],[35,1],[35,1],[35,1],[41,2],[30,1],[53,3],[53,1],[6,0],[6,2],[20,0],[20,1],[23,0],[23,1],[37,0],[37,1],[38,0],[38,1],[39,0],[39,2],[40,0],[40,1],[48,1],[48,2]],performAction:function(a,b,c,d,e,f){var g=f.length-1;switch(e){case 1:return d.prepareProgram(f[g-1].statements,!0),f[g-1];case 2:this.$=new d.ProgramNode(d.prepareProgram(f[g]),{},this._$);break;case 3:this.$=f[g];break;case 4:this.$=f[g];break;case 5:this.$=f[g];break;case 6:this.$=f[g];break;case 7:this.$=new d.ContentNode(f[g],this._$);break;case 8:this.$=new d.CommentNode(f[g],this._$);break;case 9:this.$=new d.RawBlockNode(f[g-2],f[g-1],f[g],this._$);break;case 10:this.$=new d.MustacheNode(f[g-1],null,"","",this._$);break;case 11:this.$=d.prepareBlock(f[g-3],f[g-2],f[g-1],f[g],!1,this._$);break;case 12:this.$=d.prepareBlock(f[g-3],f[g-2],f[g-1],f[g],!0,this._$);break;case 13:this.$=new d.MustacheNode(f[g-1],null,f[g-2],d.stripFlags(f[g-2],f[g]),this._$);break;case 14:this.$=new d.MustacheNode(f[g-1],null,f[g-2],d.stripFlags(f[g-2],f[g]),this._$);break;case 15:this.$={strip:d.stripFlags(f[g-1],f[g-1]),program:f[g]};break;case 16:this.$={path:f[g-1],strip:d.stripFlags(f[g-2],f[g])};break;case 17:this.$=new d.MustacheNode(f[g-1],null,f[g-2],d.stripFlags(f[g-2],f[g]),this._$);break;case 18:this.$=new d.MustacheNode(f[g-1],null,f[g-2],d.stripFlags(f[g-2],f[g]),this._$);break;case 19:this.$=new d.PartialNode(f[g-3],f[g-2],f[g-1],d.stripFlags(f[g-4],f[g]),this._$);break;case 20:this.$=new d.PartialNode(f[g-2],void 0,f[g-1],d.stripFlags(f[g-3],f[g]),this._$);break;case 21:this.$=new d.SexprNode([f[g-2]].concat(f[g-1]),f[g],this._$);break;case 22:this.$=new d.SexprNode([f[g]],null,this._$);break;case 23:this.$=f[g];break;case 24:this.$=new d.StringNode(f[g],this._$);break;case 25:this.$=new d.NumberNode(f[g],this._$);break;case 26:this.$=new d.BooleanNode(f[g],this._$);break;case 27:this.$=f[g];break;case 28:f[g-1].isHelper=!0,this.$=f[g-1];break;case 29:this.$=new d.HashNode(f[g],this._$);break;case 30:this.$=[f[g-2],f[g]];break;case 31:this.$=new d.PartialNameNode(f[g],this._$);break;case 32:this.$=new d.PartialNameNode(new d.StringNode(f[g],this._$),this._$);break;case 33:this.$=new d.PartialNameNode(new d.NumberNode(f[g],this._$));break;case 34:this.$=new d.DataNode(f[g],this._$);break;case 35:this.$=new d.IdNode(f[g],this._$);break;case 36:f[g-2].push({part:f[g],separator:f[g-1]}),this.$=f[g-2];break;case 37:this.$=[{part:f[g]}];break;case 38:this.$=[];break;case 39:f[g-1].push(f[g]);break;case 48:this.$=[];break;case 49:f[g-1].push(f[g]);break;case 52:this.$=[f[g]];break;case 53:f[g-1].push(f[g])}},table:[{3:1,4:2,5:[2,38],6:3,12:[2,38],13:[2,38],16:[2,38],24:[2,38],26:[2,38],31:[2,38],32:[2,38],34:[2,38]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:[1,10],13:[1,11],14:16,16:[1,20],19:14,22:15,24:[1,18],26:[1,19],28:[2,2],29:[2,2],31:[1,12],32:[1,13],34:[1,17]},{1:[2,1]},{5:[2,39],12:[2,39],13:[2,39],16:[2,39],24:[2,39],26:[2,39],28:[2,39],29:[2,39],31:[2,39],32:[2,39],34:[2,39]},{5:[2,3],12:[2,3],13:[2,3],16:[2,3],24:[2,3],26:[2,3],28:[2,3],29:[2,3],31:[2,3],32:[2,3],34:[2,3]},{5:[2,4],12:[2,4],13:[2,4],16:[2,4],24:[2,4],26:[2,4],28:[2,4],29:[2,4],31:[2,4],32:[2,4],34:[2,4]},{5:[2,5],12:[2,5],13:[2,5],16:[2,5],24:[2,5],26:[2,5],28:[2,5],29:[2,5],31:[2,5],32:[2,5],34:[2,5]},{5:[2,6],12:[2,6],13:[2,6],16:[2,6],24:[2,6],26:[2,6],28:[2,6],29:[2,6],31:[2,6],32:[2,6],34:[2,6]},{5:[2,7],12:[2,7],13:[2,7],16:[2,7],24:[2,7],26:[2,7],28:[2,7],29:[2,7],31:[2,7],32:[2,7],34:[2,7]},{5:[2,8],12:[2,8],13:[2,8],16:[2,8],24:[2,8],26:[2,8],28:[2,8],29:[2,8],31:[2,8],32:[2,8],34:[2,8]},{17:21,30:22,41:23,50:[1,26],52:[1,25],53:24},{17:27,30:22,41:23,50:[1,26],52:[1,25],53:24},{4:28,6:3,12:[2,38],13:[2,38],16:[2,38],24:[2,38],26:[2,38],28:[2,38],29:[2,38],31:[2,38],32:[2,38],34:[2,38]},{4:29,6:3,12:[2,38],13:[2,38],16:[2,38],24:[2,38],26:[2,38],28:[2,38],29:[2,38],31:[2,38],32:[2,38],34:[2,38]},{12:[1,30]},{30:32,35:31,42:[1,33],43:[1,34],50:[1,26],53:24},{17:35,30:22,41:23,50:[1,26],52:[1,25],53:24},{17:36,30:22,41:23,50:[1,26],52:[1,25],53:24},{17:37,30:22,41:23,50:[1,26],52:[1,25],53:24},{25:[1,38]},{18:[2,48],25:[2,48],33:[2,48],39:39,42:[2,48],43:[2,48],44:[2,48],45:[2,48],46:[2,48],50:[2,48],52:[2,48]},{18:[2,22],25:[2,22],33:[2,22],46:[2,22]},{18:[2,35],25:[2,35],33:[2,35],42:[2,35],43:[2,35],44:[2,35],45:[2,35],46:[2,35],50:[2,35],52:[2,35],54:[1,40]},{30:41,50:[1,26],53:24},{18:[2,37],25:[2,37],33:[2,37],42:[2,37],43:[2,37],44:[2,37],45:[2,37],46:[2,37],50:[2,37],52:[2,37],54:[2,37]},{33:[1,42]},{20:43,27:44,28:[1,45],29:[2,40]},{23:46,27:47,28:[1,45],29:[2,42]},{15:[1,48]},{25:[2,46],30:51,36:49,38:50,41:55,42:[1,52],43:[1,53],44:[1,54],45:[1,56],47:57,48:58,49:60,50:[1,59],52:[1,25],53:24},{25:[2,31],42:[2,31],43:[2,31],44:[2,31],45:[2,31],50:[2,31],52:[2,31]},{25:[2,32],42:[2,32],43:[2,32],44:[2,32],45:[2,32],50:[2,32],52:[2,32]},{25:[2,33],42:[2,33],43:[2,33],44:[2,33],45:[2,33],50:[2,33],52:[2,33]},{25:[1,61]},{25:[1,62]},{18:[1,63]},{5:[2,17],12:[2,17],13:[2,17],16:[2,17],24:[2,17],26:[2,17],28:[2,17],29:[2,17],31:[2,17],32:[2,17],34:[2,17]},{18:[2,50],25:[2,50],30:51,33:[2,50],36:65,40:64,41:55,42:[1,52],43:[1,53],44:[1,54],45:[1,56],46:[2,50],47:66,48:58,49:60,50:[1,59],52:[1,25],53:24},{50:[1,67]},{18:[2,34],25:[2,34],33:[2,34],42:[2,34],43:[2,34],44:[2,34],45:[2,34],46:[2,34],50:[2,34],52:[2,34]},{5:[2,18],12:[2,18],13:[2,18],16:[2,18],24:[2,18],26:[2,18],28:[2,18],29:[2,18],31:[2,18],32:[2,18],34:[2,18]},{21:68,29:[1,69]},{29:[2,41]},{4:70,6:3,12:[2,38],13:[2,38],16:[2,38],24:[2,38],26:[2,38],29:[2,38],31:[2,38],32:[2,38],34:[2,38]},{21:71,29:[1,69]},{29:[2,43]},{5:[2,9],12:[2,9],13:[2,9],16:[2,9],24:[2,9],26:[2,9],28:[2,9],29:[2,9],31:[2,9],32:[2,9],34:[2,9]},{25:[2,44],37:72,47:73,48:58,49:60,50:[1,74]},{25:[1,75]},{18:[2,23],25:[2,23],33:[2,23],42:[2,23],43:[2,23],44:[2,23],45:[2,23],46:[2,23],50:[2,23],52:[2,23]},{18:[2,24],25:[2,24],33:[2,24],42:[2,24],43:[2,24],44:[2,24],45:[2,24],46:[2,24],50:[2,24],52:[2,24]},{18:[2,25],25:[2,25],33:[2,25],42:[2,25],43:[2,25],44:[2,25],45:[2,25],46:[2,25],50:[2,25],52:[2,25]},{18:[2,26],25:[2,26],33:[2,26],42:[2,26],43:[2,26],44:[2,26],45:[2,26],46:[2,26],50:[2,26],52:[2,26]},{18:[2,27],25:[2,27],33:[2,27],42:[2,27],43:[2,27],44:[2,27],45:[2,27],46:[2,27],50:[2,27],52:[2,27]},{17:76,30:22,41:23,50:[1,26],52:[1,25],53:24},{25:[2,47]},{18:[2,29],25:[2,29],33:[2,29],46:[2,29],49:77,50:[1,74]},{18:[2,37],25:[2,37],33:[2,37],42:[2,37],43:[2,37],44:[2,37],45:[2,37],46:[2,37],50:[2,37],51:[1,78],52:[2,37],54:[2,37]},{18:[2,52],25:[2,52],33:[2,52],46:[2,52],50:[2,52]},{12:[2,13],13:[2,13],16:[2,13],24:[2,13],26:[2,13],28:[2,13],29:[2,13],31:[2,13],32:[2,13],34:[2,13]},{12:[2,14],13:[2,14],16:[2,14],24:[2,14],26:[2,14],28:[2,14],29:[2,14],31:[2,14],32:[2,14],34:[2,14]},{12:[2,10]},{18:[2,21],25:[2,21],33:[2,21],46:[2,21]},{18:[2,49],25:[2,49],33:[2,49],42:[2,49],43:[2,49],44:[2,49],45:[2,49],46:[2,49],50:[2,49],52:[2,49]},{18:[2,51],25:[2,51],33:[2,51],46:[2,51]},{18:[2,36],25:[2,36],33:[2,36],42:[2,36],43:[2,36],44:[2,36],45:[2,36],46:[2,36],50:[2,36],52:[2,36],54:[2,36]},{5:[2,11],12:[2,11],13:[2,11],16:[2,11],24:[2,11],26:[2,11],28:[2,11],29:[2,11],31:[2,11],32:[2,11],34:[2,11]},{30:79,50:[1,26],53:24},{29:[2,15]},{5:[2,12],12:[2,12],13:[2,12],16:[2,12],24:[2,12],26:[2,12],28:[2,12],29:[2,12],31:[2,12],32:[2,12],34:[2,12]},{25:[1,80]},{25:[2,45]},{51:[1,78]},{5:[2,20],12:[2,20],13:[2,20],16:[2,20],24:[2,20],26:[2,20],28:[2,20],29:[2,20],31:[2,20],32:[2,20],34:[2,20]},{46:[1,81]},{18:[2,53],25:[2,53],33:[2,53],46:[2,53],50:[2,53]},{30:51,36:82,41:55,42:[1,52],43:[1,53],44:[1,54],45:[1,56],50:[1,26],52:[1,25],53:24},{25:[1,83]},{5:[2,19],12:[2,19],13:[2,19],16:[2,19],24:[2,19],26:[2,19],28:[2,19],29:[2,19],31:[2,19],32:[2,19],34:[2,19]},{18:[2,28],25:[2,28],33:[2,28],42:[2,28],43:[2,28],44:[2,28],45:[2,28],46:[2,28],50:[2,28],52:[2,28]},{18:[2,30],25:[2,30],33:[2,30],46:[2,30],50:[2,30]},{5:[2,16],12:[2,16],13:[2,16],16:[2,16],24:[2,16],26:[2,16],28:[2,16],29:[2,16],31:[2,16],32:[2,16],34:[2,16]}],defaultActions:{4:[2,1],44:[2,41],47:[2,43],57:[2,47],63:[2,10],70:[2,15],73:[2,45]},parseError:function(a){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:((null===n||"undefined"==typeof n)&&(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;gb[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 12;break;case 1:return 12;case 2:return this.popState(),12;case 3:return b.yytext=b.yytext.substr(5,b.yyleng-9),this.popState(),15;case 4:return 12;case 5:return e(0,4),this.popState(),13;case 6:return 45;case 7:return 46;case 8:return 16;case 9:return this.popState(),this.begin("raw"),18;case 10:return 34;case 11:return 24;case 12:return 29;case 13:return this.popState(),28;case 14:return this.popState(),28;case 15:return 26;case 16:return 26;case 17:return 32;case 18:return 31;case 19:this.popState(),this.begin("com");break;case 20:return e(3,5),this.popState(),13;case 21:return 31;case 22:return 51;case 23:return 50;case 24:return 50;case 25:return 54;case 26:break;case 27:return this.popState(),33;case 28:return this.popState(),25;case 29:return b.yytext=e(1,2).replace(/\\"/g,'"'),42;case 30:return b.yytext=e(1,2).replace(/\\'/g,"'"),42;case 31:return 52;case 32:return 44;case 33:return 44;case 34:return 43;case 35:return 50;case 36:return b.yytext=e(1,2),50;case 37:return"INVALID";case 38:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{\/)))/,/^(?:[\s\S]*?--\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{!--)/,/^(?:\{\{![\s\S]*?\}\})/,/^(?:\{\{(~)?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)]))))/,/^(?:\[[^\]]*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[5],inclusive:!1},raw:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,1,38],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();return a=b}(),i=function(a){"use strict";function b(a,b){return{left:"~"===a.charAt(2),right:"~"===b.charAt(b.length-3)}}function c(a,b,c,d,i,k){if(a.sexpr.id.original!==d.path.original)throw new j(a.sexpr.id.original+" doesn't match "+d.path.original,a);var l=c&&c.program,m={left:a.strip.left,right:d.strip.right,openStandalone:f(b.statements),closeStandalone:e((l||b).statements)};if(a.strip.right&&g(b.statements,null,!0),l){var n=c.strip;n.left&&h(b.statements,null,!0),n.right&&g(l.statements,null,!0),d.strip.left&&h(l.statements,null,!0),e(b.statements)&&f(l.statements)&&(h(b.statements),g(l.statements))}else d.strip.left&&h(b.statements,null,!0);return i?new this.BlockNode(a,l,b,m,k):new this.BlockNode(a,b,l,m,k)}function d(a,b){for(var c=0,d=a.length;d>c;c++){var i=a[c],j=i.strip;if(j){var k=e(a,c,b,"partial"===i.type),l=f(a,c,b),m=j.openStandalone&&k,n=j.closeStandalone&&l,o=j.inlineStandalone&&k&&l;j.right&&g(a,c,!0),j.left&&h(a,c,!0),o&&(g(a,c),h(a,c)&&"partial"===i.type&&(i.indent=/([ \t]+$)/.exec(a[c-1].original)?RegExp.$1:"")),m&&(g((i.program||i.inverse).statements),h(a,c)),n&&(g(a,c),h((i.inverse||i.program).statements))}}return a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"content"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"content"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"content"===d.type&&(c||!d.rightStripped)){var e=d.string;d.string=d.string.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.string!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"content"===d.type&&(c||!d.leftStripped)){var e=d.string;return d.string=d.string.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.string!==e,d.leftStripped}}var i={},j=a;return i.stripFlags=b,i.prepareBlock=c,i.prepareProgram=d,i}(c),j=function(a,b,c,d){"use strict";function e(a){return a.constructor===h.ProgramNode?a:(g.yy=k,g.parse(a))}var f={},g=a,h=b,i=c,j=d.extend;f.parser=g;var k={};return j(k,i,h),f.parse=e,f}(h,g,i,b),k=function(a,b){"use strict";function c(){}function d(a,b,c){if(null==a||"string"!=typeof a&&a.constructor!==c.AST.ProgramNode)throw new h("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function e(a,b,c){function d(){var d=c.parse(a),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}if(null==a||"string"!=typeof a&&a.constructor!==c.AST.ProgramNode)throw new h("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var e,f=function(a,b){return e||(e=d()),e.call(this,a,b)};return f._setup=function(a){return e||(e=d()),e._setup(a)},f._child=function(a,b,c){return e||(e=d()),e._child(a,b,c)},f}function f(a,b){if(a===b)return!0;if(i(a)&&i(b)&&a.length===b.length){for(var c=0;cc;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!f(d.args,e.args))return!1}for(b=this.children.length,c=0;b>c;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.opcodes=[],this.children=[],this.depths={list:[]},this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds;var c=this.options.knownHelpers;if(this.options.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)this.options.knownHelpers[d]=c[d];return this.accept(a)},accept:function(a){return this[a.type](a)},program:function(a){for(var b=a.statements,c=0,d=b.length;d>c;c++)this.accept(b[c]);return this.isSimple=1===d,this.depths.list=this.depths.list.sort(function(a,b){return a-b}),this},compileProgram:function(a){var b,c=(new this.compiler).compile(a,this.options),d=this.guid++; +this.usePartial=this.usePartial||c.usePartial,this.children[d]=c;for(var e=0,f=c.depths.list.length;f>e;e++)b=c.depths.list[e],2>b||this.addDepth(b-1);return d},block:function(a){var b=a.mustache,c=a.program,d=a.inverse;c&&(c=this.compileProgram(c)),d&&(d=this.compileProgram(d));var e=b.sexpr,f=this.classifySexpr(e);"helper"===f?this.helperSexpr(e,c,d):"simple"===f?(this.simpleSexpr(e),this.opcode("pushProgram",c),this.opcode("pushProgram",d),this.opcode("emptyHash"),this.opcode("blockValue",e.id.original)):(this.ambiguousSexpr(e,c,d),this.opcode("pushProgram",c),this.opcode("pushProgram",d),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},hash:function(a){var b,c,d=a.pairs;for(this.opcode("pushHash"),b=0,c=d.length;c>b;b++)this.pushParam(d[b][1]);for(;b--;)this.opcode("assignToHash",d[b][0]);this.opcode("popHash")},partial:function(a){var b=a.partialName;this.usePartial=!0,a.hash?this.accept(a.hash):this.opcode("push","undefined"),a.context?this.accept(a.context):(this.opcode("getContext",0),this.opcode("pushContext")),this.opcode("invokePartial",b.name,a.indent||""),this.opcode("append")},content:function(a){a.string&&this.opcode("appendContent",a.string)},mustache:function(a){this.sexpr(a.sexpr),this.opcode(a.escaped&&!this.options.noEscape?"appendEscaped":"append")},ambiguousSexpr:function(a,b,c){var d=a.id,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.ID(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.id;"DATA"===b.type?this.DATA(b):b.parts.length?this.ID(b):(this.addDepth(b.depth),this.opcode("getContext",b.depth),this.opcode("pushContext")),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.id,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new h("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.falsy=!0,this.ID(e),this.opcode("invokeHelper",d.length,e.original,e.isSimple)}},sexpr:function(a){var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ID:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0];b?this.opcode("lookupOnContext",a.parts,a.falsy,a.isScoped):this.opcode("pushContext")},DATA:function(a){this.options.data=!0,this.opcode("lookupData",a.id.depth,a.id.parts)},STRING:function(a){this.opcode("pushString",a.string)},NUMBER:function(a){this.opcode("pushLiteral",a.number)},BOOLEAN:function(a){this.opcode("pushLiteral",a.bool)},comment:function(){},opcode:function(a){this.opcodes.push({opcode:a,args:j.call(arguments,1)})},addDepth:function(a){0!==a&&(this.depths[a]||(this.depths[a]=!0,this.depths.list.push(a)))},classifySexpr:function(a){var b=a.isHelper,c=a.eligibleHelper,d=this.options;if(c&&!b){var e=a.id.parts[0];d.knownHelpers[e]?b=!0:d.knownHelpersOnly&&(c=!1)}return b?"helper":c?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;c>b;b++)this.pushParam(a[b])},pushParam:function(a){this.stringParams?(a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",a.stringModeValue,a.type),"sexpr"===a.type&&this.sexpr(a)):(this.trackIds&&this.opcode("pushId",a.type,a.idName||a.stringModeValue),this.accept(a))},setupFullMustacheParams:function(a,b,c){var d=a.params;return this.pushParams(d),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.hash(a.hash):this.opcode("emptyHash"),d}},g.precompile=d,g.compile=e,g}(c,b),l=function(a,b){"use strict";function c(a){this.value=a}function d(){}var e,f=a.COMPILER_REVISION,g=a.REVISION_CHANGES,h=b;d.prototype={nameLookup:function(a,b){return d.isValidJavaScriptVariableName(b)?a+"."+b:a+"['"+b+"']"},depthedLookup:function(a){return this.aliases.lookup="this.lookup",'lookup(depths, "'+a+'")'},compilerInfo:function(){var a=f,b=g[a];return[a,b]},appendToBuffer:function(a){return this.environment.isSimple?"return "+a+";":{appendToBuffer:!0,content:a,toString:function(){return"buffer += "+a+";"}}},initializeBuffer:function(){return this.quotedString("")},namespace:"Handlebars",compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.depths.list.length||this.options.compat;var e,f,g,i=a.opcodes;for(f=0,g=i.length;g>f;f++)e=i[f],this[e.opcode].apply(this,e.args);if(this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new h("Compile completed with content left on stack");var j=this.createFunctionContext(d);if(this.isChild)return j;var k={compiler:this.compilerInfo(),main:j},l=this.context.programs;for(f=0,g=l.length;g>f;f++)l[f]&&(k[f]=l[f]);return this.environment.usePartial&&(k.usePartial=!0),this.options.data&&(k.useData=!0),this.useDepths&&(k.useDepths=!0),this.options.compat&&(k.compat=!0),d||(k.compiler=JSON.stringify(k.compiler),k=this.objectLiteral(k)),k},preamble:function(){this.lastContext=0,this.source=[]},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));for(var d in this.aliases)this.aliases.hasOwnProperty(d)&&(b+=", "+d+"="+this.aliases[d]);var e=["depth0","helpers","partials","data"];this.useDepths&&e.push("depths");var f=this.mergeSource(b);return a?(e.push(f),Function.apply(this,e)):"function("+e.join(",")+") {\n "+f+"}"},mergeSource:function(a){for(var b,c,d="",e=!this.forceBuffer,f=0,g=this.source.length;g>f;f++){var h=this.source[f];h.appendToBuffer?b=b?b+"\n + "+h.content:h.content:(b&&(d?d+="buffer += "+b+";\n ":(c=!0,d=b+";\n "),b=void 0),d+=h+"\n ",this.environment.isSimple||(e=!1))}return e?(b||!d)&&(d+="return "+(b||'""')+";\n"):(a+=", buffer = "+(c?"":this.initializeBuffer()),d+=b?"return buffer + "+b+";\n":"return buffer;\n"),a&&(d="var "+a.substring(2)+(c?"":";\n ")+d),d},blockValue:function(a){this.aliases.blockHelperMissing="helpers.blockHelperMissing";var b=[this.contextName(0)];this.setupParams(a,0,b);var c=this.popStack();b.splice(1,0,c),this.push("blockHelperMissing.call("+b.join(", ")+")")},ambiguousBlockValue:function(){this.aliases.blockHelperMissing="helpers.blockHelperMissing";var a=[this.contextName(0)];this.setupParams("",0,a,!0),this.flushInline();var b=this.topStack();a.splice(1,0,b),this.pushSource("if (!"+this.lastHelper+") { "+b+" = blockHelperMissing.call("+a.join(", ")+"); }")},appendContent:function(a){this.pendingContent&&(a=this.pendingContent+a),this.pendingContent=a},append:function(){this.flushInline();var a=this.popStack();this.pushSource("if ("+a+" != null) { "+this.appendToBuffer(a)+" }"),this.environment.isSimple&&this.pushSource("else { "+this.appendToBuffer("''")+" }")},appendEscaped:function(){this.aliases.escapeExpression="this.escapeExpression",this.pushSource(this.appendToBuffer("escapeExpression("+this.popStack()+")"))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c){var d=0,e=a.length;for(c||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[d++]));e>d;d++)this.replaceStack(function(c){var e=this.nameLookup(c,a[d],"context");return b?" && "+e:" != null ? "+e+" : "+c})},lookupData:function(a,b){this.pushStackLiteral(a?"this.data(data, "+a+")":"data");for(var c=b.length,d=0;c>d;d++)this.replaceStack(function(a){return" && "+this.nameLookup(a,b[d],"data")})},resolvePossibleLambda:function(){this.aliases.lambda="this.lambda",this.push("lambda("+this.popStack()+", "+this.contextName(0)+")")},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"sexpr"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(){this.pushStackLiteral("{}"),this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}"))},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push("{"+a.ids.join(",")+"}"),this.stringParams&&(this.push("{"+a.contexts.join(",")+"}"),this.push("{"+a.types.join(",")+"}")),this.push("{\n "+a.values.join(",\n ")+"\n }")},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},push:function(a){return this.inlineStack.push(a),a},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){this.pushStackLiteral(null!=a?this.programExpression(a):null)},invokeHelper:function(a,b,c){this.aliases.helperMissing="helpers.helperMissing";var d=this.popStack(),e=this.setupHelper(a,b),f=(c?e.name+" || ":"")+d+" || helperMissing";this.push("(("+f+").call("+e.callParams+"))")},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(c.name+".call("+c.callParams+")")},invokeAmbiguous:function(a,b){this.aliases.functionType='"function"',this.aliases.helperMissing="helpers.helperMissing",this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper");this.push("((helper = (helper = "+e+" || "+c+") != null ? helper : helperMissing"+(d.paramsInit?"),("+d.paramsInit:"")+"),(typeof helper === functionType ? helper.call("+d.callParams+") : helper))")},invokePartial:function(a,b){var c=[this.nameLookup("partials",a,"partial"),"'"+b+"'","'"+a+"'",this.popStack(),this.popStack(),"helpers","partials"];this.options.data?c.push("data"):this.options.compat&&c.push("undefined"),this.options.compat&&c.push("depths"),this.push("this.invokePartial("+c.join(", ")+")")},assignToHash:function(a){var b,c,d,e=this.popStack();this.trackIds&&(d=this.popStack()),this.stringParams&&(c=this.popStack(),b=this.popStack());var f=this.hash;b&&f.contexts.push("'"+a+"': "+b),c&&f.types.push("'"+a+"': "+c),d&&f.ids.push("'"+a+"': "+d),f.values.push("'"+a+"': ("+e+")")},pushId:function(a,b){"ID"===a||"DATA"===a?this.pushString(b):this.pushStackLiteral("sexpr"===a?"true":"null")},compiler:d,compileChildren:function(a,b){for(var c,d,e=a.children,f=0,g=e.length;g>f;f++){c=e[f],d=new this.compiler;var h=this.matchExistingProgram(c);null==h?(this.context.programs.push(""),h=this.context.programs.length,c.index=h,c.name="program"+h,this.context.programs[h]=d.compile(c,b,this.context,!this.precompile),this.context.environments[h]=c,this.useDepths=this.useDepths||d.useDepths):(c.index=h,c.name="program"+h)}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;c>b;b++){var d=this.context.environments[b];if(d&&d.equals(a))return b}},programExpression:function(a){var b=this.environment.children[a],c=(b.depths.list,this.useDepths),d=[b.index,"data"];return c&&d.push("depths"),"this.program("+d.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},pushStackLiteral:function(a){return this.push(new c(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.quotedString(this.pendingContent))),this.pendingContent=void 0),a&&this.source.push(a)},pushStack:function(a){this.flushInline();var b=this.incrStack();return this.pushSource(b+" = "+a+";"),this.compileStack.push(b),b},replaceStack:function(a){{var b,d,e,f="";this.isInline()}if(!this.isInline())throw new h("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof c)f=b=g.value,e=!0;else{d=!this.stackSlot;var i=d?this.incrStack():this.topStackName();f="("+this.push(i)+" = "+g+")",b=this.topStack()}var j=a.call(this,b);e||this.popStack(),d&&this.stackSlot--,this.push("("+f+j+")")},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;if(a.length){this.inlineStack=[];for(var b=0,d=a.length;d>b;b++){var e=a[b];e instanceof c?this.compileStack.push(e):this.pushStack(e)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),d=(b?this.inlineStack:this.compileStack).pop();if(!a&&d instanceof c)return d.value;if(!b){if(!this.stackSlot)throw new h("Invalid stack pop");this.stackSlot--}return d},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof c?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(this.quotedString(c)+":"+a[c]);return"{"+b.join(",")+"}"},setupHelper:function(a,b,c){var d=[],e=this.setupParams(b,a,d,c),f=this.nameLookup("helpers",b,"helper");return{params:d,paramsInit:e,name:f,callParams:[this.contextName(0)].concat(d).join(", ")}},setupOptions:function(a,b,c){var d,e,f,g={},h=[],i=[],j=[];g.name=this.quotedString(a),g.hash=this.popStack(),this.trackIds&&(g.hashIds=this.popStack()),this.stringParams&&(g.hashTypes=this.popStack(),g.hashContexts=this.popStack()),e=this.popStack(),f=this.popStack(),(f||e)&&(f||(f="this.noop"),e||(e="this.noop"),g.fn=f,g.inverse=e);for(var k=b;k--;)d=this.popStack(),c[k]=d,this.trackIds&&(j[k]=this.popStack()),this.stringParams&&(i[k]=this.popStack(),h[k]=this.popStack());return this.trackIds&&(g.ids="["+j.join(",")+"]"),this.stringParams&&(g.types="["+i.join(",")+"]",g.contexts="["+h.join(",")+"]"),this.options.data&&(g.data="data"),g},setupParams:function(a,b,c,d){var e=this.objectLiteral(this.setupOptions(a,b,c));return d?(this.useRegister("options"),c.push("options"),"options="+e):(c.push(e),"")}};for(var i="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield".split(" "),j=d.RESERVED_WORDS={},k=0,l=i.length;l>k;k++)j[i[k]]=!0;return d.isValidJavaScriptVariableName=function(a){return!d.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},e=d}(d,c),m=function(a,b,c,d,e){"use strict";var f,g=a,h=b,i=c.parser,j=c.parse,k=d.Compiler,l=d.compile,m=d.precompile,n=e,o=g.create,p=function(){var a=o();return a.compile=function(b,c){return l(b,c,a)},a.precompile=function(b,c){return m(b,c,a)},a.AST=h,a.Compiler=k,a.JavaScriptCompiler=n,a.Parser=i,a.parse=j,a};return g=p(),g.create=p,g["default"]=g,f=g}(f,g,j,k,l);return m}); +//# sourceMappingURL=handlebars.min.map \ No newline at end of file diff --git a/common/js/plugins/handlebars/handlebars.min.map b/common/js/plugins/handlebars/handlebars.min.map new file mode 100644 index 000000000..1e458c185 --- /dev/null +++ b/common/js/plugins/handlebars/handlebars.min.map @@ -0,0 +1 @@ +{"version":3,"file":"handlebars.min.js","sources":["handlebars.js"],"names":["root","factory","define","amd","exports","module","Handlebars","this","__module4__","SafeString","string","__exports__","prototype","toString","__module3__","__dependency1__","escapeChar","chr","escape","extend","obj","i","arguments","length","key","Object","hasOwnProperty","call","escapeExpression","possible","test","replace","badChars","isEmpty","value","isArray","appendContextPath","contextPath","id","&","<",">","\"","'","`","isFunction","Array","__module5__","Exception","message","node","line","firstLine","firstColumn","tmp","Error","constructor","idx","errorProps","lineNumber","column","__module2__","__dependency2__","HandlebarsEnvironment","helpers","partials","registerDefaultHelpers","instance","registerHelper","undefined","name","context","options","inverse","fn","ids","each","data","createFrame","Utils","ret","j","index","first","last","conditional","hash","includeZero","level","parseInt","log","field","VERSION","COMPILER_REVISION","REVISION_CHANGES",1,2,3,4,5,6,"objectType","logger","unregisterHelper","registerPartial","partial","unregisterPartial","methodMap","DEBUG","INFO","WARN","ERROR","method","console","object","frame","_parent","__module6__","__dependency3__","checkRevision","compilerInfo","compilerRevision","currentRevision","runtimeVersions","compilerVersions","template","templateSpec","env","main","VM","compiler","invokePartialWrapper","indent","depths","result","invokePartial","compile","compat","lines","split","l","join","container","lookup","len","lambda","current","programs","program","programWrapper","depth","merge","param","common","noop","_setup","useData","initData","useDepths","concat","isTop","usePartial","_child","prog","Function","__module1__","__dependency4__","__dependency5__","base","runtime","create","hb","spec","__module7__","LocationInfo","locInfo","first_line","first_column","lastColumn","last_column","lastLine","last_line","AST","ProgramNode","statements","strip","type","MustacheNode","rawParams","open","charAt","escapeFlag","escaped","sexpr","SexprNode","params","eligibleHelper","isHelper","slice","isSimple","PartialNode","partialName","inlineStandalone","BlockNode","mustache","isInverse","RawBlockNode","content","close","original","ContentNode","HashNode","pairs","IdNode","parts","dig","depthString","part","separator","isScoped","push","idName","stringModeValue","PartialNameNode","DataNode","StringNode","NumberNode","number","Number","BooleanNode","bool","CommentNode","comment","__module9__","handlebars","Parser","yy","parser","trace","symbols_","error","EOF","program_repetition0","statement","block","rawBlock","CONTENT","COMMENT","openRawBlock","END_RAW_BLOCK","OPEN_RAW_BLOCK","CLOSE_RAW_BLOCK","openBlock","block_option0","closeBlock","openInverse","block_option1","OPEN_BLOCK","CLOSE","OPEN_INVERSE","inverseAndProgram","INVERSE","OPEN_ENDBLOCK","path","OPEN","OPEN_UNESCAPED","CLOSE_UNESCAPED","OPEN_PARTIAL","partial_option0","partial_option1","sexpr_repetition0","sexpr_option0","dataName","STRING","NUMBER","BOOLEAN","OPEN_SEXPR","CLOSE_SEXPR","hash_repetition_plus0","hashSegment","ID","EQUALS","DATA","pathSegments","SEP","$accept","$end","terminals_",12,13,15,16,18,24,25,26,28,29,31,32,33,34,42,43,44,45,46,50,51,52,54,"productions_","performAction","yytext","yyleng","yylineno","yystate","$$","$0","prepareProgram","$","_$","prepareBlock","stripFlags","table",7,8,9,10,11,14,19,22,17,30,41,53,35,39,20,27,23,36,38,47,48,49,40,21,37,"defaultActions",57,63,70,73,"parseError","str","parse","input","lex","token","self","lexer","stack","vstack","lstack","recovering","setInput","yylloc","yyloc","ranges","symbol","preErrorSymbol","state","action","r","p","newState","expected","yyval","errStr","showPosition","text","match","loc","range","_input","_more","_less","done","matched","conditionStack","offset","ch","unput","substr","oldLines","more","less","n","pastInput","past","upcomingInput","next","pre","c","tempMatch","rules","_currentRules","flex","matches","begin","condition","popState","pop","conditions","topState","pushState","yy_","$avoiding_name_collisions","YY_START","start","end","mu","inclusive","emu","com","raw","INITIAL","__module10__","left","right","inverted","openStandalone","isNextWhitespace","closeStandalone","isPrevWhitespace","omitRight","inverseStrip","omitLeft","isRoot","_isPrevWhitespace","_isNextWhitespace","exec","RegExp","$1","prev","sibling","multiple","rightStripped","leftStripped","__module8__","Helpers","__module11__","Compiler","precompile","ast","environment","JavaScriptCompiler","compileInput","compiled","argEquals","a","b","equals","other","opcodes","opcode","otherOpcode","args","children","guid","list","stringParams","trackIds","knownHelpers","helperMissing","blockHelperMissing","if","unless","with","accept","sort","compileProgram","addDepth","classifySexpr","helperSexpr","simpleSexpr","ambiguousSexpr","pushParam","noEscape","isBlock","setupFullMustacheParams","knownHelpersOnly","falsy","isEligible","pushParams","val","__module12__","Literal","nameLookup","parent","isValidJavaScriptVariableName","depthedLookup","aliases","revision","versions","appendToBuffer","initializeBuffer","quotedString","namespace","asObject","isChild","environments","preamble","stackSlot","stackVars","registers","hashes","compileStack","inlineStack","compileChildren","apply","pushSource","createFunctionContext","JSON","stringify","objectLiteral","lastContext","source","varDeclarations","locals","alias","mergeSource","buffer","appendFirst","appendOnly","forceBuffer","substring","blockValue","contextName","setupParams","blockName","popStack","splice","ambiguousBlockValue","flushInline","topStack","lastHelper","appendContent","pendingContent","append","local","appendEscaped","getContext","pushContext","pushStackLiteral","lookupOnContext","scoped","replaceStack","lookupData","resolvePossibleLambda","pushStringParam","pushString","emptyHash","pushHash","values","types","contexts","popHash","expr","pushLiteral","pushProgram","programExpression","invokeHelper","paramSize","nonHelper","helper","setupHelper","callParams","invokeKnownHelper","invokeAmbiguous","helperCall","functionType","useRegister","helperName","paramsInit","assignToHash","pushId","child","matchExistingProgram","programParams","item","pushStack","incrStack","callback","createdStack","usedLiteral","prefix","isInline","top","topStackName","entry","wrapped","inline","blockHelper","foundHelper","setupOptions","hashIds","hashTypes","hashContexts","reservedWords","compilerWords","RESERVED_WORDS","__module0__","_create"],"mappings":"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"} \ No newline at end of file diff --git a/modules/editor/skins/xpresseditor/js/smarteditor.js b/modules/editor/skins/xpresseditor/js/smarteditor.js new file mode 100644 index 000000000..8a3060b65 --- /dev/null +++ b/modules/editor/skins/xpresseditor/js/smarteditor.js @@ -0,0 +1,14552 @@ +/** + * SmartEditor2 NAVER_Library:SE2.8.2.O11969 + * Copyright NAVER Corp. Licensed under LGPL v2 + * See license text at http://dev.naver.com/projects/smarteditor/wiki/LICENSE + */ +if (typeof window.nhn == 'undefined') { + window.nhn = {}; +} +if (!nhn.husky) { + nhn.husky = {}; +} +/** + * @fileOverview This file contains Husky framework core + * @name HuskyCore.js + */ +(function() { + var _rxMsgHandler = /^\$(LOCAL|BEFORE|ON|AFTER)_/, + _rxMsgAppReady = /^\$(BEFORE|ON|AFTER)_MSG_APP_READY$/, + _aHuskyCores = [], // HuskyCore instance list + _htLoadedFile = {}; // lazy-loaded file list + + nhn.husky.HuskyCore = jindo.$Class({ + name: "HuskyCore", + aCallerStack: null, + bMobile: jindo.$Agent().navigator().mobile || jindo.$Agent().navigator().msafari, + + $init: function(htOptions) { + this.htOptions = htOptions || {}; + + _aHuskyCores.push(this); + if (this.htOptions.oDebugger) { + nhn.husky.HuskyCore.getCore = function() { + return _aHuskyCores; + }; + this.htOptions.oDebugger.setApp(this); + } + + // To prevent processing a Husky message before all the plugins are registered and ready, + // Queue up all the messages here until the application's status is changed to READY + this.messageQueue = []; + + this.oMessageMap = {}; + this.oDisabledMessage = {}; + this.oLazyMessage = {}; + this.aPlugins = []; + + this.appStatus = nhn.husky.APP_STATUS.NOT_READY; + + this.aCallerStack = []; + + this._fnWaitForPluginReady = jindo.$Fn(this._waitForPluginReady, this).bind(); + + // Register the core as a plugin so it can receive messages + this.registerPlugin(this); + }, + + setDebugger: function(oDebugger) { + this.htOptions.oDebugger = oDebugger; + oDebugger.setApp(this); + }, + + exec: function(msg, args, oEvent) { + // If the application is not yet ready just queue the message + if (this.appStatus == nhn.husky.APP_STATUS.NOT_READY) { + this.messageQueue[this.messageQueue.length] = { + 'msg': msg, + 'args': args, + 'event': oEvent + }; + return true; + } + + this.exec = this._exec; + this.exec(msg, args, oEvent); + }, + + delayedExec: function(msg, args, nDelay, oEvent) { + var fExec = jindo.$Fn(this.exec, this).bind(msg, args, oEvent); + setTimeout(fExec, nDelay); + }, + + _exec: function(msg, args, oEvent) { + return (this._exec = this.htOptions.oDebugger ? this._execWithDebugger : this._execWithoutDebugger).call(this, msg, args, oEvent); + }, + _execWithDebugger: function(msg, args, oEvent) { + this.htOptions.oDebugger.log_MessageStart(msg, args); + var bResult = this._doExec(msg, args, oEvent); + this.htOptions.oDebugger.log_MessageEnd(msg, args); + return bResult; + }, + _execWithoutDebugger: function(msg, args, oEvent) { + return this._doExec(msg, args, oEvent); + }, + _doExec: function(msg, args, oEvent) { + var bContinue = false; + + // Lazy메시지가 있으면 파일을 로딩한다. + if (this.oLazyMessage[msg]) { + var htLazyInfo = this.oLazyMessage[msg]; + this._loadLazyFiles(msg, args, oEvent, htLazyInfo.aFilenames, 0); + return false; + } + + if (!this.oDisabledMessage[msg]) { + var allArgs = []; + if (args && args.length) { + var iLen = args.length; + for (var i = 0; i < iLen; i++) { + allArgs[i] = args[i]; + } + } + if (oEvent) { + allArgs[allArgs.length] = oEvent; + } + + bContinue = this._execMsgStep("BEFORE", msg, allArgs); + if (bContinue) { + bContinue = this._execMsgStep("ON", msg, allArgs); + } + if (bContinue) { + bContinue = this._execMsgStep("AFTER", msg, allArgs); + } + } + + return bContinue; + }, + + + registerPlugin: function(oPlugin) { + if (!oPlugin) { + throw ("An error occured in registerPlugin(): invalid plug-in"); + } + + oPlugin.nIdx = this.aPlugins.length; + oPlugin.oApp = this; + this.aPlugins[oPlugin.nIdx] = oPlugin; + + // If the plugin does not specify that it takes time to be ready, change the stauts to READY right away + if (oPlugin.status != nhn.husky.PLUGIN_STATUS.NOT_READY) { + oPlugin.status = nhn.husky.PLUGIN_STATUS.READY; + } + + // If run() function had been called already, need to recreate the message map + if (this.appStatus != nhn.husky.APP_STATUS.NOT_READY) { + for (var funcName in oPlugin) { + if (_rxMsgHandler.test(funcName)) { + this.addToMessageMap(funcName, oPlugin); + } + } + } + + this.exec("MSG_PLUGIN_REGISTERED", [oPlugin]); + + return oPlugin.nIdx; + }, + + disableMessage: function(sMessage, bDisable) { + this.oDisabledMessage[sMessage] = bDisable; + }, + + registerBrowserEvent: function(obj, sEvent, sMessage, aParams, nDelay) { + aParams = aParams || []; + var func = (nDelay) ? jindo.$Fn(this.delayedExec, this).bind(sMessage, aParams, nDelay) : jindo.$Fn(this.exec, this).bind(sMessage, aParams); + return jindo.$Fn(func, this).attach(obj, sEvent); + }, + + run: function(htOptions) { + this.htRunOptions = htOptions || {}; + + // Change the status from NOT_READY to let exec to process all the way + this._changeAppStatus(nhn.husky.APP_STATUS.WAITING_FOR_PLUGINS_READY); + + // Process all the messages in the queue + var iQueueLength = this.messageQueue.length; + for (var i = 0; i < iQueueLength; i++) { + var curMsgAndArgs = this.messageQueue[i]; + this.exec(curMsgAndArgs.msg, curMsgAndArgs.args, curMsgAndArgs.event); + } + + this._fnWaitForPluginReady(); + }, + + acceptLocalBeforeFirstAgain: function(oPlugin, bAccept) { + // LOCAL_BEFORE_FIRST will be fired again if oPlugin._husky_bRun == false + oPlugin._husky_bRun = !bAccept; + }, + + // Use this also to update the mapping + createMessageMap: function(sMsgHandler) { + this.oMessageMap[sMsgHandler] = []; + + var nLen = this.aPlugins.length; + for (var i = 0; i < nLen; i++) { + this._doAddToMessageMap(sMsgHandler, this.aPlugins[i]); + } + }, + + addToMessageMap: function(sMsgHandler, oPlugin) { + // cannot "ADD" unless the map is already created. + // the message will be added automatically to the mapping when it is first passed anyways, so do not add now + if (!this.oMessageMap[sMsgHandler]) { + return; + } + + this._doAddToMessageMap(sMsgHandler, oPlugin); + }, + + _changeAppStatus: function(appStatus) { + this.appStatus = appStatus; + + // Initiate MSG_APP_READY if the application's status is being switched to READY + if (this.appStatus == nhn.husky.APP_STATUS.READY) { + this.exec("MSG_APP_READY"); + } + }, + + + _execMsgStep: function(sMsgStep, sMsg, args) { + return (this._execMsgStep = this.htOptions.oDebugger ? this._execMsgStepWithDebugger : this._execMsgStepWithoutDebugger).call(this, sMsgStep, sMsg, args); + }, + _execMsgStepWithDebugger: function(sMsgStep, sMsg, args) { + this.htOptions.oDebugger.log_MessageStepStart(sMsgStep, sMsg, args); + var bStatus = this._execMsgHandler("$" + sMsgStep + "_" + sMsg, args); + this.htOptions.oDebugger.log_MessageStepEnd(sMsgStep, sMsg, args); + return bStatus; + }, + _execMsgStepWithoutDebugger: function(sMsgStep, sMsg, args) { + return this._execMsgHandler("$" + sMsgStep + "_" + sMsg, args); + }, + _execMsgHandler: function(sMsgHandler, args) { + var i; + if (!this.oMessageMap[sMsgHandler]) { + this.createMessageMap(sMsgHandler); + } + + var aPlugins = this.oMessageMap[sMsgHandler]; + var iNumOfPlugins = aPlugins.length; + + if (iNumOfPlugins === 0) { + return true; + } + + var bResult = true; + + // two similar codes were written twice due to the performace. + if (_rxMsgAppReady.test(sMsgHandler)) { + for (i = 0; i < iNumOfPlugins; i++) { + if (this._execHandler(aPlugins[i], sMsgHandler, args) === false) { + bResult = false; + break; + } + } + } else { + for (i = 0; i < iNumOfPlugins; i++) { + if (!aPlugins[i]._husky_bRun) { + aPlugins[i]._husky_bRun = true; + if (typeof aPlugins[i].$LOCAL_BEFORE_FIRST == "function" && this._execHandler(aPlugins[i], "$LOCAL_BEFORE_FIRST", [sMsgHandler, args]) === false) { + continue; + } + } + + if (typeof aPlugins[i].$LOCAL_BEFORE_ALL == "function") { + if (this._execHandler(aPlugins[i], "$LOCAL_BEFORE_ALL", [sMsgHandler, args]) === false) { + continue; + } + } + + if (this._execHandler(aPlugins[i], sMsgHandler, args) === false) { + bResult = false; + break; + } + } + } + + return bResult; + }, + + + _execHandler: function(oPlugin, sHandler, args) { + return (this._execHandler = this.htOptions.oDebugger ? this._execHandlerWithDebugger : this._execHandlerWithoutDebugger).call(this, oPlugin, sHandler, args); + }, + _execHandlerWithDebugger: function(oPlugin, sHandler, args) { + this.htOptions.oDebugger.log_CallHandlerStart(oPlugin, sHandler, args); + var bResult; + try { + this.aCallerStack.push(oPlugin); + bResult = oPlugin[sHandler].apply(oPlugin, args); + this.aCallerStack.pop(); + } catch (e) { + this.htOptions.oDebugger.handleException(e); + bResult = false; + } + this.htOptions.oDebugger.log_CallHandlerEnd(oPlugin, sHandler, args); + return bResult; + }, + _execHandlerWithoutDebugger: function(oPlugin, sHandler, args) { + this.aCallerStack.push(oPlugin); + var bResult = oPlugin[sHandler].apply(oPlugin, args); + this.aCallerStack.pop(); + + return bResult; + }, + + + _doAddToMessageMap: function(sMsgHandler, oPlugin) { + if (typeof oPlugin[sMsgHandler] != "function") { + return; + } + + var aMap = this.oMessageMap[sMsgHandler]; + // do not add if the plugin is already in the mapping + for (var i = 0, iLen = aMap.length; i < iLen; i++) { + if (this.oMessageMap[sMsgHandler][i] == oPlugin) { + return; + } + } + this.oMessageMap[sMsgHandler][i] = oPlugin; + }, + + _waitForPluginReady: function() { + var bAllReady = true; + for (var i = 0; i < this.aPlugins.length; i++) { + if (this.aPlugins[i].status == nhn.husky.PLUGIN_STATUS.NOT_READY) { + bAllReady = false; + break; + } + } + if (bAllReady) { + this._changeAppStatus(nhn.husky.APP_STATUS.READY); + } else { + setTimeout(this._fnWaitForPluginReady, 100); + } + }, + + /** + * Lazy로딩을 실행한다. + * @param {Object} oPlugin 플러그인 인스턴스 + * @param {String} sMsg 메시지명 + * @param {Array} aArgs 메시지에 전달되는 매개변수 + * @param {Event} oEvent 메시지에 전달되는 이벤트 + * @param {Array} aFilenames Lazy로딩할 파일명 + * @param {Integer} nIdx 로딩할 파일인덱스 + */ + _loadLazyFiles: function(sMsg, aArgs, oEvent, aFilenames, nIdx) { + var nLen = aFilenames.length; + if (nLen <= nIdx) { + // 파일이 모두 로딩된 상태라면 oLazyMessage 에서 정보를 제거하고 메시지를 실행한다. + this.oLazyMessage[sMsg] = null; + this.oApp.exec(sMsg, aArgs, oEvent); + return; + } + + var sFilename = aFilenames[nIdx]; + + if (_htLoadedFile[sFilename]) { + // 파일이 이미 로딩된 경우 다음 파일을 로딩한다. + this._loadLazyFiles(sMsg, aArgs, oEvent, aFilenames, nIdx + 1); + } else { + // 파일을 Lazy로딩한다. + // TODO: 진도컴포넌트 디펜던시 제거? + // TODO: 응답결과가 정상적이지 않을 경우에 대한 처리? + jindo.LazyLoading.load(nhn.husky.SE2M_Configuration.LazyLoad.sJsBaseURI + "/" + sFilename, + jindo.$Fn(function(sMsg, aArgs, oEvent, aFilenames, nIdx) { + // 로딩완료된 파일은 상태를 변경하고 + var sFilename = aFilenames[nIdx]; + _htLoadedFile[sFilename] = 1; + // 다음 파일을 로딩한다. + this._loadLazyFiles(sMsg, aArgs, oEvent, aFilenames, nIdx + 1); + }, this).bind(sMsg, aArgs, oEvent, aFilenames, nIdx), + "utf-8" + ); + } + }, + + /** + * Lazy로딩으로 처리할 메시지를 등록한다. + * @param {Array} aMsgs 메시지명 + * @param {Array} aFilenames Lazy로딩할 파일명 + */ + registerLazyMessage: function(aMsgs, aFilenames) { + aMsgs = aMsgs || []; + aFilenames = aFilenames || []; + + for (var i = 0, sMsg, htLazyInfo; + (sMsg = aMsgs[i]); i++) { + htLazyInfo = this.oLazyMessage[sMsg]; + if (htLazyInfo) { + htLazyInfo.aFilenames = htLazyInfo.aFilenames.concat(aFilenames); + } else { + this.oLazyMessage[sMsg] = { + sMsg: sMsg, + aFilenames: aFilenames + }; + } + } + } + }); + + /** + * Lazy로딩완료된 파일목록 + */ + nhn.husky.HuskyCore._htLoadedFile = {}; + /** + * Lazy로딩완료된 파일목록에 파일명을 추가한다. + * @param {String} sFilename Lazy로딩완료될 경우 마킹할 파일명 + */ + nhn.husky.HuskyCore.addLoadedFile = function(sFilename) { + _htLoadedFile[sFilename] = 1; + }; + nhn.husky.APP_STATUS = { + 'NOT_READY': 0, + 'WAITING_FOR_PLUGINS_READY': 1, + 'READY': 2 + }; + + nhn.husky.PLUGIN_STATUS = { + 'NOT_READY': 0, + 'READY': 1 + }; +})(); +if (typeof window.nhn == 'undefined') { + window.nhn = {}; +} + +nhn.CurrentSelection_IE = function() { + this.getCommonAncestorContainer = function() { + try { + this._oSelection = this._document.selection; + if (this._oSelection.type == "Control") { + return this._oSelection.createRange().item(0); + } else { + return this._oSelection.createRangeCollection().item(0).parentElement(); + } + } catch (e) { + return this._document.body; + } + }; + + this.isCollapsed = function() { + this._oSelection = this._document.selection; + + return this._oSelection.type == "None"; + }; +}; + +nhn.CurrentSelection_FF = function() { + this.getCommonAncestorContainer = function() { + return this._getSelection().commonAncestorContainer; + }; + + this.isCollapsed = function() { + var oSelection = this._window.getSelection(); + + if (oSelection.rangeCount < 1) { + return true; + } + return oSelection.getRangeAt(0).collapsed; + }; + + this._getSelection = function() { + try { + return this._window.getSelection().getRangeAt(0); + } catch (e) { + return this._document.createRange(); + } + }; +}; + +nhn.CurrentSelection = new(jindo.$Class({ + $init: function() { + var oAgentInfo = jindo.$Agent().navigator(); + if (oAgentInfo.ie && document.selection) { + nhn.CurrentSelection_IE.apply(this); + } else { + nhn.CurrentSelection_FF.apply(this); + } + }, + + setWindow: function(oWin) { + this._window = oWin; + this._document = oWin.document; + } +}))(); + +/** + * @fileOverview This file contains a cross-browser implementation of W3C's DOM Range + * @name W3CDOMRange.js + */ +nhn.W3CDOMRange = jindo.$Class({ + $init: function(win) { + this.reset(win); + }, + + reset: function(win) { + this._window = win; + this._document = this._window.document; + + this.collapsed = true; + this.commonAncestorContainer = this._document.body; + this.endContainer = this._document.body; + this.endOffset = 0; + this.startContainer = this._document.body; + this.startOffset = 0; + + this.oBrowserSelection = new nhn.BrowserSelection(this._window); + this.selectionLoaded = this.oBrowserSelection.selectionLoaded; + }, + + cloneContents: function() { + var oClonedContents = this._document.createDocumentFragment(); + var oTmpContainer = this._document.createDocumentFragment(); + + var aNodes = this._getNodesInRange(); + + if (aNodes.length < 1) { + return oClonedContents; + } + + var oClonedContainers = this._constructClonedTree(aNodes, oTmpContainer); + + // oTopContainer = aNodes[aNodes.length-1].parentNode and this is not part of the initial array and only those child nodes should be cloned + var oTopContainer = oTmpContainer.firstChild; + + if (oTopContainer) { + var elCurNode = oTopContainer.firstChild; + var elNextNode; + + while (elCurNode) { + elNextNode = elCurNode.nextSibling; + oClonedContents.appendChild(elCurNode); + elCurNode = elNextNode; + } + } + + oClonedContainers = this._splitTextEndNodes({ + oStartContainer: oClonedContainers.oStartContainer, + iStartOffset: this.startOffset, + oEndContainer: oClonedContainers.oEndContainer, + iEndOffset: this.endOffset + }); + + if (oClonedContainers.oStartContainer && oClonedContainers.oStartContainer.previousSibling) { + nhn.DOMFix.parentNode(oClonedContainers.oStartContainer).removeChild(oClonedContainers.oStartContainer.previousSibling); + } + + if (oClonedContainers.oEndContainer && oClonedContainers.oEndContainer.nextSibling) { + nhn.DOMFix.parentNode(oClonedContainers.oEndContainer).removeChild(oClonedContainers.oEndContainer.nextSibling); + } + + return oClonedContents; + }, + + _constructClonedTree: function(aNodes, oClonedParentNode) { + var oClonedStartContainer = null; + var oClonedEndContainer = null; + + var oStartContainer = this.startContainer; + var oEndContainer = this.endContainer; + + var _recurConstructClonedTree = function(aAllNodes, iCurIdx, oClonedParentNode) { + + if (iCurIdx < 0) { + return iCurIdx; + } + + var iChildIdx = iCurIdx - 1; + + var oCurNodeCloneWithChildren = aAllNodes[iCurIdx].cloneNode(false); + + if (aAllNodes[iCurIdx] == oStartContainer) { + oClonedStartContainer = oCurNodeCloneWithChildren; + } + if (aAllNodes[iCurIdx] == oEndContainer) { + oClonedEndContainer = oCurNodeCloneWithChildren; + } + + while (iChildIdx >= 0 && nhn.DOMFix.parentNode(aAllNodes[iChildIdx]) == aAllNodes[iCurIdx]) { + iChildIdx = this._recurConstructClonedTree(aAllNodes, iChildIdx, oCurNodeCloneWithChildren); + } + + // this may trigger an error message in IE when an erroneous script is inserted + oClonedParentNode.insertBefore(oCurNodeCloneWithChildren, oClonedParentNode.firstChild); + + return iChildIdx; + }; + this._recurConstructClonedTree = _recurConstructClonedTree; + aNodes[aNodes.length] = nhn.DOMFix.parentNode(aNodes[aNodes.length - 1]); + this._recurConstructClonedTree(aNodes, aNodes.length - 1, oClonedParentNode); + + return { + oStartContainer: oClonedStartContainer, + oEndContainer: oClonedEndContainer + }; + }, + + cloneRange: function() { + return this._copyRange(new nhn.W3CDOMRange(this._window)); + }, + + _copyRange: function(oClonedRange) { + oClonedRange.collapsed = this.collapsed; + oClonedRange.commonAncestorContainer = this.commonAncestorContainer; + oClonedRange.endContainer = this.endContainer; + oClonedRange.endOffset = this.endOffset; + oClonedRange.startContainer = this.startContainer; + oClonedRange.startOffset = this.startOffset; + oClonedRange._document = this._document; + + return oClonedRange; + }, + + collapse: function(toStart) { + if (toStart) { + this.endContainer = this.startContainer; + this.endOffset = this.startOffset; + } else { + this.startContainer = this.endContainer; + this.startOffset = this.endOffset; + } + + this._updateRangeInfo(); + }, + + compareBoundaryPoints: function(how, sourceRange) { + switch (how) { + case nhn.W3CDOMRange.START_TO_START: + return this._compareEndPoint(this.startContainer, this.startOffset, sourceRange.startContainer, sourceRange.startOffset); + case nhn.W3CDOMRange.START_TO_END: + return this._compareEndPoint(this.endContainer, this.endOffset, sourceRange.startContainer, sourceRange.startOffset); + case nhn.W3CDOMRange.END_TO_END: + return this._compareEndPoint(this.endContainer, this.endOffset, sourceRange.endContainer, sourceRange.endOffset); + case nhn.W3CDOMRange.END_TO_START: + return this._compareEndPoint(this.startContainer, this.startOffset, sourceRange.endContainer, sourceRange.endOffset); + } + }, + + _findBody: function(oNode) { + if (!oNode) { + return null; + } + while (oNode) { + if (oNode.tagName == "BODY") { + return oNode; + } + oNode = nhn.DOMFix.parentNode(oNode); + } + return null; + }, + + _compareEndPoint: function(oContainerA, iOffsetA, oContainerB, iOffsetB) { + return this.oBrowserSelection.compareEndPoints(oContainerA, iOffsetA, oContainerB, iOffsetB); + + var iIdxA, iIdxB; + + if (!oContainerA || this._findBody(oContainerA) != this._document.body) { + oContainerA = this._document.body; + iOffsetA = 0; + } + + if (!oContainerB || this._findBody(oContainerB) != this._document.body) { + oContainerB = this._document.body; + iOffsetB = 0; + } + + var compareIdx = function(iIdxA, iIdxB) { + // iIdxX == -1 when the node is the commonAncestorNode + // if iIdxA == -1 + // -> [[...]]... + // if iIdxB == -1 + // -> ...[[...]] + if (iIdxB == -1) { + iIdxB = iIdxA + 1; + } + if (iIdxA < iIdxB) { + return -1; + } + if (iIdxA == iIdxB) { + return 0; + } + return 1; + }; + + var oCommonAncestor = this._getCommonAncestorContainer(oContainerA, oContainerB); + + // ================================================================================================================================================ + // Move up both containers so that both containers are direct child nodes of the common ancestor node. From there, just compare the offset + // Add 0.5 for each contaienrs that has "moved up" since the actual node is wrapped by 1 or more parent nodes and therefore its position is somewhere between idx & idx+1 + // NODE1

NODE2

NODE3
+ // The position of NODE2 in COMMON_ANCESTOR is somewhere between after NODE1(idx1) and before NODE3(idx2), so we let that be 1.5 + + // container node A in common ancestor container + var oNodeA = oContainerA; + var oTmpNode = null; + if (oNodeA != oCommonAncestor) { + while ((oTmpNode = xe.DOMFix.parentNode(oNodeA)) != oCommonAncestor) { + oNodeA = oTmpNode; + } + + iIdxA = this._getPosIdx(oNodeA) + 0.5; + } else iIdxA = iOffsetA; + + // container node B in common ancestor container + var oNodeB = oContainerB; + if (oNodeB != oCommonAncestor) { + while ((oTmpNode = xe.DOMFix.parentNode(oNodeB)) != oCommonAncestor) { + oNodeB = oTmpNode; + } + + iIdxB = this._getPosIdx(oNodeB) + 0.5; + } else iIdxB = iOffsetB; + + return compareIdx(iIdxA, iIdxB); + }, + + _getCommonAncestorContainer: function(oNode1, oNode2) { + oNode1 = oNode1 || this.startContainer; + oNode2 = oNode2 || this.endContainer; + + var oComparingNode = oNode2; + + while (oNode1) { + while (oComparingNode) { + if (oNode1 == oComparingNode) { + return oNode1; + } + oComparingNode = nhn.DOMFix.parentNode(oComparingNode); + } + oComparingNode = oNode2; + oNode1 = nhn.DOMFix.parentNode(oNode1); + } + + return this._document.body; + }, + + deleteContents: function() { + if (this.collapsed) { + return; + } + + this._splitTextEndNodesOfTheRange(); + + var aNodes = this._getNodesInRange(); + + if (aNodes.length < 1) { + return; + } + var oPrevNode = aNodes[0].previousSibling; + + while (oPrevNode && this._isBlankTextNode(oPrevNode)) { + oPrevNode = oPrevNode.previousSibling; + } + + var oNewStartContainer, iNewOffset = -1; + if (!oPrevNode) { + oNewStartContainer = nhn.DOMFix.parentNode(aNodes[0]); + iNewOffset = 0; + } + + for (var i = 0; i < aNodes.length; i++) { + var oNode = aNodes[i]; + + if (!oNode.firstChild || this._isAllChildBlankText(oNode)) { + if (oNewStartContainer == oNode) { + iNewOffset = this._getPosIdx(oNewStartContainer); + oNewStartContainer = nhn.DOMFix.parentNode(oNode); + } + nhn.DOMFix.parentNode(oNode).removeChild(oNode); + } else { + if (oNewStartContainer == oNode && iNewOffset === 0) { + iNewOffset = this._getPosIdx(oNewStartContainer); + oNewStartContainer = nhn.DOMFix.parentNode(oNode); + } + } + } + + if (!oPrevNode) { + this.setStart(oNewStartContainer, iNewOffset, true, true); + } else { + if (oPrevNode.tagName == "BODY") { + this.setStartBefore(oPrevNode, true); + } else { + this.setStartAfter(oPrevNode, true); + } + } + + this.collapse(true); + }, + + extractContents: function() { + var oClonedContents = this.cloneContents(); + this.deleteContents(); + return oClonedContents; + }, + + getInsertBeforeNodes: function() { + var oFirstNode = null; + + var oParentContainer; + + if (this.startContainer.nodeType == "3") { + oParentContainer = nhn.DOMFix.parentNode(this.startContainer); + if (this.startContainer.nodeValue.length <= this.startOffset) { + oFirstNode = this.startContainer.nextSibling; + } else { + oFirstNode = this.startContainer.splitText(this.startOffset); + } + } else { + oParentContainer = this.startContainer; + oFirstNode = nhn.DOMFix.childNodes(this.startContainer)[this.startOffset]; + } + + if (!oFirstNode || !nhn.DOMFix.parentNode(oFirstNode)) { + oFirstNode = null; + } + + return { + elParent: oParentContainer, + elBefore: oFirstNode + }; + }, + + insertNode: function(newNode) { + var oInsertBefore = this.getInsertBeforeNodes(); + + oInsertBefore.elParent.insertBefore(newNode, oInsertBefore.elBefore); + + this.setStartBefore(newNode); + }, + + selectNode: function(refNode) { + this.reset(this._window); + + this.setStartBefore(refNode); + this.setEndAfter(refNode); + }, + + selectNodeContents: function(refNode) { + this.reset(this._window); + + this.setStart(refNode, 0, true); + this.setEnd(refNode, nhn.DOMFix.childNodes(refNode).length); + }, + + _endsNodeValidation: function(oNode, iOffset) { + if (!oNode || this._findBody(oNode) != this._document.body) { + throw new Error("INVALID_NODE_TYPE_ERR oNode is not part of current document"); + } + + if (oNode.nodeType == 3) { + if (iOffset > oNode.nodeValue.length) {iOffset = oNode.nodeValue.length; } + } else { + if (iOffset > nhn.DOMFix.childNodes(oNode).length) { + iOffset = nhn.DOMFix.childNodes(oNode).length; + } + } + + return iOffset; + }, + + + setEnd: function(refNode, offset, bSafe, bNoUpdate) { + if (!bSafe) { + offset = this._endsNodeValidation(refNode, offset); + } + + this.endContainer = refNode; + this.endOffset = offset; + + if (!bNoUpdate) { + if (!this.startContainer || this._compareEndPoint(this.startContainer, this.startOffset, this.endContainer, this.endOffset) != -1) { + this.collapse(false); + } else { + this._updateRangeInfo(); + } + } + }, + + setEndAfter: function(refNode, bNoUpdate) { + if (!refNode) { + throw new Error("INVALID_NODE_TYPE_ERR in setEndAfter"); + } + + if (refNode.tagName == "BODY") { + this.setEnd(refNode, nhn.DOMFix.childNodes(refNode).length, true, bNoUpdate); + return; + } + this.setEnd(nhn.DOMFix.parentNode(refNode), this._getPosIdx(refNode) + 1, true, bNoUpdate); + }, + + setEndBefore: function(refNode, bNoUpdate) { + if (!refNode) { + throw new Error("INVALID_NODE_TYPE_ERR in setEndBefore"); + } + + if (refNode.tagName == "BODY") { + this.setEnd(refNode, 0, true, bNoUpdate); + return; + } + + this.setEnd(nhn.DOMFix.parentNode(refNode), this._getPosIdx(refNode), true, bNoUpdate); + }, + + setStart: function(refNode, offset, bSafe, bNoUpdate) { + if (!bSafe) { + offset = this._endsNodeValidation(refNode, offset); + } + + this.startContainer = refNode; + this.startOffset = offset; + + if (!bNoUpdate) { + if (!this.endContainer || this._compareEndPoint(this.startContainer, this.startOffset, this.endContainer, this.endOffset) != -1) { + this.collapse(true); + } else { + this._updateRangeInfo(); + } + } + }, + + setStartAfter: function(refNode, bNoUpdate) { + if (!refNode) { + throw new Error("INVALID_NODE_TYPE_ERR in setStartAfter"); + } + + if (refNode.tagName == "BODY") { + this.setStart(refNode, nhn.DOMFix.childNodes(refNode).length, true, bNoUpdate); + return; + } + + this.setStart(nhn.DOMFix.parentNode(refNode), this._getPosIdx(refNode) + 1, true, bNoUpdate); + }, + + setStartBefore: function(refNode, bNoUpdate) { + if (!refNode) { + throw new Error("INVALID_NODE_TYPE_ERR in setStartBefore"); + } + + if (refNode.tagName == "BODY") { + this.setStart(refNode, 0, true, bNoUpdate); + return; + } + this.setStart(nhn.DOMFix.parentNode(refNode), this._getPosIdx(refNode), true, bNoUpdate); + }, + + surroundContents: function(newParent) { + newParent.appendChild(this.extractContents()); + this.insertNode(newParent); + this.selectNode(newParent); + }, + + toString: function() { + var oTmpContainer = this._document.createElement("DIV"); + oTmpContainer.appendChild(this.cloneContents()); + + return oTmpContainer.textContent || oTmpContainer.innerText || ""; + }, + + // this.oBrowserSelection.getCommonAncestorContainer which uses browser's built-in API runs faster but may return an incorrect value. + // Call this function to fix the problem. + // + // In IE, the built-in API would return an incorrect value when, + // 1. commonAncestorContainer is not selectable + // AND + // 2. The selected area will look the same when its child node is selected + // eg) + // when

TEST

is selected, TEST will be returned as commonAncestorContainer + fixCommonAncestorContainer: function() { + if (!jindo.$Agent().navigator().ie) { + return; + } + + this.commonAncestorContainer = this._getCommonAncestorContainer(); + }, + + _isBlankTextNode: function(oNode) { + if (oNode.nodeType == 3 && oNode.nodeValue == "") { + return true; + } + return false; + }, + + _isAllChildBlankText: function(elNode) { + for (var i = 0, nLen = elNode.childNodes.length; i < nLen; i++) { + if (!this._isBlankTextNode(elNode.childNodes[i])) { + return false; + } + } + return true; + }, + + _getPosIdx: function(refNode) { + var idx = 0; + for (var node = refNode.previousSibling; node; node = node.previousSibling) { + idx++; + } + + return idx; + }, + + _updateRangeInfo: function() { + if (!this.startContainer) { + this.reset(this._window); + return; + } + + // isCollapsed may not function correctly when the cursor is located, + // (below a table) AND (at the end of the document where there's no P tag or anything else to actually hold the cursor) + this.collapsed = this.oBrowserSelection.isCollapsed(this) || (this.startContainer === this.endContainer && this.startOffset === this.endOffset); + // this.collapsed = this._isCollapsed(this.startContainer, this.startOffset, this.endContainer, this.endOffset); + this.commonAncestorContainer = this.oBrowserSelection.getCommonAncestorContainer(this); + // this.commonAncestorContainer = this._getCommonAncestorContainer(this.startContainer, this.endContainer); + }, + + _isCollapsed: function(oStartContainer, iStartOffset, oEndContainer, iEndOffset) { + var bCollapsed = false; + + if (oStartContainer == oEndContainer && iStartOffset == iEndOffset) { + bCollapsed = true; + } else { + var oActualStartNode = this._getActualStartNode(oStartContainer, iStartOffset); + var oActualEndNode = this._getActualEndNode(oEndContainer, iEndOffset); + + // Take the parent nodes on the same level for easier comparison when they're next to each other + // eg) From + // + // + // + // + // + // + // + // + // + // + // + // + // , it's easier to compare the position of B and D rather than C and F because they are siblings + // + // If the range were collapsed, oActualEndNode will precede oActualStartNode by doing this + oActualStartNode = this._getNextNode(this._getPrevNode(oActualStartNode)); + oActualEndNode = this._getPrevNode(this._getNextNode(oActualEndNode)); + + if (oActualStartNode && oActualEndNode && oActualEndNode.tagName != "BODY" && + (this._getNextNode(oActualEndNode) == oActualStartNode || (oActualEndNode == oActualStartNode && this._isBlankTextNode(oActualEndNode))) + ) { + bCollapsed = true; + } + } + + return bCollapsed; + }, + + _splitTextEndNodesOfTheRange: function() { + var oEndPoints = this._splitTextEndNodes({ + oStartContainer: this.startContainer, + iStartOffset: this.startOffset, + oEndContainer: this.endContainer, + iEndOffset: this.endOffset + }); + + this.startContainer = oEndPoints.oStartContainer; + this.startOffset = oEndPoints.iStartOffset; + + this.endContainer = oEndPoints.oEndContainer; + this.endOffset = oEndPoints.iEndOffset; + }, + + _splitTextEndNodes: function(oEndPoints) { + oEndPoints = this._splitStartTextNode(oEndPoints); + oEndPoints = this._splitEndTextNode(oEndPoints); + + return oEndPoints; + }, + + _splitStartTextNode: function(oEndPoints) { + var oStartContainer = oEndPoints.oStartContainer; + var iStartOffset = oEndPoints.iStartOffset; + + var oEndContainer = oEndPoints.oEndContainer; + var iEndOffset = oEndPoints.iEndOffset; + + if (!oStartContainer) { + return oEndPoints; + } + if (oStartContainer.nodeType != 3) { + return oEndPoints; + } + if (iStartOffset === 0) { + return oEndPoints; + } + + if (oStartContainer.nodeValue.length <= iStartOffset) { + return oEndPoints; + } + + var oLastPart = oStartContainer.splitText(iStartOffset); + + if (oStartContainer == oEndContainer) { + iEndOffset -= iStartOffset; + oEndContainer = oLastPart; + } + oStartContainer = oLastPart; + iStartOffset = 0; + + return { + oStartContainer: oStartContainer, + iStartOffset: iStartOffset, + oEndContainer: oEndContainer, + iEndOffset: iEndOffset + }; + }, + + _splitEndTextNode: function(oEndPoints) { + var oStartContainer = oEndPoints.oStartContainer; + var iStartOffset = oEndPoints.iStartOffset; + + var oEndContainer = oEndPoints.oEndContainer; + var iEndOffset = oEndPoints.iEndOffset; + + if (!oEndContainer) { + return oEndPoints; + } + if (oEndContainer.nodeType != 3) { + return oEndPoints; + } + + if (iEndOffset >= oEndContainer.nodeValue.length) { + return oEndPoints; + } + if (iEndOffset === 0) { + return oEndPoints; + } + + oEndContainer.splitText(iEndOffset); + + return { + oStartContainer: oStartContainer, + iStartOffset: iStartOffset, + oEndContainer: oEndContainer, + iEndOffset: iEndOffset + }; + }, + + _getNodesInRange: function() { + if (this.collapsed) { + return []; + } + + var oStartNode = this._getActualStartNode(this.startContainer, this.startOffset); + var oEndNode = this._getActualEndNode(this.endContainer, this.endOffset); + + return this._getNodesBetween(oStartNode, oEndNode); + }, + + _getActualStartNode: function(oStartContainer, iStartOffset) { + var oStartNode = oStartContainer; + + if (oStartContainer.nodeType == 3) { + if (iStartOffset >= oStartContainer.nodeValue.length) { + oStartNode = this._getNextNode(oStartContainer); + if (oStartNode.tagName == "BODY") { + oStartNode = null; + } + } else { + oStartNode = oStartContainer; + } + } else { + if (iStartOffset < nhn.DOMFix.childNodes(oStartContainer).length) { + oStartNode = nhn.DOMFix.childNodes(oStartContainer)[iStartOffset]; + } else { + oStartNode = this._getNextNode(oStartContainer); + if (oStartNode.tagName == "BODY") { + oStartNode = null; + } + } + } + + return oStartNode; + }, + + _getActualEndNode: function(oEndContainer, iEndOffset) { + var oEndNode = oEndContainer; + + if (iEndOffset === 0) { + oEndNode = this._getPrevNode(oEndContainer); + if (oEndNode.tagName == "BODY") { + oEndNode = null; + } + } else if (oEndContainer.nodeType == 3) { + oEndNode = oEndContainer; + } else { + oEndNode = nhn.DOMFix.childNodes(oEndContainer)[iEndOffset - 1]; + } + + return oEndNode; + }, + + _getNextNode: function(oNode) { + if (!oNode || oNode.tagName == "BODY") { + return this._document.body; + } + + if (oNode.nextSibling) { + return oNode.nextSibling; + } + + return this._getNextNode(nhn.DOMFix.parentNode(oNode)); + }, + + _getPrevNode: function(oNode) { + if (!oNode || oNode.tagName == "BODY") { + return this._document.body; + } + + if (oNode.previousSibling) { + return oNode.previousSibling; + } + + return this._getPrevNode(nhn.DOMFix.parentNode(oNode)); + }, + + // includes partially selected + // for
, _getNodesBetween(b, c) will yield to b, "a" and c + _getNodesBetween: function(oStartNode, oEndNode) { + var aNodesBetween = []; + this._nNodesBetweenLen = 0; + + if (!oStartNode || !oEndNode) { + return aNodesBetween; + } + + // IE may throw an exception on "oCurNode = oCurNode.nextSibling;" when oCurNode is 'invalid', not null or undefined but somehow 'invalid'. + // It happened during browser's build-in UNDO with control range selected(table). + try { + this._recurGetNextNodesUntil(oStartNode, oEndNode, aNodesBetween); + } catch (e) { + return []; + } + + return aNodesBetween; + }, + + _recurGetNextNodesUntil: function(oNode, oEndNode, aNodesBetween) { + if (!oNode) { + return false; + } + + if (!this._recurGetChildNodesUntil(oNode, oEndNode, aNodesBetween)) { + return false; + } + + var oNextToChk = oNode.nextSibling; + + while (!oNextToChk) { + if (!(oNode = nhn.DOMFix.parentNode(oNode))) { + return false; + } + + aNodesBetween[this._nNodesBetweenLen++] = oNode; + + if (oNode == oEndNode) { + return false; + } + + oNextToChk = oNode.nextSibling; + } + + return this._recurGetNextNodesUntil(oNextToChk, oEndNode, aNodesBetween); + }, + + _recurGetChildNodesUntil: function(oNode, oEndNode, aNodesBetween) { + if (!oNode) { + return false; + } + + var bEndFound = false; + var oCurNode = oNode; + if (oCurNode.firstChild) { + oCurNode = oCurNode.firstChild; + while (oCurNode) { + if (!this._recurGetChildNodesUntil(oCurNode, oEndNode, aNodesBetween)) { + bEndFound = true; + break; + } + oCurNode = oCurNode.nextSibling; + } + } + aNodesBetween[this._nNodesBetweenLen++] = oNode; + + if (bEndFound) { + return false; + } + if (oNode == oEndNode) { + return false; + } + + return true; + } +}); + +nhn.W3CDOMRange.START_TO_START = 0; +nhn.W3CDOMRange.START_TO_END = 1; +nhn.W3CDOMRange.END_TO_END = 2; +nhn.W3CDOMRange.END_TO_START = 3; + + +/** + * @fileOverview This file contains a cross-browser function that implements all of the W3C's DOM Range specification and some more + * @name HuskyRange.js + */ +nhn.HuskyRange = jindo.$Class({ + _rxCursorHolder: /^(?:\uFEFF|\u00A0|\u200B|
)$/i, + _rxTextAlign: /text-align:[^"';]*;?/i, + + setWindow: function(win) { + this.reset(win || window); + }, + + $init: function(win) { + this.HUSKY_BOOMARK_START_ID_PREFIX = "husky_bookmark_start_"; + this.HUSKY_BOOMARK_END_ID_PREFIX = "husky_bookmark_end_"; + + this.sBlockElement = "P|DIV|LI|H[1-6]|PRE"; + this.sBlockContainer = "BODY|TABLE|TH|TR|TD|UL|OL|BLOCKQUOTE|FORM"; + + this.rxBlockElement = new RegExp("^(" + this.sBlockElement + ")$"); + this.rxBlockContainer = new RegExp("^(" + this.sBlockContainer + ")$"); + this.rxLineBreaker = new RegExp("^(" + this.sBlockElement + "|" + this.sBlockContainer + ")$"); + this.rxHasBlock = new RegExp("(?:<(?:" + this.sBlockElement + "|" + this.sBlockContainer + ").*?>|style=[\"']?[^>]*?(?:display\s?:\s?block)[^>]*?[\"']?)", "gi"); + + this.setWindow(win); + }, + + select: function() { + try { + this.oBrowserSelection.selectRange(this); + } catch (e) {} + }, + + setFromSelection: function(iNum) { + this.setRange(this.oBrowserSelection.getRangeAt(iNum), true); + }, + + setRange: function(oW3CRange, bSafe) { + this.reset(this._window); + + this.setStart(oW3CRange.startContainer, oW3CRange.startOffset, bSafe, true); + this.setEnd(oW3CRange.endContainer, oW3CRange.endOffset, bSafe); + }, + + setEndNodes: function(oSNode, oENode) { + this.reset(this._window); + + this.setEndAfter(oENode, true); + this.setStartBefore(oSNode); + }, + + splitTextAtBothEnds: function() { + this._splitTextEndNodesOfTheRange(); + }, + + getStartNode: function() { + if (this.collapsed) { + if (this.startContainer.nodeType == 3) { + if (this.startOffset === 0) { + return null; + } + if (this.startContainer.nodeValue.length <= this.startOffset) { + return null; + } + return this.startContainer; + } + return null; + } + + if (this.startContainer.nodeType == 3) { + if (this.startOffset >= this.startContainer.nodeValue.length) { + return this._getNextNode(this.startContainer); + } + return this.startContainer; + } else { + if (this.startOffset >= nhn.DOMFix.childNodes(this.startContainer).length) { + return this._getNextNode(this.startContainer); + } + return nhn.DOMFix.childNodes(this.startContainer)[this.startOffset]; + } + }, + + getEndNode: function() { + if (this.collapsed) { + return this.getStartNode(); + } + + if (this.endContainer.nodeType == 3) { + if (this.endOffset === 0) { + return this._getPrevNode(this.endContainer); + } + return this.endContainer; + } else { + if (this.endOffset === 0) { + return this._getPrevNode(this.endContainer); + } + return nhn.DOMFix.childNodes(this.endContainer)[this.endOffset - 1]; + } + }, + + getNodeAroundRange: function(bBefore, bStrict) { + if (!this.collapsed) { + return this.getStartNode(); + } + + if (this.startContainer && this.startContainer.nodeType == 3) { + return this.startContainer; + } + //if(this.collapsed && this.startContainer && this.startContainer.nodeType == 3) return this.startContainer; + //if(!this.collapsed || (this.startContainer && this.startContainer.nodeType == 3)) return this.getStartNode(); + + var oBeforeRange, oAfterRange, oResult; + + if (this.startOffset >= nhn.DOMFix.childNodes(this.startContainer).length) { + oAfterRange = this._getNextNode(this.startContainer); + } else { + oAfterRange = nhn.DOMFix.childNodes(this.startContainer)[this.startOffset]; + } + + if (this.endOffset === 0) { + oBeforeRange = this._getPrevNode(this.endContainer); + } else { + oBeforeRange = nhn.DOMFix.childNodes(this.endContainer)[this.endOffset - 1]; + } + + if (bBefore) { + oResult = oBeforeRange; + if (!oResult && !bStrict) { + oResult = oAfterRange; + } + } else { + oResult = oAfterRange; + if (!oResult && !bStrict) { + oResult = oBeforeRange; + } + } + + return oResult; + }, + + _getXPath: function(elNode) { + var sXPath = ""; + + while (elNode && elNode.nodeType == 1) { + sXPath = "/" + elNode.tagName + "[" + this._getPosIdx4XPath(elNode) + "]" + sXPath; + elNode = nhn.DOMFix.parentNode(elNode); + } + + return sXPath; + }, + + _getPosIdx4XPath: function(refNode) { + var idx = 0; + for (var node = refNode.previousSibling; node; node = node.previousSibling) { + if (node.tagName == refNode.tagName) { + idx++; + } + } + + return idx; + }, + + // this was written specifically for XPath Bookmark and it may not perform correctly for general purposes + _evaluateXPath: function(sXPath, oDoc) { + sXPath = sXPath.substring(1, sXPath.length - 1); + var aXPath = sXPath.split(/\//); + var elNode = oDoc.body; + + for (var i = 2; i < aXPath.length && elNode; i++) { + aXPath[i].match(/([^\[]+)\[(\d+)/i); + var sTagName = RegExp.$1; + var nIdx = RegExp.$2; + + var aAllNodes = nhn.DOMFix.childNodes(elNode); + var aNodes = []; + var nLength = aAllNodes.length; + var nCount = 0; + for (var ii = 0; ii < nLength; ii++) { + if (aAllNodes[ii].tagName == sTagName) { + aNodes[nCount++] = aAllNodes[ii]; + } + } + + if (aNodes.length < nIdx) { + elNode = null; + } else { + elNode = aNodes[nIdx]; + } + } + + return elNode; + }, + + _evaluateXPathBookmark: function(oBookmark) { + var sXPath = oBookmark["sXPath"]; + var nTextNodeIdx = oBookmark["nTextNodeIdx"]; + var nOffset = oBookmark["nOffset"]; + + var elContainer = this._evaluateXPath(sXPath, this._document); + + if (nTextNodeIdx > -1 && elContainer) { + var aChildNodes = nhn.DOMFix.childNodes(elContainer); + var elNode = null; + + var nIdx = nTextNodeIdx; + var nOffsetLeft = nOffset; + + while ((elNode = aChildNodes[nIdx]) && elNode.nodeType == 3 && elNode.nodeValue.length < nOffsetLeft) { + nOffsetLeft -= elNode.nodeValue.length; + nIdx++; + } + + elContainer = nhn.DOMFix.childNodes(elContainer)[nIdx]; + nOffset = nOffsetLeft; + } + + if (!elContainer) { + elContainer = this._document.body; + nOffset = 0; + } + return { + elContainer: elContainer, + nOffset: nOffset + }; + }, + + // this was written specifically for XPath Bookmark and it may not perform correctly for general purposes + getXPathBookmark: function() { + var nTextNodeIdx1 = -1; + var htEndPt1 = { + elContainer: this.startContainer, + nOffset: this.startOffset + }; + var elNode1 = this.startContainer; + if (elNode1.nodeType == 3) { + htEndPt1 = this._getFixedStartTextNode(); + nTextNodeIdx1 = this._getPosIdx(htEndPt1.elContainer); + elNode1 = nhn.DOMFix.parentNode(elNode1); + } + var sXPathNode1 = this._getXPath(elNode1); + var oBookmark1 = { + sXPath: sXPathNode1, + nTextNodeIdx: nTextNodeIdx1, + nOffset: htEndPt1.nOffset + }; + + if (this.collapsed) { + var oBookmark2 = { + sXPath: sXPathNode1, + nTextNodeIdx: nTextNodeIdx1, + nOffset: htEndPt1.nOffset + }; + } else { + var nTextNodeIdx2 = -1; + var htEndPt2 = { + elContainer: this.endContainer, + nOffset: this.endOffset + }; + var elNode2 = this.endContainer; + if (elNode2.nodeType == 3) { + htEndPt2 = this._getFixedEndTextNode(); + nTextNodeIdx2 = this._getPosIdx(htEndPt2.elContainer); + elNode2 = nhn.DOMFix.parentNode(elNode2); + } + var sXPathNode2 = this._getXPath(elNode2); + var oBookmark2 = { + sXPath: sXPathNode2, + nTextNodeIdx: nTextNodeIdx2, + nOffset: htEndPt2.nOffset + }; + } + return [oBookmark1, oBookmark2]; + }, + + moveToXPathBookmark: function(aBookmark) { + if (!aBookmark) { + return false; + } + + var oBookmarkInfo1 = this._evaluateXPathBookmark(aBookmark[0]); + var oBookmarkInfo2 = this._evaluateXPathBookmark(aBookmark[1]); + + if (!oBookmarkInfo1["elContainer"] || !oBookmarkInfo2["elContainer"]) { + return; + } + + this.startContainer = oBookmarkInfo1["elContainer"]; + this.startOffset = oBookmarkInfo1["nOffset"]; + + this.endContainer = oBookmarkInfo2["elContainer"]; + this.endOffset = oBookmarkInfo2["nOffset"]; + + return true; + }, + + _getFixedTextContainer: function(elNode, nOffset) { + while (elNode && elNode.nodeType == 3 && elNode.previousSibling && elNode.previousSibling.nodeType == 3) { + nOffset += elNode.previousSibling.nodeValue.length; + elNode = elNode.previousSibling; + } + + return { + elContainer: elNode, + nOffset: nOffset + }; + }, + + _getFixedStartTextNode: function() { + return this._getFixedTextContainer(this.startContainer, this.startOffset); + }, + + _getFixedEndTextNode: function() { + return this._getFixedTextContainer(this.endContainer, this.endOffset); + }, + + placeStringBookmark: function() { + if (this.collapsed || jindo.$Agent().navigator().ie || jindo.$Agent().navigator().firefox) { + return this.placeStringBookmark_NonWebkit(); + } else { + return this.placeStringBookmark_Webkit(); + } + }, + + placeStringBookmark_NonWebkit: function() { + var sTmpId = (new Date()).getTime(); + + var oInsertionPoint = this.cloneRange(); + oInsertionPoint.collapseToEnd(); + var oEndMarker = this._document.createElement("SPAN"); + oEndMarker.id = this.HUSKY_BOOMARK_END_ID_PREFIX + sTmpId; + oInsertionPoint.insertNode(oEndMarker); + + var oInsertionPoint = this.cloneRange(); + oInsertionPoint.collapseToStart(); + var oStartMarker = this._document.createElement("SPAN"); + oStartMarker.id = this.HUSKY_BOOMARK_START_ID_PREFIX + sTmpId; + oInsertionPoint.insertNode(oStartMarker); + + // IE에서 빈 SPAN의 앞뒤로 커서가 이동하지 않아 문제가 발생 할 수 있어, 보이지 않는 특수 문자를 임시로 넣어 줌. + if (jindo.$Agent().navigator().ie) { + // SPAN의 위치가 TD와 TD 사이에 있을 경우, 텍스트 삽입 시 알수 없는 오류가 발생한다. + // TD와 TD사이에서는 텍스트 삽입이 필요 없음으로 그냥 try/catch로 처리 + try { + oStartMarker.innerHTML = unescape("%uFEFF"); + } catch (e) {} + + try { + oEndMarker.innerHTML = unescape("%uFEFF"); + } catch (e) {} + } + this.moveToBookmark(sTmpId); + + return sTmpId; + }, + + placeStringBookmark_Webkit: function() { + var sTmpId = (new Date()).getTime(); + + var elInsertBefore, elInsertParent; + + // Do not insert the bookmarks between TDs as it will break the rendering in Chrome/Safari + // -> modify the insertion position from [abc]abc to [abc]abc + var oInsertionPoint = this.cloneRange(); + oInsertionPoint.collapseToEnd(); + elInsertBefore = this._document.createTextNode(""); + oInsertionPoint.insertNode(elInsertBefore); + elInsertParent = elInsertBefore.parentNode; + if (elInsertBefore.previousSibling && elInsertBefore.previousSibling.tagName == "TD") { + elInsertParent = elInsertBefore.previousSibling; + elInsertBefore = null; + } + var oEndMarker = this._document.createElement("SPAN"); + oEndMarker.id = this.HUSKY_BOOMARK_END_ID_PREFIX + sTmpId; + elInsertParent.insertBefore(oEndMarker, elInsertBefore); + + var oInsertionPoint = this.cloneRange(); + oInsertionPoint.collapseToStart(); + elInsertBefore = this._document.createTextNode(""); + oInsertionPoint.insertNode(elInsertBefore); + elInsertParent = elInsertBefore.parentNode; + if (elInsertBefore.nextSibling && elInsertBefore.nextSibling.tagName == "TD") { + elInsertParent = elInsertBefore.nextSibling; + elInsertBefore = elInsertParent.firstChild; + } + var oStartMarker = this._document.createElement("SPAN"); + oStartMarker.id = this.HUSKY_BOOMARK_START_ID_PREFIX + sTmpId; + elInsertParent.insertBefore(oStartMarker, elInsertBefore); + + //elInsertBefore.parentNode.removeChild(elInsertBefore); + + this.moveToBookmark(sTmpId); + + return sTmpId; + }, + + cloneRange: function() { + return this._copyRange(new nhn.HuskyRange(this._window)); + }, + + moveToBookmark: function(vBookmark) { + if (typeof(vBookmark) != "object") { + return this.moveToStringBookmark(vBookmark); + } else { + return this.moveToXPathBookmark(vBookmark); + } + }, + + getStringBookmark: function(sBookmarkID, bEndBookmark) { + if (bEndBookmark) { + return this._document.getElementById(this.HUSKY_BOOMARK_END_ID_PREFIX + sBookmarkID); + } else { + return this._document.getElementById(this.HUSKY_BOOMARK_START_ID_PREFIX + sBookmarkID); + } + }, + + moveToStringBookmark: function(sBookmarkID, bIncludeBookmark) { + var oStartMarker = this.getStringBookmark(sBookmarkID); + var oEndMarker = this.getStringBookmark(sBookmarkID, true); + + if (!oStartMarker || !oEndMarker) { + return false; + } + + this.reset(this._window); + + if (bIncludeBookmark) { + this.setEndAfter(oEndMarker); + this.setStartBefore(oStartMarker); + } else { + this.setEndBefore(oEndMarker); + this.setStartAfter(oStartMarker); + } + return true; + }, + + removeStringBookmark: function(sBookmarkID) { + /* + var oStartMarker = this._document.getElementById(this.HUSKY_BOOMARK_START_ID_PREFIX+sBookmarkID); + var oEndMarker = this._document.getElementById(this.HUSKY_BOOMARK_END_ID_PREFIX+sBookmarkID); + + if(oStartMarker) nhn.DOMFix.parentNode(oStartMarker).removeChild(oStartMarker); + if(oEndMarker) nhn.DOMFix.parentNode(oEndMarker).removeChild(oEndMarker); + */ + this._removeAll(this.HUSKY_BOOMARK_START_ID_PREFIX + sBookmarkID); + this._removeAll(this.HUSKY_BOOMARK_END_ID_PREFIX + sBookmarkID); + }, + + _removeAll: function(sID) { + var elNode; + while ((elNode = this._document.getElementById(sID))) { + nhn.DOMFix.parentNode(elNode).removeChild(elNode); + } + }, + + collapseToStart: function() { + this.collapse(true); + }, + + collapseToEnd: function() { + this.collapse(false); + }, + + createAndInsertNode: function(sTagName) { + var tmpNode = this._document.createElement(sTagName); + this.insertNode(tmpNode); + return tmpNode; + }, + + getNodes: function(bSplitTextEndNodes, fnFilter) { + if (bSplitTextEndNodes) { + this._splitTextEndNodesOfTheRange(); + } + + var aAllNodes = this._getNodesInRange(); + var aFilteredNodes = []; + + if (!fnFilter) { + return aAllNodes; + } + + for (var i = 0; i < aAllNodes.length; i++) { + if (fnFilter(aAllNodes[i])) { + aFilteredNodes[aFilteredNodes.length] = aAllNodes[i]; + } + } + + return aFilteredNodes; + }, + + getTextNodes: function(bSplitTextEndNodes) { + var txtFilter = function(oNode) { + if (oNode.nodeType == 3 && oNode.nodeValue != "\n" && oNode.nodeValue != "") { + return true; + } else { + return false; + } + }; + + return this.getNodes(bSplitTextEndNodes, txtFilter); + }, + + surroundContentsWithNewNode: function(sTagName) { + var oNewParent = this._document.createElement(sTagName); + this.surroundContents(oNewParent); + return oNewParent; + }, + + isRangeinRange: function(oAnoterRange, bIncludePartlySelected) { + var startToStart = this.compareBoundaryPoints(this.W3CDOMRange.START_TO_START, oAnoterRange); + var startToEnd = this.compareBoundaryPoints(this.W3CDOMRange.START_TO_END, oAnoterRange); + var endToStart = this.compareBoundaryPoints(this.W3CDOMRange.ND_TO_START, oAnoterRange); + var endToEnd = this.compareBoundaryPoints(this.W3CDOMRange.END_TO_END, oAnoterRange); + + if (startToStart <= 0 && endToEnd >= 0) { + return true; + } + + if (bIncludePartlySelected) { + if (startToEnd == 1) { + return false; + } + if (endToStart == -1) { + return false; + } + return true; + } + + return false; + }, + + isNodeInRange: function(oNode, bIncludePartlySelected, bContentOnly) { + var oTmpRange = new nhn.HuskyRange(this._window); + + if (bContentOnly && oNode.firstChild) { + oTmpRange.setStartBefore(oNode.firstChild); + oTmpRange.setEndAfter(oNode.lastChild); + } else { + oTmpRange.selectNode(oNode); + } + + return this.isRangeInRange(oTmpRange, bIncludePartlySelected); + }, + + pasteText: function(sText) { + this.pasteHTML(sText.replace(/&/g, "&").replace(//g, ">").replace(/ /g, " ").replace(/"/g, """)); + }, + + /** + * TODO: 왜 clone 으로 조작할까? + */ + pasteHTML: function(sHTML) { + var oTmpDiv = this._document.createElement("DIV"); + oTmpDiv.innerHTML = sHTML; + + if (!oTmpDiv.firstChild) { + this.deleteContents(); + return; + } + + // getLineInfo 전에 북마크를 삽입하지 않으면 IE에서 oLineBreaker가 P태그 바깥으로 잡히는 경우가 있음(P태그에 아무것도 없을때) + var clone = this.cloneRange(); + var sBM = clone.placeStringBookmark(); + + // [SMARTEDITORSUS-1960] PrivateTag, 템플릿삽입등 p태그안에 block 요소 삽입과 관련된 처리 + // P태그인 경우, block요소가 들어오면 안된다. + // 때문에 현재 위치의 컨테이너가 P태그이고 컨텐츠 내용이 block 요소인 경우 P태그를 쪼개고 그 사이에 컨텐츠를 div로 감싸서 넣도록 처리한다. + var oLineInfo = clone.getLineInfo(), + oStart = oLineInfo.oStart, + oEnd = oLineInfo.oEnd; + if (oStart.oLineBreaker && oStart.oLineBreaker.nodeName === "P" && clone.rxHasBlock.test(sHTML)) { + // 선택영역을 조작해야 하므로 현재 선택된 요소들을 먼저 제거한다. + clone.deleteContents(); + + var oParentNode = oStart.oLineBreaker.parentNode, + oNextSibling = oStart.oLineBreaker.nextSibling; + // 동일한 라인에 있으면 뒷부분은 쪼개서 다음 라인으로 삽입한다. + if (oStart.oLineBreaker === oEnd.oLineBreaker) { + var elBM = clone.getStringBookmark(sBM); + clone.setEndNodes(elBM, oEnd.oLineBreaker); + var oNextContents = clone.extractContents(); + + if (oNextSibling) { + oParentNode.insertBefore(oNextContents, oNextSibling); + } else { + oParentNode.appendChild(oNextContents); + } + oNextSibling = oStart.oLineBreaker.nextSibling; + } + + // 선택영역 앞쪽이 속한 P태그에서 style과 align 정보를 복사한다. + // 크롬의 경우 div의 style 에 text-align 이 있으면 align 속성은 무시되는데 + // div 안의 block 요소는 text-align 의 대상이 아니라 정렬되지 않는 문제가 있기 때문에 + // style 복사할 때 text-align 속성은 제외한다. + oTmpDiv.style.cssText = oStart.oLineBreaker.style.cssText.replace(this._rxTextAlign, ''); // text-align 제외 + oTmpDiv.align = oStart.oLineBreaker.align; // align 복사 + // 컨텐츠 삽입 + if (oNextSibling) { + oParentNode.insertBefore(oTmpDiv, oNextSibling); + } else { + oParentNode.appendChild(oTmpDiv); + } + + // 컨텐츠 삽입 후에 북마크를 지운다. + // 컨텐츠 삽입 전에 지우면 컨텐츠 삽입시 oNextSibling 가 북마크로 잡히는 경우 에러가 발생할 수 있음 + clone.removeStringBookmark(sBM); + + // 컨텐츠 삽입 후 윗라인 P태그에 아무런 내용이 없으면 제거한다. + this._removeEmptyP(this._getPrevElement(oTmpDiv)); + // 아래 라인 P태그에 아무런 내용이 없는 경우는 그 다음 아래 라인이 있을때만 제거한다. + // 아래 라인이 아예없으면 IE에서 커서가 들어가지 않기 때문에 라인을 추가해준다. + var elNextLine = this._getNextElement(oTmpDiv); + if (elNextLine) { + var elAfterNext = this._getNextElement(elNextLine); + if (elAfterNext) { + this._removeEmptyP(elNextLine); + elNextLine = elAfterNext; + } + } else { + // 아래 라인이 없으면 윗 라인 스타일을 복사하여 추가해준다. + elNextLine = this._document.createElement("P"); + elNextLine.style.cssText = oStart.oLineBreaker.style.cssText; + elNextLine.align = oStart.oLineBreaker.align; + elNextLine.innerHTML = '\uFEFF'; + oParentNode.appendChild(elNextLine); + } + // 커서를 다음라인으로 위치시킨다. 그렇지 않으면 div태그와 p태그사이에 커서가 위치하게 된다. + this.selectNodeContents(elNextLine); + this.collapseToStart(); + } else { + var oFirstNode = oTmpDiv.firstChild; + var oLastNode = oTmpDiv.lastChild; + + this.collapseToStart(); + + while (oTmpDiv.lastChild) { + this.insertNode(oTmpDiv.lastChild); + } + + this.setEndNodes(oFirstNode, oLastNode); + + // delete the content later as deleting it first may mass up the insertion point + // eg)

[A]BCD

---paste O---> O

BCD

+ clone.moveToBookmark(sBM); + clone.deleteContents(); + clone.removeStringBookmark(sBM); + } + }, + + /** + * 비어있는 P태그이면 제거한다. + * @param {Element} el 검사할 Element + */ + _removeEmptyP: function(el) { + if (el && el.nodeName === "P") { + var sInner = el.innerHTML; + if (sInner === "" || this._rxCursorHolder.test(sInner)) { + el.parentNode.removeChild(el); + } + } + }, + + /** + * 인접한 Element 노드를 찾는다. + * @param {Node} oNode 기준 노드 + * @param {Boolean} bPrev 앞뒤여부(true면 앞, false면 뒤) + * @return {Element} 인접한 Element, 없으면 null 반환 + */ + _getSiblingElement: function(oNode, bPrev) { + if (!oNode) { + return null; + } + + var oSibling = oNode[bPrev ? "previousSibling" : "nextSibling"]; + if (oSibling && oSibling.nodeType === 1) { + return oSibling; + } else { + return arguments.callee(oSibling, bPrev); + } + }, + + /** + * 앞쪽 인접한 Element 노드를 찾는다. + * @param {Node} oNode 기준 노드 + * @return {Element} 인접한 Element, 없으면 null 반환 + */ + _getPrevElement: function(oNode) { + return this._getSiblingElement(oNode, true); + }, + + /** + * 뒤쪽 인접한 Element 노드를 찾는다. + * @param {Node} oNode 기준 노드 + * @return {Element} 인접한 Element, 없으면 null 반환 + */ + _getNextElement: function(oNode) { + return this._getSiblingElement(oNode, false); + }, + + toString: function() { + this.toString = nhn.W3CDOMRange.prototype.toString; + return this.toString(); + }, + + toHTMLString: function() { + var oTmpContainer = this._document.createElement("DIV"); + oTmpContainer.appendChild(this.cloneContents()); + + return oTmpContainer.innerHTML; + }, + + findAncestorByTagName: function(sTagName) { + var oNode = this.commonAncestorContainer; + while (oNode && oNode.tagName != sTagName) { + oNode = nhn.DOMFix.parentNode(oNode); + } + + return oNode; + }, + + selectNodeContents: function(oNode) { + if (!oNode) { + return; + } + + var oFirstNode = oNode.firstChild ? oNode.firstChild : oNode; + var oLastNode = oNode.lastChild ? oNode.lastChild : oNode; + + this.reset(this._window); + if (oFirstNode.nodeType == 3) { + this.setStart(oFirstNode, 0, true); + } else { + this.setStartBefore(oFirstNode); + } + + if (oLastNode.nodeType == 3) { + this.setEnd(oLastNode, oLastNode.nodeValue.length, true); + } else { + this.setEndAfter(oLastNode); + } + }, + + /** + * 노드의 취소선/밑줄 정보를 확인한다 + * 관련 BTS [SMARTEDITORSUS-26] + * @param {Node} oNode 취소선/밑줄을 확인할 노드 + * @param {String} sValue textDecoration 정보 + * @see nhn.HuskyRange#_checkTextDecoration + */ + _hasTextDecoration: function(oNode, sValue) { + if (!oNode || !oNode.style) { + return false; + } + + if (oNode.style.textDecoration.indexOf(sValue) > -1) { + return true; + } + + if (sValue === "underline" && oNode.tagName === "U") { + return true; + } + + if (sValue === "line-through" && (oNode.tagName === "S" || oNode.tagName === "STRIKE")) { + return true; + } + + return false; + }, + + /** + * 노드에 취소선/밑줄을 적용한다 + * 관련 BTS [SMARTEDITORSUS-26] + * [FF] 노드의 Style 에 textDecoration 을 추가한다 + * [FF 외] U/STRIKE 태그를 추가한다 + * @param {Node} oNode 취소선/밑줄을 적용할 노드 + * @param {String} sValue textDecoration 정보 + * @see nhn.HuskyRange#_checkTextDecoration + */ + _setTextDecoration: function(oNode, sValue) { + if (jindo.$Agent().navigator().firefox) { // FF + oNode.style.textDecoration = (oNode.style.textDecoration) ? oNode.style.textDecoration + " " + sValue : sValue; + } else { + if (sValue === "underline") { + oNode.innerHTML = "" + oNode.innerHTML + "" + } else if (sValue === "line-through") { + oNode.innerHTML = "" + oNode.innerHTML + "" + } + } + }, + + /** + * 인자로 전달받은 노드 상위의 취소선/밑줄 정보를 확인하여 노드에 적용한다 + * 관련 BTS [SMARTEDITORSUS-26] + * @param {Node} oNode 취소선/밑줄을 적용할 노드 + */ + _checkTextDecoration: function(oNode) { + if (oNode.tagName !== "SPAN") { + return; + } + + var bUnderline = false, + bLineThrough = false, + sTextDecoration = "", + oParentNode = null; + oChildNode = oNode.firstChild; + + /* check child */ + while (oChildNode) { + if (oChildNode.nodeType === 1) { + bUnderline = (bUnderline || oChildNode.tagName === "U"); + bLineThrough = (bLineThrough || oChildNode.tagName === "S" || oChildNode.tagName === "STRIKE"); + } + + if (bUnderline && bLineThrough) { + return; + } + + oChildNode = oChildNode.nextSibling; + } + + oParentNode = nhn.DOMFix.parentNode(oNode); + + /* check parent */ + while (oParentNode && oParentNode.tagName !== "BODY") { + if (oParentNode.nodeType !== 1) { + oParentNode = nhn.DOMFix.parentNode(oParentNode); + continue; + } + + if (!bUnderline && this._hasTextDecoration(oParentNode, "underline")) { + bUnderline = true; + this._setTextDecoration(oNode, "underline"); // set underline + } + + if (!bLineThrough && this._hasTextDecoration(oParentNode, "line-through")) { + bLineThrough = true; + this._setTextDecoration(oNode, "line-through"); // set line-through + } + + if (bUnderline && bLineThrough) { + return; + } + + oParentNode = nhn.DOMFix.parentNode(oParentNode); + } + }, + + /** + * Range에 속한 노드들에 스타일을 적용한다 + * @param {Object} oStyle 적용할 스타일을 가지는 Object (예) 글꼴 색 적용의 경우 { color : "#0075c8" } + * @param {Object} [oAttribute] 적용할 속성을 가지는 Object (예) 맞춤범 검사의 경우 { _sm2_spchk: "강남콩", class: "se2_check_spell" } + * @param {String} [sNewSpanMarker] 새로 추가된 SPAN 노드를 나중에 따로 처리해야하는 경우 마킹을 위해 사용하는 문자열 + * @param {Boolean} [bIncludeLI] LI 도 스타일 적용에 포함할 것인지의 여부 [COM-1051] _getStyleParentNodes 메서드 참고하기 + * @param {Boolean} [bCheckTextDecoration] 취소선/밑줄 처리를 적용할 것인지 여부 [SMARTEDITORSUS-26] _setTextDecoration 메서드 참고하기 + */ + styleRange: function(oStyle, oAttribute, sNewSpanMarker, bIncludeLI, bCheckTextDecoration) { + var aStyleParents = this.aStyleParents = this._getStyleParentNodes(sNewSpanMarker, bIncludeLI); + if (aStyleParents.length < 1) { + return; + } + + var sName, sValue; + + for (var i = 0; i < aStyleParents.length; i++) { + for (var x in oStyle) { + sName = x; + sValue = oStyle[sName]; + + if (typeof sValue != "string") { + continue; + } + + // [SMARTEDITORSUS-26] 글꼴 색을 적용할 때 취소선/밑줄의 색상도 처리되도록 추가 + if (bCheckTextDecoration && oStyle.color) { + this._checkTextDecoration(aStyleParents[i]); + } + + aStyleParents[i].style[sName] = sValue; + } + + if (!oAttribute) { + continue; + } + + for (var x in oAttribute) { + sName = x; + sValue = oAttribute[sName]; + + if (typeof sValue != "string") { + continue; + } + + if (sName == "class") { + jindo.$Element(aStyleParents[i]).addClass(sValue); + } else { + aStyleParents[i].setAttribute(sName, sValue); + } + } + } + + this.reset(this._window); + this.setStartBefore(aStyleParents[0]); + this.setEndAfter(aStyleParents[aStyleParents.length - 1]); + }, + + expandBothEnds: function() { + this.expandStart(); + this.expandEnd(); + }, + + expandStart: function() { + if (this.startContainer.nodeType == 3 && this.startOffset !== 0) { + return; + } + + var elActualStartNode = this._getActualStartNode(this.startContainer, this.startOffset); + elActualStartNode = this._getPrevNode(elActualStartNode); + + if (elActualStartNode.tagName == "BODY") { + this.setStartBefore(elActualStartNode); + } else { + this.setStartAfter(elActualStartNode); + } + }, + + expandEnd: function() { + if (this.endContainer.nodeType == 3 && this.endOffset < this.endContainer.nodeValue.length) { + return; + } + + var elActualEndNode = this._getActualEndNode(this.endContainer, this.endOffset); + elActualEndNode = this._getNextNode(elActualEndNode); + + if (elActualEndNode.tagName == "BODY") { + this.setEndAfter(elActualEndNode); + } else { + this.setEndBefore(elActualEndNode); + } + }, + + /** + * Style 을 적용할 노드를 가져온다 + * @param {String} [sNewSpanMarker] 새로 추가하는 SPAN 노드를 마킹을 위해 사용하는 문자열 + * @param {Boolean} [bIncludeLI] LI 도 스타일 적용에 포함할 것인지의 여부 + * @return {Array} Style 을 적용할 노드 배열 + */ + _getStyleParentNodes: function(sNewSpanMarker, bIncludeLI) { + this._splitTextEndNodesOfTheRange(); + + var oSNode = this.getStartNode(); + var oENode = this.getEndNode(); + + var aAllNodes = this._getNodesInRange(); + var aResult = []; + var nResult = 0; + + var oNode, oTmpNode, iStartRelPos, iEndRelPos, oSpan; + var nInitialLength = aAllNodes.length; + var arAllBottomNodes = jindo.$A(aAllNodes).filter(function(v) { + return (!v.firstChild || (bIncludeLI && v.tagName == "LI")); + }); + + // [COM-1051] 본문내용을 한 줄만 입력하고 번호 매긴 상태에서 글자크기를 변경하면 번호크기는 변하지 않는 문제 + // 부모 노드 중 LI 가 있고, 해당 LI 의 모든 자식 노드가 선택된 상태라면 LI에도 스타일을 적용하도록 처리함 + // --- Range 에 LI 가 포함되지 않은 경우, LI 를 포함하도록 처리 + var elTmpNode = this.commonAncestorContainer; + if (bIncludeLI) { + while (elTmpNode) { + if (elTmpNode.tagName == "LI") { + if (this._isFullyContained(elTmpNode, arAllBottomNodes)) { + aResult[nResult++] = elTmpNode; + } + break; + } + + elTmpNode = elTmpNode.parentNode; + } + } + + for (var i = 0; i < nInitialLength; i++) { + oNode = aAllNodes[i]; + + if (!oNode) { + continue; + } + + // --- Range 에 LI 가 포함된 경우에 대한 LI 확인 + if (bIncludeLI && oNode.tagName == "LI" && this._isFullyContained(oNode, arAllBottomNodes)) { + aResult[nResult++] = oNode; + continue; + } + + if (oNode.nodeType != 3) { + continue; + } + if (oNode.nodeValue == "" || oNode.nodeValue.match(/^(\r|\n)+$/)) { + continue; + } + + var oParentNode = nhn.DOMFix.parentNode(oNode); + + // 부모 노드가 SPAN 인 경우에는 새로운 SPAN 을 생성하지 않고 SPAN 을 리턴 배열에 추가함 + if (oParentNode.tagName == "SPAN") { + if (this._isFullyContained(oParentNode, arAllBottomNodes, oNode)) { + aResult[nResult++] = oParentNode; + continue; + } + } else { + // [SMARTEDITORSUS-1513] 선택된 영역을 single node로 감싸는 상위 span 노드가 있으면 리턴 배열에 추가 + var oParentSingleSpan = this._findParentSingleSpan(oParentNode); + if (oParentSingleSpan) { + aResult[nResult++] = oParentSingleSpan; + continue; + } + } + + oSpan = this._document.createElement("SPAN"); + oParentNode.insertBefore(oSpan, oNode); + oSpan.appendChild(oNode); + aResult[nResult++] = oSpan; + + if (sNewSpanMarker) { + oSpan.setAttribute(sNewSpanMarker, "true"); + } + } + + this.setStartBefore(oSNode); + this.setEndAfter(oENode); + + return aResult; + }, + + /** + * [SMARTEDITORSUS-1513][SMARTEDITORSUS-1648] 해당노드가 single child로 묶이는 상위 span 노드가 있는지 찾는다. + * @param {Node} oNode 검사할 노드 + * @return {Element} 상위 span 노드, 없으면 null + */ + _findParentSingleSpan: function(oNode) { + if (!oNode) { + return null; + } + // ZWNBSP 문자가 같이 있는 경우도 있기 때문에 실제 노드를 카운팅해야 함 + for (var i = 0, nCnt = 0, sValue, oChild, aChildNodes = oNode.childNodes; + (oChild = aChildNodes[i]); i++) { + sValue = oChild.nodeValue; + if (this._rxCursorHolder.test(sValue)) { + continue; + } else { + nCnt++; + } + if (nCnt > 1) { // 싱글노드가 아니면 더이상 찾지 않고 null 반환 + return null; + } + } + if (oNode.nodeName === "SPAN") { + return oNode; + } else { + return this._findParentSingleSpan(oNode.parentNode); + } + }, + + /** + * 컨테이너 엘리먼트(elContainer)의 모든 자식노드가 노드 배열(waAllNodes)에 속하는지 확인한다 + * 첫 번째 자식 노드와 마지막 자식 노드가 노드 배열에 속하는지를 확인한다 + * @param {Element} elContainer 컨테이너 엘리먼트 + * @param {jindo.$A} waAllNodes Node 의 $A 배열 + * @param {Node} [oNode] 성능을 위한 옵션 노드로 컨테이너의 첫 번째 혹은 마지막 자식 노드와 같으면 indexOf 함수 사용을 줄일 수 있음 + * @return {Array} Style 을 적용할 노드 배열 + */ + // check if all the child nodes of elContainer are in waAllNodes + _isFullyContained: function(elContainer, waAllNodes, oNode) { + var nSIdx, nEIdx; + var oTmpNode = this._getVeryFirstRealChild(elContainer); + // do quick checks before trying indexOf() because indexOf() function is very slow + // oNode is optional + if (oNode && oTmpNode == oNode) { + nSIdx = 1; + } else { + nSIdx = waAllNodes.indexOf(oTmpNode); + } + + if (nSIdx != -1) { + oTmpNode = this._getVeryLastRealChild(elContainer); + if (oNode && oTmpNode == oNode) { + nEIdx = 1; + } else { + nEIdx = waAllNodes.indexOf(oTmpNode); + } + } + + return (nSIdx != -1 && nEIdx != -1); + }, + + _getVeryFirstChild: function(oNode) { + if (oNode.firstChild) { + return this._getVeryFirstChild(oNode.firstChild); + } + return oNode; + }, + + _getVeryLastChild: function(oNode) { + if (oNode.lastChild) { + return this._getVeryLastChild(oNode.lastChild); + } + return oNode; + }, + + _getFirstRealChild: function(oNode) { + var oFirstNode = oNode.firstChild; + while (oFirstNode && oFirstNode.nodeType == 3 && oFirstNode.nodeValue == "") { + oFirstNode = oFirstNode.nextSibling; + } + + return oFirstNode; + }, + + _getLastRealChild: function(oNode) { + var oLastNode = oNode.lastChild; + while (oLastNode && oLastNode.nodeType == 3 && oLastNode.nodeValue == "") { + oLastNode = oLastNode.previousSibling; + } + + return oLastNode; + }, + + _getVeryFirstRealChild: function(oNode) { + var oFirstNode = this._getFirstRealChild(oNode); + if (oFirstNode) { + return this._getVeryFirstRealChild(oFirstNode); + } + return oNode; + }, + _getVeryLastRealChild: function(oNode) { + var oLastNode = this._getLastRealChild(oNode); + if (oLastNode) { + return this._getVeryLastChild(oLastNode); + } + return oNode; + }, + + _getLineStartInfo: function(node) { + var frontEndFinal = null; + var frontEnd = node; + var lineBreaker = node; + var bParentBreak = false; + + var rxLineBreaker = this.rxLineBreaker; + + // vertical(parent) search + function getLineStart(node) { + if (!node) { + return; + } + if (frontEndFinal) { + return; + } + + if (rxLineBreaker.test(node.tagName)) { + lineBreaker = node; + frontEndFinal = frontEnd; + + bParentBreak = true; + + return; + } else { + frontEnd = node; + } + + getFrontEnd(node.previousSibling); + + if (frontEndFinal) { + return; + } + getLineStart(nhn.DOMFix.parentNode(node)); + } + + // horizontal(sibling) search + function getFrontEnd(node) { + if (!node) { + return; + } + if (frontEndFinal) { + return; + } + + if (rxLineBreaker.test(node.tagName)) { + lineBreaker = node; + frontEndFinal = frontEnd; + + bParentBreak = false; + return; + } + + if (node.firstChild && node.tagName != "TABLE") { + var curNode = node.lastChild; + while (curNode && !frontEndFinal) { + getFrontEnd(curNode); + + curNode = curNode.previousSibling; + } + } else { + frontEnd = node; + } + + if (!frontEndFinal) { + getFrontEnd(node.previousSibling); + } + } + + if (rxLineBreaker.test(node.tagName)) { + frontEndFinal = node; + } else { + getLineStart(node); + } + + return { + oNode: frontEndFinal, + oLineBreaker: lineBreaker, + bParentBreak: bParentBreak + }; + }, + + _getLineEndInfo: function(node) { + var backEndFinal = null; + var backEnd = node; + var lineBreaker = node; + var bParentBreak = false; + + var rxLineBreaker = this.rxLineBreaker; + + // vertical(parent) search + function getLineEnd(node) { + if (!node) { + return; + } + if (backEndFinal) { + return; + } + + if (rxLineBreaker.test(node.tagName)) { + lineBreaker = node; + backEndFinal = backEnd; + + bParentBreak = true; + + return; + } else { + backEnd = node; + } + + getBackEnd(node.nextSibling); + if (backEndFinal) { + return; + } + + getLineEnd(nhn.DOMFix.parentNode(node)); + } + + // horizontal(sibling) search + function getBackEnd(node) { + if (!node) { + return; + } + if (backEndFinal) { + return; + } + + if (rxLineBreaker.test(node.tagName)) { + lineBreaker = node; + backEndFinal = backEnd; + + bParentBreak = false; + + return; + } + + if (node.firstChild && node.tagName != "TABLE") { + var curNode = node.firstChild; + while (curNode && !backEndFinal) { + getBackEnd(curNode); + + curNode = curNode.nextSibling; + } + } else { + backEnd = node; + } + + if (!backEndFinal) { + getBackEnd(node.nextSibling); + } + } + + if (rxLineBreaker.test(node.tagName)) { + backEndFinal = node; + } else { + getLineEnd(node); + } + + return { + oNode: backEndFinal, + oLineBreaker: lineBreaker, + bParentBreak: bParentBreak + }; + }, + + getLineInfo: function(bAfter) { + var bAfter = bAfter || false; + + var oSNode = this.getStartNode(); + var oENode = this.getEndNode(); + + // oSNode && oENode will be null if the range is currently collapsed and the cursor is not located in the middle of a text node. + if (!oSNode) { + oSNode = this.getNodeAroundRange(!bAfter, true); + } + if (!oENode) { + oENode = this.getNodeAroundRange(!bAfter, true); + } + + var oStart = this._getLineStartInfo(oSNode); + var oStartNode = oStart.oNode; + var oEnd = this._getLineEndInfo(oENode); + var oEndNode = oEnd.oNode; + + if (oSNode != oStartNode || oENode != oEndNode) { + // check if the start node is positioned after the range's ending point + // or + // if the end node is positioned before the range's starting point + var iRelativeStartPos = this._compareEndPoint(nhn.DOMFix.parentNode(oStartNode), this._getPosIdx(oStartNode), this.endContainer, this.endOffset); + var iRelativeEndPos = this._compareEndPoint(nhn.DOMFix.parentNode(oEndNode), this._getPosIdx(oEndNode) + 1, this.startContainer, this.startOffset); + + if (!(iRelativeStartPos <= 0 && iRelativeEndPos >= 0)) { + oSNode = this.getNodeAroundRange(false, true); + oENode = this.getNodeAroundRange(false, true); + oStart = this._getLineStartInfo(oSNode); + oEnd = this._getLineEndInfo(oENode); + } + } + + return { + oStart: oStart, + oEnd: oEnd + }; + }, + + /** + * 커서홀더나 공백을 제외한 child 노드가 하나만 있는 경우만 node 를 반환한다. + * @param {Node} oNode 확인할 노드 + * @return {Node} single child node를 반환한다. 없거나 두개 이상이면 null 을 반환 + */ + _findSingleChild: function(oNode) { + if (!oNode) { + return null; + } + var oSingleChild = null; + // ZWNBSP 문자가 같이 있는 경우도 있기 때문에 실제 노드를 카운팅해야 함 + for (var i = 0, nCnt = 0, sValue, oChild, aChildNodes = oNode.childNodes; + (oChild = aChildNodes[i]); i++) { + sValue = oChild.nodeValue; + if (this._rxCursorHolder.test(sValue)) { + continue; + } else { + oSingleChild = oChild; + nCnt++; + } + if (nCnt > 1) { // 싱글노드가 아니면 더이상 찾지 않고 null 반환 + return null; + } + } + return oSingleChild; + }, + + /** + * 해당요소의 최하위까지 검색해 커서홀더만 감싸고 있는지 여부를 반환 + * @param {Node} oNode 확인할 노드 + * @return {Boolean} 커서홀더만 있는 경우 true 반환 + */ + _hasCursorHolderOnly: function(oNode) { + if (!oNode || oNode.nodeType !== 1) { + return false; + } + if (this._rxCursorHolder.test(oNode.innerHTML)) { + return true; + } else { + return this._hasCursorHolderOnly(this._findSingleChild(oNode)); + } + } +}).extend(nhn.W3CDOMRange); + +/** + * @fileOverview This file contains cross-browser selection function + * @name BrowserSelection.js + */ +nhn.BrowserSelection = function(win) { + this.init = function(win) { + this._window = win || window; + this._document = this._window.document; + }; + + this.init(win); + + // [SMARTEDITORSUS-888] IE9 이후로 document.createRange 를 지원 + /* var oAgentInfo = jindo.$Agent().navigator(); + if(oAgentInfo.ie){ + nhn.BrowserSelectionImpl_IE.apply(this); + }else{ + nhn.BrowserSelectionImpl_FF.apply(this); + }*/ + + if (!!this._document.createRange) { + nhn.BrowserSelectionImpl_FF.apply(this); + } else { + nhn.BrowserSelectionImpl_IE.apply(this); + } + + this.selectRange = function(oRng) { + this.selectNone(); + this.addRange(oRng); + }; + + this.selectionLoaded = true; + if (!this._oSelection) { + this.selectionLoaded = false; + } +}; + +nhn.BrowserSelectionImpl_FF = function() { + this._oSelection = this._window.getSelection(); + + this.getRangeAt = function(iNum) { + iNum = iNum || 0; + + try { + var oFFRange = this._oSelection.getRangeAt(iNum); + } catch (e) { + return new nhn.W3CDOMRange(this._window); + } + + return this._FFRange2W3CRange(oFFRange); + }; + + this.addRange = function(oW3CRange) { + var oFFRange = this._W3CRange2FFRange(oW3CRange); + this._oSelection.addRange(oFFRange); + }; + + this.selectNone = function() { + this._oSelection.removeAllRanges(); + }; + + this.getCommonAncestorContainer = function(oW3CRange) { + var oFFRange = this._W3CRange2FFRange(oW3CRange); + return oFFRange.commonAncestorContainer; + }; + + this.isCollapsed = function(oW3CRange) { + var oFFRange = this._W3CRange2FFRange(oW3CRange); + return oFFRange.collapsed; + }; + + this.compareEndPoints = function(elContainerA, nOffsetA, elContainerB, nOffsetB) { + var oFFRangeA = this._document.createRange(); + var oFFRangeB = this._document.createRange(); + oFFRangeA.setStart(elContainerA, nOffsetA); + oFFRangeB.setStart(elContainerB, nOffsetB); + oFFRangeA.collapse(true); + oFFRangeB.collapse(true); + + try { + return oFFRangeA.compareBoundaryPoints(1, oFFRangeB); + } catch (e) { + return 1; + } + }; + + this._FFRange2W3CRange = function(oFFRange) { + var oW3CRange = new nhn.W3CDOMRange(this._window); + + oW3CRange.setStart(oFFRange.startContainer, oFFRange.startOffset, true); + oW3CRange.setEnd(oFFRange.endContainer, oFFRange.endOffset, true); + + return oW3CRange; + }; + + this._W3CRange2FFRange = function(oW3CRange) { + var oFFRange = this._document.createRange(); + oFFRange.setStart(oW3CRange.startContainer, oW3CRange.startOffset); + oFFRange.setEnd(oW3CRange.endContainer, oW3CRange.endOffset); + + return oFFRange; + }; +}; + +nhn.BrowserSelectionImpl_IE = function() { + this._oSelection = this._document.selection; + this.oLastRange = { + oBrowserRange: null, + elStartContainer: null, + nStartOffset: -1, + elEndContainer: null, + nEndOffset: -1 + }; + + this._updateLastRange = function(oBrowserRange, oW3CRange) { + this.oLastRange.oBrowserRange = oBrowserRange; + this.oLastRange.elStartContainer = oW3CRange.startContainer; + this.oLastRange.nStartOffset = oW3CRange.startOffset; + this.oLastRange.elEndContainer = oW3CRange.endContainer; + this.oLastRange.nEndOffset = oW3CRange.endOffset; + }; + + this.getRangeAt = function(iNum) { + iNum = iNum || 0; + + var oW3CRange, oBrowserRange; + if (this._oSelection.type == "Control") { + oW3CRange = new nhn.W3CDOMRange(this._window); + + var oSelectedNode = this._oSelection.createRange().item(iNum); + + // if the selction occurs in a different document, ignore + if (!oSelectedNode || oSelectedNode.ownerDocument != this._document) { + return oW3CRange; + } + + oW3CRange.selectNode(oSelectedNode); + + return oW3CRange; + } else { + //oBrowserRange = this._oSelection.createRangeCollection().item(iNum); + oBrowserRange = this._oSelection.createRange(); + + var oSelectedNode = oBrowserRange.parentElement(); + + // if the selction occurs in a different document, ignore + if (!oSelectedNode || oSelectedNode.ownerDocument != this._document) { + oW3CRange = new nhn.W3CDOMRange(this._window); + return oW3CRange; + } + oW3CRange = this._IERange2W3CRange(oBrowserRange); + + return oW3CRange; + } + }; + + this.addRange = function(oW3CRange) { + var oIERange = this._W3CRange2IERange(oW3CRange); + oIERange.select(); + }; + + this.selectNone = function() { + this._oSelection.empty(); + }; + + this.getCommonAncestorContainer = function(oW3CRange) { + return this._W3CRange2IERange(oW3CRange).parentElement(); + }; + + this.isCollapsed = function(oW3CRange) { + var oRange = this._W3CRange2IERange(oW3CRange); + var oRange2 = oRange.duplicate(); + + oRange2.collapse(); + + return oRange.isEqual(oRange2); + }; + + this.compareEndPoints = function(elContainerA, nOffsetA, elContainerB, nOffsetB) { + var oIERangeA, oIERangeB; + + if (elContainerA === this.oLastRange.elStartContainer && nOffsetA === this.oLastRange.nStartOffset) { + oIERangeA = this.oLastRange.oBrowserRange.duplicate(); + oIERangeA.collapse(true); + } else { + if (elContainerA === this.oLastRange.elEndContainer && nOffsetA === this.oLastRange.nEndOffset) { + oIERangeA = this.oLastRange.oBrowserRange.duplicate(); + oIERangeA.collapse(false); + } else { + oIERangeA = this._getIERangeAt(elContainerA, nOffsetA); + } + } + + if (elContainerB === this.oLastRange.elStartContainer && nOffsetB === this.oLastRange.nStartOffset) { + oIERangeB = this.oLastRange.oBrowserRange.duplicate(); + oIERangeB.collapse(true); + } else { + if (elContainerB === this.oLastRange.elEndContainer && nOffsetB === this.oLastRange.nEndOffset) { + oIERangeB = this.oLastRange.oBrowserRange.duplicate(); + oIERangeB.collapse(false); + } else { + oIERangeB = this._getIERangeAt(elContainerB, nOffsetB); + } + } + + return oIERangeA.compareEndPoints("StartToStart", oIERangeB); + }; + + this._W3CRange2IERange = function(oW3CRange) { + if (this.oLastRange.elStartContainer === oW3CRange.startContainer && + this.oLastRange.nStartOffset === oW3CRange.startOffset && + this.oLastRange.elEndContainer === oW3CRange.endContainer && + this.oLastRange.nEndOffset === oW3CRange.endOffset) { + return this.oLastRange.oBrowserRange; + } + + var oStartIERange = this._getIERangeAt(oW3CRange.startContainer, oW3CRange.startOffset); + var oEndIERange = this._getIERangeAt(oW3CRange.endContainer, oW3CRange.endOffset); + oStartIERange.setEndPoint("EndToEnd", oEndIERange); + + this._updateLastRange(oStartIERange, oW3CRange); + + return oStartIERange; + }; + + this._getIERangeAt = function(oW3CContainer, iW3COffset) { + var oIERange = this._document.body.createTextRange(); + + var oEndPointInfoForIERange = this._getSelectableNodeAndOffsetForIE(oW3CContainer, iW3COffset); + + var oSelectableNode = oEndPointInfoForIERange.oSelectableNodeForIE; + var iIEOffset = oEndPointInfoForIERange.iOffsetForIE; + + oIERange.moveToElementText(oSelectableNode); + + oIERange.collapse(oEndPointInfoForIERange.bCollapseToStart); + oIERange.moveStart("character", iIEOffset); + + return oIERange; + }; + + this._getSelectableNodeAndOffsetForIE = function(oW3CContainer, iW3COffset) { + // var oIERange = this._document.body.createTextRange(); + + var oNonTextNode = null; + var aChildNodes = null; + var iNumOfLeftNodesToCount = 0; + + if (oW3CContainer.nodeType == 3) { + oNonTextNode = nhn.DOMFix.parentNode(oW3CContainer); + aChildNodes = nhn.DOMFix.childNodes(oNonTextNode); + iNumOfLeftNodesToCount = aChildNodes.length; + } else { + oNonTextNode = oW3CContainer; + aChildNodes = nhn.DOMFix.childNodes(oNonTextNode); + //iNumOfLeftNodesToCount = iW3COffset; + iNumOfLeftNodesToCount = (iW3COffset < aChildNodes.length) ? iW3COffset : aChildNodes.length; + } + //@ room 4 improvement + var oNodeTester = null; + var iResultOffset = 0; + var bCollapseToStart = true; + + for (var i = 0; i < iNumOfLeftNodesToCount; i++) { + oNodeTester = aChildNodes[i]; + + if (oNodeTester.nodeType == 3) { + if (oNodeTester == oW3CContainer) { + break; + } + + iResultOffset += oNodeTester.nodeValue.length; + } else { + // oIERange.moveToElementText(oNodeTester); + oNonTextNode = oNodeTester; + iResultOffset = 0; + + bCollapseToStart = false; + } + } + + if (oW3CContainer.nodeType == 3) { + iResultOffset += iW3COffset; + } + + return { + oSelectableNodeForIE: oNonTextNode, + iOffsetForIE: iResultOffset, + bCollapseToStart: bCollapseToStart + }; + }; + + this._IERange2W3CRange = function(oIERange) { + var oW3CRange = new nhn.W3CDOMRange(this._window); + + var oIEPointRange = null; + var oPosition = null; + + oIEPointRange = oIERange.duplicate(); + oIEPointRange.collapse(true); + + oPosition = this._getW3CContainerAndOffset(oIEPointRange, true); + + oW3CRange.setStart(oPosition.oContainer, oPosition.iOffset, true, true); + + var oCollapsedChecker = oIERange.duplicate(); + oCollapsedChecker.collapse(true); + if (oCollapsedChecker.isEqual(oIERange)) { + oW3CRange.collapse(true); + } else { + oIEPointRange = oIERange.duplicate(); + oIEPointRange.collapse(false); + oPosition = this._getW3CContainerAndOffset(oIEPointRange); + oW3CRange.setEnd(oPosition.oContainer, oPosition.iOffset, true); + } + + this._updateLastRange(oIERange, oW3CRange); + + return oW3CRange; + }; + + this._getW3CContainerAndOffset = function(oIEPointRange, bStartPt) { + var oRgOrigPoint = oIEPointRange; + + var oContainer = oRgOrigPoint.parentElement(); + var offset = -1; + + var oRgTester = this._document.body.createTextRange(); + var aChildNodes = nhn.DOMFix.childNodes(oContainer); + var oPrevNonTextNode = null; + var pointRangeIdx = 0; + + for (var i = 0; i < aChildNodes.length; i++) { + if (aChildNodes[i].nodeType == 3) { + continue; + } + + oRgTester.moveToElementText(aChildNodes[i]); + + if (oRgTester.compareEndPoints("StartToStart", oIEPointRange) >= 0) { + break; + } + + oPrevNonTextNode = aChildNodes[i]; + } + + var pointRangeIdx = i; + + if (pointRangeIdx !== 0 && aChildNodes[pointRangeIdx - 1].nodeType == 3) { + var oRgTextStart = this._document.body.createTextRange(); + var oCurTextNode = null; + if (oPrevNonTextNode) { + oRgTextStart.moveToElementText(oPrevNonTextNode); + oRgTextStart.collapse(false); + oCurTextNode = oPrevNonTextNode.nextSibling; + } else { + oRgTextStart.moveToElementText(oContainer); + oRgTextStart.collapse(true); + oCurTextNode = oContainer.firstChild; + } + + var oRgTextsUpToThePoint = oRgOrigPoint.duplicate(); + oRgTextsUpToThePoint.setEndPoint("StartToStart", oRgTextStart); + + var textCount = oRgTextsUpToThePoint.text.replace(/[\r\n]/g, "").length; + + while (textCount > oCurTextNode.nodeValue.length && oCurTextNode.nextSibling) { + textCount -= oCurTextNode.nodeValue.length; + oCurTextNode = oCurTextNode.nextSibling; + } + + // this will enforce IE to re-reference oCurTextNode + var oTmp = oCurTextNode.nodeValue; + + if (bStartPt && oCurTextNode.nextSibling && oCurTextNode.nextSibling.nodeType == 3 && textCount == oCurTextNode.nodeValue.length) { + textCount -= oCurTextNode.nodeValue.length; + oCurTextNode = oCurTextNode.nextSibling; + } + + oContainer = oCurTextNode; + offset = textCount; + } else { + oContainer = oRgOrigPoint.parentElement(); + offset = pointRangeIdx; + } + return { + "oContainer": oContainer, + "iOffset": offset + }; + }; +}; + +nhn.DOMFix = new(jindo.$Class({ + $init: function() { + if (jindo.$Agent().navigator().ie || jindo.$Agent().navigator().opera) { + this.childNodes = this._childNodes_Fix; + this.parentNode = this._parentNode_Fix; + } else { + this.childNodes = this._childNodes_Native; + this.parentNode = this._parentNode_Native; + } + }, + + _parentNode_Native: function(elNode) { + return elNode.parentNode; + }, + + _parentNode_Fix: function(elNode) { + if (!elNode) { + return elNode; + } + + while (elNode.previousSibling) { + elNode = elNode.previousSibling; + } + + return elNode.parentNode; + }, + + _childNodes_Native: function(elNode) { + return elNode.childNodes; + }, + + _childNodes_Fix: function(elNode) { + var aResult = null; + var nCount = 0; + + if (elNode) { + var aResult = []; + elNode = elNode.firstChild; + while (elNode) { + aResult[nCount++] = elNode; + elNode = elNode.nextSibling; + } + } + + return aResult; + } +}))(); +/*[ + * ADD_APP_PROPERTY + * + * 주요 오브젝트를 모든 플러그인에서 this.oApp를 통해서 직접 접근 가능 하도록 등록한다. + * + * sPropertyName string 등록명 + * oProperty object 등록시킬 오브젝트 + * +---------------------------------------------------------------------------]*/ +/*[ + * REGISTER_BROWSER_EVENT + * + * 특정 브라우저 이벤트가 발생 했을때 Husky 메시지를 발생 시킨다. + * + * obj HTMLElement 브라우저 이벤트를 발생 시킬 HTML 엘리먼트 + * sEvent string 발생 대기 할 브라우저 이벤트 + * sMsg string 발생 할 Husky 메시지 + * aParams array 메시지에 넘길 파라미터 + * nDelay number 브라우저 이벤트 발생 후 Husky 메시지 발생 사이에 딜레이를 주고 싶을 경우 설정. (1/1000초 단위) + * +---------------------------------------------------------------------------]*/ +/*[ + * DISABLE_MESSAGE + * + * 특정 메시지를 코어에서 무시하고 라우팅 하지 않도록 비활성화 한다. + * + * sMsg string 비활성화 시킬 메시지 + * +---------------------------------------------------------------------------]*/ +/*[ + * ENABLE_MESSAGE + * + * 무시하도록 설정된 메시지를 무시하지 않도록 활성화 한다. + * + * sMsg string 활성화 시킬 메시지 + * +---------------------------------------------------------------------------]*/ +/*[ + * EXEC_ON_READY_FUNCTION + * + * oApp.run({fnOnAppReady:fnOnAppReady})와 같이 run 호출 시점에 지정된 함수가 있을 경우 이를 MSG_APP_READY 시점에 실행 시킨다. + * 코어에서 자동으로 발생시키는 메시지로 직접 발생시키지는 않도록 한다. + * + * none + * +---------------------------------------------------------------------------]*/ +/** + * @pluginDesc Husky Framework에서 자주 사용되는 메시지를 처리하는 플러그인 + */ +nhn.husky.CorePlugin = jindo.$Class({ + name: "CorePlugin", + + // nStatus = 0(request not sent), 1(request sent), 2(response received) + // sContents = response + htLazyLoadRequest_plugins: {}, + htLazyLoadRequest_allFiles: {}, + + htHTMLLoaded: {}, + + $AFTER_MSG_APP_READY: function() { + this.oApp.exec("EXEC_ON_READY_FUNCTION", []); + }, + + $ON_ADD_APP_PROPERTY: function(sPropertyName, oProperty) { + this.oApp[sPropertyName] = oProperty; + }, + + $ON_REGISTER_BROWSER_EVENT: function(obj, sEvent, sMsg, aParams, nDelay) { + this.oApp.registerBrowserEvent(obj, sEvent, sMsg, aParams, nDelay); + }, + + $ON_DISABLE_MESSAGE: function(sMsg) { + this.oApp.disableMessage(sMsg, true); + }, + + $ON_ENABLE_MESSAGE: function(sMsg) { + this.oApp.disableMessage(sMsg, false); + }, + + $ON_LOAD_FULL_PLUGIN: function(aFilenames, sClassName, sMsgName, oThisRef, oArguments) { + var oPluginRef = oThisRef.$this || oThisRef; + // var nIdx = _nIdx||0; + + var sFilename = aFilenames[0]; + + if (!this.htLazyLoadRequest_plugins[sFilename]) { + this.htLazyLoadRequest_plugins[sFilename] = { + nStatus: 1, + sContents: "" + }; + } + + if (this.htLazyLoadRequest_plugins[sFilename].nStatus === 2) { + //this.oApp.delayedExec("MSG_FULL_PLUGIN_LOADED", [sFilename, sClassName, sMsgName, oThisRef, oArguments, false], 0); + this.oApp.exec("MSG_FULL_PLUGIN_LOADED", [sFilename, sClassName, sMsgName, oThisRef, oArguments, false]); + } else { + this._loadFullPlugin(aFilenames, sClassName, sMsgName, oThisRef, oArguments, 0); + } + }, + + _loadFullPlugin: function(aFilenames, sClassName, sMsgName, oThisRef, oArguments, nIdx) { + jindo.LazyLoading.load(nhn.husky.SE2M_Configuration.LazyLoad.sJsBaseURI + "/" + aFilenames[nIdx], + jindo.$Fn(function(aFilenames, sClassName, sMsgName, oThisRef, oArguments, nIdx) { + var sCurFilename = aFilenames[nIdx]; + + // plugin filename + var sFilename = aFilenames[0]; + if (nIdx == aFilenames.length - 1) { + this.htLazyLoadRequest_plugins[sFilename].nStatus = 2; + this.oApp.exec("MSG_FULL_PLUGIN_LOADED", [aFilenames, sClassName, sMsgName, oThisRef, oArguments]); + return; + } + //this.oApp.exec("LOAD_FULL_PLUGIN", [aFilenames, sClassName, sMsgName, oThisRef, oArguments, nIdx+1]); + this._loadFullPlugin(aFilenames, sClassName, sMsgName, oThisRef, oArguments, nIdx + 1); + }, this).bind(aFilenames, sClassName, sMsgName, oThisRef, oArgumRangeents, nIdx), + + "utf-8" + ); + }, + + $ON_MSG_FULL_PLUGIN_LOADED: function(aFilenames, sClassName, sMsgName, oThisRef, oArguments, oRes) { + // oThisRef.$this는 현재 로드되는 플러그인이 parent 인스턴스일 경우 존재 함. oThisRef.$this는 현재 플러그인(oThisRef)를 parent로 삼고 있는 인스턴스 + // oThisRef에 $this 속성이 없다면 parent가 아닌 일반 인스턴스 + // oPluginRef는 결과적으로 상속 관계가 있다면 자식 인스턴스를 아니라면 일반적인 인스턴스를 가짐 + var oPluginRef = oThisRef.$this || oThisRef; + + var sFilename = aFilenames; + + // now the source code is loaded, remove the loader handlers + for (var i = 0, nLen = oThisRef._huskyFLT.length; i < nLen; i++) { + var sLoaderHandlerName = "$BEFORE_" + oThisRef._huskyFLT[i]; + + // if child class has its own loader function, remove the loader from current instance(parent) only + var oRemoveFrom = (oThisRef.$this && oThisRef[sLoaderHandlerName]) ? oThisRef : oPluginRef; + oRemoveFrom[sLoaderHandlerName] = null; + this.oApp.createMessageMap(sLoaderHandlerName); + } + + var oPlugin = eval(sClassName + ".prototype"); + //var oPlugin = eval("new "+sClassName+"()"); + + var bAcceptLocalBeforeFirstAgain = false; + // if there were no $LOCAL_BEFORE_FIRST in already-loaded script, set to accept $LOCAL_BEFORE_FIRST next time as the function could be included in the lazy-loaded script. + if (typeof oPluginRef["$LOCAL_BEFORE_FIRST"] !== "function") { + this.oApp.acceptLocalBeforeFirstAgain(oPluginRef, true); + } + + for (var x in oPlugin) { + // 자식 인스턴스에 parent를 override하는 함수가 없다면 parent 인스턴스에 함수 복사 해 줌. 이때 함수만 복사하고, 나머지 속성들은 현재 인스턴스에 존재 하지 않을 경우에만 복사. + if (oThisRef.$this && (!oThisRef[x] || (typeof oPlugin[x] === "function" && x != "constructor"))) { + oThisRef[x] = jindo.$Fn(oPlugin[x], oPluginRef).bind(); + } + + // 현재 인스턴스에 함수 복사 해 줌. 이때 함수만 복사하고, 나머지 속성들은 현재 인스턴스에 존재 하지 않을 경우에만 복사 + if (oPlugin[x] && (!oPluginRef[x] || (typeof oPlugin[x] === "function" && x != "constructor"))) { + oPluginRef[x] = oPlugin[x]; + + // 새로 추가되는 함수가 메시지 핸들러라면 메시지 매핑에 추가 해 줌 + if (x.match(/^\$(LOCAL|BEFORE|ON|AFTER)_/)) { + this.oApp.addToMessageMap(x, oPluginRef); + } + } + } + + if (bAcceptLocalBeforeFirstAgain) { + this.oApp.acceptLocalBeforeFirstAgain(oPluginRef, true); + } + + // re-send the message after all the jindo.$super handlers are executed + if (!oThisRef.$this) { + this.oApp.exec(sMsgName, oArguments); + } + }, + + $ON_LOAD_HTML: function(sId) { + if (this.htHTMLLoaded[sId]) return; + + var elTextarea = jindo.$("_llh_" + sId); + if (!elTextarea) return; + + this.htHTMLLoaded[sId] = true; + + var elTmp = document.createElement("DIV"); + elTmp.innerHTML = elTextarea.value; + + while (elTmp.firstChild) { + elTextarea.parentNode.insertBefore(elTmp.firstChild, elTextarea); + } + }, + + $ON_EXEC_ON_READY_FUNCTION: function() { + if (typeof this.oApp.htRunOptions.fnOnAppReady == "function") { + this.oApp.htRunOptions.fnOnAppReady(); + } + } +}); +//{ +/** + * @fileOverview This file contains Husky plugin that bridges the HuskyRange function + * @name hp_HuskyRangeManager.js + */ +nhn.husky.HuskyRangeManager = jindo.$Class({ + name: "HuskyRangeManager", + + oWindow: null, + + $init: function(win) { + this.oWindow = win || window; + }, + + $BEFORE_MSG_APP_READY: function() { + if (this.oWindow && this.oWindow.tagName == "IFRAME") { + this.oWindow = this.oWindow.contentWindow; + nhn.CurrentSelection.setWindow(this.oWindow); + } + + this.oApp.exec("ADD_APP_PROPERTY", ["getSelection", jindo.$Fn(this.getSelection, this).bind()]); + this.oApp.exec("ADD_APP_PROPERTY", ["getEmptySelection", jindo.$Fn(this.getEmptySelection, this).bind()]); + }, + + $ON_SET_EDITING_WINDOW: function(oWindow) { + this.oWindow = oWindow; + }, + + getEmptySelection: function(oWindow) { + var oHuskyRange = new nhn.HuskyRange(oWindow || this.oWindow); + return oHuskyRange; + }, + + getSelection: function(oWindow) { + this.oApp.exec("RESTORE_IE_SELECTION", []); + + var oHuskyRange = this.getEmptySelection(oWindow); + + // this may throw an exception if the selected is area is not yet shown + try { + oHuskyRange.setFromSelection(); + } catch (e) {} + + return oHuskyRange; + } +}); +//} +//{ +/** + * @fileOverview This file contains Husky plugin that takes care of the operations related to the tool bar UI + * @name hp_SE2M_Toolbar.js + */ +nhn.husky.SE2M_Toolbar = jindo.$Class({ + name: "SE2M_Toolbar", + + toolbarArea: null, + toolbarButton: null, + uiNameTag: "uiName", + + // 0: unknown + // 1: all enabled + // 2: all disabled + nUIStatus: 1, + + sUIClassPrefix: "husky_seditor_ui_", + + aUICmdMap: null, + elFirstToolbarItem: null, + + _assignHTMLElements: function(oAppContainer) { + oAppContainer = jindo.$(oAppContainer) || document; + this.rxUI = new RegExp(this.sUIClassPrefix + "([^ ]+)"); + + //@ec[ + this.toolbarArea = jindo.$$.getSingle(".se2_tool", oAppContainer); + this.aAllUI = jindo.$$("[class*=" + this.sUIClassPrefix + "]", this.toolbarArea); + this.elTextTool = jindo.$$.getSingle("div.husky_seditor_text_tool", this.toolbarArea); // [SMARTEDITORSUS-1124] 텍스트 툴바 버튼의 라운드 처리 + //@ec] + + this.welToolbarArea = jindo.$Element(this.toolbarArea); + for (var i = 0, nCount = this.aAllUI.length; i < nCount; i++) { + if (this.rxUI.test(this.aAllUI[i].className)) { + var sUIName = RegExp.$1; + if (this.htUIList[sUIName] !== undefined) { + continue; + } + + this.htUIList[sUIName] = this.aAllUI[i]; + this.htWrappedUIList[sUIName] = jindo.$Element(this.htUIList[sUIName]); + } + } + + if (jindo.$$.getSingle("DIV.se2_icon_tool") != null) { + this.elFirstToolbarItem = jindo.$$.getSingle("DIV.se2_icon_tool UL.se2_itool1>li>button"); + } + }, + + $LOCAL_BEFORE_FIRST: function(sMsg) { + var aToolItems = jindo.$$(">ul>li[class*=" + this.sUIClassPrefix + "]>button", this.elTextTool); + var nItemLength = aToolItems.length; + + this.elFirstToolbarItem = this.elFirstToolbarItem || aToolItems[0]; + this.elLastToolbarItem = aToolItems[nItemLength - 1]; + + this.oApp.registerBrowserEvent(this.toolbarArea, "keydown", "NAVIGATE_TOOLBAR", []); + }, + + /** + * @param {Element} oAppContainer + * @param {Object} htOptions + * @param {Array} htOptions.aDisabled 비활성화할 버튼명 배열 + */ + $init: function(oAppContainer, htOptions) { + this._htOptions = htOptions || {}; + this.htUIList = {}; + this.htWrappedUIList = {}; + + this.aUICmdMap = {}; + this._assignHTMLElements(oAppContainer); + }, + + $ON_MSG_APP_READY: function() { + if (this.oApp.bMobile) { + this.oApp.registerBrowserEvent(this.toolbarArea, "touchstart", "EVENT_TOOLBAR_TOUCHSTART"); + } else { + this.oApp.registerBrowserEvent(this.toolbarArea, "mouseover", "EVENT_TOOLBAR_MOUSEOVER"); + this.oApp.registerBrowserEvent(this.toolbarArea, "mouseout", "EVENT_TOOLBAR_MOUSEOUT"); + } + this.oApp.registerBrowserEvent(this.toolbarArea, "mousedown", "EVENT_TOOLBAR_MOUSEDOWN"); + + this.oApp.exec("ADD_APP_PROPERTY", ["getToolbarButtonByUIName", jindo.$Fn(this.getToolbarButtonByUIName, this).bind()]); + + //웹접근성 + //이 단계에서 oAppContainer가 정의되지 않은 상태라서 this.toolbarArea변수값을 사용하지 못하고 아래와 같이 다시 정의하였음. + var elTool = jindo.$$.getSingle(".se2_tool"); + this.oApp.exec("REGISTER_HOTKEY", ["esc", "FOCUS_EDITING_AREA", [], elTool]); + + // [SMARTEDITORSUS-1679] 초기 disabled 처리가 필요한 버튼은 비활성화 + if (this._htOptions.aDisabled) { + this._htOptions._sDisabled = "," + this._htOptions.aDisabled.toString() + ","; // 버튼을 활성화할때 비교하기 위한 문자열구성 + this.oApp.exec("DISABLE_UI", [this._htOptions.aDisabled]); + } + }, + + + $ON_NAVIGATE_TOOLBAR: function(weEvent) { + + var TAB_KEY_CODE = 9; + //이벤트가 발생한 엘리먼트가 마지막 아이템이고 TAB 키가 눌려졌다면 + if ((weEvent.element == this.elLastToolbarItem) && (weEvent.key().keyCode == TAB_KEY_CODE)) { + + + if (weEvent.key().shift) { + //do nothing + } else { + this.elFirstToolbarItem.focus(); + weEvent.stopDefault(); + } + } + + + //이벤트가 발생한 엘리먼트가 첫번째 아이템이고 TAB 키가 눌려졌다면 + if (weEvent.element == this.elFirstToolbarItem && (weEvent.key().keyCode == TAB_KEY_CODE)) { + if (weEvent.key().shift) { + weEvent.stopDefault(); + this.elLastToolbarItem.focus(); + } + } + }, + + + //포커스가 툴바에 있는 상태에서 단축키를 누르면 에디팅 영역으로 다시 포커스가 가도록 하는 함수. (웹접근성) + $ON_FOCUS_EDITING_AREA: function() { + this.oApp.exec("FOCUS"); + }, + + $ON_TOGGLE_TOOLBAR_ACTIVE_LAYER: function(elLayer, elBtn, sOpenCmd, aOpenArgs, sCloseCmd, aCloseArgs) { + this.oApp.exec("TOGGLE_ACTIVE_LAYER", [elLayer, "MSG_TOOLBAR_LAYER_SHOWN", [elLayer, elBtn, sOpenCmd, aOpenArgs], sCloseCmd, aCloseArgs]); + }, + + $ON_MSG_TOOLBAR_LAYER_SHOWN: function(elLayer, elBtn, aOpenCmd, aOpenArgs) { + this.oApp.exec("POSITION_TOOLBAR_LAYER", [elLayer, elBtn]); + if (aOpenCmd) { + this.oApp.exec(aOpenCmd, aOpenArgs); + } + }, + + $ON_SHOW_TOOLBAR_ACTIVE_LAYER: function(elLayer, sCmd, aArgs, elBtn) { + this.oApp.exec("SHOW_ACTIVE_LAYER", [elLayer, sCmd, aArgs]); + this.oApp.exec("POSITION_TOOLBAR_LAYER", [elLayer, elBtn]); + }, + + $ON_ENABLE_UI: function(sUIName) { + this._enableUI(sUIName); + }, + + /** + * [SMARTEDITORSUS-1679] 여러개의 버튼을 동시에 비활성화 할 수 있도록 수정 + * @param {String|Array} vUIName 비활성화할 버튼명, 배열일 경우 여러개 동시 적용 + */ + $ON_DISABLE_UI: function(sUIName) { + if (sUIName instanceof Array) { + for (var i = 0, sName; + (sName = sUIName[i]); i++) { + this._disableUI(sName); + } + } else { + this._disableUI(sUIName); + } + }, + + $ON_SELECT_UI: function(sUIName) { + var welUI = this.htWrappedUIList[sUIName]; + if (!welUI) { + return; + } + welUI.removeClass("hover"); + welUI.addClass("active"); + }, + + $ON_DESELECT_UI: function(sUIName) { + var welUI = this.htWrappedUIList[sUIName]; + if (!welUI) { + return; + } + welUI.removeClass("active"); + }, + + /** + * [SMARTEDITORSUS-1646] 툴바버튼 선택상태를 토글링한다. + * @param {String} sUIName 토글링할 툴바버튼 이름 + */ + $ON_TOGGLE_UI_SELECTED: function(sUIName) { + var welUI = this.htWrappedUIList[sUIName]; + if (!welUI) { + return; + } + if (welUI.hasClass("active")) { + welUI.removeClass("active"); + } else { + welUI.removeClass("hover"); + welUI.addClass("active"); + } + }, + + $ON_ENABLE_ALL_UI: function(htOptions) { + if (this.nUIStatus === 1) { + return; + } + + var sUIName, className; + htOptions = htOptions || {}; + var waExceptions = jindo.$A(htOptions.aExceptions || []); + + for (sUIName in this.htUIList) { + if (sUIName && !waExceptions.has(sUIName)) { + this._enableUI(sUIName); + } + // if(sUIName) this.oApp.exec("ENABLE_UI", [sUIName]); + } + // jindo.$Element(this.toolbarArea).removeClass("off"); + + this.nUIStatus = 1; + }, + + $ON_DISABLE_ALL_UI: function(htOptions) { + if (this.nUIStatus === 2) { + return; + } + + var sUIName; + htOptions = htOptions || {}; + var waExceptions = jindo.$A(htOptions.aExceptions || []); + var bLeavlActiveLayer = htOptions.bLeaveActiveLayer || false; + + if (!bLeavlActiveLayer) { + this.oApp.exec("HIDE_ACTIVE_LAYER"); + } + + for (sUIName in this.htUIList) { + if (sUIName && !waExceptions.has(sUIName)) { + this._disableUI(sUIName); + } + // if(sUIName) this.oApp.exec("DISABLE_UI", [sUIName]); + } + // jindo.$Element(this.toolbarArea).addClass("off"); + + this.nUIStatus = 2; + }, + + $ON_MSG_STYLE_CHANGED: function(sAttributeName, attributeValue) { + if (attributeValue === "@^") { + this.oApp.exec("SELECT_UI", [sAttributeName]); + } else { + this.oApp.exec("DESELECT_UI", [sAttributeName]); + } + }, + + $ON_POSITION_TOOLBAR_LAYER: function(elLayer, htOption) { + var nLayerLeft, nLayerRight, nToolbarLeft, nToolbarRight; + + elLayer = jindo.$(elLayer); + htOption = htOption || {}; + var elBtn = jindo.$(htOption.elBtn); + var sAlign = htOption.sAlign; + + var nMargin = -1; + if (!elLayer) { + return; + } + if (elBtn && elBtn.tagName && elBtn.tagName == "BUTTON") { + elBtn.parentNode.appendChild(elLayer); + } + + var welLayer = jindo.$Element(elLayer); + + if (sAlign != "right") { + elLayer.style.left = "0"; + + nLayerLeft = welLayer.offset().left; + nLayerRight = nLayerLeft + elLayer.offsetWidth; + + nToolbarLeft = this.welToolbarArea.offset().left; + nToolbarRight = nToolbarLeft + this.toolbarArea.offsetWidth; + + if (nLayerRight > nToolbarRight) { + welLayer.css("left", (nToolbarRight - nLayerRight - nMargin) + "px"); + } + + if (nLayerLeft < nToolbarLeft) { + welLayer.css("left", (nToolbarLeft - nLayerLeft + nMargin) + "px"); + } + } else { + elLayer.style.right = "0"; + + nLayerLeft = welLayer.offset().left; + nLayerRight = nLayerLeft + elLayer.offsetWidth; + + nToolbarLeft = this.welToolbarArea.offset().left; + nToolbarRight = nToolbarLeft + this.toolbarArea.offsetWidth; + + if (nLayerRight > nToolbarRight) { + welLayer.css("right", -1 * (nToolbarRight - nLayerRight - nMargin) + "px"); + } + + if (nLayerLeft < nToolbarLeft) { + welLayer.css("right", -1 * (nToolbarLeft - nLayerLeft + nMargin) + "px"); + } + } + }, + + $ON_EVENT_TOOLBAR_MOUSEOVER: function(weEvent) { + if (this.nUIStatus === 2) { + return; + } + + var aAffectedElements = this._getAffectedElements(weEvent.element); + for (var i = 0; i < aAffectedElements.length; i++) { + if (!aAffectedElements[i].hasClass("active")) { + aAffectedElements[i].addClass("hover"); + } + } + }, + + $ON_EVENT_TOOLBAR_MOUSEOUT: function(weEvent) { + if (this.nUIStatus === 2) { + return; + } + var aAffectedElements = this._getAffectedElements(weEvent.element); + for (var i = 0; i < aAffectedElements.length; i++) { + aAffectedElements[i].removeClass("hover"); + } + }, + + $ON_EVENT_TOOLBAR_MOUSEDOWN: function(weEvent) { + var elTmp = weEvent.element; + // Check if the button pressed is in active status and has a visible layer i.e. the button had been clicked and its layer is open already. (buttons like font styles-bold, underline-got no sub layer -> childNodes.length<=2) + // -> In this case, do not close here(mousedown). The layer will be closed on "click". If we close the layer here, the click event will open it again because it toggles the visibility. + while (elTmp) { + if (elTmp.className && elTmp.className.match(/active/) && (elTmp.childNodes.length > 2 || elTmp.parentNode.className.match(/se2_pair/))) { + return; + } + elTmp = elTmp.parentNode; + } + this.oApp.exec("HIDE_ACTIVE_LAYER_IF_NOT_CHILD", [weEvent.element]); + }, + + _enableUI: function(sUIName) { + // [SMARTEDITORSUS-1679] 초기 disabled 설정된 버튼은 skip + if (this._htOptions._sDisabled && this._htOptions._sDisabled.indexOf("," + sUIName + ",") > -1) { + return; + } + var i, nLen; + + this.nUIStatus = 0; + + var welUI = this.htWrappedUIList[sUIName]; + var elUI = this.htUIList[sUIName]; + if (!welUI) { + return; + } + welUI.removeClass("off"); + + var aAllBtns = elUI.getElementsByTagName("BUTTON"); + for (i = 0, nLen = aAllBtns.length; i < nLen; i++) { + aAllBtns[i].disabled = false; + } + + // enable related commands + var sCmd = ""; + if (this.aUICmdMap[sUIName]) { + for (i = 0; i < this.aUICmdMap[sUIName].length; i++) { + sCmd = this.aUICmdMap[sUIName][i]; + this.oApp.exec("ENABLE_MESSAGE", [sCmd]); + } + } + }, + + _disableUI: function(sUIName) { + var i, nLen; + + this.nUIStatus = 0; + + var welUI = this.htWrappedUIList[sUIName]; + var elUI = this.htUIList[sUIName]; + if (!welUI) { + return; + } + welUI.addClass("off"); + welUI.removeClass("hover"); + + var aAllBtns = elUI.getElementsByTagName("BUTTON"); + for (i = 0, nLen = aAllBtns.length; i < nLen; i++) { + aAllBtns[i].disabled = true; + } + + // disable related commands + var sCmd = ""; + if (this.aUICmdMap[sUIName]) { + for (i = 0; i < this.aUICmdMap[sUIName].length; i++) { + sCmd = this.aUICmdMap[sUIName][i]; + this.oApp.exec("DISABLE_MESSAGE", [sCmd]); + } + } + }, + + _getAffectedElements: function(el) { + var elLi, welLi; + + // 버튼 클릭시에 return false를 해 주지 않으면 chrome에서 버튼이 포커스 가져가 버림. + // 에디터 로딩 시에 일괄처리 할 경우 로딩 속도가 느려짐으로 hover시에 하나씩 처리 + if (!el.bSE2_MDCancelled) { + el.bSE2_MDCancelled = true; + var aBtns = el.getElementsByTagName("BUTTON"); + + for (var i = 0, nLen = aBtns.length; i < nLen; i++) { + aBtns[i].onmousedown = function() { + return false; + }; + } + } + + if (!el || !el.tagName) { + return []; + } + + if ((elLi = el).tagName == "BUTTON") { + // typical button + //
  • + //