فهرست منبع

Merge remote-tracking branch 'origin/closedown-4.0.x'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 11 سال پیش
والد
کامیت
46d9dbadf1
100فایلهای تغییر یافته به همراه565 افزوده شده و 5321 حذف شده
  1. 35 0
      ecl/regress/issue9817.ecl
  2. 159 0
      esp/bindings/SOAP/xpp/xpp/xpputils.cpp
  3. 14 0
      esp/bindings/SOAP/xpp/xpp/xpputils.h
  4. 75 2
      esp/bindings/http/platform/httpbinding.cpp
  5. 18 12
      esp/bindings/http/platform/httpbinding.hpp
  6. 2 0
      esp/bindings/http/platform/httptransport.cpp
  7. 1 0
      esp/bindings/http/platform/httptransport.ipp
  8. 0 15
      esp/esdl/CMakeLists.txt
  9. 0 516
      esp/esdl/esdl2ecl.cpp
  10. 0 1488
      esp/esdl/esdl_transformer.cpp
  11. 0 47
      esp/esdl/esdl_transformer.hpp
  12. 6 0
      esp/files/css/hpcc.css
  13. 5 0
      esp/files/d3/d3.v3.min.js
  14. 1 0
      esp/files/d3/topojson.v1.min.js
  15. 1 1
      esp/files/dijit/CalendarLite.js
  16. 1 1
      esp/files/dijit/CheckedMenuItem.js
  17. 1 1
      esp/files/dijit/ColorPalette.js
  18. 2 2
      esp/files/dijit/Dialog.js
  19. 1 1
      esp/files/dijit/DropDownMenu.js
  20. 2 2
      esp/files/dijit/Editor.js
  21. 2 2
      esp/files/dijit/Fieldset.js
  22. 1 1
      esp/files/dijit/InlineEditBox.js
  23. 1 1
      esp/files/dijit/MenuBar.js
  24. 1 1
      esp/files/dijit/MenuBarItem.js
  25. 1 1
      esp/files/dijit/MenuItem.js
  26. 1 1
      esp/files/dijit/MenuSeparator.js
  27. 1 0
      esp/files/dijit/PopupMenuItem.js
  28. 1 1
      esp/files/dijit/ProgressBar.js
  29. 1 1
      esp/files/dijit/TitlePane.js
  30. 1 1
      esp/files/dijit/Tooltip.js
  31. 1 1
      esp/files/dijit/TooltipDialog.js
  32. 88 95
      esp/files/dijit/Tree.js
  33. 2 0
      esp/files/dijit/_CssStateMixin.js
  34. 2 2
      esp/files/dijit/_KeyNavMixin.js
  35. 23 22
      esp/files/dijit/_MenuBase.js
  36. 1 1
      esp/files/dijit/dijit-all.js
  37. 1 1
      esp/files/dijit/dijit.js
  38. 1 1
      esp/files/dijit/form/Button.js
  39. 1 1
      esp/files/dijit/form/CheckBox.js
  40. 1 1
      esp/files/dijit/form/ComboBoxMixin.js
  41. 1 1
      esp/files/dijit/form/ComboButton.js
  42. 1 1
      esp/files/dijit/form/DropDownButton.js
  43. 1 1
      esp/files/dijit/form/HorizontalSlider.js
  44. 1 1
      esp/files/dijit/form/Select.js
  45. 1 1
      esp/files/dijit/form/TextBox.js
  46. 1 1
      esp/files/dijit/form/ValidationTextBox.js
  47. 1 1
      esp/files/dijit/form/VerticalSlider.js
  48. 1 1
      esp/files/dijit/form/_DateTimeTextBox.js
  49. 3 3
      esp/files/dijit/form/_FormSelectWidget.js
  50. 2 2
      esp/files/dijit/form/_SearchMixin.js
  51. 1 1
      esp/files/dijit/form/_Spinner.js
  52. 3 0
      esp/files/dijit/form/_TextBoxMixin.js
  53. 1 1
      esp/files/dijit/layout/AccordionContainer.js
  54. 1 1
      esp/files/dijit/layout/ScrollingTabController.js
  55. 1 1
      esp/files/dijit/layout/TabController.js
  56. 1 1
      esp/files/dijit/layout/_TabContainerBase.js
  57. 2 2
      esp/files/dijit/package.json
  58. 0 8
      esp/files/dijit/robot.js
  59. 0 25
      esp/files/dijit/robotx.js
  60. 0 1242
      esp/files/dijit/themes/themeTester-orig.html
  61. 0 1379
      esp/files/dijit/themes/themeTester.html
  62. BIN
      esp/files/dijit/themes/themeTesterImages/blackButtonEnabled.gif
  63. BIN
      esp/files/dijit/themes/themeTesterImages/blackButtonHover.gif
  64. 0 5
      esp/files/dijit/themes/themeTesterQuirk.html
  65. 1 1
      esp/files/dojo/_base/config.js
  66. 2 2
      esp/files/dojo/_base/kernel.js
  67. 1 1
      esp/files/dojo/date/locale.js
  68. 1 1
      esp/files/dojo/dojo.js
  69. 1 1
      esp/files/dojo/i18n.js
  70. 18 10
      esp/files/dojo/node.js
  71. 1 1
      esp/files/dojo/package.json
  72. 0 170
      esp/files/dojo/robot.js
  73. 0 171
      esp/files/dojo/robotx.js
  74. 0 13
      esp/files/dojo/tests.js
  75. 1 1
      esp/files/dojo/touch.js
  76. 6 6
      esp/files/dojox/app/build/discoverAppConfig.js
  77. 32 19
      esp/files/dojox/app/controllers/History.js
  78. 1 1
      esp/files/dojox/app/controllers/Transition.js
  79. 1 1
      esp/files/dojox/atom/widget/FeedEntryEditor.js
  80. 1 1
      esp/files/dojox/atom/widget/FeedEntryViewer.js
  81. 1 1
      esp/files/dojox/atom/widget/FeedViewer.js
  82. 1 1
      esp/files/dojox/calc/FuncGen.js
  83. 1 1
      esp/files/dojox/calc/GraphPro.js
  84. 1 1
      esp/files/dojox/calc/Grapher.js
  85. 1 1
      esp/files/dojox/calc/Standard.js
  86. 1 1
      esp/files/dojox/calendar/Calendar.js
  87. 1 1
      esp/files/dojox/calendar/CalendarBase.js
  88. 1 1
      esp/files/dojox/calendar/ColumnView.js
  89. 1 1
      esp/files/dojox/calendar/ColumnViewSecondarySheet.js
  90. 1 1
      esp/files/dojox/calendar/ExpandRenderer.js
  91. 1 1
      esp/files/dojox/calendar/HorizontalRenderer.js
  92. 1 1
      esp/files/dojox/calendar/LabelRenderer.js
  93. 1 1
      esp/files/dojox/calendar/MatrixView.js
  94. 1 1
      esp/files/dojox/calendar/MobileCalendar.js
  95. 1 1
      esp/files/dojox/calendar/MobileHorizontalRenderer.js
  96. 1 1
      esp/files/dojox/calendar/MobileVerticalRenderer.js
  97. 1 1
      esp/files/dojox/calendar/MonthColumnView.js
  98. 1 1
      esp/files/dojox/calendar/SimpleColumnView.js
  99. 1 1
      esp/files/dojox/calendar/VerticalRenderer.js
  100. 0 0
      esp/files/dojox/charting/action2d/TouchZoomAndPan.js

+ 35 - 0
ecl/regress/issue9817.ecl

@@ -0,0 +1,35 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2013 HPCC Systems.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+############################################################################## */
+
+f := false : stored('f');
+
+output((unicode0)U'X' != U'X');
+output(U'' + U'' + U'' != U'Y');
+output(IF(1 = 2, U'', U'') != U'Z');
+output(IF(f, U'', U'') != U'A');
+
+output(U'Xabcdefhehe' != (unicode0)U'X');
+output(U'Y' != U'' + U'' + U'');
+output(U'Z' != IF(1 = 2, U'', U''));
+output(U'A' != IF(f, U'', U''));
+
+ne(unicode x, unicode y) := x != y;
+
+output(ne(U'Xabcdefhehe', (unicode0)U'X'));
+output(ne(U'Y', U'' + U'' + U''));
+output(ne(U'Z', IF(1 = 2, U'', U'')));
+output(ne(U'A', IF(f, U'', U'')));

+ 159 - 0
esp/bindings/SOAP/xpp/xpp/xpputils.cpp

@@ -0,0 +1,159 @@
+#include "jlib.hpp"
+#include "XmlPullParser.h"
+#include "xpputils.h"
+
+using namespace xpp;
+
+IMultiException *xppMakeException(XmlPullParser &xppx)
+{
+    StringBuffer msg;
+    StringBuffer sourcestr;
+    int code = -1;
+
+    int level = 1;
+    int type = XmlPullParser::END_TAG;
+
+    StartTag stag;
+
+    while(level > 0)
+    {
+        type = xppx.next();
+        switch(type)
+        {
+            case XmlPullParser::START_TAG:
+            {
+                xppx.readStartTag(stag);
+                ++level;
+                const char *tag = stag.getLocalName();
+                if (!stricmp(tag, "Message"))
+                {
+                    readFullContent(xppx, msg);
+                }
+                else if (!stricmp(tag, "Code"))
+                {
+                    StringBuffer codestr;
+                    readFullContent(xppx, codestr);
+                    code = atoi(codestr.str());
+                }
+                else if (!stricmp(tag, "Source"))
+                {
+                    readFullContent(xppx, sourcestr);
+                }
+                break;
+            }
+            case XmlPullParser::END_TAG:
+                --level;
+            break;
+
+            case XmlPullParser::END_DOCUMENT:
+                level=0;
+            break;
+        }
+    }
+
+    IMultiException * me = MakeMultiException(sourcestr.str());
+    me->append(*MakeStringException(code, msg.str()));
+
+    return me;
+}
+
+
+void xppToXmlString(XmlPullParser &xpp, StartTag &stag, StringBuffer & buffer)
+{
+    int level = 1; //assumed due to the way gotonextdataset works.
+    int type = XmlPullParser::END_TAG;
+    const char * content = "";
+    const char *tag = NULL;
+    EndTag etag;
+
+    tag = stag.getLocalName();
+    if (tag)
+    {
+        buffer.appendf("<%s", tag);
+
+        for (int idx=0; idx<stag.getLength(); idx++)
+        {
+            buffer.appendf(" %s=\"", stag.getRawName(idx));
+            buffer.append(stag.getValue(idx));
+            buffer.append('\"');
+        }
+
+        buffer.append(">");
+    }
+    do
+    {
+        type = xpp.next();
+        switch(type)
+        {
+            case XmlPullParser::START_TAG:
+            {
+                xpp.readStartTag(stag);
+                ++level;
+
+                tag = stag.getLocalName();
+                if (tag)
+                {
+                    buffer.appendf("<%s", tag);
+                    for (int idx=0; idx<stag.getLength(); idx++)
+                    {
+                        buffer.appendf(" %s=\"", stag.getRawName(idx));
+                        buffer.append(stag.getValue(idx));
+                        buffer.append('\"');
+                    }
+                    buffer.append(">");
+                }
+                break;
+            }
+            case XmlPullParser::END_TAG:
+                xpp.readEndTag(etag);
+                tag = etag.getLocalName();
+                if (tag)
+                    buffer.appendf("</%s>", tag);
+                --level;
+            break;
+            case XmlPullParser::CONTENT:
+                content = xpp.readContent();
+                encodeXML(content, buffer);
+                break;
+            case XmlPullParser::END_DOCUMENT:
+                level=0;
+            break;
+        }
+    }
+    while (level > 0);
+}
+
+bool xppGotoTag(XmlPullParser &xppx, const char *tagname, StartTag &stag)
+{
+    int level = 1;
+    int type = XmlPullParser::END_TAG;
+
+    do
+    {
+        type = xppx.next();
+        switch(type)
+        {
+            case XmlPullParser::START_TAG:
+            {
+                xppx.readStartTag(stag);
+                ++level;
+                const char *tag = stag.getLocalName();
+                if (!stricmp(tag, tagname))
+                    return true;
+                else if (!stricmp(tag, "Exception"))
+                    throw xppMakeException(xppx);
+                break;
+            }
+            case XmlPullParser::END_TAG:
+                --level;
+            break;
+
+            case XmlPullParser::END_DOCUMENT:
+                level=0;
+            break;
+        }
+    }
+    while (level > 0);
+
+    return false;
+}

