diff --git a/.gitignore b/.gitignore index ea34c6950..5d06e0e6b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ config.user.inc.php +.DS_Store +Thumbs.db /files/ /build/ /node_modules/ -.DS_Store -Thumbs.db +/vendor/ +tests/_output/* diff --git a/.travis.yml b/.travis.yml index cb2c700cf..d02896f60 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,23 @@ language: php php: - - 5.2 - 5.3 - 5.4 - 5.5 - 5.6 + - 7 - hhvm +matrix: + allow_failures: + - php: 7 + - php: hhvm before_script: + - travis_retry composer self-update - npm install -g grunt-cli - npm install + - if [ $(phpenv version-name) != "5.3" ]; then composer install; fi + - if [ $(phpenv version-name) != "5.3" ]; then mysql -e 'create database xe_test;'; fi + - if [ $(phpenv version-name) != "5.3" ]; then echo "USE mysql;\nUPDATE user SET password=PASSWORD('travis') WHERE user='travis';\nFLUSH PRIVILEGES;\n" | mysql -u root; fi + - if [ $(phpenv version-name) != "5.3" ]; then php -S localhost:8000 & fi script: - grunt lint + - if [ $(phpenv version-name) != "5.3" ]; then ./vendor/bin/codecept run --env travis; fi diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ae1039e7b..471523c5f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,21 +5,21 @@ Issue 작성 시 참고해주세요. * 작성하려는 이슈가 이미 있는지 검색 후 등록해주세요. 비슷한 이슈가 있다면 댓글로 추가 내용을 덧붙일 수 있습니다. * 이슈에는 하나의 문제 또는 제안을 작성해주세요. 절대 하나의 이슈에 2개 이상의 내용을 적지마세요. -* 이슈는 가능한 상세하고 간결하게 작성해주세요 - * 필요하다면 화면을 캡쳐하여 이미지를 업로드할 수 있습니다 +* 이슈는 가능한 상세하고 간결하게 작성해주세요. + * 필요하다면 화면을 캡처하여 이미지를 업로드할 수 있습니다. ## Pull request(PR) -* `master` 브랜치의 코드는 수정하지마세요 +* `master` 브랜치의 코드는 수정하지마세요. * PR은 `develop` 브랜치만 허용합니다. -* `develop` 브랜치를 부모로한 토픽 브랜치를 활용하면 편리합니다. +* `develop` 브랜치를 부모로 한 토픽 브랜치를 활용하면 편리합니다. ## Coding Guidelines 코드를 기여할 때 Coding conventions을 따라야합니다. -* 모든 text 파일의 charset은 BOM이 없는 UTF-8입니다 +* 모든 text 파일의 charset은 BOM이 없는 UTF-8입니다. * newline은 UNIX type을 사용합니다. 일부 파일이 다른 type을 사용하더라도 절대 고치지 마세요! -* 들여쓰기는 1개의 탭으로 합니다 -* class 선언과 function, if, foreach, for, while 등 중괄호의 `{}`는 다음 줄에 있어야 합니다 +* 들여쓰기는 1개의 탭으로 합니다. +* class 선언과 function, if, foreach, for, while 등 중괄호의 `{}`는 다음 줄에 있어야 합니다. * 마찬가지로 선언 다음에는 공백을 두지 않습니다. ex) CORRECT `if(...)`, INCORRECT `if (...)` -* **Coding convention에 맞지 않는 코드를 발견 하더라도 목적과 관계 없는 코드는 절대 고치지 마세요** +* **Coding convention에 맞지 않는 코드를 발견 하더라도 목적과 관계 없는 코드는 절대 고치지 마세요.** diff --git a/Gruntfile.js b/Gruntfile.js index 2adb308a0..c2195afea 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -45,26 +45,24 @@ module.exports = function(grunt) { uglify: { 'common-js': { options: { - banner: banner_xe_js, - sourceMap: true + banner: banner_xe_js }, files: { - 'common/js/xe.min.js': ['common/js/xe.js'] + 'common/js/xe.min.js': ['common/js/xe.js'], + } + }, + 'common-js-plugins': { + files: { + 'common/js/plugins/jquery.fileupload/js/main.min.js': ['common/js/plugins/jquery.fileupload/js/main.js'], } }, 'handlebars': { - options: { - sourceMap: true - }, files: { 'common/js/plugins/handlebars/handlebars.min.js': ['common/js/plugins/handlebars/handlebars.js'], 'common/js/plugins/handlebars.runtime/handlebars.runtime.min.js': ['common/js/plugins/handlebars.runtime/handlebars.runtime.js'], } }, 'modules': { - options: { - sourceMap: true - }, files: { 'common/js/x.min.js' : ['common/js/x.js'], // addon @@ -74,11 +72,15 @@ module.exports = function(grunt) { // module/editor 'modules/editor/skins/xpresseditor/js/xpresseditor.min.js': ['modules/editor/skins/xpresseditor/js/xpresseditor.js'], 'modules/editor/skins/xpresseditor/js/xe_textarea.min.js': ['modules/editor/skins/xpresseditor/js/xe_textarea.js'], + 'modules/editor/skins/ckeditor/js/default.min.js': ['modules/editor/skins/ckeditor/js/default.js'], + 'modules/editor/skins/ckeditor/js/xe_interface.min.js': ['modules/editor/skins/ckeditor/js/xe_interface.js'], + 'modules/editor/skins/ckeditor/js/xe_textarea.min.js': ['modules/editor/skins/ckeditor/js/xe_textarea.js'], 'modules/editor/tpl/js/editor_common.min.js': ['modules/editor/tpl/js/editor_common.js'], 'modules/editor/tpl/js/swfupload.min.js': ['modules/editor/tpl/js/swfupload.js'], 'modules/editor/tpl/js/uploader.min.js': ['modules/editor/tpl/js/uploader.js'], 'modules/editor/tpl/js/editor.min.js': ['modules/editor/tpl/js/editor.js'], 'modules/editor/tpl/js/editor_module_config.min.js': ['modules/editor/tpl/js/editor_module_config.js'], + 'modules/editor/tpl/js/editor.app.min.js': ['modules/editor/tpl/js/editor.app.js'], // module/admin 'modules/admin/tpl/js/admin.min.js': ['modules/admin/tpl/js/admin.js'], 'modules/admin/tpl/js/config.min.js': ['modules/admin/tpl/js/config.js'], @@ -89,6 +91,7 @@ module.exports = function(grunt) { 'modules/board/skins/default/board.default.min.js': ['modules/board/skins/default/board.default.js'], 'modules/board/m.skins/default/js/mboard.min.js': ['modules/board/m.skins/default/js/mboard.js'], 'modules/board/m.skins/simpleGray/js/mboard.min.js': ['modules/board/m.skins/simpleGray/js/mboard.js'], + 'modules/board/skins/xedition/board.default.min.js': ['modules/board/skins/xedition/board.default.js'], // editor-component-image-gallery 'modules/editor/components/image_gallery/tpl/gallery.min.js' : ['modules/editor/components/image_gallery/tpl/gallery.js'], 'modules/editor/components/image_gallery/tpl/list_gallery.min.js' : ['modules/editor/components/image_gallery/tpl/list_gallery.js'], @@ -107,66 +110,60 @@ module.exports = function(grunt) { 'addons/oembed/oembed.min.js': ['addons/oembed/oembed.js'], } }, + 'layout': { + files: { + 'layouts/xedition/js/jquery.easing.min.js': ['layouts/xedition/js/jquery.easing.js'], + 'layouts/xedition/js/layout.min.js': ['layouts/xedition/js/layout.js'], + 'layouts/xedition/js/welcome.min.js': ['layouts/xedition/js/welcome.js'], + } + }, }, cssmin: { - 'common-css': { + 'common': { files: { 'common/css/xe.min.css': ['common/css/xe.css'], 'common/css/mobile.min.css': ['common/css/mobile.css'] } }, - 'module-admin-css': { - files: { - 'modules/admin/tpl/css/admin.min.css': ['modules/admin/tpl/css/admin.css'] - } - }, - 'editor-component-image-gallery': { + 'modules': { files: { + 'modules/admin/tpl/css/admin.min.css': ['modules/admin/tpl/css/admin.css'], 'modules/editor/components/image_gallery/tpl/popup.min.css': ['modules/editor/components/image_gallery/tpl/popup.css'], 'modules/editor/components/image_gallery/tpl/slide_gallery.min.css': ['modules/editor/components/image_gallery/tpl/slide_gallery.css'], - } - }, - 'moudle-widget-tpl': { - files: { 'modules/widget/tpl/css/widget.min.css': ['modules/widget/tpl/css/widget.css'], - } - }, - 'moudle-poll': { - files: { 'modules/poll/tpl/css/poll.min.css': ['modules/poll/tpl/css/poll.css'], 'modules/poll/skins/default/css/poll.min.css': ['modules/poll/skins/default/css/poll.css'], 'modules/poll/skins/simple/css/poll.min.css': ['modules/poll/skins/simple/css/poll.css'], - } - }, - 'moudle-editor': { - files: { 'modules/editor/skins/xpresseditor/css/default.min.css': ['modules/editor/skins/xpresseditor/css/default.css'], + 'modules/board/skins/default/board.default.min.css': ['modules/board/skins/default/board.default.css'], + 'modules/board/m.skins/default/css/mboard.min.css': ['modules/board/m.skins/default/css/mboard.css'], + 'modules/board/m.skins/simpleGray/css/mboard.min.css': ['modules/board/m.skins/simpleGray/css/mboard.css'], + 'modules/board/skins/xedition/board.default.min.css': ['modules/board/skins/xedition/board.default.css'], } }, - 'addon-oembed': { + 'addons': { files: { 'addons/oembed/jquery.oembed.min.css': ['addons/oembed/jquery.oembed.css'], } }, - 'module-board': { + 'layout': { files: { - 'modules/board/skins/default/board.default.min.css': ['modules/board/skins/default/board.default.css'], - 'modules/board/m.skins/default/css/mboard.min.css': ['modules/board/m.skins/default/css/mboard.css'], - 'modules/board/m.skins/simpleGray/css/mboard.min.css': ['modules/board/m.skins/simpleGray/css/mboard.css'] + 'layouts/xedition/css/camera.min.css': ['layouts/xedition/css/camera.css'], + 'layouts/xedition/css/layout.min.css': ['layouts/xedition/css/layout.css'], + 'layouts/xedition/css/webfont.min.css': ['layouts/xedition/css/webfont.css'], + 'layouts/xedition/css/welcome.min.css': ['layouts/xedition/css/welcome.css'], + 'layouts/xedition/css/widget.login.min.css': ['layouts/xedition/css/widget.login.css'], + 'layouts/xedition/css/xeicon.min.css': ['layouts/xedition/css/xeicon.css'], } - } + }, }, jshint: { files: [ 'Gruntfile.js', 'common/js/*.js', - '!common/js/html5.js', - '!common/js/jquery.js', - '!common/js/x.js', - '!common/js/xe.js', - '!common/js/modernizr.js', 'modules/admin/tpl/js/*.js', 'modules/board/tpl/js/*.js', + 'modules/board/skins/*/*.js', 'modules/editor/tpl/js/*.js', 'modules/menu/tpl/js/*.js', 'modules/widget/tpl/js/*.js', @@ -175,9 +172,17 @@ module.exports = function(grunt) { ignores : [ '**/jquery*.js', '**/swfupload.js', - '**/*.min.js', + '**/**.min.js', '**/*-packed.js', - '**/*.compressed.js' + '**/*.compressed.js', + '**/jquery-*.js', + '**/jquery.*.js', + 'common/js/html5.js', + 'common/js/x.js', + 'common/js/xe.js', + 'common/js/modernizr.js', + 'vendor/**', + 'tests/**', ] } }, @@ -200,6 +205,8 @@ module.exports = function(grunt) { '!common/css/bootstrap.css', '!common/css/bootstrap-responsive.css', '!**/*.min.css', + '!vendor/**', + '!tests/**', ] } }, @@ -215,7 +222,9 @@ module.exports = function(grunt) { "!tests/**", "!tools/**", "!node_modules/**", - "!libs/**" + "!libs/**", + "!vendor/**", + "!tests/_output/**" ], }, } diff --git a/README.md b/README.md index bb095855e..a96a87e1b 100644 --- a/README.md +++ b/README.md @@ -10,20 +10,20 @@ XpressEngine(XE)은 누구나 쉽고 편하고 자유롭게 콘텐츠를 발행 ### 확장형 구조 -XE 코어는 모듈, 애드온, 에디터 컴포넌트, 위젯, 레이아웃의 구조를 기반으로 결과물을 생성합니다. +XE 코어는 모듈, 애드온, 에디터 컴포넌트, 위젯, 레이아웃의 구조를 기반으로 결과물을 생성합니다. -이렇게 각각의 기능과 디자인이 구조적으로 연결되는 모듈형 구조는 개발 및 유지보수를 쉽게하도록 도와주며 관리자는 손쉽게 설정과 디자인을 변경할 수 있습니다. +이렇게 각각의 기능과 디자인이 구조적으로 연결되는 모듈형 구조는 개발 및 유지보수를 쉽게 하도록 도와주며 관리자는 손쉽게 설정과 디자인을 변경할 수 있습니다. 레이아웃, 모듈 스킨 그리고 위젯의 스타일과 스킨을 활용하면 여러분만의 개성을 가진 웹 사이트를 만들 수 있습니다. XE와 함께 더 다채롭고 개성있는 웹사이트를 만들어보세요! ### 오픈 소스 소프트웨어! 열린 프로젝트! (코드 공헌 가이드) 많은 분들께서 개발, 디자인, 마크업 등의 전문 분야는 물론 다국어 번역, 문제점 보고 등 기능 개선 및 문제 해결을 위해 많은 노력을 해주시고 계십니다. -참여를 원하시는 분들은 버그 신고/제안 혹은 Pull Request 전 [CONTRIBUTING.md](./CONTRIBUTING.md) 문서를 먼저 읽어주시기 바랍니다. +참여를 원하시는 분들은 버그 신고/제안 혹은 Pull Request 전에 [CONTRIBUTING.md](./CONTRIBUTING.md) 문서를 먼저 읽어주시기 바랍니다. XpressEngine은 여러분들의 개발 참여를 기다립니다. ## Server Requirements -* PHP version 5.2.4 or greater (But recommend PHP >= 5.3.11) +* PHP version 5.3.0 or greater (But recommend PHP >= 5.5.0) * MYSQL version 4.1 or greater (But recommend MYSQL >= 5.x) , MS-SQL, CUBRID * XML Library * GD Library @@ -37,7 +37,7 @@ XpressEngine은 여러분들의 개발 참여를 기다립니다. http://www.xpressengine.com/contributors ## Support -* Official sitie (Korean) : http://www.xpressengine.com/ +* Official site (Korean) : http://www.xpressengine.com/ ## License Copyright 2014 NAVER Corp. diff --git a/addons/captcha/captcha.min.js b/addons/captcha/captcha.min.js index 8a4aa67ef..b22dc0a66 100644 --- a/addons/captcha/captcha.min.js +++ b/addons/captcha/captcha.min.js @@ -1,2 +1 @@ -var calledArgs=null;!function(a){a(function(){function b(){a("form").each(function(b){var d=!1;if(!a(this).attr("onsubmit")||a(this).attr("onsubmit").indexOf("procFilter")<0)for(var e=a(this).find("input[name=act]").val(),b=0;b'),a(this).find("input[name=error_return_url]")||a(this).append(''),a(this).submit(function(b){if(a(this).find("input[name=secret_text]").val())return!0;b.preventDefault();var d=this;a("#captcha_layer form").submit(function(b){return b.preventDefault(),a("#secret_text").val()?(a(d).append(''),void a(d).submit()):(a(this).find("input[type=text]").val("").focus(),!1)});var e=new Array;e.captcha_action="setCaptchaSession",e.mid=current_mid,window.oldExecXml("","",e,c.show,new Array("error","message","about_captcha","captcha_reload","captcha_play","cmd_input","cmd_cancel"))}))});a(document.body);if(!c){var b=-1!=navigator.appVersion.indexOf("MSIE")?!0:!1,d=-1!=navigator.appVersion.toLowerCase().indexOf("win")?!0:!1,e=-1!=navigator.userAgent.indexOf("Opera")?!0:!1,f=request_uri+"addons/captcha/swf/play.swf";b&&d&&!e?(_object_='',_object_+='',_object_+='',_object_+='',_object_+='',_object_+='',_object_+='',_object_+=""):_object_='',c=a('