+ 14 - 0
esp/bindings/SOAP/xpp/xpp/xpputils.h

@@ -0,0 +1,14 @@
+// -*-c++-*- --------------74-columns-wide-------------------------------|
+#ifndef XPP_UTILS_H_
+#define XPP_UTILS_H_
+
+#pragma warning(disable:4290)
+
+using namespace xpp;
+
+IMultiException *xppMakeException(XmlPullParser &xppx);
+
+void xppToXmlString(XmlPullParser &xpp, StartTag &stag, StringBuffer & buffer);
+bool xppGotoTag(XmlPullParser &xppx, const char *tagname, StartTag &stag);
+
+#endif // XPP_UTILS_H_

+ 75 - 2
esp/bindings/http/platform/httpbinding.cpp

@@ -100,7 +100,8 @@ EspHttpBinding::EspHttpBinding(IPropertyTree* tree, const char *bindname, const
 {
     Owned<IPropertyTree> proc_cfg = getProcessConfig(tree, procname);
     m_viewConfig = proc_cfg ? proc_cfg->getPropBool("@httpConfigAccess") : false;   
-    m_formOptions = proc_cfg ? proc_cfg->getPropBool("@formOptionsAccess") : false; 
+    m_formOptions = proc_cfg ? proc_cfg->getPropBool("@formOptionsAccess") : false;
+    m_roxieOption = proc_cfg ? proc_cfg->getPropBool("@roxieTestAccess") : false;
     m_includeSoapTest = true;
     m_configFile.set(tree ? tree->queryProp("@config") : "esp.xml");
     Owned<IPropertyTree> bnd_cfg = getBindingConfig(tree, bindname, procname);
@@ -369,6 +370,26 @@ StringBuffer &EspHttpBinding::generateNamespace(IEspContext &context, CHttpReque
     return ns;
 }
 
+void EspHttpBinding::getSchemaLocation( IEspContext &context, CHttpRequest* request, StringBuffer &schemaLocation )
+{
+    const char* svcName = request->queryServiceName();
+    const char* method = request->queryServiceMethod();
+    if ( !svcName || !(*svcName) )
+        return;
+
+    StringBuffer host;
+    const char* wsdlAddr = request->queryParameters()->queryProp("__wsdl_address");
+    if (wsdlAddr && *wsdlAddr)
+        host.append(wsdlAddr);
+    else
+    {
+        host.append(request->queryHost());
+        if (request->getPort()>0)
+          host.append(":").append(request->getPort());
+    }
+    schemaLocation.appendf("%s/%s/%s?xsd&amp;ver_=%g", host.str(), svcName, method ? method : "", context.getClientVersion());
+}
+
 int EspHttpBinding::getMethodDescription(IEspContext &context, const char *serv, const char *method, StringBuffer &page)
 {
     StringBuffer key(method);
@@ -1440,6 +1461,57 @@ void EspHttpBinding::generateSampleXml(bool isRequest, IEspContext &context, CHt
     throw MakeStringException(-1,"Unknown type: %s", element.str());
 }
 
+void EspHttpBinding::generateSampleXmlFromSchema(bool isRequest, IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method, const char * schemaxml)
+{
+    StringBuffer serviceQName, methodQName;
+
+    if (!qualifyServiceName(context, serv, method, serviceQName, &methodQName))
+        return;
+
+    MethodInfoArray info;
+    getQualifiedNames(context, info);
+    StringBuffer element;
+    for (unsigned i=0; i<info.length(); i++)
+    {
+        CMethodInfo& m = info.item(i);
+        if (stricmp(m.m_label, methodQName)==0)
+        {
+            element.set(isRequest ? m.m_requestLabel : m.m_responseLabel);
+            break;
+        }
+    }
+
+    if (!element.length())
+        element.append(methodQName.str()).append(isRequest ? "Request" : "Response");
+
+    StringBuffer schemaXmlbuff(schemaxml);
+
+    Owned<IXmlSchema> schema = createXmlSchema(schemaXmlbuff);
+    if (schema.get())
+    {
+        IXmlType* type = schema->queryElementType(element);
+        if (type)
+        {
+            StringBuffer content;
+            StringStack parent;
+            StringBuffer nsdecl("xmlns=\"");
+
+            content.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+            if (context.queryRequestParameters()->hasProp("display"))
+                content.append("<?xml-stylesheet type=\"text/xsl\" href=\"/esp/xslt/xmlformatter.xsl\"?>");
+
+            genSampleXml(parent,type, content, element, generateNamespace(context, request, serviceQName.str(), methodQName.str(), nsdecl).append('\"').str());
+            response->setContent(content.length(), content.str());
+            response->setContentType(HTTP_TYPE_APPLICATION_XML_UTF8);
+            response->setStatus(HTTP_STATUS_OK);
+            response->send();
+            return;
+        }
+    }
+
+    throw MakeStringException(-1,"Unknown type: %s", element.str());
+}
+
 int EspHttpBinding::onGetReqSampleXml(IEspContext &ctx, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)
 {
     generateSampleXml(true, ctx, request, response, serv, method);
@@ -1757,7 +1829,7 @@ int EspHttpBinding::onGetIndex(IEspContext &context, CHttpRequest* request,  CHt
 
 // Interestingly, only single quote needs to HTML escape.
 // ", <, >, & don't need escape.
-static void escapeSingleQuote(StringBuffer& src, StringBuffer& escaped)
+void EspHttpBinding::escapeSingleQuote(StringBuffer& src, StringBuffer& escaped)
 {
     for (const char* p = src.str(); *p!=0; p++)
     {
@@ -1820,6 +1892,7 @@ int EspHttpBinding::onGetXForm(IEspContext &context, CHttpRequest* request, CHtt
 
         xform->setParameter("formOptionsAccess", m_formOptions?"1":"0");
         xform->setParameter("includeSoapTest", m_includeSoapTest?"1":"0");
+        xform->setParameter("includeRoxieTest", m_roxieOption?"1":"0");
 
         // set the prop noDefaultValue param
         IProperties* props = context.queryRequestParameters();

+ 18 - 12
esp/bindings/http/platform/httpbinding.hpp

@@ -113,8 +113,8 @@ interface IEspWsdlSections
     virtual int getWsdlBindings(IEspContext &context, CHttpRequest *request, StringBuffer &content, const char *service, const char *method, bool mda)=0;
 };
 
-class esp_http_decl EspHttpBinding : 
-    implements IEspHttpBinding, 
+class esp_http_decl EspHttpBinding :
+    implements IEspHttpBinding,
     implements IEspWsdlSections
 {
 private:
@@ -125,7 +125,7 @@ private:
     bool                    m_formOptions;
     StringAttr              m_configFile;
     double                  m_wsdlVer;
-    
+
     HINSTANCE               m_hSecDll;
 
     StringBuffer            m_authtype;
@@ -137,9 +137,7 @@ private:
     Owned<IAuthMap>         m_authmap;
     Owned<IAuthMap>         m_feature_authmap;
     Owned<IAuthMap>         m_setting_authmap;
-
     Owned<IPTree>           m_subservices;
-    StringAttr              m_defaultSvcVersion;
 
     StringAttrMapping desc_map;
     StringAttrMapping help_map;
@@ -148,6 +146,8 @@ protected:
     MethodInfoArray m_methods;
     bool                    m_includeSoapTest;
     StringBuffer            m_challenge_realm;
+    StringAttr              m_defaultSvcVersion;
+    bool                    m_roxieOption;
 
 public:
     EspHttpBinding(IPropertyTree* cfg, const char *bindname=NULL, const char *procname=NULL);
@@ -164,6 +164,8 @@ public:
     const char* getChallengeRealm() {return m_challenge_realm.str();}
     double getWsdlVersion(){return m_wsdlVer;}
     void setWsdlVersion(double ver){m_wsdlVer=ver;}
+    const char *getWsdlAddress(){return m_wsdlAddress.str();}
+    void setWsdlAddress(const char *wsdladdress){m_wsdlAddress.clear().append(wsdladdress);}
 
     virtual void setRequestPath(const char *path);
     virtual bool rootAuthRequired();
@@ -174,6 +176,7 @@ public:
     virtual const char* getRootPage() {return NULL;}
 
     virtual StringBuffer &generateNamespace(IEspContext &context, CHttpRequest* request, const char *serv, const char *method, StringBuffer &ns);
+    virtual void getSchemaLocation(IEspContext &context, CHttpRequest* request, StringBuffer &schemaLocation );
 
     virtual StringBuffer &getRequestPath(){return m_reqPath;}
     static int formatHtmlResultSet(IEspContext &context, const char *serv, const char *method, const char *resultsXml, StringBuffer &html);
@@ -203,7 +206,7 @@ public:
     virtual int onGet(CHttpRequest* request, CHttpResponse* response);
     virtual int onGetWsdl(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serviceName, const char *methodName);
     virtual int onGetXsd(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serviceName, const char *methodName);
-    
+
     virtual int onPost(CHttpRequest* request, CHttpResponse* response){return 0;};
 
     virtual int onGetNotFound(IEspContext &context, CHttpRequest* request,  CHttpResponse* response, const char *serv);
@@ -221,9 +224,9 @@ public:
     virtual int onGetIframe(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *path);
     virtual int onGetContent(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method);
     virtual int onGetSoapBuilder(IEspContext &context, CHttpRequest* request, CHttpResponse* response,  const char *serv, const char *method);
-    
+
     virtual int onSoapRequest(CHttpRequest* request, CHttpResponse* response){return 0;}
-    
+
     // In general, there is no difference between a query and an instant query;
     //   in some cases we may want to return the url for results from a query
     //   and the results themselves from an instant query.
@@ -231,7 +234,7 @@ public:
     {
         return onGetInstantQuery(context,request,response,serviceName,methodName);
     }
-    
+
     virtual int onGetService(IEspContext &context, CHttpRequest* request,   CHttpResponse* response, const char *serv, const char *method, const char *pathex)
     {
         //when a service url is requested with no parameters, the default is to treat it as a query with no parameters
@@ -284,18 +287,21 @@ public:
     }
     ISecManager* querySecManager() {return m_secmgr.get(); }
 
+    static void escapeSingleQuote(StringBuffer& src, StringBuffer& escaped);
+
 protected:
     virtual bool basicAuth(IEspContext* ctx);
     int getWsdlOrXsd(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *service, const char *method, bool isWsdl);
     bool getSchema(StringBuffer& schema, IEspContext &ctx, CHttpRequest* req, const char *service, const char *method,bool standalone);
     virtual void appendSchemaNamespaces(IPropertyTree *namespaces, IEspContext &ctx, CHttpRequest* req, const char *service, const char *method){}
     void generateSampleXml(bool isRequest, IEspContext &context, CHttpRequest* request, CHttpResponse* response,    const char *serv, const char *method);
+    void generateSampleXmlFromSchema(bool isRequest, IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method, const char * schemaxml);
     virtual void getSoapMessage(StringBuffer& soapmsg, IEspContext &context, CHttpRequest* request, const char *serv, const char *method);
-    void onBeforeSendResponse(IEspContext& context, CHttpRequest* request,MemoryBuffer& contentconst, 
+    void onBeforeSendResponse(IEspContext& context, CHttpRequest* request,MemoryBuffer& contentconst,
                             const char *serviceName, const char* methodName);
-    void validateResponse(IEspContext& context, CHttpRequest* request,MemoryBuffer& contentconst, 
+    void validateResponse(IEspContext& context, CHttpRequest* request,MemoryBuffer& contentconst,
                             const char *serviceName, const char* methodName);
-    void sortResponse(IEspContext& context, CHttpRequest* request,MemoryBuffer& contentconst, 
+    void sortResponse(IEspContext& context, CHttpRequest* request,MemoryBuffer& contentconst,
                             const char *serviceName, const char* methodName);
     const char* queryAuthMethod() {return m_authmethod.str(); }
 };

+ 2 - 0
esp/bindings/http/platform/httptransport.cpp

@@ -1499,6 +1499,8 @@ void CHttpRequest::parseEspPathInfo()
                     m_sstype=sub_serv_respsamplexml;
                 else if (m_queryparams && (m_queryparams->hasProp("soap_builder_")))
                     m_sstype=sub_serv_soap_builder;
+                else if (m_queryparams && (m_queryparams->hasProp("roxie_builder_")))
+                    m_sstype=sub_serv_roxie_builder;
                 else if (m_queryparams && m_queryparams->hasProp("config_"))
                     m_sstype=sub_serv_config;
                 else if (m_espServiceName.length()==0)

+ 1 - 0
esp/bindings/http/platform/httptransport.ipp

@@ -288,6 +288,7 @@ typedef enum sub_service_
     sub_serv_query,
     sub_serv_instant_query,
     sub_serv_soap_builder,
+    sub_serv_roxie_builder,
     sub_serv_wsdl,
     sub_serv_xsd,
     sub_serv_config,

+ 0 - 15
esp/esdl/CMakeLists.txt

@@ -1,15 +0,0 @@
-################################################################################
-#    HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License");
-#    you may not use this file except in compliance with the License.
-#    You may obtain a copy of the License at
-#
-#       http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS,
-#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#    See the License for the specific language governing permissions and
-#    limitations under the License.
-################################################################################

+ 0 - 516
esp/esdl/esdl2ecl.cpp

@@ -1,516 +0,0 @@
-/*##############################################################################
-
-    HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-############################################################################## */
-
-// esdl2ecl.cpp : Defines the entry point for the console application.
-//
-#include <vld.h>
-
-#include "jliball.hpp"
-#include "xslprocessor.hpp"
-
-typedef IPropertyTree * IPTreePtr;
-
-
-class TypeEntry : public CInterface
-{
-public:
-    IMPLEMENT_IINTERFACE;
-
-    StringAttr name;
-    StringAttr src;
-    IPTreePtr ptree;
-
-    TypeEntry(const char *name_, const char *src_, IPropertyTree *ptree_) : 
-        name(name_), src(src_), ptree(ptree_) 
-    {
-    }
-
-};
-
-typedef TypeEntry * TypeEntryPtr;
-
-MAKESTRINGMAPPING(IPTreePtr, IPTreePtr, AddedList);
-MAKESTRINGMAPPING(TypeEntryPtr, TypeEntryPtr, TypeIndex);
-
-
-class EsdlIndexedPropertyTrees
-{
-public:
-    CIArrayOf<TypeEntry> types;
-    
-    AddedList included;
-    TypeIndex index;
-
-    Owned<IPropertyTree> all;
-    
-    EsdlIndexedPropertyTrees()
-    {
-        all.setown(createPTree("ESDL_files"));
-    }
-
-    ~EsdlIndexedPropertyTrees()
-    {
-        all.clear();
-    }
-
-    StringBuffer &getQualifiedTypeName(const char *localsrc, const char *type, StringBuffer &qname)
-    {
-        if (type && *type)
-        {
-            TypeEntry **typeEntry = index.getValue(type);
-            if (typeEntry && *typeEntry)
-            {
-                const char *src = (*typeEntry)->src.get();
-                if (stricmp(src, localsrc))
-                {
-                    const char *finger = src;
-                    if (!strnicmp(finger, "wsm_", 4))
-                    {
-                        finger+=4;
-                    }
-                    qname.appendf("%s.", finger);
-                }
-                qname.appendf("t_%s", type);
-            }
-        }
-        return qname;
-    }
-
-    void loadFile(const char *srcpath, const char *srcfile, IProperties *versions=NULL)
-    {
-        if (!srcfile || !*srcfile)
-            throw MakeStringException(-1, "EsdlInclude no file name");
-        if (!included.getValue(srcfile))
-        {
-            DBGLOG("ESDL Loading include: %s", srcfile);
-
-            StringBuffer FileName;
-            if (srcpath && *srcpath)
-            {
-                FileName.append(srcpath);
-                if (FileName.length() && !strchr("/\\", FileName.charAt(FileName.length()-1)))
-                    FileName.append('/');
-            }
-            FileName.append(srcfile).append(".xml");
-
-            IPropertyTree *src = createPTreeFromXMLFile(FileName.str());
-            if (!src)
-            {
-                StringBuffer msg("EsdlInclude file not found - ");
-                msg.append(FileName);
-                throw MakeStringException(-1, msg.str());
-            }
-
-            included.setValue(srcfile, src);
-            all->addPropTree("esxdl", src);
-
-            StringArray add_includes;
-
-            Owned<IPropertyTreeIterator> iter = src->getElements("*");
-            ForEach (*iter)
-            {
-                IPropertyTree &e = iter->query();
-                const char *tag = e.queryName();
-                if (!stricmp(tag, "EsdlInclude"))
-                    add_includes.append(e.queryProp("@file"));
-                else if (!stricmp(tag, "EsdlVersion"))
-                {
-                    if (versions)
-                        versions->setProp(e.queryProp("@name"), e.queryProp("@version"));
-                }
-                else
-                {
-                    e.setProp("@src", srcfile);
-                    const char *name = e.queryProp("@name");
-                    if (name && *name)
-                    {
-                        TypeEntry *te =  new TypeEntry(name, srcfile, &e);
-                        types.append(*dynamic_cast<CInterface*>(te));                       
-                        index.setValue(name, te);
-                    }
-                }
-            }
-
-            ForEachItemIn(idx, add_includes)
-            {
-                const char *file=add_includes.item(idx);
-                loadFile(srcpath, file, versions);
-            }
-        }
-    }
-};
-
-
-
-void xsltTransform(const char* xml, const char* sheet, IProperties *params, const char *filename)
-{
-    StringBuffer xsl;
-    xsl.loadFile(sheet);
-
-    Owned<IXslProcessor> proc  = getXslProcessor();
-    Owned<IXslTransform> trans = proc->createXslTransform();
-
-    trans->setXmlSource(xml, strlen(xml));
-    trans->setXslSource(xsl, xsl.length());
-
-    if (params)
-    {
-        Owned<IPropertyIterator> it = params->getIterator();
-        for (it->first(); it->isValid(); it->next())
-        {
-            const char *key = it->getPropKey();
-            //set parameter in the XSL transform skipping over the @ prefix, if any
-            const char* paramName = *key == '@' ? key+1 : key;
-            trans->setParameter(paramName, StringBuffer().append('\'').append(params->queryProp(key)).append('\'').str());
-        }
-    }
-
-    trans->setResultTarget(filename);
-    trans->transform();
-}
-
-
-bool isEclKeyword(const char *name)
-{
-    //complete list from hash table later
-    return (!stricmp(name, "shared") || 
-            !stricmp(name, "function") || 
-            !stricmp(name, "record") || 
-            !stricmp(name, "header") || 
-            !stricmp(name, "service") ||
-            !stricmp(name, "type") ||
-            !stricmp(name, "penalty") ||
-            !stricmp(name, "isvalid"));
-}
-
-void updateEclName(IPropertyTree &item)
-{
-    const char *name = item.queryProp("@name");
-    if (name && *name)
-    {
-        if (!item.hasProp("@ecl_name") && isEclKeyword(name))
-        {
-            StringBuffer ecl_name("_");
-            ecl_name.append(name);
-            item.addProp("@ecl_name", ecl_name.str());
-        }
-    }
-}
-
-void updateEclType(const char *curfile, const char *type_attr, IPropertyTree &item, EsdlIndexedPropertyTrees &trees, const char *ecl_type_attr="@ecl_type")
-{
-    if (!item.hasProp("@ecl_type"))
-    {
-        const char *type = item.queryProp(type_attr);
-        StringBuffer ecltype;
-        trees.getQualifiedTypeName(curfile, type, ecltype);
-        if (ecltype.length())
-            item.setProp(ecl_type_attr, ecltype.str());
-    }
-}
-
-
-void expandEsxdlStructure(EsdlIndexedPropertyTrees &trees, IPropertyTree &item, const char *file)
-{
-    //updateEclName(item);
-    updateEclType(file, "@base_type", item, trees, "@ecl_base_type");
-    
-    Owned<IPropertyTreeIterator> children = item.getElements("*");
-    ForEach(*children)
-    {
-        IPropertyTree &child = children->query();
-        updateEclName(child);
-        if (!stricmp(child.queryName(), "EsdlElement"))
-            updateEclType(file, "@complex_type", child, trees);
-        else if (!stricmp(child.queryName(), "EsdlArray"))
-        {
-            if (!child.hasProp("@max_count") && !child.hasProp("@max_count_var"))
-                child.addPropInt("@max_count", 1);
-            updateEclType(file, "@type", child, trees);
-        }
-        else if (!stricmp(child.queryName(), "EsdlEnum"))
-        {
-            const char *enum_type = child.queryProp("@enum_type");
-            if (enum_type && *enum_type)
-            {
-                TypeEntry **typeEntry = trees.index.getValue(enum_type);
-                if (typeEntry && *typeEntry)
-                {
-                    StringBuffer ecl_type("string");
-                    if ((*typeEntry)->ptree->hasProp("@max_len"))
-                        ecl_type.append((*typeEntry)->ptree->queryProp("@max_len"));
-                    child.addProp("@ecl_type", ecl_type.str());
-                    StringBuffer comment;
-                    Owned<IPropertyTreeIterator> items = (*typeEntry)->ptree->getElements("EsdlEnumItem");
-                    bool emptydefined=false;
-                    ForEach(*items)
-                    {
-                        if (!comment.length())
-                            comment.append("//values[");
-                        else
-                            comment.append(',');
-                        const char *enum_val=items->query().queryProp("@enum");
-                        comment.appendf("'%s'", enum_val);
-                        if (!*enum_val)
-                            emptydefined=true;
-                    }
-                    if (!emptydefined)
-                        comment.append(",''");
-                    comment.append("]");
-                    child.addProp("@ecl_comment", comment.str());
-                }
-            }
-        }
-    }
-}
-
-void addFlatTagList(EsdlIndexedPropertyTrees &trees, IPropertyTree &dst, IPropertyTree &cur, StringBuffer &path)
-{
-    const char *base_type=cur.queryProp("@base_type");
-    if (base_type && *base_type)
-    {
-        TypeEntry **base_entry = trees.index.getValue(base_type);
-        if (base_entry && *base_entry)
-        {
-            unsigned len = path.length();
-            path.append('(').append(base_type).append(')');;
-            addFlatTagList(trees, dst, *((*base_entry)->ptree), path);
-            path.setLength(len);
-        }
-    }
-
-    Owned<IPropertyTreeIterator> elems = cur.getElements("EsdlElement");
-    ForEach(*elems)
-    {
-        IPropertyTree &item = elems->query();
-        const char *complex_type = item.queryProp("@complex_type");
-        if (complex_type)
-        {
-            TypeEntry **elem_entry = trees.index.getValue(complex_type);
-            if (elem_entry && *elem_entry)
-            {
-                unsigned len = path.length();
-                path.append('/').append(item.queryProp("@name"));
-                addFlatTagList(trees, dst, *((*elem_entry)->ptree), path);
-                path.setLength(len);
-            }
-        }
-        else
-        {
-            const char *flat_tag = item.queryProp("@flat_tag");
-            if (flat_tag && *flat_tag=='.')
-                flat_tag=item.queryProp("@name");
-            StringBuffer xml;
-            if (flat_tag && *flat_tag)
-            {
-                xml.appendf("<InputTag flat_name=\"%s\" path=\"%s/%s\" type=\"%s\"/>", flat_tag, path.str(), item.queryProp("@name"), item.queryProp("@type"));
-                dst.addPropTree("InputTag", createPTreeFromXMLString(xml.str()));
-            }
-            else
-            {
-                xml.appendf("<NoInputTag path=\"%s/%s\" type=\"%s\"/>", path.str(), item.queryProp("@name"), item.queryProp("@type"));
-                dst.addPropTree("NoInputTag", createPTreeFromXMLString(xml.str()));
-            }
-
-        }
-    }
-}
-
-
-void expandEsxdlRequest(EsdlIndexedPropertyTrees &trees, IPropertyTree &item, const char *file)
-{
-    expandEsxdlStructure(trees, item, file);
-    StringBuffer path;
-    addFlatTagList(trees, item, item, path);
-}
-
-void expandEsxdlForEclGeneration(EsdlIndexedPropertyTrees &trees, const char *file)
-{
-    IPropertyTree **content = trees.included.getValue(file);
-    if (content && *content)
-    {
-        DBGLOG("Expanding the ESDL XML content for %s", file);
-        Owned<IPropertyTreeIterator> structs = (*content)->getElements("*");
-        ForEach(*structs)
-        {
-            IPropertyTree &item = structs->query();
-            const char *esdltag = item.queryName();
-            if (!strnicmp(esdltag, "Esdl", 4))
-            {
-                if (!stricmp(esdltag+4, "Request"))
-                    expandEsxdlRequest(trees, item, file);
-                else if (!stricmp(esdltag+4, "Struct") || !stricmp(esdltag+4, "Response"))
-                    expandEsxdlStructure(trees, item, file);
-            }
-        }
-    }
-}
-
-void outputEcl(EsdlIndexedPropertyTrees &trees, const char *file, const char *path, bool savexml)
-{
-    IPropertyTree **content = trees.included.getValue(file);
-    if (content && *content)
-    {
-        DBGLOG("Generating ECL file for %s", file);
-        
-        const char *finger = file;
-        if (!strnicmp(finger, "wsm_", 4))
-            finger+=4;
-
-        if (savexml)
-        {
-            StringBuffer xmlfile;
-            if (path && *path)
-            {
-                xmlfile.append(path);
-                if (xmlfile.length() && !strchr("/\\", xmlfile.charAt(xmlfile.length()-1)))
-                    xmlfile.append('/');
-            }
-            xmlfile.append(finger).append("_expanded.xml");
-            saveXML(xmlfile.str(), *content);
-        }
-        
-        StringBuffer outfile;
-        if (path && *path)
-        {
-            outfile.append(path);
-            if (outfile.length() && !strchr("/\\", outfile.charAt(outfile.length()-1)))
-                outfile.append('/');
-        }
-        outfile.append(finger).append(".attr");
-
-        StringBuffer expstr;
-        toXML(*content, expstr);
-        Owned<IProperties> params = createProperties();
-        params->setProp("sourceFileName", file);
-        xsltTransform(expstr.str(), "xslt/esdl2ecl.xslt", params, outfile.str());
-    }
-}
-
-
-void usage()
-{
-    puts("Usage:");
-    printf(" esdl2ecl srcfile [options]\n");
-    puts("Options:");
-    puts("  -?/-h: display this usage");
-    puts("  -x: output expanded xml files");
-    puts("  -p=dir: path to output ecl files");
-    puts("  -all: generate ECL files for all includes");
-    
-    exit(1);
-}
-
-class esdl2ecl_options
-{
-public:
-    bool generateAllIncludes;
-    bool outputExpandedXML;
-
-    StringBuffer srcFile;
-    StringBuffer outputPath;
-
-    esdl2ecl_options() : generateAllIncludes(false), outputExpandedXML(false) {}
-};
-
-void parseCommandLineOptions(esdl2ecl_options &options, int argc, char** argv)
-{
-    if (argc<2)
-        usage();
-
-    options.srcFile.append(argv[1]);
-    
-    int i;
-    for (i=2;i<argc;i++)
-    {
-        if (*(argv[i]) == '-')
-        {
-            if (!strcmp(argv[i], "-?") || !strcmp(argv[i], "-h"))
-                usage();
-            else if (!strcmp(argv[i],"-all"))
-                options.generateAllIncludes = true;
-            else if (!strcmp(argv[i],"-x"))
-                options.outputExpandedXML = true;
-            else if (!strncmp(argv[i],"-p=",3))
-                options.outputPath.append(argv[i]+3);
-            // unknown
-            else {
-                fprintf(stderr, "Unknown options: %s\n", argv[i]);
-                exit(1);
-            }               
-        }
-    }
-}
-
-
-
-int main(int argc, char* argv[])
-{
-    InitModuleObjects();
-
-    esdl2ecl_options opts;
-    parseCommandLineOptions(opts, argc, argv);
-
-    if (opts.outputPath.length())
-        recursiveCreateDirectory(opts.outputPath.str());
-
-    StringBuffer srcPath;
-    StringBuffer srcName;
-    StringBuffer srcExt;
-
-    splitFilename(opts.srcFile.str(), NULL, &srcPath, &srcName, &srcExt);
-
-    try
-    {
-        unsigned start = msTick();
-        EsdlIndexedPropertyTrees trees;
-        trees.loadFile(srcPath.str(), srcName.str());
-        DBGLOG("Time taken to load ESDL files %u", msTick() - start);
-
-        if (opts.generateAllIncludes)
-        {
-            Owned<IPropertyTreeIterator> files = trees.all->getElements("esxdl");
-            ForEach(*files)
-            {
-                IPropertyTree &incl = files->query();
-                const char *src = incl.queryProp("@name");
-                expandEsxdlForEclGeneration(trees, src);
-                outputEcl(trees, src, opts.outputPath.str(), opts.outputExpandedXML);
-            }
-        }
-        else
-        {
-            expandEsxdlForEclGeneration(trees, srcName.str());
-            outputEcl(trees, srcName.str(), opts.outputPath.str(), opts.outputExpandedXML);
-        }
-    }
-    catch(IException* e) 
-    {
-        StringBuffer msg;
-        DBGLOG("Exception: %s", e->errorMessage(msg).str());
-        e->Release();
-    }
-    catch(...)
-    {
-        DBGLOG("Unknown exception caught");
-    }
-
-    ExitModuleObjects();
-    releaseAtoms();
-    return 0;
-}
-

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 1488
esp/esdl/esdl_transformer.cpp


+ 0 - 47
esp/esdl/esdl_transformer.hpp

@@ -1,47 +0,0 @@
-/*##############################################################################
-
-    HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems.
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-############################################################################## */
-
-#include "jliball.hpp"
-#include "esp.hpp"
-#include "soapesp.hpp"
-#include "ws_ecl_client.hpp"
-
-typedef  enum EsdlProcessMode_
-{
-    EsdlRequestMode,
-    EsdlResponseMode
-} EsdlProcessMode;
-
-interface IEsdlMethodInfo : extends IInterface
-{
-    virtual const char *queryMethodName()=0;
-    virtual const char *queryRequestType()=0;
-    virtual const char *queryResponseType()=0;
-};
-
-interface IEsdlTransformer : extends IInterface
-{
-    virtual IEsdlMethodInfo *queryMethodInfo(const char *method)=0;
-
-    virtual int process(IEspContext &ctx, EsdlProcessMode mode, const char *method, StringBuffer &xmlout, const char *xmlin)=0;
-    virtual int process(IEspContext &ctx, EsdlProcessMode mode, const char *method, IClientWsEclRequest &clReq, IEspStruct& r)=0;
-};
-
-IEsdlTransformer *createEsdlXFormerFromXMLString(const char *xml);
-IEsdlTransformer *createEsdlXFormerFromXMLFile(const char *filename, StringArray &types);
-
-IEsdlTransformer *createEsdlXFormerFromXMLFiles(StringArray &files, StringArray &types);

+ 6 - 0
esp/files/css/hpcc.css

@@ -639,6 +639,12 @@ margin-left:-20px;
     height: 16px;
 }
 
+.iconNewPage {
+    background-image: url("../img/openNewPage.png"); 
+    width: 16px;
+    height: 16px;
+}
+
 .iconZoomOrig {
     background-image: url("../img/zoomOrig.png");
     width: 16px;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 5 - 0
esp/files/d3/d3.v3.min.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 0
esp/files/d3/topojson.v1.min.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/CalendarLite.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/CheckedMenuItem.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/ColorPalette.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 2
esp/files/dijit/Dialog.js


+ 1 - 1
esp/files/dijit/DropDownMenu.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dijit/templates/Menu.html":"<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" role=\"menu\" tabIndex=\"${tabIndex}\"\n\t   cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" data-dojo-attach-point=\"containerNode\"></tbody>\n</table>\n"}});
 define("dijit/DropDownMenu",["dojo/_base/declare","dojo/keys","dojo/text!./templates/Menu.html","./_OnDijitClickMixin","./_MenuBase"],function(_1,_2,_3,_4,_5){
 return _1("dijit.DropDownMenu",[_5,_4],{templateString:_3,baseClass:"dijitMenu",_onUpArrow:function(){
 this.focusPrev();
@@ -21,4 +22,3 @@ evt.preventDefault();
 }
 }});
 });
-require({cache:{"url:dijit/templates/Menu.html":"<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" role=\"menu\" tabIndex=\"${tabIndex}\"\n\t   cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" data-dojo-attach-point=\"containerNode\"></tbody>\n</table>\n"}});

+ 2 - 2
esp/files/dijit/Editor.js

@@ -193,7 +193,7 @@ var _29=b.mark;
 var col=b.isCollapsed;
 var r,_2a,_2b,sel;
 if(_29){
-if(_c("ie")<9){
+if(_c("ie")<9||(_c("ie")===9&&_c("quirks"))){
 if(_b.isArray(_29)){
 _28=[];
 _2.forEach(_29,function(n){
@@ -284,7 +284,7 @@ var b=this.selection.getBookmark();
 var tmp=[];
 if(b&&b.mark){
 var _2e=b.mark;
-if(_c("ie")<9){
+if(_c("ie")<9||(_c("ie")===9&&_c("quirks"))){
 var sel=_17.getSelection(this.window);
 if(!_b.isArray(_2e)){
 if(sel){

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2 - 2
esp/files/dijit/Fieldset.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/InlineEditBox.js


+ 1 - 1
esp/files/dijit/MenuBar.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dijit/templates/MenuBar.html":"<div class=\"dijitMenuBar dijitMenuPassive\" data-dojo-attach-point=\"containerNode\" role=\"menubar\" tabIndex=\"${tabIndex}\"\n\t ></div>\n"}});
 define("dijit/MenuBar",["dojo/_base/declare","dojo/keys","./_MenuBase","dojo/text!./templates/MenuBar.html"],function(_1,_2,_3,_4){
 return _1("dijit.MenuBar",_3,{templateString:_4,baseClass:"dijitMenuBar",popupDelay:0,_isMenuBar:true,_orient:["below"],_moveToPopup:function(_5){
 if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){
@@ -31,4 +32,3 @@ this.inherited(arguments);
 }
 }});
 });
-require({cache:{"url:dijit/templates/MenuBar.html":"<div class=\"dijitMenuBar dijitMenuPassive\" data-dojo-attach-point=\"containerNode\" role=\"menubar\" tabIndex=\"${tabIndex}\"\n\t ></div>\n"}});

+ 1 - 1
esp/files/dijit/MenuBarItem.js

@@ -1,8 +1,8 @@
 //>>built
+require({cache:{"url:dijit/templates/MenuBarItem.html":"<div class=\"dijitReset dijitInline dijitMenuItem dijitMenuItemLabel\" data-dojo-attach-point=\"focusNode\"\n\t \trole=\"menuitem\" tabIndex=\"-1\">\n\t<span data-dojo-attach-point=\"containerNode,textDirNode\"></span>\n</div>\n"}});
 define("dijit/MenuBarItem",["dojo/_base/declare","./MenuItem","dojo/text!./templates/MenuBarItem.html"],function(_1,_2,_3){
 var _4=_1("dijit._MenuBarItemMixin",null,{templateString:_3,_setIconClassAttr:null});
 var _5=_1("dijit.MenuBarItem",[_2,_4],{});
 _5._MenuBarItemMixin=_4;
 return _5;
 });
-require({cache:{"url:dijit/templates/MenuBarItem.html":"<div class=\"dijitReset dijitInline dijitMenuItem dijitMenuItemLabel\" data-dojo-attach-point=\"focusNode\"\n\t \trole=\"menuitem\" tabIndex=\"-1\">\n\t<span data-dojo-attach-point=\"containerNode,textDirNode\"></span>\n</div>\n"}});

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/MenuItem.js


+ 1 - 1
esp/files/dijit/MenuSeparator.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dijit/templates/MenuSeparator.html":"<tr class=\"dijitMenuSeparator\" role=\"separator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"}});
 define("dijit/MenuSeparator",["dojo/_base/declare","dojo/dom","./_WidgetBase","./_TemplatedMixin","./_Contained","dojo/text!./templates/MenuSeparator.html"],function(_1,_2,_3,_4,_5,_6){
 return _1("dijit.MenuSeparator",[_3,_4,_5],{templateString:_6,buildRendering:function(){
 this.inherited(arguments);
@@ -7,4 +8,3 @@ _2.setSelectable(this.domNode,false);
 return false;
 }});
 });
-require({cache:{"url:dijit/templates/MenuSeparator.html":"<tr class=\"dijitMenuSeparator\" role=\"separator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"}});

+ 1 - 0
esp/files/dijit/PopupMenuItem.js

@@ -25,6 +25,7 @@ var _b=_4("[widgetId]",this.dropDownContainer)[0];
 this.popup=_5.byNode(_b);
 }
 this.ownerDocumentBody.appendChild(this.popup.domNode);
+this.popup.domNode.setAttribute("aria-labelledby",this.containerNode.id);
 this.popup.startup();
 this.popup.domNode.style.display="none";
 if(this.arrowWrapper){

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/ProgressBar.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/TitlePane.js


+ 1 - 1
esp/files/dijit/Tooltip.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dijit/templates/Tooltip.html":"<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\"\n\t><div class=\"dijitTooltipConnector\" data-dojo-attach-point=\"connectorNode\"></div\n\t><div class=\"dijitTooltipContainer dijitTooltipContents\" data-dojo-attach-point=\"containerNode\" role='alert'></div\n></div>\n"}});
 define("dijit/Tooltip",["dojo/_base/array","dojo/_base/declare","dojo/_base/fx","dojo/dom","dojo/dom-class","dojo/dom-geometry","dojo/dom-style","dojo/_base/lang","dojo/mouse","dojo/on","dojo/sniff","./_base/manager","./place","./_Widget","./_TemplatedMixin","./BackgroundIframe","dojo/text!./templates/Tooltip.html","./main"],function(_1,_2,fx,_3,_4,_5,_6,_7,_8,on,_9,_a,_b,_c,_d,_e,_f,_10){
 var _11=_2("dijit._MasterTooltip",[_c,_d],{duration:_a.defaultDuration,templateString:_f,postCreate:function(){
 this.ownerDocumentBody.appendChild(this.domNode);
@@ -208,4 +209,3 @@ _16.hide=_10.hideTooltip;
 _16.defaultPosition=["after-centered","before-centered"];
 return _16;
 });
-require({cache:{"url:dijit/templates/Tooltip.html":"<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\"\n\t><div class=\"dijitTooltipConnector\" data-dojo-attach-point=\"connectorNode\"></div\n\t><div class=\"dijitTooltipContainer dijitTooltipContents\" data-dojo-attach-point=\"containerNode\" role='alert'></div\n></div>\n"}});

+ 1 - 1
esp/files/dijit/TooltipDialog.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dijit/templates/TooltipDialog.html":"<div role=\"alertdialog\" tabIndex=\"-1\">\n\t<div class=\"dijitTooltipContainer\" role=\"presentation\">\n\t\t<div class=\"dijitTooltipContents dijitTooltipFocusNode\" data-dojo-attach-point=\"containerNode\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" role=\"presentation\" data-dojo-attach-point=\"connectorNode\"></div>\n</div>\n"}});
 define("dijit/TooltipDialog",["dojo/_base/declare","dojo/dom-class","dojo/has","dojo/keys","dojo/_base/lang","dojo/on","./focus","./layout/ContentPane","./_DialogMixin","./form/_FormMixin","./_TemplatedMixin","dojo/text!./templates/TooltipDialog.html","./main"],function(_1,_2,_3,_4,_5,on,_6,_7,_8,_9,_a,_b,_c){
 var _d=_1("dijit.TooltipDialog",[_7,_a,_9,_8],{title:"",doLayout:false,autofocus:true,baseClass:"dijitTooltipDialog",_firstFocusItem:null,_lastFocusItem:null,templateString:_b,_setTitleAttr:"containerNode",postCreate:function(){
 this.inherited(arguments);
@@ -69,4 +70,3 @@ this.containerNode.title=this.enforceTextDirWithUcc(null,this.title);
 }
 return _d;
 });
-require({cache:{"url:dijit/templates/TooltipDialog.html":"<div role=\"alertdialog\" tabIndex=\"-1\">\n\t<div class=\"dijitTooltipContainer\" role=\"presentation\">\n\t\t<div class=\"dijitTooltipContents dijitTooltipFocusNode\" data-dojo-attach-point=\"containerNode\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" role=\"presentation\" data-dojo-attach-point=\"connectorNode\"></div>\n</div>\n"}});

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 88 - 95
esp/files/dijit/Tree.js


+ 2 - 0
esp/files/dijit/_CssStateMixin.js

@@ -179,8 +179,10 @@ on(_24,"focusin, focusout",function(evt){
 var _26=evt.target;
 if(_26._cssState&&!_26.getAttribute("widgetId")){
 var _27=_b.getEnclosingWidget(_26);
+if(_27){
 _27._subnodeCssMouseEvent(_26,_26._cssState,evt);
 }
+}
 });
 });
 return _c;

+ 2 - 2
esp/files/dijit/_KeyNavMixin.js

@@ -79,14 +79,14 @@ evt.stopPropagation();
 evt.preventDefault();
 this._searchString="";
 }else{
-if(evt.keyCode==_4.SPACE&&this._searchTimer&&!(evt.ctrlKey||evt.altKey)){
+if(evt.keyCode==_4.SPACE&&this._searchTimer&&!(evt.ctrlKey||evt.altKey||evt.metaKey)){
 evt.stopImmediatePropagation();
 evt.preventDefault();
 this._keyboardSearch(evt," ");
 }
 }
 },_onContainerKeypress:function(evt){
-if(evt.charCode<_4.SPACE||(evt.ctrlKey||evt.altKey)||(evt.charCode==_4.SPACE&&this._searchTimer)){
+if(evt.charCode<_4.SPACE||evt.ctrlKey||evt.altKey||evt.metaKey||(evt.charCode==_4.SPACE&&this._searchTimer)){
 return;
 }
 evt.preventDefault();

+ 23 - 22
esp/files/dijit/_MenuBase.js

@@ -116,13 +116,14 @@ return false;
 if(_1d.popup){
 this.set("selected",_1d);
 this.set("activated",true);
-this._openItemPopup(_1d,/^key/.test(evt._origType||evt.type));
+var _1e=/^key/.test(evt._origType||evt.type)||(evt.clientX==0&&evt.clientY==0);
+this._openItemPopup(_1d,_1e);
 }else{
 this.onExecute();
 _1d._onClick?_1d._onClick(evt):_1d.onClick(evt);
 }
-},_openItemPopup:function(_1e,_1f){
-if(_1e==this.currentPopupItem){
+},_openItemPopup:function(_1f,_20){
+if(_1f==this.currentPopupItem){
 return;
 }
 if(this.currentPopupItem){
@@ -130,22 +131,22 @@ this._stopPendingCloseTimer();
 this.currentPopupItem._closePopup();
 }
 this._stopPopupTimer();
-var _20=_1e.popup;
-_20.parentMenu=this;
-this.own(this._mouseoverHandle=on.once(_20.domNode,"mouseover",_6.hitch(this,"_onPopupHover")));
-var _21=this;
-_1e._openPopup({parent:this,orient:this._orient||["after","before"],onCancel:function(){
-if(_1f){
-_21.focusChild(_1e);
-}
-_21._cleanUp();
+var _21=_1f.popup;
+_21.parentMenu=this;
+this.own(this._mouseoverHandle=on.once(_21.domNode,"mouseover",_6.hitch(this,"_onPopupHover")));
+var _22=this;
+_1f._openPopup({parent:this,orient:this._orient||["after","before"],onCancel:function(){
+if(_20){
+_22.focusChild(_1f);
+}
+_22._cleanUp();
 },onExecute:_6.hitch(this,"_cleanUp",true),onClose:function(){
-if(_21._mouseoverHandle){
-_21._mouseoverHandle.remove();
-delete _21._mouseoverHandle;
+if(_22._mouseoverHandle){
+_22._mouseoverHandle.remove();
+delete _22._mouseoverHandle;
 }
-}},_1f);
-this.currentPopupItem=_1e;
+}},_20);
+this.currentPopupItem=_1f;
 },onOpen:function(){
 this.isShowingNow=true;
 this.set("activated",true);
@@ -164,20 +165,20 @@ this.selected.focusNode.focus();
 this.currentPopupItem._closePopup();
 this.currentPopupItem=null;
 }
-},_onItemFocus:function(_22){
-if(this._hoveredChild&&this._hoveredChild!=_22){
+},_onItemFocus:function(_23){
+if(this._hoveredChild&&this._hoveredChild!=_23){
 this.onItemUnhover(this._hoveredChild);
 }
-this.set("selected",_22);
+this.set("selected",_23);
 },_onBlur:function(){
 this._cleanUp(true);
 this.inherited(arguments);
-},_cleanUp:function(_23){
+},_cleanUp:function(_24){
 this._closeChild();
 if(typeof this.isShowingNow=="undefined"){
 this.set("activated",false);
 }
-if(_23){
+if(_24){
 this.set("selected",null);
 }
 }});

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/dijit-all.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/dijit.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/Button.js


+ 1 - 1
esp/files/dijit/form/CheckBox.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dijit/form/templates/CheckBox.html":"<div class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" role=\"${type}\" aria-checked=\"false\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdata-dojo-attach-point=\"focusNode\"\n\t \tdata-dojo-attach-event=\"ondijitclick:_onClick\"\n/></div>\n"}});
 define("dijit/form/CheckBox",["require","dojo/_base/declare","dojo/dom-attr","dojo/has","dojo/query","dojo/ready","./ToggleButton","./_CheckBoxMixin","dojo/text!./templates/CheckBox.html","dojo/NodeList-dom","../a11yclick"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9){
 if(_4("dijit-legacy-requires")){
 _6(0,function(){
@@ -32,4 +33,3 @@ _5("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");
 this.inherited(arguments);
 }});
 });
-require({cache:{"url:dijit/form/templates/CheckBox.html":"<div class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" role=\"${type}\" aria-checked=\"false\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdata-dojo-attach-point=\"focusNode\"\n\t \tdata-dojo-attach-event=\"ondijitclick:_onClick\"\n/></div>\n"}});

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/ComboBoxMixin.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/ComboButton.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/DropDownButton.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/HorizontalSlider.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/Select.js


+ 1 - 1
esp/files/dijit/form/TextBox.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dijit/form/templates/TextBox.html":"<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" role=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" data-dojo-attach-point='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"}});
 define("dijit/form/TextBox",["dojo/_base/declare","dojo/dom-construct","dojo/dom-style","dojo/_base/kernel","dojo/_base/lang","dojo/on","dojo/sniff","./_FormValueWidget","./_TextBoxMixin","dojo/text!./templates/TextBox.html","../main"],function(_1,_2,_3,_4,_5,on,_6,_7,_8,_9,_a){
 var _b=_1("dijit.form.TextBox"+(_6("dojo-bidi")?"_NoBidi":""),[_7,_8],{templateString:_9,_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" data-dojo-attach-point=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:_6("ie")?"disabled":"",baseClass:"dijitTextBox",postMixInProperties:function(){
 var _c=this.type.toLowerCase();
@@ -101,4 +102,3 @@ this.applyTextDir(this._phspan);
 }
 return _b;
 });
-require({cache:{"url:dijit/form/templates/TextBox.html":"<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" role=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" data-dojo-attach-point='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"}});

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/ValidationTextBox.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/VerticalSlider.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/_DateTimeTextBox.js


+ 3 - 3
esp/files/dijit/form/_FormSelectWidget.js

@@ -29,14 +29,14 @@ return _10[_f];
 }
 return null;
 },addOption:function(_12){
-_1.forEach([].concat(_12),function(i){
+_1.forEach(_9.isArray(_12)?_12:[_12],function(i){
 if(i&&_9.isObject(i)){
 this.options.push(i);
 }
 },this);
 this._loadChildren();
 },removeOption:function(_13){
-var _14=this.getOptions([].concat(_13));
+var _14=this.getOptions(_9.isArray(_13)?_13:[_13]);
 _1.forEach(_14,function(_15){
 if(_15){
 this.options=_1.filter(this.options,function(_16){
@@ -47,7 +47,7 @@ this._removeOptionItem(_15);
 },this);
 this._loadChildren();
 },updateOption:function(_17){
-_1.forEach([].concat(_17),function(i){
+_1.forEach(_9.isArray(_17)?_17:[_17],function(i){
 var _18=this.getOptions({value:i.value}),k;
 if(_18){
 for(k in i){

+ 2 - 2
esp/files/dijit/form/_SearchMixin.js

@@ -53,10 +53,10 @@ this.searchTimer=this.defer("_startSearchFromInput",1);
 }
 },onSearch:function(){
 },_startSearchFromInput:function(){
-this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));
+this._startSearch(this.focusNode.value);
 },_startSearch:function(_10){
 this._abortQuery();
-var _11=this,_4=_3.clone(this.query),_12={start:0,count:this.pageSize,queryOptions:{ignoreCase:this.ignoreCase,deep:true}},qs=_5.substitute(this.queryExpr,[_10]),q,_13=function(){
+var _11=this,_4=_3.clone(this.query),_12={start:0,count:this.pageSize,queryOptions:{ignoreCase:this.ignoreCase,deep:true}},qs=_5.substitute(this.queryExpr,[_10.replace(/([\\\*\?])/g,"\\$1")]),q,_13=function(){
 var _14=_11._fetchHandle=_11.store.query(_4,_12);
 if(_11.disabled||_11.readOnly||(q!==_11._lastQuery)){
 return;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/form/_Spinner.js


+ 3 - 0
esp/files/dijit/form/_TextBoxMixin.js

@@ -150,6 +150,9 @@ return;
 this.defer(function(){
 this._onInput(_13);
 });
+if(e.type=="keypress"){
+e.stopPropagation();
+}
 };
 this.own(on(this.textbox,"keydown, keypress, paste, cut, input, compositionend",_6.hitch(this,_10)));
 },_blankValue:"",filter:function(val){

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/layout/AccordionContainer.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/layout/ScrollingTabController.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dijit/layout/TabController.js


+ 1 - 1
esp/files/dijit/layout/_TabContainerBase.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dijit/layout/templates/TabContainer.html":"<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" data-dojo-attach-point=\"tablistNode\"></div>\n\t<div data-dojo-attach-point=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" data-dojo-attach-point=\"containerNode\"></div>\n</div>\n"}});
 define("dijit/layout/_TabContainerBase",["dojo/text!./templates/TabContainer.html","./StackContainer","./utils","../_TemplatedMixin","dojo/_base/declare","dojo/dom-class","dojo/dom-geometry","dojo/dom-style"],function(_1,_2,_3,_4,_5,_6,_7,_8){
 return _5("dijit.layout._TabContainerBase",[_2,_4],{tabPosition:"top",baseClass:"dijitTabContainer",tabStrip:false,nested:false,templateString:_1,postMixInProperties:function(){
 this.baseClass+=this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"");
@@ -60,4 +61,3 @@ this.tablist.destroy(_d);
 this.inherited(arguments);
 }});
 });
-require({cache:{"url:dijit/layout/templates/TabContainer.html":"<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" data-dojo-attach-point=\"tablistNode\"></div>\n\t<div data-dojo-attach-point=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" data-dojo-attach-point=\"containerNode\"></div>\n</div>\n"}});

+ 2 - 2
esp/files/dijit/package.json

@@ -1,12 +1,12 @@
 {
 	"name": "dijit",
-	"version":"1.9.0",
+	"version":"1.9.1",
 	"directories": {
 		"lib": "."
 	},
 	"main":"main",
 	"dependencies": {
-		"dojo":"1.9.0"
+		"dojo":"1.9.1"
 	},
 	"description": "Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible user experience.",
 	"licenses": [

+ 0 - 8
esp/files/dijit/robot.js

@@ -1,8 +0,0 @@
-define([
-	"dojo/robot"
-], function(){
-	// module:
-	//		dijit/robot
-	// summary:
-	//		Used to have code needed by robot test harness, but no longer
-});

+ 0 - 25
esp/files/dijit/robotx.js

@@ -1,25 +0,0 @@
-define([
-	"dojo/_base/kernel", // kernel.experimental
-	"dojo/robotx"		// includes doh/robot, dojo/robot, and dojo/robotx, all of which affect and return doh/robot module
-], function(kernel, robot){
-
-	// module:
-	//		dijit/robotx
-	// summary:
-	//		Loads doh/robot, dojo/robot, dojo/robotx, and
-	//		sets dijit global in main window to point to the dijit loaded in the iframe.
-	//		TODO: Remove for 2.0.    Tests shouldn't reference a dijit global at all, and should load dojo/robotx
-	//		in preference to this file.
-
-	kernel.experimental("dijit.robotx");
-
-	var __updateDocument = robot._updateDocument;
-
-	robot._updateDocument = function(){
-		__updateDocument();
-		var win = kernel.global;
-		if(win.dijit){
-			window.dijit = win.dijit; // window reference needed for IE
-		}
-	};
-});

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 1242
esp/files/dijit/themes/themeTester-orig.html


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 1379
esp/files/dijit/themes/themeTester.html


BIN
esp/files/dijit/themes/themeTesterImages/blackButtonEnabled.gif


BIN
esp/files/dijit/themes/themeTesterImages/blackButtonHover.gif


+ 0 - 5
esp/files/dijit/themes/themeTesterQuirk.html

@@ -1,5 +0,0 @@
-<html>
-<head>
-<script type="text/javascript" src="../tests/_loadTest.js" file="themeTester.html"></script>
-</head>
-</html>

+ 1 - 1
esp/files/dojo/_base/config.js

@@ -22,7 +22,7 @@ _3=1?_2.rawConfig:this.dojoConfig||this.djConfig||{};
 _5(_3,"config",1);
 _5(_3.has,"",1);
 }
-if(!_3.locale){
+if(!_3.locale&&typeof navigator!="undefined"){
 _3.locale=(navigator.language||navigator.userLanguage).toLowerCase();
 }
 return _3;

+ 2 - 2
esp/files/dojo/_base/kernel.js

@@ -26,8 +26,8 @@ _7.scopeMap=_8;
 _7.baseUrl=_7.config.baseUrl=_3.baseUrl;
 _7.isAsync=!1||_3.async;
 _7.locale=_2.locale;
-var _b="$Rev: 31379 $".match(/\d+/);
-_7.version={major:1,minor:9,patch:0,flag:"",revision:_b?+_b[0]:NaN,toString:function(){
+var _b="$Rev: 43d05c6 $".match(/\d+/);
+_7.version={major:1,minor:9,patch:1,flag:"",revision:_b?+_b[0]:NaN,toString:function(){
 var v=_7.version;
 return v.major+"."+v.minor+"."+v.patch+v.flag+" ("+v.revision+")";
 }};

+ 1 - 1
esp/files/dojo/date/locale.js

@@ -367,7 +367,7 @@ break;
 case "E":
 case "e":
 case "c":
-s="\\S+";
+s=".+?";
 break;
 case "h":
 s="1[0-2]|"+p2+"[1-9]";

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojo/dojo.js


+ 1 - 1
esp/files/dojo/i18n.js

@@ -58,7 +58,7 @@ if(_31||_33(id,_2e,_2f)){
 return;
 }
 }
-var _34=_b.exec(id),_35=_34[1]+"/",_36=_34[5]||_34[4],_37=_35+_36,_38=(_34[5]&&_34[4]),_39=_38||_1.locale,_3a=_37+"/"+_39,_3b=_38?[_39]:_2a(_39),_3c=_3b.length,_3d=function(){
+var _34=_b.exec(id),_35=_34[1]+"/",_36=_34[5]||_34[4],_37=_35+_36,_38=(_34[5]&&_34[4]),_39=_38||_1.locale||"",_3a=_37+"/"+_39,_3b=_38?[_39]:_2a(_39),_3c=_3b.length,_3d=function(){
 if(!--_3c){
 _2f(_6.delegate(_14[_3a]));
 }

+ 18 - 10
esp/files/dojo/node.js

@@ -9,24 +9,32 @@ define("dojo/node",["./has"],function(_1){
 if(!0){
 throw new Error("node plugin failed to load because environment is not Node.js");
 }
-return {load:function(id,_2,_3){
-if(!_2.nodeRequire){
+var _2;
+if(require.nodeRequire){
+_2=require.nodeRequire("path");
+}else{
+throw new Error("node plugin failed to load because it cannot find the original Node.js require");
+}
+return {load:function(id,_3,_4){
+if(!_3.nodeRequire){
 throw new Error("Cannot find native require function");
 }
-_3((function(id,_4){
-var _5=define,_6;
+_4((function(id,_5){
+var _6=define,_7;
 define=undefined;
 try{
-_6=_4(id);
+_7=_5(id);
 }
 finally{
-define=_5;
+define=_6;
 }
-return _6;
-})(id,_2.nodeRequire));
-},normalize:function(id){
+return _7;
+})(id,_3.nodeRequire));
+},normalize:function(id,_8){
 if(id.charAt(0)==="."){
-id=require.baseUrl+id;
+var _9=require.toUrl(_8(".")).replace("/",_2.sep),_a=id.split("/");
+_a.unshift(_9);
+id=_2.join.apply(_2,_a);
 }
 return id;
 }};

+ 1 - 1
esp/files/dojo/package.json

@@ -1,6 +1,6 @@
 {
 	"name": "dojo",
-	"version":"1.9.0",
+	"version":"1.9.1",
 	"directories": {
 		"lib": "."
 	},

+ 0 - 170
esp/files/dojo/robot.js

@@ -1,170 +0,0 @@
-define([
-	"./_base/array",
-	"./dom",
-	"./dom-geometry",
-	"./_base/kernel",
-	"./_base/lang",
-	"./_base/window",
-	"doh/_browserRunner",
-	"doh/robot",
-	"./window"
-], function(array, dom, geom, kernel, lang, win, doh, robot, winUtils){
-
-kernel.experimental("dojo.robot");
-
-// users who use doh+dojo get the added convenience of robot.mouseMoveAt(),
-// instead of computing the absolute coordinates of their elements themselves
-lang.mixin(robot, {
-
-	_resolveNode: function(/*String||DOMNode||Function*/ n){
-		if(typeof n == "function"){
-			// if the user passed a function returning a node, evaluate it
-			n = n();
-		}
-		return n ? dom.byId(n) : null;
-	},
-
-	_scrollIntoView: function(/*Node*/ n){
-		// scrolls the passed node into view, scrolling all ancestor frames/windows as well.
-		// Assumes parent iframes can be made fully visible given the current browser window size
-		var p = null;
-		array.forEach(robot._getWindowChain(n), function(w){
-			// get the position of the node wrt its parent window
-			// if it is a parent frame, its padding and border extents will get added in
-			var p2 = geom.position(n, false),
-				b = geom.getPadBorderExtents(n),
-				oldp = null;
-			// if p2 is the position of the original passed node, store the position away as p
-			// otherwise, node is actually an iframe. in this case, add the iframe's position wrt its parent window and also the iframe's padding and border extents
-			if(!p){
-				p = p2;
-			}else{
-				oldp = p;
-				p = {x: p.x+p2.x+b.l,
-					y: p.y+p2.y+b.t,
-					w: p.w,
-					h: p.h};
-
-			}
-			// scroll the parent window so that the node translated into the parent window's coordinate space is in view
-			winUtils.scrollIntoView(n,p);
-			// adjust position for the new scroll offsets
-			p2 = geom.position(n, false);
-			if(!oldp){
-				p = p2;
-			}else{
-				p = {x: oldp.x+p2.x+b.l,
-					y: oldp.y+p2.y+b.t,
-					w: p.w,
-					h: p.h};
-			}
-			// get the parent iframe so it can be scrolled too
-			n = w.frameElement;
-		});
-	},
-
-	_position: function(/*Node*/ n){
-		// Returns the geom.position of the passed node wrt the passed window's viewport,
-		// following any parent iframes containing the node and clipping the node to each iframe.
-		// precondition: _scrollIntoView already called
-		var p = null, max = Math.max, min = Math.min;
-		// p: the returned position of the node
-		array.forEach(robot._getWindowChain(n), function(w){
-			// get the position of the node wrt its parent window
-			// if it is a parent frame, its padding and border extents will get added in
-			var p2 = geom.position(n, false), b = geom.getPadBorderExtents(n);
-			// if p2 is the position of the original passed node, store the position away as p
-			// otherwise, node is actually an iframe. in this case, add the iframe's position wrt its parent window and also the iframe's padding and border extents
-			if(!p){
-				p = p2;
-			}else{
-				var view = winUtils.getBox(n.contentWindow.document);
-				p2.r = p2.x+view.w;
-				p2.b = p2.y+view.h;
-				p = {x: max(p.x+p2.x,p2.x)+b.l, // clip left edge of node wrt the iframe
-					y: max(p.y+p2.y,p2.y)+b.t,	// top edge
-					r: min(p.x+p2.x+p.w,p2.r)+b.l,	// right edge (to compute width)
-					b: min(p.y+p2.y+p.h,p2.b)+b.t}; // bottom edge (to compute height)
-				// save a few bytes by computing width and height from r and b
-				p.w = p.r-p.x;
-				p.h = p.b-p.y;
-			}
-			// the new node is now the old node's parent iframe
-			n=w.frameElement;
-		});
-		return p;
-	},
-
-	_getWindowChain : function(/*Node*/ n){
-		// Returns an array of windows starting from the passed node's parent window and ending at dojo's window
-		var cW = winUtils.get(n.ownerDocument);
-		var arr = [cW];
-		var f = cW.frameElement;
-		return (cW == win.global || !f) ? arr : arr.concat(robot._getWindowChain(f));
-	},
-
-	scrollIntoView : function(/*String||DOMNode||Function*/ node, /*Number, optional*/ delay){
-		// summary:
-		//		Scroll the passed node into view, if it is not.
-		// node:
-		//		The id of the node, or the node itself, to move the mouse to.
-		//		If you pass an id or a function that returns a node, the node will not be evaluated until the movement executes.
-		//		This is useful if you need to move the mouse to an node that is not yet present.
-		// delay:
-		//		Delay, in milliseconds, to wait before firing.
-		//		The delay is a delta with respect to the previous automation call.
-
-		robot.sequence(function(){
-			robot._scrollIntoView(robot._resolveNode(node));
-		}, delay);
-	},
-
-	mouseMoveAt : function(/*String||DOMNode||Function*/ node, /*Integer, optional*/ delay, /*Integer, optional*/ duration, /*Number, optional*/ offsetX, /*Number, optional*/ offsetY){
-		// summary:
-		//		Moves the mouse over the specified node at the specified relative x,y offset.
-		// description:
-		//		Moves the mouse over the specified node at the specified relative x,y offset.
-		//		If you do not specify an offset, mouseMove will default to move to the middle of the node.
-		//		Example: to move the mouse over a ComboBox's down arrow node, call doh.mouseMoveAt(dijit.byId('setvaluetest').downArrowNode);
-		// node:
-		//		The id of the node, or the node itself, to move the mouse to.
-		//		If you pass an id or a function that returns a node, the node will not be evaluated until the movement executes.
-		//		This is useful if you need to move the mouse to an node that is not yet present.
-		// delay:
-		//		Delay, in milliseconds, to wait before firing.
-		//		The delay is a delta with respect to the previous automation call.
-		//		For example, the following code ends after 600ms:
-		// |	robot.mouseClick({left:true}, 100) // first call; wait 100ms
-		// |	robot.typeKeys("dij", 500) // 500ms AFTER previous call; 600ms in all
-		// duration:
-		//		Approximate time Robot will spend moving the mouse
-		//		The default is 100ms.
-		// offsetX:
-		//		x offset relative to the node, in pixels, to move the mouse. The default is half the node's width.
-		// offsetY:
-		//		y offset relative to the node, in pixels, to move the mouse. The default is half the node's height.
-
-		robot._assertRobot();
-
-		// Schedule an action to scroll the node into view, then calculate it's center point
-		var point = {};
-		this.sequence(function(){
-			node = robot._resolveNode(node);
-			robot._scrollIntoView(node);
-			var pos = robot._position(node);
-			if(offsetY === undefined){
-				offsetX = pos.w/2;
-				offsetY = pos.h/2;
-			}
-			point.x = pos.x+offsetX;
-			point.y = pos.y+offsetY;
-		}, delay);
-
-		// Schedule a bunch of actions to move the mouse from the current position to point.
-		// These actions won't run until after the above callback.
-		this.mouseMoveTo(point, 0, duration, false);
-	}
-});
-
-return robot;
-});

+ 0 - 171
esp/files/dojo/robotx.js

@@ -1,171 +0,0 @@
-define([
-	"require",
-	"doh/main",
-	"./aspect",
-	"./dom-construct",
-	"./dom-style",
-	"./_base/kernel",
-	"./_base/lang",
-	"./on",
-	"./robot",
-	"./sniff",
-	"./_base/window"
-], function(require, doh, aspect, construct, style, kernel, lang, on, robot, has, win){
-
-kernel.experimental("dojo.robotx");
-
-// module:
-//		dojo.robotx
-// description:
-//		loads an external app into an iframe and points dojo.doc to the iframe document, allowing the robot to control it
-//		to use: set robotURL in djConfig to the URL you want to load
-//		dojo.require this file
-
-// The iframe containing the external app
-var iframe = null;
-
-// On IE6/7, a firebug console will appear.   Scrunch it a bit to leave room for the external test file.
-kernel.config.debugHeight = kernel.config.debugHeight || 200;
-
-
-// urlLoaded is a Deferred that will be resolved whenever the iframe passed to initRobot() finishes loading, or reloads
-var urlLoaded;
-
-function attachIframe(url){
-	// summary:
-	//		Create iframe to load external app at specified url.   Iframe gets onload handler to  call onIframeLoad()
-	//		when specified URL finishes loading, and also if the iframe loads a different URL in the future.
-	// returns:
-	//		A Deferred that fires when everything has finished initializing
-
-	require(["./domReady!"], function(){
-		var emptyStyle = {
-			overflow: "hidden",
-			margin: "0px",
-			borderWidth: "0px",
-			height: "100%",
-			width: "100%"
-		};
-		style.set(document.documentElement, emptyStyle);
-		style.set(document.body, emptyStyle);
-
-		// Create the iframe for the external document.   Put it above the firebug-lite div (if such a div exists).
-		// console.log("creating iframe for external document");
-		iframe = document.createElement("iframe");
-		iframe.setAttribute("ALLOWTRANSPARENCY","true");
-		iframe.scrolling = has("ie") ? "yes" : "auto";
-		var scrollRoot = document.compatMode == "BackCompat" ? document.body : document.documentElement;
-		var consoleHeight = (document.getElementById("firebug") || {}).offsetHeight || 0;
-		style.set(iframe, {
-			border: "0px none",
-			padding: "0px",
-			margin: "0px",
-			width: "100%",
-			height: consoleHeight ? (scrollRoot.clientHeight - consoleHeight)+"px" : "100%"
-		});
-		iframe.src = url;
-
-		// Code to handle load event on iframe.  Seems like this should happen before setting iframe src on line above?
-		// Also, can't we use on() in all cases, even for old IE?
-		if(iframe.attachEvent !== undefined){
-			iframe.attachEvent("onload", onIframeLoad);
-		}else{
-			on(iframe, "load", onIframeLoad);
-		}
-
-		construct.place(iframe, win.body(), "first");
-	});
-}
-
-function onIframeLoad(){
-	// summary:
-	//		Load handler when iframe specified to initRobot() finishes loading, or when it reloads.
-	//		It resolves the urlLoaded Deferred to make the rests of the tests runs.
-
-	robot._updateDocument();
-
-	// If dojo is present in the test case, then at least make a best effort to wait for it to load.
-	// The test must handle other race conditions like initial data queries or asynchronous parses by itself.
-	if(iframe.contentWindow.require){
-		iframe.contentWindow.require(["dojo/ready"], function(ready){
-			ready(Infinity, function(){
-				setTimeout(function(){
-					urlLoaded.resolve(true);
-				}, 500);	// 500ms fudge factor; otherwise focus doesn't work on IE8, see ValidationTextBox.js, TimeTextBox.js, etc.
-			});
-		});
-	}else{
-		urlLoaded.resolve(true);
-	}
-}
-
-lang.mixin(robot, {
-	_updateDocument: function(){
-		// summary:
-		//		Called every time a new page is loaded into the iframe, to setup variables
-		//		Point dojo.global, dojo.publish, etc. to refer to iframe.
-		//		Remove for 2.0?
-
-		kernel.setContext(iframe.contentWindow, iframe.contentWindow.document);
-
-		// Also set pointers inside robot, for easy access via AMD (where there is no dojo variable)
-		robot.window = iframe.contentWindow;
-		robot.doc = iframe.contentWindow.document;
-
-		// TODO: shouldn't this wait until dojo has finished loading in the iframe?  See require code in onIframeLoad().
-		var win = kernel.global;
-		if(win.dojo){
-			// allow the tests to subscribe to topics published by the iframe
-			kernel.publish = win.dojo.publish;
-			kernel.subscribe = win.dojo.subscribe;
-			kernel.connectPublisher = win.dojo.connectPublisher;
-		}
-	},
-
-	initRobot: function(/*String*/ url){
-		// summary:
-		//		Opens the application at the specified URL for testing, redirecting dojo to point to the application
-		//		environment instead of the test environment.
-		// url:
-		//		URL to open. Any of the test's dojo.doc calls (e.g. dojo.byId()), and any dijit.registry calls
-		//		(e.g. dijit.byId()) will point to elements and widgets inside this application.
-
-		doh.registerGroup("initialize robot", {
-			name: "load " + url,
-			timeout: 100000,	// could take more than 10s so setting to 100s
-			runTest: function(){
-				// Setup module level urlLoaded Deferred that will be resolved by onIframeLoad(), after the iframe
-				// has finished loading
-				urlLoaded = new doh.Deferred();
-				attachIframe(url);
-
-				return urlLoaded;
-			}
-		});
-	},
-
-	waitForPageToLoad: function(/*Function*/ submitActions){
-		// summary:
-		//		Notifies DOH that the doh.robot is about to make a page change in the application it is driving,
-		//		returning a doh.Deferred object the user should return in their runTest function as part of a DOH test.
-		// example:
-		// |	runTest: function(){
-		// |		return waitForPageLoad(function(){ doh.robot.keyPress(keys.ENTER, 500); });
-		// |	}
-		// submitActions:
-		//		The doh.robot will execute the actions the test passes into the submitActions argument (like clicking the submit button),
-		//		expecting these actions to create a page change (like a form submit).
-		//		After these actions execute and the resulting page loads, the next test will start.
-
-		// Setup a new Deferred that onIframeLoad() will resolve when the iframe finishes loading
-		urlLoaded = new doh.Deferred();
-
-		submitActions();
-
-		return urlLoaded;
-	}
-
-});
-
-return robot;
-});

+ 0 - 13
esp/files/dojo/tests.js

@@ -1,13 +0,0 @@
-//This file is the command-line entry point for running the tests in
-//Rhino and Spidermonkey.
-
-/*=====
-dojo.tests = {
-	// summary:
-	//		D.O.H. Test files for Dojo unit testing.
-};
-=====*/
-
-load("dojo.js");
-load("tests/runner.js");
-tests.run();

+ 1 - 1
esp/files/dojo/touch.js

@@ -73,7 +73,7 @@ _9.doc.addEventListener(_29,function(e){
 if(!e._dojo_click&&(new Date()).getTime()<=_14+1000&&!(e.target.tagName=="INPUT"&&_4.contains(e.target,"dijitOffScreen"))){
 e.stopPropagation();
 e.stopImmediatePropagation&&e.stopImmediatePropagation();
-if(_29=="click"&&(e.target.tagName!="INPUT"||e.target.type=="radio"||e.target.type=="checkbox")&&e.target.tagName!="TEXTAREA"){
+if(_29=="click"&&(e.target.tagName!="INPUT"||e.target.type=="radio"||e.target.type=="checkbox")&&e.target.tagName!="TEXTAREA"&&e.target.tagName!="AUDIO"&&e.target.tagName!="VIDEO"){
 e.preventDefault();
 }
 }

+ 6 - 6
esp/files/dojox/app/build/discoverAppConfig.js

@@ -55,7 +55,7 @@ define([
 			console.log(e);
 		}
 		if(config){
-			var mids = [];
+			var mids = [], params = {};
 			if(config.loaderConfig){
 				require(config.loaderConfig);
 			}
@@ -86,6 +86,8 @@ define([
 				mids.push("dojox/css3/transit");
 			}
 			if(config.template){
+				params.text = true;
+				bc.layers[mainLayer].include.push("dojo/text");
 				mids.push(config.template);
 			}
 			if(config.controller && config.controller != "none"){
@@ -93,10 +95,8 @@ define([
 			}
 			if(config.nls){
 				// we use nls let's add dojo/i18n to the main layer as it will be shared by a lot of views
-				if(!params.nls){
-					params.nls = true;
-					bc.layers[mainLayer].include.push("dojo/i18n");
-				}
+				params.nls = true;
+				bc.layers[mainLayer].include.push("dojo/i18n");
 				mids.push(config.nls);
 			}
 			if(config.view){
@@ -108,7 +108,7 @@ define([
 			}
 			// go into the view children
 			if(config.views){
-				parseViews(mids, mainLayer, config.views, {});
+				parseViews(mids, mainLayer, config.views, params);
 			}
 			Array.prototype.splice.apply(bc.layers[mainLayer].include, [bc.layers[mainLayer].length, 0].concat(mids));
 		}else{

+ 32 - 19
esp/files/dojox/app/controllers/History.js

@@ -1,6 +1,6 @@
 //>>built
-define("dojox/app/controllers/History",["dojo/_base/lang","dojo/_base/declare","dojo/on","../Controller","../utils/hash"],function(_1,_2,on,_3,_4){
-return _2("dojox.app.controllers.History",_3,{constructor:function(_5){
+define("dojox/app/controllers/History",["dojo/_base/lang","dojo/_base/declare","dojo/on","../Controller","../utils/hash","dojo/topic"],function(_1,_2,on,_3,_4,_5){
+return _2("dojox.app.controllers.History",_3,{_currentPosition:0,currentState:{},constructor:function(){
 this.events={"app-domNode":this.onDomNodeChange};
 if(this.app.domNode){
 this.onDomNodeChange({oldNode:null,newNode:this.app.domNode});
@@ -12,26 +12,39 @@ this.unbind(_6.oldNode,"startTransition");
 }
 this.bind(_6.newNode,"startTransition",_1.hitch(this,this.onStartTransition));
 },onStartTransition:function(_7){
-var _8=_7.detail.url||"#"+_7.detail.target;
+var _8=window.location.hash;
+var _9=_4.getTarget(_8,this.app.defaultView);
+var _a=_4.getParams(_8);
+var _b=_1.clone(_7.detail);
+_b.target=_b.title=_9;
+_b.url=_8;
+_b.params=_a;
+_b.id=this._currentPosition;
+if(history.length==1){
+history.pushState(_b,_b.href,_8);
+}
+_b.bwdTransition=_b.transition;
+_1.mixin(this.currentState,_b);
+history.replaceState(this.currentState,this.currentState.href,_8);
+this._currentPosition+=1;
+_7.detail.id=this._currentPosition;
+var _c=_7.detail.url||"#"+_7.detail.target;
 if(_7.detail.params){
-_8=_4.buildWithParams(_8,_7.detail.params);
+_c=_4.buildWithParams(_c,_7.detail.params);
 }
-history.pushState(_7.detail,_7.detail.href,_8);
-},onPopState:function(_9){
-if(this.app.getStatus()!==this.app.lifecycle.STARTED){
+_7.detail.fwdTransition=_7.detail.transition;
+history.pushState(_7.detail,_7.detail.href,_c);
+this.currentState=_1.clone(_7.detail);
+_5.publish("/app/history/pushState",_7.detail.target);
+},onPopState:function(_d){
+if((this.app.getStatus()!==this.app.lifecycle.STARTED)||!_d.state){
 return;
 }
-var _a=_9.state;
-if(!_a){
-if(window.location.hash){
-_a={target:_4.getTarget(location.hash),url:location.hash,params:_4.getParams(location.hash)};
-}else{
-_a={target:this.app.defaultView};
-}
-}
-if(_9._sim){
-history.replaceState(_a,_a.title,_a.href);
-}
-this.app.emit("app-transition",{viewId:_a.target,opts:_1.mixin({reverse:true},_9.detail,{"params":_a.params})});
+var _e=_d.state.id<this._currentPosition;
+_e?this._currentPosition-=1:this._currentPosition+=1;
+var _f=_1.mixin({reverse:_e?true:false},_d.state);
+_f.transition=_e?_f.bwdTransition:_f.fwdTransition;
+this.app.emit("app-transition",{viewId:_d.state.target,opts:_f});
+_5.publish("/app/history/popState",_d.state.target);
 }});
 });

+ 1 - 1
esp/files/dojox/app/controllers/Transition.js

@@ -183,7 +183,7 @@ this.app.emit("app-resize");
 var _34=true;
 if(_a&&(!_2c||_31!=null)){
 var _35=_2.mixin({},_26);
-_35=_2.mixin({},_35,{reverse:(_35.reverse||_35.transitionDir===-1)?true:false,transition:this._getTransition(_29,_25,_35)});
+_35=_2.mixin({},_35,{reverse:(_35.reverse||_35.transitionDir===-1)?true:false,transition:this._getTransition(_29,_2e,_35)});
 if(_30){
 this.app.log("    > in Transition._doTransition calling transit for current ="+_30.name);
 }

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/atom/widget/FeedEntryEditor.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/atom/widget/FeedEntryViewer.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/atom/widget/FeedViewer.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calc/FuncGen.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calc/GraphPro.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calc/Grapher.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calc/Standard.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/Calendar.js


+ 1 - 1
esp/files/dojox/calendar/CalendarBase.js

@@ -100,7 +100,7 @@ this._timeRangeInvalidated=true;
 if(this._timeRangeInvalidated){
 this._timeRangeInvalidated=false;
 var _23=this.computeTimeInterval();
-if(this._timeInterval==null||cal.compare(this._timeInterval[0],_23[0]!=0)||cal.compare(this._timeInterval[1],_23[1]!=0)){
+if(this._timeInterval==null||cal.compare(this._timeInterval[0],_23[0])!=0||cal.compare(this._timeInterval[1],_23[1])!=0){
 this.onTimeIntervalChange({oldStartTime:this._timeInterval==null?null:this._timeInterval[0],oldEndTime:this._timeInterval==null?null:this._timeInterval[1],startTime:_23[0],endTime:_23[1]});
 }
 this._timeInterval=_23;

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/ColumnView.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/ColumnViewSecondarySheet.js


+ 1 - 1
esp/files/dojox/calendar/ExpandRenderer.js

@@ -1,4 +1,5 @@
 //>>built
+require({cache:{"url:dojox/calendar/templates/ExpandRenderer.html":"<div class=\"dojoxCalendarExpand\" onselectstart=\"return false;\" data-dojo-attach-event=\"click:_onClick,touchstart:_onMouseDown,touchend:_onClick,mousedown:_onMouseDown,mouseup:_onMouseUp,mouseover:_onMouseOver,mouseout:_onMouseOut\">\n\t<div class=\"bg\"><span data-dojo-attach-point=\"expand\">▼</span><span style=\"display:none\" data-dojo-attach-point=\"collapse\">▲</span></div>\t\n</div>\n"}});
 define("dojox/calendar/ExpandRenderer",["dojo/_base/declare","dojo/_base/lang","dojo/_base/event","dojo/_base/window","dojo/on","dojo/dom-class","dojo/dom-style","dijit/_WidgetBase","dijit/_TemplatedMixin","dojo/text!./templates/ExpandRenderer.html"],function(_1,_2,_3,_4,on,_5,_6,_7,_8,_9){
 return _1("dojox.calendar.ExpandRenderer",[_7,_8],{templateString:_9,baseClass:"dojoxCalendarExpand",owner:null,focused:false,up:false,down:false,date:null,items:null,rowIndex:-1,columnIndex:-1,_setExpandedAttr:function(_a){
 _6.set(this.expand,"display",_a?"none":"inline-block");
@@ -43,4 +44,3 @@ this.set("up",false);
 this.set("down",false);
 }});
 });
-require({cache:{"url:dojox/calendar/templates/ExpandRenderer.html":"<div class=\"dojoxCalendarExpand\" onselectstart=\"return false;\" data-dojo-attach-event=\"click:_onClick,touchstart:_onMouseDown,touchend:_onClick,mousedown:_onMouseDown,mouseup:_onMouseUp,mouseover:_onMouseOver,mouseout:_onMouseOut\">\n\t<div class=\"bg\"><span data-dojo-attach-point=\"expand\">▼</span><span style=\"display:none\" data-dojo-attach-point=\"collapse\">▲</span></div>\t\n</div>\n"}});

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/HorizontalRenderer.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/LabelRenderer.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/MatrixView.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/MobileCalendar.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/MobileHorizontalRenderer.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/MobileVerticalRenderer.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/MonthColumnView.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/SimpleColumnView.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1 - 1
esp/files/dojox/calendar/VerticalRenderer.js


+ 0 - 0
esp/files/dojox/charting/action2d/TouchZoomAndPan.js


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است